tasn pushed a commit to branch master.

commit e851f63c3ec939bd72386c7f6c45dec3471ab726
Author: Simon Busch <[email protected]>
Date:   Tue Jan 6 07:30:23 2009 +0000

    Some stuff for elementary.Toolbar
    
    
    SVN revision: 38475
---
 TODO                                   |  7 +---
 elementary/elementary.c_elementary.pyx | 69 +++++++++++-----------------------
 include/elementary/c_elementary.pxd    | 14 +++++--
 setup.py                               | 12 +++++-
 tests/test.py                          | 47 ++++++++++++++++++++++-
 5 files changed, 90 insertions(+), 59 deletions(-)

diff --git a/TODO b/TODO
index 756625d..53f6f3e 100644
--- a/TODO
+++ b/TODO
@@ -1,15 +1,10 @@
-- callback functions [DONE] [only for base widgets]
 - implement complete elementary api
-- create __init__.py for constants [DONE]
 - write test application (similar to the c-elementary test application to test 
   all functionality from all widgets)
-- write annoucement mail to freesmartphone-mailinglist
-- write bb-file for openembedded [DONE]
-- need canvas class for access to the evas canvas used by elementary for 
edje-classes [DONE]
-
 - implement set method for hover object for callback functions like
     hv = elm_hover_add(win);
     bt = elm_button_add(win);
     elm_button_label_set(bt, "Button");
     evas_object_smart_callback_add(bt, "clicked", my_hover_bt_1, hv);
+- user defined parameters for callback functions
 
diff --git a/elementary/elementary.c_elementary.pyx 
b/elementary/elementary.c_elementary.pyx
index 7dbb3cd..68e945d 100644
--- a/elementary/elementary.c_elementary.pyx
+++ b/elementary/elementary.c_elementary.pyx
@@ -700,63 +700,38 @@ cdef class Hoversel(Object):
         pass
         
 
-  
-cdef object _toolbar_callback_mappings
-_toolbar_callback_mappings = dict()
+ 
+cdef object _toolbar_callback_mapping
+_toolbar_callback_mapping = dict()
 
-cdef void _toolbar_object_callback(void *data, c_evas.Evas_Object *obj, void 
*event_info):
-    mapping = _toolbar_callback_mappings.get(<long>obj, None)
-    if mapping is not None:
-        func = mapping.get(<char*>data, None)
-        
-        if not callable(func):
-            raise TypeError("func is not callable")
-        
-        func(mapping["__class__"], <char*>data)   
+cdef void _toolbar_callback(void *data, c_evas.Evas_Object *obj, void 
*event_info):
+    pass
+    """
+    callback_func = _toolbar_callback_mapping.get(<long>data, None)
+    print callback_func
+    if not callable(callback_func):
+        print "ERROR: callback function is not callable"
+        return
+    callback_func(None, "clicked")
+    """
 
 cdef class Toolbar(Object):
     def __init__(self, c_evas.Object parent):
         self._set_obj(elm_toolbar_add(parent.obj))
-        
-    """
-    Elm_Toolbar_Item *elm_toolbar_item_add(evas.c_evas.Evas_Object *obj, 
evas.c_evas.Evas_Object *icon, char *label, 
-                    void (*func) (void *data, evas.c_evas.Evas_Object *obj, 
void *event_info), void *data)
-    """
-    """
-    def item_add(c_evas.Object icon, label, callback, data):
+       
+    def item_add(self, c_evas.Object icon, label, callback):
         cdef Elm_Toolbar_Item *item
-        item = elm_toolbar_item_add(self.obj, icon.obj, label, 
_toolbar_object_callback, 
-        
+        if icon is not None:
+            item = elm_toolbar_item_add(self.obj, icon.obj, label, 
_toolbar_callback, NULL)
+        else:
+            item = elm_toolbar_item_add(self.obj, NULL, label, 
_toolbar_callback, NULL)
+    
+#        _toolbar_callback_mapping[<long>item.base] = callback
         
     property clicked:
         def __set__(self, value):
             self._callback_add("clicked", value)
-    """        
-            
-"""
-def _callback_add(self, event, func):
-
-        if not callable(func):
-            raise TypeError("func is not callable")
-        
-        # implement per object event <> func list in global var 
_callback_mappings
-        # _object_callback looks for the object, saved in Evas_Object in the 
callback list
-        # and calls every func that matched the event
-        
-        mapping = _callback_mappings.get(<long>self.obj,None)
-        if mapping is None:
-            mapping = dict()
-            mapping["__class__"] =  self
-            mapping[event] = func
-            _callback_mappings[<long>self.obj] = mapping
-        else:
-            mapping[event] = func
-            _callback_mappings[<long>self.obj] = mapping
-        
-        # register callback
-        e = event
-        c_evas.evas_object_smart_callback_add(self.obj, event, 
_object_callback,<char *>e)
-"""
+       
     
 
 
diff --git a/include/elementary/c_elementary.pxd 
b/include/elementary/c_elementary.pxd
index f6c5cda..1a46e93 100644
--- a/include/elementary/c_elementary.pxd
+++ b/include/elementary/c_elementary.pxd
@@ -61,6 +61,15 @@ cdef extern from "Ecore_X.h":
     ctypedef unsigned int Ecore_X_ID
     ctypedef Ecore_X_ID Ecore_X_Window
 
+# Dirty hack to manage callback functions for the toolbar
+cdef struct Elm_Toolbar_Item:
+    evas.c_evas.Evas_Object *obj
+    evas.c_evas.Evas_Object *base
+    char *label
+    void (*func) (void *data, evas.c_evas.Evas_Object *obj, void *event_info)
+    void *data
+    evas.c_evas.Evas_Bool selected
+
 # For Debugging
 """
 cdef extern from "Ecore_Evas.h":
@@ -73,9 +82,6 @@ cdef extern from "Eina.h":
 cdef extern from "Ecore_Job.h":
     ctypedef struct Ecore_Job
 
-
-
-
 ctypedef struct Elm_Win:
     Ecore_Evas *ee
     evas.c_evas.Evas *evas
@@ -94,7 +100,7 @@ cdef extern from "Elementary.h":
     cdef struct Elm_Entry_Anchorview_Info
     cdef struct Elm_Entry_Anchorblock_Info
     cdef struct Elm_Hoversel_Item
-    cdef struct Elm_Toolbar_Item
+ #   cdef struct Elm_Toolbar_Item
 
     # Basic elementary functions
     void elm_init(int argc,char** argv)
diff --git a/setup.py b/setup.py
index 993f2f8..8aab7fe 100644
--- a/setup.py
+++ b/setup.py
@@ -6,6 +6,8 @@ from distutils.extension import Extension
 from Cython.Distutils import build_ext
 import commands
 
+debug = False
+
 class elementary_build_ext(build_ext):
     def finalize_options(self):
         build_ext.finalize_options(self)
@@ -30,9 +32,17 @@ def pkgconfig(*packages, **kw):
             kw.setdefault("extra_compile_args", []).append(token)
     return kw
 
-elementary_mod = Extension('elementary.c_elementary',
+if not debug:
+    elementary_mod = Extension('elementary.c_elementary',
+                       sources=['elementary/elementary.c_elementary.pyx'],
+                       depends=['include/elementary/c_elementary.pxd'],
+                       **pkgconfig('"elementary"'))
+else:
+    elementary_mod = Extension('elementary.c_elementary',
                        sources=['elementary/elementary.c_elementary.pyx'],
                        depends=['include/elementary/c_elementary.pxd'],
+                       extra_compile_args=["-g"],
+                       extra_link_args=["-g"],
                        **pkgconfig('"elementary"'))
 
 setup(
diff --git a/tests/test.py b/tests/test.py
index c6382a3..7ded2cd 100644
--- a/tests/test.py
+++ b/tests/test.py
@@ -546,6 +546,49 @@ def entry_scrolled_clicked(obj, event, *args, **kargs):
     bx.size_hint_weight_set(1.0, 1.0)
     bx.show()
 
+def tb_1(obj, event, *args, **kargs):
+    print "toolbar-item: test"
+
+def toolbar_clicked(obj, event, *args, **kargs):
+    win = elementary.Window("entry-scrolled", elementary.ELM_WIN_BASIC)
+    win.title_set("Entry Scrolled")
+    win.autodel_set(True)
+    
+    bg = elementary.Background(win)
+    win.resize_object_add(bg)
+    bg.size_hint_weight_set(1.0, 1.0)
+    bg.show()
+
+    bx = elementary.Box(win)
+    win.resize_object_add(bx)
+    bx.size_hint_weight_set(1.0, 1.0)
+    bx.show()
+    
+    ic = elementary.Icon(win)
+    ic.file_set("images/logo_small.png")
+    ic.scale_set(0, 0)
+    ic.size_hint_align_set(0.5, 0.5)
+    bx.pack_end(ic)
+    ic.show()
+
+    tb = elementary.Toolbar(win)
+    tb.size_hint_weight_set(0.0, 0.0)
+    tb.size_hint_align_set(-1.0, 0.0)
+    
+    tb.item_add(ic, "Hello", tb_1)
+    tb.item_add(ic, "World,", tb_1)
+    tb.item_add(ic, "here", tb_1)
+    tb.item_add(ic, "comes", tb_1)
+    tb.item_add(ic, "python-elementary!", tb_1)
+
+    bx.pack_end(tb)
+    tb.show()
+
+    win.resize(320, 320)
+    win.show()
+
+
+
 if __name__ == "__main__":
     elementary.init()
     win = elementary.Window("test", elementary.ELM_WIN_BASIC)
@@ -601,7 +644,9 @@ if __name__ == "__main__":
                ("Entry Scrolled", entry_scrolled_clicked),
                ("Notepad", notepad_clicked),
                ("Anchorview", anchorview_clicked),
-               ("Anchorblock", anchorblock_clicked)]
+               ("Anchorblock", anchorblock_clicked),
+               ("Toolbar", toolbar_clicked)]
+    
     
     for btn in buttons:
         bt = elementary.Button(win)

-- 

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar

Reply via email to