rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=7bea813c31d9840be6eee9ce9ff15eb54403a5c0
commit 7bea813c31d9840be6eee9ce9ff15eb54403a5c0 Author: Mykola Solyanko <m.solya...@samsung.com> Date: Fri Dec 4 13:55:41 2015 +0200 style_editor: add search by text in the list of styles --- src/bin/ui/editors/style_editor.c | 133 +++++++++++++++++++++++++++++++++++--- 1 file changed, 124 insertions(+), 9 deletions(-) diff --git a/src/bin/ui/editors/style_editor.c b/src/bin/ui/editors/style_editor.c index 5bd99b6..fdff08b 100644 --- a/src/bin/ui/editors/style_editor.c +++ b/src/bin/ui/editors/style_editor.c @@ -542,7 +542,107 @@ _on_bt_add(void *data, else _on_bt_tag_add(style_edit); } -ITEM_SEARCH_FUNC(genlist,ELM_GENLIST_ITEM_SCROLLTO_MIDDLE, "elm.text") +static Eina_Bool +_search_tag_item_node(Evas_Object *obj, + Elm_Genlist_Item* item_start, + Search_Data *search_data, + Eina_Stringshare *str) +{ + Eina_List *tags, *l_tg; + char *tag; + Eina_Bool find_tag_item = EINA_FALSE; + + if ((!elm_genlist_item_parent_get(item_start)) && (!elm_genlist_item_expanded_get(item_start))) + { + const char *name = elm_object_item_data_get(item_start); + + tags = edje_edit_style_tags_list_get(ap.project->global_object, name); + + EINA_LIST_FOREACH(tags, l_tg, tag) + { + if (strstr(tag, str)) + { + elm_genlist_item_expanded_set(item_start, true); + search_data->last_item_found = elm_genlist_search_by_text_item_get(obj, item_start, + "elm.text", tag, 0); + elm_genlist_item_selected_set(search_data->last_item_found, true); + elm_genlist_item_bring_in(search_data->last_item_found, ELM_GENLIST_ITEM_SCROLLTO_TOP); + elm_object_focus_set(search_data->search_entry, true); + find_tag_item = EINA_TRUE; + break; + } + } + eina_list_free(tags); + } + + return find_tag_item; +} + +static Eina_Bool +_search_item_genlist_tree(Evas_Object *obj, + Elm_Genlist_Item* item, + Search_Data *search_data, + Eina_Stringshare *str) +{ + const char *text_item = elm_object_item_data_get(item); + if (strstr(text_item, str)) + { + elm_genlist_item_selected_set(item, true); + elm_genlist_item_bring_in(item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE); + elm_object_focus_set(search_data->search_entry, true); + + search_data->last_item_found = item; + return EINA_TRUE; + } + else + { + if (_search_tag_item_node(obj, item, search_data, str)) + return EINA_TRUE; + } + return EINA_FALSE; +} +static void +_genlist_item_search_first_search(Evas_Object *obj, + Search_Data *search_data, + Eina_Stringshare *str) +{ + Elm_Genlist_Item* item = elm_genlist_first_item_get(obj); + if (!item) return; + + elm_genlist_item_bring_in(item, ELM_GENLIST_ITEM_SCROLLTO_TOP); + + search_data->last_item_found = NULL; + + for(; item; item = elm_genlist_item_next_get(item)) + { + if (_search_item_genlist_tree(obj, item, search_data, str)) + return; + } + + search_data->last_item_found = NULL; +} + +static void +_genlist_item_search_next_search(Evas_Object *obj, + Search_Data *search_data, + Eina_Stringshare *str) +{ + Elm_Genlist_Item* item = NULL; + + if (_search_tag_item_node(obj, search_data->last_item_found, search_data, str)) + return; + + if (search_data->last_item_found == elm_genlist_last_item_get(obj)) + return; + + for (item = elm_genlist_item_next_get(search_data->last_item_found); item; item = elm_genlist_item_next_get(item)) + { + if (_search_item_genlist_tree(obj, item, search_data, str)) + return; + } + + search_data->last_item_found = NULL; +} static void _search_changed(void *data, @@ -552,9 +652,25 @@ _search_changed(void *data, Style_Editor *style_edit = data; assert(style_edit != NULL); + if (elm_entry_is_empty(style_edit->style_search_data.search_entry)) + { + if (style_edit->style_search_data.last_item_found) + { + elm_genlist_item_selected_set(style_edit->style_search_data.last_item_found, false); + style_edit->style_search_data.last_item_found = NULL; + } + elm_genlist_item_bring_in(elm_genlist_first_item_get(style_edit->glist), + ELM_GENLIST_ITEM_SCROLLTO_TOP); + return; + } + + Eina_Stringshare *str = eina_stringshare_printf("%s", + elm_entry_entry_get(style_edit->style_search_data.search_entry)); + + _genlist_item_search_first_search(style_edit->glist, &(style_edit->style_search_data), str); + + eina_stringshare_del(str); - _genlist_item_search(style_edit->glist, &(style_edit->style_search_data), - style_edit->style_search_data.last_item_found); } static void @@ -563,17 +679,17 @@ _search_nxt_gd_item(void *data, void *event_info __UNUSED__) { Style_Editor *style_edit = data; - Elm_Object_Item *start_from = NULL; assert(style_edit != NULL); - if (style_edit->style_search_data.last_item_found) { - start_from = - elm_genlist_item_next_get(style_edit->style_search_data.last_item_found); + Eina_Stringshare *str = eina_stringshare_printf("%s", + elm_entry_entry_get(style_edit->style_search_data.search_entry)); + + _genlist_item_search_next_search(style_edit->glist, &(style_edit->style_search_data), str); + eina_stringshare_del(str); } - _genlist_item_search(style_edit->glist, &(style_edit->style_search_data), start_from); } static void @@ -584,7 +700,6 @@ _search_reset_cb(void *data, Search_Data *search_data = data; assert(search_data != NULL); - search_data->last_item_found = NULL; } --