python-efl/tests/elementary/test_gengrid.py

395 lines
11 KiB
Python

#!/usr/bin/env python
# encoding: utf-8
import random
from efl import elementary
from efl import evas
images = ["panel_01.jpg", "plant_01.jpg", "rock_01.jpg", "rock_02.jpg",
"sky_01.jpg", "sky_02.jpg", "sky_03.jpg", "sky_04.jpg", "wood_01.jpg"]
def gg_text_get(obj, part, item_data):
return "Item # %s" % (item_data)
def gg_content_get(obj, part, data):
if part == "elm.swallow.icon":
im = elementary.Image(obj)
im.file_set("images/" + random.choice(images))
im.size_hint_aspect_set(evas.EVAS_ASPECT_CONTROL_BOTH, 1, 1)
return im
return None
def gg_state_get(obj, part, item_data):
return False
def gg_del(obj, item_data):
# commented out because this make clear() slow with many items
# print "[item del] # %d - %s" % (item_data, obj)
pass
def gg_sel(gg, ggi, *args, **kwargs):
(x, y) = ggi.pos_get()
print(("[item selected] # %d at pos %d %d" % (ggi.data, x, y)))
def gg_unsel(gg, ggi, *args, **kwargs):
print(("[item unselected] # %d" % (ggi.data)))
def gg_clicked_double(gg, ggi, *args, **kwargs):
print(("[item double clicked] # %d" % (ggi.data)))
def gengrid_clicked(obj):
global item_count
item_count = 5#25
# window
win = elementary.Window("gengrid", elementary.ELM_WIN_BASIC)
win.title_set("Gengrid")
win.autodel_set(True)
if obj is None:
win.callback_delete_request_add(lambda o: elementary.exit())
# background
bg = elementary.Background(win)
win.resize_object_add(bg)
bg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
bg.show()
# main table
tb = elementary.Table(win)
win.resize_object_add(tb)
tb.homogeneous_set(0)
tb.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
tb.show()
# gengrid
itc = elementary.GengridItemClass(item_style="default",
text_get_func=gg_text_get,
content_get_func=gg_content_get,
state_get_func=gg_state_get,
del_func=gg_del)
gg = elementary.Gengrid(win)
gg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
gg.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
gg.horizontal_set(False)
gg.bounce_set(False, True)
gg.item_size_set(80, 80)
gg.align_set(0.5, 0.0)
tb.pack(gg, 0, 0, 6, 1)
gg.callback_selected_add(gg_sel)
gg.callback_unselected_add(gg_unsel)
gg.callback_clicked_double_add(gg_clicked_double)
gg.show()
# add the first items
for i in range(item_count):
gg.item_append(itc, i, None)
# multi select
def multi_select_changed(bt, gg):
gg.multi_select_set(bt.state)
print((gg.multi_select_get()))
bt = elementary.Check(win)
bt.text = "MultiSelect"
bt.state = gg.multi_select_get()
bt.callback_changed_add(multi_select_changed, gg)
tb.pack(bt, 0, 1, 1, 1)
bt.show()
# horizontal
def horizontal_changed(bt, gg):
gg.horizontal_set(bt.state)
bt = elementary.Check(win)
bt.text_set("Horizontal")
bt.callback_changed_add(horizontal_changed, gg)
tb.pack(bt, 1, 1, 1, 1)
bt.show()
# bounce h
def bounce_h_changed(bt, gg):
(h_bounce, v_bounce) = gg.bounce_get()
gg.bounce_set(bt.state, v_bounce)
print((gg.bounce_get()))
bt = elementary.Check(win)
bt.text_set("BounceH")
(h_bounce, v_bounce) = gg.bounce_get()
bt.state = h_bounce
bt.callback_changed_add(bounce_h_changed, gg)
tb.pack(bt, 4, 1, 1, 1)
bt.show()
# bounce v
def bounce_v_changed(bt, gg):
(h_bounce, v_bounce) = gg.bounce_get()
gg.bounce_set(h_bounce, bt.state)
print((gg.bounce_get()))
bt = elementary.Check(win)
bt.text_set("BounceV")
(h_bounce, v_bounce) = gg.bounce_get()
bt.state = v_bounce
bt.callback_changed_add(bounce_v_changed, gg)
tb.pack(bt, 5, 1, 1, 1)
bt.show()
# item size
def item_size_w_changed(sl, gg):
(w, h) = gg.item_size_get()
gg.item_size_set(sl.value, h)
print((gg.item_size_get()))
def item_size_h_changed(sl, gg):
(w, h) = gg.item_size_get()
gg.item_size_set(w, sl.value)
print((gg.item_size_get()))
sl = elementary.Slider(win)
sl.text_set("ItemSizeW")
sl.min_max_set(0, 500)
sl.indicator_format_set("%.0f")
sl.unit_format_set("%.0f")
sl.span_size_set(100)
(w, h) = gg.item_size_get()
sl.value = w
sl.callback_changed_add(item_size_w_changed, gg)
tb.pack(sl, 0, 2, 2, 1)
sl.show()
sl = elementary.Slider(win)
sl.text_set("ItemSizeH")
sl.min_max_set(0, 500)
sl.indicator_format_set("%.0f")
sl.unit_format_set("%.0f")
sl.span_size_set(100)
(w, h) = gg.item_size_get()
sl.value = h
sl.callback_changed_add(item_size_h_changed, gg)
tb.pack(sl, 0, 3, 2, 1)
sl.show()
# align
def alignx_changed(sl, gg):
(ax, ay) = gg.align_get()
gg.align_set(sl.value, ay)
print((gg.align_get()))
def aligny_changed(sl, gg):
(ax, ay) = gg.align_get()
gg.align_set(ax, sl.value)
print((gg.align_get()))
sl = elementary.Slider(win)
sl.text_set("AlignX")
sl.min_max_set(0.0, 1.0)
sl.indicator_format_set("%.2f")
sl.unit_format_set("%.2f")
sl.span_size_set(100)
(ax, ay) = gg.align_get()
sl.value = ax
sl.callback_changed_add(alignx_changed, gg)
tb.pack(sl, 0, 4, 2, 1)
sl.show()
sl = elementary.Slider(win)
sl.text_set("AlignY")
sl.min_max_set(0.0, 1.0)
sl.indicator_format_set("%.2f")
sl.unit_format_set("%.2f")
sl.span_size_set(100)
(ax, ay) = gg.align_get()
sl.value = ax
sl.callback_changed_add(aligny_changed, gg)
tb.pack(sl, 0, 5, 2, 1)
sl.show()
# select first
def select_first_clicked(bt, gg):
ggi = gg.first_item
ggi.selected = not ggi.selected
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Select first")
bt.callback_clicked_add(select_first_clicked, gg)
tb.pack(bt, 2, 2, 1, 1)
bt.show()
# select last
def select_last_clicked(bt, gg):
ggi = gg.last_item
ggi.selected = not ggi.selected
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Select last")
bt.callback_clicked_add(select_last_clicked, gg)
tb.pack(bt, 3, 2, 1, 1)
bt.show()
# selection del
def seldel_clicked(bt, gg):
for ggi in gg.selected_items_get():
ggi.delete()
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Sel del")
bt.callback_clicked_add(seldel_clicked, gg)
tb.pack(bt, 4, 2, 1, 1)
bt.show()
# clear
def clear_clicked(bt, gg):
global item_count
item_count = 0
gg.clear()
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Clear")
bt.callback_clicked_add(clear_clicked, gg)
tb.pack(bt, 5, 2, 1, 1)
bt.show()
# show first/last
def show_clicked(bt, gg, first):
ggi = gg.first_item if first else gg.last_item
ggi.show()
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Show first")
bt.callback_clicked_add(show_clicked, gg, True)
tb.pack(bt, 2, 3, 1, 1)
bt.show()
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Show last")
bt.callback_clicked_add(show_clicked, gg, False)
tb.pack(bt, 3, 3, 1, 1)
bt.show()
# bring-in first/last
def bring_in_clicked(bt, gg, first):
ggi = gg.first_item if first else gg.last_item
ggi.bring_in()
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("BringIn first")
bt.callback_clicked_add(bring_in_clicked, gg, True)
tb.pack(bt, 4, 3, 1, 1)
bt.show()
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("BringIn last")
bt.callback_clicked_add(bring_in_clicked, gg, False)
tb.pack(bt, 5, 3, 1, 1)
bt.show()
# append
def append_clicked(bt, gg, n):
global item_count
while n:
item_count += 1
gg.item_append(itc, item_count, None)
n -= 1
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Append 1")
bt.callback_clicked_add(append_clicked, gg, 1)
tb.pack(bt, 2, 4, 1, 1)
bt.show()
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Append 100")
bt.callback_clicked_add(append_clicked, gg, 100)
tb.pack(bt, 3, 4, 1, 1)
bt.show()
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Append 1000")
bt.callback_clicked_add(append_clicked, gg, 1000)
tb.pack(bt, 4, 4, 1, 1)
bt.show()
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Append 10000 :)")
bt.callback_clicked_add(append_clicked, gg, 10000)
tb.pack(bt, 5, 4, 1, 1)
bt.show()
# prepend
def prepend_clicked(bt, gg):
global item_count
item_count += 1
gg.item_prepend(itc, item_count)
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Prepend")
bt.callback_clicked_add(prepend_clicked, gg)
tb.pack(bt, 2, 5, 1, 1)
bt.show()
# insert_before
def ins_before_clicked(bt, gg):
global item_count
item_count += 1
before = gg.selected_item_get()
if before:
gg.item_insert_before(itc, item_count, before)
else:
print("nothing selected")
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Ins before")
bt.callback_clicked_add(ins_before_clicked, gg)
tb.pack(bt, 3, 5, 1, 1)
bt.show()
# insert_after
def ins_after_clicked(bt, gg):
global item_count
item_count += 1
after = gg.selected_item_get()
if after:
gg.item_insert_after(itc, item_count, after)
else:
print("nothing selected")
bt = elementary.Button(win)
bt.size_hint_align_set(evas.EVAS_HINT_FILL, 0)
bt.text_set("Ins after")
bt.callback_clicked_add(ins_after_clicked, gg)
tb.pack(bt, 4, 5, 1, 1)
bt.show()
print gg
win.resize(480, 800)
win.show()
if __name__ == "__main__":
elementary.init()
gengrid_clicked(None)
elementary.run()
elementary.shutdown()