kuuko pushed a commit to branch master. http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=59f2835f53b2bf45365f45d6c5c921a191d2317b
commit 59f2835f53b2bf45365f45d6c5c921a191d2317b Author: Kai Huuhko <[email protected]> Date: Sun Jun 1 17:43:11 2014 +0300 Elementary.multibuttonentry: Inject a Python object to created items --- efl/elementary/multibuttonentry.pyx | 48 +++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/efl/elementary/multibuttonentry.pyx b/efl/elementary/multibuttonentry.pyx index 99fe720..a244c70 100644 --- a/efl/elementary/multibuttonentry.pyx +++ b/efl/elementary/multibuttonentry.pyx @@ -39,11 +39,14 @@ This widget emits the following signals, besides the ones sent from - ``item,selected`` - this is called when an item is selected by api, user interaction, and etc. this is also called when a user press back space while cursor is on the first field of - entry. + entry. event_info contains the item. - ``item,added`` - when a new multi-button entry item is added. + event_info contains the item. - ``item,deleted`` - when a multi-button entry item is deleted. + event_info contains the item. - ``item,clicked`` - this is called when an item is clicked by user interaction. Both "item,selected" and "item,clicked" are needed. + event_info contains the item. - ``clicked`` - when multi-button entry is clicked. - ``focused`` - when multi-button entry is focused. - ``unfocused`` - when multi-button entry is unfocused. @@ -67,13 +70,18 @@ from libc.stdint cimport uintptr_t from efl.eo cimport _object_mapping_register, object_from_instance, PY_REFCOUNT from efl.utils.conversions cimport _ctouni -from efl.evas cimport Object as evasObject +from efl.evas cimport Object as evasObject, evas_object_smart_callback_add from libc.string cimport strdup from object cimport Object import traceback from object_item cimport _object_item_callback, _object_item_callback2, \ - _object_item_to_python, _object_item_list_to_python, ObjectItem + _object_item_to_python, _object_item_list_to_python, ObjectItem, \ + elm_object_item_data_get + +def _cb_object_item_conv(uintptr_t addr): + cdef Elm_Object_Item *it = <Elm_Object_Item *>addr + return _object_item_to_python(it) cdef Eina_Bool _multibuttonentry_filter_callback(Evas_Object *obj, \ const char *item_label, void *item_data, void *data) with gil: @@ -235,17 +243,27 @@ cdef class MultiButtonEntryItem(ObjectItem): def next_get(self): return _object_item_to_python(elm_multibuttonentry_item_next_get(self.item)) +cdef void _py_elm_mbe_item_added_cb( + void *data, Evas_Object *o, void *event_info) with gil: + cdef: + MultiButtonEntryItem it + Elm_Object_Item *item = <Elm_Object_Item *>event_info + + if elm_object_item_data_get(item) == NULL: + it = MultiButtonEntryItem.__new__(MultiButtonEntryItem) + it._set_obj(item) + cdef class MultiButtonEntry(Object): """This is the class that actually implements the widget.""" def __init__(self, evasObject parent, *args, **kwargs): self._set_obj(elm_multibuttonentry_add(parent.obj)) + evas_object_smart_callback_add( + self.obj, "item,added", + _py_elm_mbe_item_added_cb, NULL + ) self._set_properties_from_keyword_args(kwargs) - # - # TODO: Add callbacks for item added and item deleted, inject - # the python instance into Elm_Object_Item's data - # property entry: """The Entry object child of the multibuttonentry. @@ -470,28 +488,28 @@ cdef class MultiButtonEntry(Object): Py_INCREF(cbdata) def callback_item_selected_add(self, func, *args, **kwargs): - self._callback_add("item,selected", func, *args, **kwargs) + self._callback_add_full("item,selected", _cb_object_item_conv, func, *args, **kwargs) def callback_item_selected_del(self, func): - self._callback_del("item,selected", func) + self._callback_del_full("item,selected", _cb_object_item_conv, func) def callback_item_added_add(self, func, *args, **kwargs): - self._callback_add("item,added", func, *args, **kwargs) + self._callback_add_full("item,added", _cb_object_item_conv, func, *args, **kwargs) def callback_item_added_del(self, func): - self._callback_del("item,added", func) + self._callback_del_full("item,added", _cb_object_item_conv, func) def callback_item_deleted_add(self, func, *args, **kwargs): - self._callback_add("item,deleted", func, *args, **kwargs) + self._callback_add_full("item,deleted", _cb_object_item_conv, func, *args, **kwargs) def callback_item_deleted_del(self, func): - self._callback_del("item,deleted", func) + self._callback_del_full("item,deleted", _cb_object_item_conv, func) def callback_item_clicked_add(self, func, *args, **kwargs): - self._callback_add("item,clicked", func, *args, **kwargs) + self._callback_add_full("item,clicked", _cb_object_item_conv, func, *args, **kwargs) def callback_item_clicked_del(self, func): - self._callback_del("item,clicked", func) + self._callback_del_full("item,clicked", _cb_object_item_conv, func) def callback_clicked_add(self, func, *args, **kwargs): self._callback_add("clicked", func, *args, **kwargs) --
