kuuko pushed a commit to branch master.

http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=b981ce384096ec28013a5d952e3557df64ba57c1

commit b981ce384096ec28013a5d952e3557df64ba57c1
Author: Kai Huuhko <[email protected]>
Date:   Sun Oct 20 14:34:53 2013 +0300

    New feature: Set properties using constructor keyword arguments.
    
    Only applied to Elm Bubble for now as an example.
---
 efl/elementary/bubble.pyx          |  3 +-
 efl/eo/efl.eo.pyx                  |  5 +++
 examples/elementary/test_bubble.py | 81 +++++++++++++++++---------------------
 include/efl.eo.pxd                 |  1 +
 4 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/efl/elementary/bubble.pyx b/efl/elementary/bubble.pyx
index 83780e8..1b65836 100644
--- a/efl/elementary/bubble.pyx
+++ b/efl/elementary/bubble.pyx
@@ -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
diff --git a/efl/eo/efl.eo.pyx b/efl/eo/efl.eo.pyx
index af53646..31a6bfe 100644
--- a/efl/eo/efl.eo.pyx
+++ b/efl/eo/efl.eo.pyx
@@ -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)
diff --git a/examples/elementary/test_bubble.py 
b/examples/elementary/test_bubble.py
index 944bb59..2e09b74 100644
--- a/examples/elementary/test_bubble.py
+++ b/examples/elementary/test_bubble.py
@@ -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()
 
diff --git a/include/efl.eo.pxd b/include/efl.eo.pxd
index 4968829..b46058f 100644
--- a/include/efl.eo.pxd
+++ b/include/efl.eo.pxd
@@ -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)
 

-- 


Reply via email to