New feature: Set properties using constructor keyword arguments.

Only applied to Elm Bubble for now as an example.
This commit is contained in:
Kai Huuhko 2013-10-20 14:34:53 +03:00
parent 5bfb35c797
commit b981ce3840
4 changed files with 45 additions and 45 deletions

View File

@ -116,8 +116,9 @@ cdef class Bubble(LayoutClass):
"""This is the class that actually implements the widget."""
def __init__(self, evasObject parent):
def __init__(self, evasObject parent, *args, **kwargs):
self._set_obj(elm_bubble_add(parent.obj))
self._set_properties_from_keyword_args(kwargs)
property pos:
"""The corner of the bubble

View File

@ -196,6 +196,11 @@ cdef class Eo(object):
eo_do(self.obj, eo_event_callback_add(EO_EV_DEL, _eo_event_del_cb, <const_void *>self))
Py_INCREF(self)
cdef void _set_properties_from_keyword_args(self, dict kwargs) except *:
for k, v in kwargs.items():
assert hasattr(self, k), "%s has no attribute with the name %s." % (self, k)
setattr(self, k, v)
def is_deleted(self):
"Check if the object has been deleted thus leaving the object shallow"
return bool(self.obj == NULL)

View File

@ -1,104 +1,97 @@
#!/usr/bin/env python
# encoding: utf-8
from efl import evas
from efl import elementary
from efl.elementary.window import Window
from efl.evas import EVAS_HINT_EXPAND, EVAS_HINT_FILL, \
EVAS_ASPECT_CONTROL_VERTICAL
EXPAND_BOTH = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
FILL_BOTH = EVAS_HINT_FILL, EVAS_HINT_FILL
from efl import elementary as elm
from efl.elementary.window import 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.icon import Icon
from efl.elementary.label import Label
from efl.elementary.list import List
from efl.elementary.bubble import Bubble
from efl.elementary.bubble import Bubble, ELM_BUBBLE_POS_TOP_LEFT, \
ELM_BUBBLE_POS_TOP_RIGHT, ELM_BUBBLE_POS_BOTTOM_LEFT, \
ELM_BUBBLE_POS_BOTTOM_RIGHT
def bubble_clicked(obj, item=None):
win = Window("bubble", elementary.ELM_WIN_BASIC)
win = Window("bubble", ELM_WIN_BASIC)
win.title_set("Bubble")
win.autodel_set(True)
bg = Background(win)
win.resize_object_add(bg)
bg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
bg.size_hint_weight = EXPAND_BOTH
bg.show()
bx = Box(win)
win.resize_object_add(bx)
bx.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
bx.size_hint_weight = EXPAND_BOTH
bx.show()
# bb 1
ic = Icon(win)
ic.file_set("images/logo_small.png")
ic.size_hint_aspect_set(evas.EVAS_ASPECT_CONTROL_VERTICAL, 1, 1)
ic.size_hint_aspect_set(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1)
lb = Label(win)
lb.text_set("Blah, Blah, Blah")
bb = Bubble(win)
bb.text_set("Message 1")
bb = Bubble(win, text = "Message 1", content = lb,
pos = ELM_BUBBLE_POS_TOP_LEFT,
size_hint_weight = EXPAND_BOTH, size_hint_align = FILL_BOTH)
bb.part_text_set("info", "Corner: top_left")
bb.content_set(lb)
bb.part_content_set("icon", ic)
bb.pos = elementary.ELM_BUBBLE_POS_TOP_LEFT
bb.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
bb.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
bx.pack_end(bb)
bb.show()
# bb 2
ic = Icon(win)
ic.file_set("images/logo_small.png")
ic.size_hint_aspect_set(evas.EVAS_ASPECT_CONTROL_VERTICAL, 1, 1)
ic.size_hint_aspect_set(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1)
lb = Label(win)
lb.text_set("Blah, Blah, Blah")
bb = Bubble(win)
bb.text_set("Message 2")
bb = Bubble(win, text = "Message 2", content = lb,
pos = ELM_BUBBLE_POS_TOP_RIGHT,
size_hint_weight = EXPAND_BOTH, size_hint_align = FILL_BOTH)
bb.part_text_set("info", "Corner: top_right")
bb.content_set(lb)
bb.part_content_set("icon", ic)
bb.pos = elementary.ELM_BUBBLE_POS_TOP_RIGHT
bb.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
bb.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
bx.pack_end(bb)
bb.show()
# bb 3
ic = Icon(win)
ic.file_set("images/logo_small.png")
ic.size_hint_aspect_set(evas.EVAS_ASPECT_CONTROL_VERTICAL, 1, 1)
ic.size_hint_aspect_set(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1)
lb = Label(win)
lb.text_set("Blah, Blah, Blah")
bb = Bubble(win)
bb.text_set("Message 3")
bb = Bubble(win, text = "Message 3", content = ic,
pos = ELM_BUBBLE_POS_BOTTOM_LEFT,
size_hint_weight = EXPAND_BOTH, size_hint_align = FILL_BOTH)
bb.part_text_set("info", "Corner: bottom_left")
bb.content_set(ic)
bb.pos = elementary.ELM_BUBBLE_POS_BOTTOM_LEFT
bb.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
bb.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
bx.pack_end(bb)
bb.show()
# bb 4
ic = Icon(win)
ic.file_set("images/logo_small.png")
ic.size_hint_aspect_set(evas.EVAS_ASPECT_CONTROL_VERTICAL, 1, 1)
ic.size_hint_aspect_set(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1)
lb = Label(win)
lb.text_set("Blah, Blah, Blah")
bb = Bubble(win)
bb.text_set("Message 4")
bb = Bubble(win, text = "Message 4", content = lb,
pos = ELM_BUBBLE_POS_BOTTOM_RIGHT,
size_hint_weight = EXPAND_BOTH, size_hint_align = FILL_BOTH)
bb.part_text_set("info", "Corner: bottom_right")
bb.content_set(lb)
bb.part_content_set("icon", ic)
bb.pos = elementary.ELM_BUBBLE_POS_BOTTOM_RIGHT
bb.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
bb.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
bx.pack_end(bb)
bb.show()
@ -108,20 +101,20 @@ def bubble_clicked(obj, item=None):
if __name__ == "__main__":
def destroy(obj):
elementary.exit()
elm.exit()
elementary.init()
win = Window("test", elementary.ELM_WIN_BASIC)
elm.init()
win = Window("test", ELM_WIN_BASIC)
win.title_set("python-elementary test application")
win.callback_delete_request_add(destroy)
bg = Background(win)
win.resize_object_add(bg)
bg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
bg.size_hint_weight = EXPAND_BOTH
bg.show()
box0 = Box(win)
box0.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
box0.size_hint_weight = EXPAND_BOTH
win.resize_object_add(box0)
box0.show()
@ -141,8 +134,8 @@ if __name__ == "__main__":
]
li = List(win)
li.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
li.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
li.size_hint_weight = EXPAND_BOTH
li.size_hint_align = FILL_BOTH
box0.pack_end(li)
li.show()
@ -153,6 +146,6 @@ if __name__ == "__main__":
win.resize(320,520)
win.show()
elementary.run()
elementary.shutdown()
elm.run()
elm.shutdown()

View File

@ -26,6 +26,7 @@ cdef class Eo(object):
cdef readonly dict data
cdef void _set_obj(self, cEo *obj) except *
cdef void _set_properties_from_keyword_args(self, dict kwargs) except *
# cdef void *_unset_obj(self)
# cdef _add_obj(self, Eo_Class *klass, cEo *parent)