kuuko pushed a commit to branch master. http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=73b54938c696be49098edf1fd54126d18edb8e32
commit 73b54938c696be49098edf1fd54126d18edb8e32 Author: Kai Huuhko <kai.huu...@gmail.com> Date: Tue Mar 24 09:05:40 2015 +0200 Elm.Naviframe: Add item_pop_cb, missing event_info for events --- efl/elementary/naviframe.pxd | 3 ++ efl/elementary/naviframe.pyx | 67 +++++++++++++++++++++++++++++--------------- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/efl/elementary/naviframe.pxd b/efl/elementary/naviframe.pxd index 8afc192..a88495b 100644 --- a/efl/elementary/naviframe.pxd +++ b/efl/elementary/naviframe.pxd @@ -2,6 +2,8 @@ from efl.evas cimport Evas_Object, Eina_Bool, Eina_List from object_item cimport Elm_Object_Item cdef extern from "Elementary.h": + ctypedef Eina_Bool (*Elm_Naviframe_Item_Pop_Cb)(void *data, Elm_Object_Item *it) + Evas_Object *elm_naviframe_add(Evas_Object *parent) Elm_Object_Item *elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style) Elm_Object_Item *elm_naviframe_item_insert_before(Evas_Object *obj, Elm_Object_Item *before, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style) @@ -26,3 +28,4 @@ cdef extern from "Elementary.h": Eina_Bool elm_naviframe_event_enabled_get(const Evas_Object *obj) Elm_Object_Item *elm_naviframe_item_simple_push(Evas_Object *obj, Evas_Object *content) void elm_naviframe_item_simple_promote(Evas_Object *obj, Evas_Object *content) + void elm_naviframe_item_pop_cb_set(Elm_Object_Item *it, Elm_Naviframe_Item_Pop_Cb func, void *data) diff --git a/efl/elementary/naviframe.pyx b/efl/elementary/naviframe.pyx index 301c03f..4053adf 100644 --- a/efl/elementary/naviframe.pyx +++ b/efl/elementary/naviframe.pyx @@ -121,6 +121,28 @@ from object_item cimport _object_item_to_python, _object_item_list_to_python, \ from efl.utils.deprecated cimport DEPRECATED +import traceback + +cdef object _cb_object_item_conv(void *addr): + return _object_item_to_python(<Elm_Object_Item *>addr) + +cdef Eina_Bool py_elm_naviframe_item_pop_cb(void *data, Elm_Object_Item *it): + cdef: + ObjectItem item = _object_item_to_python(it) + object func + tuple args + dict kwargs + bint ret + + try: + func, args, kwargs = item.pop_cb_spec + ret = func(*args, **kwargs) + except Exception: + traceback.print_exc() + + return ret + + cdef class NaviframeItem(ObjectItem): """ @@ -133,6 +155,7 @@ cdef class NaviframeItem(ObjectItem): Evas_Object *prev_btn Evas_Object *next_btn Evas_Object *item_content + tuple pop_cb_spec def __cinit__(self): self.prev_btn = NULL @@ -381,30 +404,30 @@ cdef class NaviframeItem(ObjectItem): elm_naviframe_item_title_enabled_set(self.item, enabled, transition) def title_enabled_set(self, enabled, transition): - """title_enabled_set(self, enabled, transition) - - Enable/Disable the title area with transition effect. + elm_naviframe_item_title_enabled_set(self.item, enabled, transition) - :param enabled: if `True`, title area will be visible, hidden otherwise. - :type enabled: bool - :param transition: if `True`, transition effect of the title will be visible. - :type transition: bool + def title_enabled_get(self): + return bool(elm_naviframe_item_title_enabled_get(self.item)) - .. versionadded:: 1.9 + def pop_cb_set(self, func, *args, **kwargs): + """Set a function to be called when the item is going to be popped. - """ - elm_naviframe_item_title_enabled_set(self.item, enabled, transition) + :param func: the callback function. - def title_enabled_get(self): - """ + .. warning:: - :return: `True` if the title is visible. - :rtype: bool + Don't set "clicked" callback to the prev button additionally if the + function does an exact same logic with this ``func``. When hardware + back key is pressed then both callbacks will be called. - .. versionadded:: 1.9 + .. versionadded:: 1.14 """ - return bool(elm_naviframe_item_title_enabled_get(self.item)) + if not callable(func): + raise ValueError("func must be callable!") + + self.pop_cb_spec = (func, args, kwargs) + elm_naviframe_item_pop_cb_set(self.item, py_elm_naviframe_item_pop_cb, NULL) cdef class Naviframe(LayoutClass): @@ -572,24 +595,24 @@ cdef class Naviframe(LayoutClass): def callback_transition_finished_add(self, func, *args, **kwargs): """When the transition is finished in changing the item.""" - self._callback_add("transition,finished", func, args, kwargs) + self._callback_add_full("transition,finished", _cb_object_item_conv, func, args, kwargs) def callback_transition_finished_del(self, func): - self._callback_del("transition,finished", func) + self._callback_del_full("transition,finished", _cb_object_item_conv, func) def callback_title_transition_finished_add(self, func, *args, **kwargs): """When the title transition is finished.""" - self._callback_add("title,transition,finished", func, args, kwargs) + self._callback_add_full("title,transition,finished", _cb_object_item_conv, func, args, kwargs) def callback_title_transition_finished_del(self, func): - self._callback_del("title,transition,finished", func) + self._callback_del_full("title,transition,finished", _cb_object_item_conv, func) def callback_title_clicked_add(self, func, *args, **kwargs): """User clicked title area.""" - self._callback_add("title,clicked", func, args, kwargs) + self._callback_add_full("title,clicked", _cb_object_item_conv, func, args, kwargs) def callback_title_clicked_del(self, func): - self._callback_del("title,clicked", func) + self._callback_del_full("title,clicked", _cb_object_item_conv, func) def callback_focused_add(self, func, *args, **kwargs): """When the naviframe has received focus. --