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