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.

-- 


Reply via email to