kuuko pushed a commit to branch master.
commit 058777167c653237d9965565ccef8c8d004cff3c
Author: Kai Huuhko <[email protected]>
Date: Thu Apr 18 18:30:28 2013 +0000
Elementary: Separate GenlistItem func_data from item_data, add small
optimizations.
---
efl/elementary/genlist.pyx | 233 ++++++++++++++++++------------------
efl/elementary/object_item.pxd | 2 +-
examples/elementary/test_genlist.py | 14 +--
3 files changed, 124 insertions(+), 125 deletions(-)
diff --git a/efl/elementary/genlist.pyx b/efl/elementary/genlist.pyx
index 53d20b3..1e1dd97 100644
--- a/efl/elementary/genlist.pyx
+++ b/efl/elementary/genlist.pyx
@@ -474,6 +474,8 @@ include "widget_header.pxi"
include "callback_conversions.pxi"
include "tooltips.pxi"
+from cpython cimport PyUnicode_AsUTF8String
+
from efl.eo cimport _METHOD_DEPRECATED
from object_item cimport ObjectItem, _object_item_to_python, \
@@ -516,42 +518,47 @@ ELM_SCROLLER_POLICY_AUTO = enums.ELM_SCROLLER_POLICY_AUTO
ELM_SCROLLER_POLICY_ON = enums.ELM_SCROLLER_POLICY_ON
ELM_SCROLLER_POLICY_OFF = enums.ELM_SCROLLER_POLICY_OFF
-cdef _py_elm_genlist_item_call(func, Evas_Object *obj, const_char *part, args)
with gil:
- try:
- o = object_from_instance(obj)
- return func(o, _ctouni(part), args)
- except Exception as e:
- traceback.print_exc()
- return None
-
cdef char *_py_elm_genlist_item_text_get(void *data, Evas_Object *obj,
const_char *part) with gil:
- cdef GenlistItem item = <object>data
- cdef object params = item.params
- cdef GenlistItemClass itc = params[0]
+ cdef:
+ GenlistItem item = <object>data
+ GenlistItemClass itc = item.params[0]
+ unicode u = _ctouni(part)
func = itc._text_get_func
-
if func is None:
return NULL
- ret = _py_elm_genlist_item_call(func, obj, part, params[1])
+ try:
+ o = object_from_instance(obj)
+ ret = func(o, u, item.params[1])
+ except Exception as e:
+ traceback.print_exc()
+ return NULL
+
if ret is not None:
- if isinstance(ret, unicode): ret = ret.encode("UTF-8")
+ if isinstance(ret, unicode): ret = PyUnicode_AsUTF8String(ret)
return strdup(ret)
else:
return NULL
cdef Evas_Object *_py_elm_genlist_item_content_get(void *data, Evas_Object
*obj, const_char *part) with gil:
- cdef GenlistItem item = <object>data
- cdef object params = item.params
- cdef evasObject icon
- cdef GenlistItemClass itc = params[0]
+ cdef:
+ GenlistItem item = <object>data
+ GenlistItemClass itc = item.params[0]
+ unicode u = _ctouni(part)
+ evasObject icon
func = itc._content_get_func
if func is None:
return NULL
- ret = _py_elm_genlist_item_call(func, obj, part, params[1])
+ try:
+ o = object_from_instance(obj)
+ ret = func(o, u, item.params[1])
+ except Exception as e:
+ traceback.print_exc()
+ return NULL
+
if ret is not None:
try:
icon = ret
@@ -563,36 +570,38 @@ cdef Evas_Object *_py_elm_genlist_item_content_get(void
*data, Evas_Object *obj,
return NULL
cdef Eina_Bool _py_elm_genlist_item_state_get(void *data, Evas_Object *obj,
const_char *part) with gil:
- cdef GenlistItem item = <object>data
- cdef object params = item.params
- cdef GenlistItemClass itc = params[0]
+ cdef:
+ GenlistItem item = <object>data
+ GenlistItemClass itc = item.params[0]
+ unicode u = _ctouni(part)
func = itc._state_get_func
if func is None:
- return False
+ return 0
- ret = _py_elm_genlist_item_call(func, obj, part, params[1])
- if ret is not None:
- return bool(ret)
- else:
- return False
+ try:
+ o = object_from_instance(obj)
+ ret = func(o, u, item.params[1])
+ except Exception as e:
+ traceback.print_exc()
+ return 0
+
+ return ret if ret is not None else 0
cdef void _py_elm_genlist_object_item_del(void *data, Evas_Object *obj) with
gil:
cdef GenlistItem item = <object>data
- cdef object params
cdef GenlistItemClass itc
if item is None:
return
- params = item.params
- itc = params[0]
+ itc = item.params[0]
func = itc._del_func
if func is not None:
try:
o = object_from_instance(obj)
- func(o, params[1])
+ func(o, item.params[1])
except Exception as e:
traceback.print_exc()
item._unset_obj()
@@ -605,7 +614,7 @@ cdef void _py_elm_genlist_item_func(void *data, Evas_Object
*obj, void *event_in
if func is not None:
try:
o = object_from_instance(obj)
- func(item, o, item.params[1])
+ func(item, o, item.params[3])
except Exception as e:
traceback.print_exc()
@@ -870,11 +879,12 @@ cdef class GenlistItem(ObjectItem):
"""
- cdef Elm_Genlist_Item_Class *item_class
- cdef Elm_Object_Item *parent_item
- cdef int flags
- cdef Evas_Smart_Cb cb
- cdef object comparison_func
+ cdef:
+ Elm_Genlist_Item_Class *item_class
+ Elm_Object_Item *parent_item
+ int flags
+ Evas_Smart_Cb cb
+ object comparison_func
def __cinit__(self):
self.item_class = NULL
@@ -884,10 +894,11 @@ cdef class GenlistItem(ObjectItem):
def __init__( self,
GenlistItemClass item_class not None,
- #TODO: item data separate from data?
+ item_data=None,
GenlistItem parent_item=None,
- int flags=ELM_GENLIST_ITEM_NONE,
- func=None, *args):
+ int flags=enums.ELM_GENLIST_ITEM_NONE,
+ func=None,
+ func_data=None):
"""Create a new GenlistItem.
:param item_class: a valid instance that defines the
@@ -933,10 +944,7 @@ cdef class GenlistItem(ObjectItem):
raise TypeError("func is not None or callable")
self.cb = _py_elm_genlist_item_func
- if len(args) is 1:
- args = args[0]
-
- self.params = (item_class, args, func)
+ self.params = (item_class, item_data, func, func_data)
cdef int _set_obj(self, Elm_Object_Item *item, params=None) except 0:
assert self.item == NULL, "Object must be clean"
@@ -1179,17 +1187,19 @@ cdef class GenlistItem(ObjectItem):
"""
def __get__(self):
- return bool(elm_genlist_item_selected_get(self.item))
+ cdef bint ret = elm_genlist_item_selected_get(self.item)
+ return ret
- def __set__(self, selected):
- elm_genlist_item_selected_set(self.item, bool(selected))
+ def __set__(self, bint selected):
+ elm_genlist_item_selected_set(self.item, selected)
- def selected_set(self, selected):
- elm_genlist_item_selected_set(self.item, bool(selected))
+ def selected_set(self, bint selected):
+ elm_genlist_item_selected_set(self.item, selected)
def selected_get(self):
- return bool(elm_genlist_item_selected_get(self.item))
+ cdef bint ret = elm_genlist_item_selected_get(self.item)
+ return ret
- def show(self, scrollto_type = ELM_GENLIST_ITEM_SCROLLTO_IN):
+ def show(self, scrollto_type = enums.ELM_GENLIST_ITEM_SCROLLTO_IN):
"""show(int scrollto_type = ELM_GENLIST_ITEM_SCROLLTO_IN)
This causes genlist to jump to the item and show it (by
@@ -1200,7 +1210,7 @@ cdef class GenlistItem(ObjectItem):
"""
elm_genlist_item_show(self.item, scrollto_type)
- def bring_in(self, scrollto_type = ELM_GENLIST_ITEM_SCROLLTO_IN):
+ def bring_in(self, scrollto_type = enums.ELM_GENLIST_ITEM_SCROLLTO_IN):
"""bring_in(int scrollto_type = ELM_GENLIST_ITEM_SCROLLTO_IN)
This causes genlist to jump to the item and show it (by
@@ -1408,16 +1418,18 @@ cdef class GenlistItem(ObjectItem):
cursor with elm_genlist_item_cursor_set()
"""
- def __set__(self, engine_only):
- elm_genlist_item_cursor_engine_only_set(self.item,
bool(engine_only))
+ def __set__(self, bint engine_only):
+ elm_genlist_item_cursor_engine_only_set(self.item, engine_only)
def __get__(self):
- return elm_genlist_item_cursor_engine_only_get(self.item)
+ cdef bint ret = elm_genlist_item_cursor_engine_only_get(self.item)
+ return ret
- def cursor_engine_only_set(self, engine_only):
- elm_genlist_item_cursor_engine_only_set(self.item, bool(engine_only))
+ def cursor_engine_only_set(self, bint engine_only):
+ elm_genlist_item_cursor_engine_only_set(self.item, engine_only)
def cursor_engine_only_get(self):
- return elm_genlist_item_cursor_engine_only_get(self.item)
+ cdef bint ret = elm_genlist_item_cursor_engine_only_get(self.item)
+ return ret
property parent:
"""This returns the item that was specified as parent of the item
@@ -1457,15 +1469,17 @@ cdef class GenlistItem(ObjectItem):
"""
def __get__(self):
- return bool(elm_genlist_item_expanded_get(self.item))
+ cdef bint ret = elm_genlist_item_expanded_get(self.item)
+ return ret
- def __set__(self, expanded):
- elm_genlist_item_expanded_set(self.item, bool(expanded))
+ def __set__(self, bint expanded):
+ elm_genlist_item_expanded_set(self.item, expanded)
- def expanded_set(self, expanded):
- elm_genlist_item_expanded_set(self.item, bool(expanded))
- def expanded_get(self, ):
- return bool(elm_genlist_item_expanded_get(self.item))
+ def expanded_set(self, bint expanded):
+ elm_genlist_item_expanded_set(self.item, expanded)
+ def expanded_get(self):
+ cdef bint ret = elm_genlist_item_expanded_get(self.item)
+ return ret
property expanded_depth:
"""Get the depth of expanded item.
@@ -1605,12 +1619,14 @@ cdef class GenlistItem(ObjectItem):
elm_genlist_item_flip_set(self.item, flip)
def __get__(self):
- return bool(elm_genlist_item_flip_get(self.item))
+ cdef bint ret = elm_genlist_item_flip_get(self.item)
+ return ret
def flip_set(self, flip):
elm_genlist_item_flip_set(self.item, flip)
def flip_get(self):
- return bool(elm_genlist_item_flip_get(self.item))
+ cdef bint ret = elm_genlist_item_flip_get(self.item)
+ return ret
property select_mode:
"""Item's select mode. Possible values are:
@@ -1716,29 +1732,6 @@ cdef class GenlistWidget(Object):
def mode_get(self):
return elm_genlist_mode_get(self.obj)
- property bounce:
- """This will enable or disable the scroller bouncing effect for the
- genlist. See elm_scroller_bounce_set() for details.
-
- :type: tuple of bools
-
- """
- def __set__(self, value):
- h_bounce, v_bounce = value
- elm_scroller_bounce_set(self.obj, bool(h_bounce), bool(v_bounce))
-
- def __get__(self):
- cdef Eina_Bool h_bounce, v_bounce
- elm_scroller_bounce_get(self.obj, &h_bounce, &v_bounce)
- return (h_bounce, v_bounce)
-
- def bounce_set(self, h_bounce, v_bounce):
- elm_scroller_bounce_set(self.obj, bool(h_bounce), bool(v_bounce))
- def bounce_get(self):
- cdef Eina_Bool h_bounce, v_bounce
- elm_scroller_bounce_get(self.obj, &h_bounce, &v_bounce)
- return (h_bounce, v_bounce)
-
def item_append(self,
GenlistItemClass item_class not None,
item_data,
@@ -1822,11 +1815,9 @@ cdef class GenlistWidget(Object):
def item_insert_before( self,
GenlistItemClass item_class not None,
item_data,
- #API XXX: parent
GenlistItem before_item=None,
int flags=ELM_GENLIST_ITEM_NONE,
func=None
- #API XXX: *args, **kwargs
):
"""item_insert_before(item_class not None, item_data,
before_item=None, flags=ELM_GENLIST_ITEM_NONE, func=None) -> GenlistItem
@@ -1862,11 +1853,9 @@ cdef class GenlistWidget(Object):
def item_insert_after( self,
GenlistItemClass item_class not None,
item_data,
- #API XXX: parent
GenlistItem after_item=None,
int flags=ELM_GENLIST_ITEM_NONE,
func=None
- #API XXX: *args, **kwargs
):
"""item_insert_after(item_class not None, item_data, after_item=None,
flags=ELM_GENLIST_ITEM_NONE, func=None) -> GenlistItem
@@ -2075,16 +2064,18 @@ cdef class GenlistWidget(Object):
:type: bool
"""
- def __set__(self, homogeneous):
- elm_genlist_homogeneous_set(self.obj, bool(homogeneous))
+ def __set__(self, bint homogeneous):
+ elm_genlist_homogeneous_set(self.obj, homogeneous)
def __get__(self):
- return bool(elm_genlist_homogeneous_get(self.obj))
+ cdef bint ret = elm_genlist_homogeneous_get(self.obj)
+ return ret
- def homogeneous_set(self, homogeneous):
- elm_genlist_homogeneous_set(self.obj, bool(homogeneous))
+ def homogeneous_set(self, bint homogeneous):
+ elm_genlist_homogeneous_set(self.obj, homogeneous)
def homogeneous_get(self):
- return bool(elm_genlist_homogeneous_get(self.obj))
+ cdef bint ret = elm_genlist_homogeneous_get(self.obj)
+ return ret
property block_count:
"""This will configure the block count to tune to the target with
@@ -2177,16 +2168,18 @@ cdef class GenlistWidget(Object):
:type: bool
"""
- def __set__(self, reorder_mode):
+ def __set__(self, bint reorder_mode):
elm_genlist_reorder_mode_set(self.obj, reorder_mode)
def __get__(self):
- return bool(elm_genlist_reorder_mode_get(self.obj))
+ cdef bint ret = elm_genlist_reorder_mode_get(self.obj)
+ return ret
- def reorder_mode_set(self, reorder_mode):
+ def reorder_mode_set(self, bint reorder_mode):
elm_genlist_reorder_mode_set(self.obj, reorder_mode)
def reorder_mode_get(self):
- return bool(elm_genlist_reorder_mode_get(self.obj))
+ cdef bint ret = elm_genlist_reorder_mode_get(self.obj)
+ return ret
property decorate_mode:
"""Genlist decorate mode for all items.
@@ -2194,16 +2187,18 @@ cdef class GenlistWidget(Object):
:type: bool
"""
- def __set__(self, decorated):
+ def __set__(self, bint decorated):
elm_genlist_decorate_mode_set(self.obj, decorated)
def __get__(self):
- return bool(elm_genlist_decorate_mode_get(self.obj))
+ cdef bint ret = elm_genlist_decorate_mode_get(self.obj)
+ return ret
- def decorate_mode_set(self, decorated):
+ def decorate_mode_set(self, bint decorated):
elm_genlist_decorate_mode_set(self.obj, decorated)
def decorate_mode_get(self):
- return bool(elm_genlist_decorate_mode_get(self.obj))
+ cdef bint ret = elm_genlist_decorate_mode_get(self.obj)
+ return ret
property tree_effect_enabled:
"""Genlist tree effect.
@@ -2211,16 +2206,18 @@ cdef class GenlistWidget(Object):
:type: bool
"""
- def __set__(self, enabled):
+ def __set__(self, bint enabled):
elm_genlist_tree_effect_enabled_set(self.obj, enabled)
def __get__(self):
- return bool(elm_genlist_tree_effect_enabled_get(self.obj))
+ cdef bint ret = elm_genlist_tree_effect_enabled_get(self.obj)
+ return ret
- def tree_effect_enabled_set(self, enabled):
+ def tree_effect_enabled_set(self, bint enabled):
elm_genlist_tree_effect_enabled_set(self.obj, enabled)
def tree_effect_enabled_get(self):
- return bool(elm_genlist_tree_effect_enabled_get(self.obj))
+ cdef bint ret = elm_genlist_tree_effect_enabled_get(self.obj)
+ return ret
property highlight_mode:
"""Whether the item will, or will not highlighted on selection. The
@@ -2231,16 +2228,18 @@ cdef class GenlistWidget(Object):
:type: bool
"""
- def __set__(self, highlight):
+ def __set__(self, bint highlight):
elm_genlist_highlight_mode_set(self.obj, highlight)
def __get__(self):
- return bool(elm_genlist_highlight_mode_get(self.obj))
+ cdef bint ret = elm_genlist_highlight_mode_get(self.obj)
+ return ret
- def highlight_mode_set(self, highlight):
+ def highlight_mode_set(self, bint highlight):
elm_genlist_highlight_mode_set(self.obj, highlight)
def highlight_mode_get(self):
- return bool(elm_genlist_highlight_mode_get(self.obj))
+ cdef bint ret = elm_genlist_highlight_mode_get(self.obj)
+ return ret
property select_mode:
"""Selection mode of the Genlist widget.
diff --git a/efl/elementary/object_item.pxd b/efl/elementary/object_item.pxd
index ea31fb2..b0c029e 100644
--- a/efl/elementary/object_item.pxd
+++ b/efl/elementary/object_item.pxd
@@ -51,7 +51,7 @@ cdef void _object_item_callback(void *data, Evas_Object *obj,
void *event_info)
cdef class ObjectItem(object):
cdef Elm_Object_Item *item
- cdef object params
+ cdef tuple params
cdef int _set_obj(self, Elm_Object_Item *item) except 0
cpdef text_set(self, text)
diff --git a/examples/elementary/test_genlist.py
b/examples/elementary/test_genlist.py
index 2773533..d012b30 100644
--- a/examples/elementary/test_genlist.py
+++ b/examples/elementary/test_genlist.py
@@ -447,7 +447,7 @@ def genlist4_clicked(obj, item=None):
state_get_func=gl_state_get)
for i in range(100,-1,-1):
- GenlistItem(itc_i, None, 0, None, i).sorted_insert(gl, gl_comp_func)
+ GenlistItem(itc_i, i).sorted_insert(gl, gl_comp_func)
win.resize(320, 320)
win.show()
@@ -478,7 +478,7 @@ def genlist5_clicked(obj, item=None):
t1 = time.time()
for i in range(item_count):
- GenlistItem(itc_i, None, 0, None, i).append_to(gl)
+ GenlistItem(itc_i, i).append_to(gl)
t2 = time.time()
it = gl.first_item
@@ -501,7 +501,7 @@ mode_type = ["slide", "rotate"]
class ItemClass10(GenlistItemClass):
def text_get(self, obj, part, data):
- t = data[0]
+ t = data
if part == "elm.text.mode":
return "Mode # %i" % (t,)
else:
@@ -586,13 +586,13 @@ def genlist10_clicked(obj, item=None):
itc10 = ItemClass10(item_style="default", decorate_item_style="mode")
itc10.state_get = gl_state_get
- for i in range(50):
+ for i in range(1000, 1050):
GenlistItem(itc10,
- #1000+i,
+ i,
None,
ELM_GENLIST_ITEM_NONE,
gl_sel10,
- (1000+i, rdg)).append_to(gl)
+ (i, rdg)).append_to(gl)
bx.pack_end(gl)
@@ -680,7 +680,7 @@ def genlist15_clicked(obj, item=None):
for i in range(100):
ck = Check(gl)
GenlistItem(itc15,
- # tits[i], # item data
+ [i, False], # item data
None, # parent
ELM_GENLIST_ITEM_NONE, # flags
gl15_sel, # func
--
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter