python-efl/examples/elementary/test_gengrid.py

403 lines
11 KiB
Python

#!/usr/bin/env python
# encoding: utf-8
import random
from efl import evas
from efl import elementary
from efl.elementary.window import Window
from efl.elementary.background import Background
from efl.elementary.button import Button
from efl.elementary.check import Check
from efl.elementary.image import Image
from efl.elementary.gengrid import Gengrid, GengridItemClass
from efl.elementary.slider import Slider
from efl.elementary.table import Table
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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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()