davemds pushed a commit to branch master. http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=f5dd70b70fd9e1ae529b6f55c1c81bff3677da16
commit f5dd70b70fd9e1ae529b6f55c1c81bff3677da16 Author: davemds <[email protected]> Date: Fri Aug 1 17:31:09 2014 +0200 Gengrid: implemented search_by_text_item_get(), with a proper test --- efl/elementary/gengrid.pxd | 4 +++- efl/elementary/gengrid_widget.pxi | 40 +++++++++++++++++++++++++++++++++++++ examples/elementary/test_gengrid.py | 30 +++++++++++++++++++++++++++- 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/efl/elementary/gengrid.pxd b/efl/elementary/gengrid.pxd index cc705c6..a8f5bb9 100644 --- a/efl/elementary/gengrid.pxd +++ b/efl/elementary/gengrid.pxd @@ -4,7 +4,7 @@ from efl.c_eo cimport Eo from object_item cimport Elm_Object_Item from general cimport Elm_Tooltip_Item_Content_Cb from enums cimport Elm_Genlist_Item_Scrollto_Type, Elm_Object_Select_Mode, \ - Elm_Object_Multi_Select_Mode + Elm_Object_Multi_Select_Mode, Elm_Glob_Match_Flags from efl.ecore.enums cimport Ecore_Pos_Map cdef extern from "Elementary.h": @@ -101,3 +101,5 @@ cdef extern from "Elementary.h": Eina_Bool elm_gengrid_item_cursor_engine_only_get(const Elm_Object_Item *item) Elm_Object_Item * elm_gengrid_nth_item_get(const Evas_Object *obj, unsigned int nth) Elm_Object_Item * elm_gengrid_at_xy_item_get(const Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *xposret, int *yposret) + Elm_Object_Item * elm_gengrid_search_by_text_item_get(const Evas_Object *obj, Elm_Object_Item *item_to_search_from, const char *part_name, const char *pattern, Elm_Glob_Match_Flags flags) + diff --git a/efl/elementary/gengrid_widget.pxi b/efl/elementary/gengrid_widget.pxi index b0a8900..4e6af66 100644 --- a/efl/elementary/gengrid_widget.pxi +++ b/efl/elementary/gengrid_widget.pxi @@ -558,6 +558,46 @@ cdef class Gengrid(Object): return _object_item_to_python(ret), xposret, yposret + def search_by_text_item_get(self, GengridItem item_to_search_from, + part_name, pattern, Elm_Glob_Match_Flags flags): + """Search gengrid item by given string. + + This function uses globs (like "\*.jpg") for searching and takes + search flags as last parameter. That is a bitfield with values + to be ored together or 0 for no flags. + + :param item_to_search_from: item to start search from, or None to + search from the first item. + :type item_to_search_from: :py:class:`GengridItem` + :param part_name: Name of the TEXT part of gengrid item to search + string in (usually "elm.text"). + :type part_name: string + :param pattern: The search pattern. + :type pattern: string + :param flags: Search flags + :type flags: :ref:`Elm_Glob_Match_Flags` + + :return: The first item found + :rtype: :py:class:`GengridItem` + + .. versionadded:: 1.11 + + """ + cdef Elm_Object_Item *from_item = NULL + + if isinstance(part_name, unicode): + part_name = PyUnicode_AsUTF8String(part_name) + if isinstance(pattern, unicode): + pattern = PyUnicode_AsUTF8String(pattern) + if item_to_search_from is not None: + from_item = _object_item_from_python(item_to_search_from) + + return _object_item_to_python(elm_gengrid_search_by_text_item_get( + self.obj, from_item, + <const char *>part_name if part_name is not None else NULL, + <const char *>pattern if pattern is not None else NULL, + flags)) + # # TODO: Drag and Drop # ============= diff --git a/examples/elementary/test_gengrid.py b/examples/elementary/test_gengrid.py index a18d1d6..5d0cb2c 100644 --- a/examples/elementary/test_gengrid.py +++ b/examples/elementary/test_gengrid.py @@ -10,7 +10,10 @@ from efl.elementary.window import StandardWindow from efl.elementary.background import Background from efl.elementary.button import Button from efl.elementary.check import Check +from efl.elementary.entry import Entry from efl.elementary.image import Image +from efl.elementary.label import Label +from efl.elementary.general import ELM_GLOB_MATCH_NOCASE from efl.elementary.gengrid import Gengrid, GengridItemClass from efl.elementary.slider import Slider from efl.elementary.table import Table @@ -67,7 +70,7 @@ def gengrid_clicked(obj): global item_count item_count = 25 - win = StandardWindow("gengrid", "Gengrid", autodel=True, size=(480, 800)) + win = StandardWindow("gengrid", "Gengrid", autodel=True, size=(480, 600)) if obj is None: win.callback_delete_request_add(lambda o: elementary.exit()) @@ -332,6 +335,31 @@ def gengrid_clicked(obj): tb.pack(bt, 4, 5, 1, 1) bt.show() + # search_by_text_item_get + def search_cb(en, gg): + flags = ELM_GLOB_MATCH_NOCASE + from_item = gg.selected_item.next if gg.selected_item else None + + item = gg.search_by_text_item_get(from_item, "elm.text", en.text, flags) + if item: + item.selected = True + en.focus = True + elif gg.selected_item: + gg.selected_item.selected = False + + lb = Label(win, text="Search:") + tb.pack(lb, 2, 6, 1, 1) + lb.show() + + en = Entry(win, single_line=True, scrollable=True, + size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ) + en.part_text_set("guide", "Type the search query") + en.callback_activated_add(search_cb, gg) + tb.pack(en, 3, 6, 3, 1) + en.show() + en.focus = True + + print(gg) win.show() --
