190 lines
4.9 KiB
Python
190 lines
4.9 KiB
Python
#!/usr/bin/env python
|
|
# encoding: utf-8
|
|
|
|
from efl import evas
|
|
from efl import elementary
|
|
from efl.elementary.window import Window
|
|
from efl.elementary.background import Background
|
|
from efl.elementary.box import Box
|
|
from efl.elementary.icon import Icon
|
|
from efl.elementary.button import Button
|
|
from efl.elementary.list import List
|
|
from efl.elementary.ctxpopup import Ctxpopup
|
|
from efl.elementary.scroller import Scroller
|
|
|
|
def cb_items(li, item):
|
|
print(("ctxpopup item selected: %s" % (item.text)))
|
|
|
|
def item_new(cp, label, icon = None):
|
|
if icon:
|
|
ic = Icon(cp)
|
|
ic.standard_set(icon)
|
|
ic.resizable_set(False, False)
|
|
return cp.item_append(label, ic, cb_items)
|
|
else:
|
|
return cp.item_append(label, None, cb_items)
|
|
|
|
def cb_btn(btn):
|
|
cp = btn.data["ctxpopup"]
|
|
if "img" in cp.data:
|
|
return
|
|
img = evas.FilledImage(btn.evas)
|
|
img.file_set("images/sky_04.jpg")
|
|
img.move(40, 40)
|
|
img.resize(320, 320)
|
|
img.show()
|
|
|
|
cp = btn.data["ctxpopup"]
|
|
cp.data["img"] = img
|
|
cp.raise_()
|
|
# NOTE: the '_' is wanted as 'raise' is a reserved word in py
|
|
|
|
def cb_dismissed(cp):
|
|
if "img" in cp.data:
|
|
cp.data["img"].delete()
|
|
|
|
def cb_item1(li, item):
|
|
cp = Ctxpopup(li)
|
|
it = item_new(cp, "Go to home folder", "home")
|
|
it = item_new(cp, "Save file", "file")
|
|
it = item_new(cp, "Delete file", "delete")
|
|
it = item_new(cp, "Navigate to folder", "folder")
|
|
it.disabled = True
|
|
it = item_new(cp, "Edit entry", "edit")
|
|
it = item_new(cp, "Sate date and time", "clock")
|
|
it.disabled = True
|
|
|
|
(x, y) = li.evas.pointer_canvas_xy_get()
|
|
cp.move(x, y)
|
|
cp.show()
|
|
|
|
def cb_item2(li, item):
|
|
cp = Ctxpopup(li)
|
|
it = item_new(cp, "", "home")
|
|
it = item_new(cp, "", "file")
|
|
it = item_new(cp, "", "delete")
|
|
it = item_new(cp, "", "folder")
|
|
it = item_new(cp, "", "edit")
|
|
it.disabled = True
|
|
it = item_new(cp, "", "clock")
|
|
|
|
(x, y) = li.evas.pointer_canvas_xy_get()
|
|
cp.move(x, y)
|
|
cp.show()
|
|
|
|
def cb_item3(li, item):
|
|
cp = Ctxpopup(li)
|
|
it = item_new(cp, "Eina")
|
|
it = item_new(cp, "Eet")
|
|
it = item_new(cp, "Evas")
|
|
it = item_new(cp, "Ecore")
|
|
it.disabled = True
|
|
it = item_new(cp, "Embryo")
|
|
it = item_new(cp, "Edje")
|
|
|
|
(x, y) = li.evas.pointer_canvas_xy_get()
|
|
cp.move(x, y)
|
|
cp.show()
|
|
|
|
def cb_item4(li, item):
|
|
cp = Ctxpopup(li)
|
|
cp.horizontal = True
|
|
it = item_new(cp, "", "home")
|
|
it = item_new(cp, "", "file")
|
|
it = item_new(cp, "", "delete")
|
|
it = item_new(cp, "", "folder")
|
|
it = item_new(cp, "", "edit")
|
|
it = item_new(cp, "", "clock")
|
|
|
|
(x, y) = li.evas.pointer_canvas_xy_get()
|
|
cp.move(x, y)
|
|
cp.show()
|
|
|
|
def cb_item5(li, item):
|
|
box = Box(li)
|
|
box.size_hint_min = (150, 150)
|
|
|
|
sc = Scroller(li)
|
|
sc.bounce = (False, True)
|
|
sc.size_hint_align = (evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
|
|
sc.size_hint_weight = (evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
|
|
sc.show()
|
|
|
|
bt = Button(li)
|
|
bt.text = "Enlightenment"
|
|
bt.size_hint_min = (140, 140)
|
|
|
|
sc.content = bt
|
|
box.pack_end(sc)
|
|
|
|
cp = Ctxpopup(li)
|
|
cp.content = box
|
|
(x, y) = li.evas.pointer_canvas_xy_get()
|
|
cp.move(x, y)
|
|
cp.show()
|
|
|
|
def cb_item6(li, item):
|
|
box = Box(li)
|
|
box.size_hint_min = (200, 150)
|
|
|
|
sc = Scroller(li)
|
|
sc.bounce = (False, True)
|
|
sc.size_hint_align = (evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
|
|
sc.size_hint_weight = (evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
|
|
sc.show()
|
|
|
|
bt = Button(li)
|
|
bt.text = "Ctxpop will be on the top of layer"
|
|
bt.callback_clicked_add(cb_btn)
|
|
bt.size_hint_min = (190, 140)
|
|
|
|
sc.content = bt
|
|
box.pack_end(sc)
|
|
|
|
cp = Ctxpopup(li)
|
|
cp.callback_dismissed_add(cb_dismissed)
|
|
cp.content = box
|
|
(x, y) = li.evas.pointer_canvas_xy_get()
|
|
cp.move(x, y)
|
|
cp.show()
|
|
bt.data["ctxpopup"] = cp
|
|
|
|
def ctxpopup_clicked(obj):
|
|
win = Window("ctxpopup", elementary.ELM_WIN_BASIC)
|
|
win.title = "Context popup test"
|
|
win.autodel = True
|
|
if obj is None:
|
|
win.callback_delete_request_add(lambda o: elementary.exit())
|
|
|
|
bg = Background(win)
|
|
win.resize_object_add(bg)
|
|
bg.size_hint_weight = (evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
|
|
bg.show()
|
|
|
|
li = List(win)
|
|
win.resize_object_add(li)
|
|
li.size_hint_weight = (evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
|
|
li.mode = elementary.ELM_LIST_COMPRESS
|
|
li.show()
|
|
|
|
li.item_append("Ctxpopup with icons and labels", callback=cb_item1)
|
|
li.item_append("Ctxpopup with icons only", callback=cb_item2)
|
|
li.item_append("Ctxpopup with labels only", callback=cb_item3)
|
|
li.item_append("Ctxpopup at horizontal mode", callback=cb_item4)
|
|
li.item_append("Ctxpopup with user content", callback=cb_item5)
|
|
li.item_append("Ctxpopup with restacking", callback=cb_item6)
|
|
li.go()
|
|
|
|
win.resize(400, 400)
|
|
win.show()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
elementary.init()
|
|
|
|
ctxpopup_clicked(None)
|
|
|
|
elementary.run()
|
|
elementary.shutdown()
|
|
|