This is an automated email from the git hooks/post-receive script.

git pushed a commit to reference refs/pull/71/head
in repository enlightenment.

View the commit online.

commit c444b230ccef37a9ee61de3a570341d1d763c173
Author: dimmus <dmitri.chudi...@gmail.com>
AuthorDate: Tue Jun 4 18:31:33 2024 +0500

    tools: paledit - add search entry
    
    @feature
---
 .gitignore                       |  3 ++
 src/bin/tools/paledit/main.c     |  2 +-
 src/bin/tools/paledit/main.h     |  2 +-
 src/bin/tools/paledit/palcols.c  | 80 ++++++++++++++++++++++++++++++++++------
 src/bin/tools/paledit/undoredo.c | 12 +++---
 5 files changed, 79 insertions(+), 20 deletions(-)

diff --git a/.gitignore b/.gitignore
index 02ad6038e..528fd5c33 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,6 @@
 Session.vim
 /build
 *~
+
+*.json
+*.patch
diff --git a/src/bin/tools/paledit/main.c b/src/bin/tools/paledit/main.c
index 383b05dd9..ffee8ecc4 100644
--- a/src/bin/tools/paledit/main.c
+++ b/src/bin/tools/paledit/main.c
@@ -21,7 +21,7 @@ pal_load(Evas_Object *win)
    if (!pal) return;
    undoredo_reset(win);
    evas_object_data_set(win, "pal", pal);
-   palcols_fill(win);
+   palcols_fill(win, NULL);
    palimg_update(evas_object_data_get(win, "pal_image"), pal);
    elm_object_text_set(evas_object_data_get(win, "pal_name"), palname);
    pal_save(win);
diff --git a/src/bin/tools/paledit/main.h b/src/bin/tools/paledit/main.h
index 1b0d98b87..1ff934134 100644
--- a/src/bin/tools/paledit/main.h
+++ b/src/bin/tools/paledit/main.h
@@ -8,7 +8,7 @@ Evas_Object *palimg_add(Evas_Object *win);
 
 Evas_Object *palsel_add(Evas_Object *win);
 
-void         palcols_fill(Evas_Object *win);
+void         palcols_fill(Evas_Object *win, const char *filter_str);
 Evas_Object *palcols_add(Evas_Object *win);
 
 void         colsel_update(Evas_Object *win);
diff --git a/src/bin/tools/paledit/palcols.c b/src/bin/tools/paledit/palcols.c
index 93bcf1e79..6f5ba20f5 100644
--- a/src/bin/tools/paledit/palcols.c
+++ b/src/bin/tools/paledit/palcols.c
@@ -1,5 +1,12 @@
 #include "main.h"
 
+typedef struct _Search_Event_Data Search_Event_Data;
+struct _Search_Event_Data
+{
+   Evas_Object *en_obj;
+   Evas_Object *win_obj;
+};
+
 static void _pal_color_add(Evas_Object *win);
 static void _pal_color_del(Evas_Object *win);
 
@@ -174,7 +181,7 @@ _pal_color_del(Evas_Object *win)
 }
 
 void
-palcols_fill(Evas_Object *win)
+palcols_fill(Evas_Object *win, const char *filter_str)
 {
    Elm_Object_Item *sel_it = NULL;
    Elm_Palette *pal = evas_object_data_get(win, "pal");
@@ -198,17 +205,23 @@ palcols_fill(Evas_Object *win)
 
    EINA_LIST_FOREACH(pal->colors, l, col)
      {
-        it = elm_genlist_item_sorted_insert(list, itc, col,
-                                            NULL, ELM_GENLIST_ITEM_NONE,
-                                            _cb_class_insert_cmp,
-                                            _cb_class_gl_sel, win);
-        if (!sel_it) sel_it = it;
+      if (filter_str && !strcasestr(col->name, filter_str))
+         continue;
+      it = elm_genlist_item_sorted_insert(list, itc, col,
+                                          NULL, ELM_GENLIST_ITEM_NONE,
+                                          _cb_class_insert_cmp,
+                                          _cb_class_gl_sel, win);
+      /* XXX: We found exact item, so focus it. 
+       * But not shure that it's usefull, may be even annoying.
+       * It throught errors when you filter from exact to exact imidiately:
+       * Ex.: enter ':bg-dim', then select '-dim' part and delete it. 
+       * You get exact ':bg' and focus_manager error in stdout ;( */
+      if (!sel_it && filter_str && !strcasecmp(col->name, filter_str)) 
+         sel_it = it;
      }
+   
    if (sel_it)
-     {
-        elm_genlist_item_show(sel_it, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
-        elm_genlist_item_selected_set(sel_it, EINA_TRUE);
-     }
+      elm_genlist_item_selected_set(sel_it, EINA_TRUE);
 }
 
 static void
@@ -518,10 +531,29 @@ _cb_modify_click(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA
    evas_object_show(o);
 }
 
+static void
+_search_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+   free(data);
+}
+
+static void 
+_search_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+   Search_Event_Data * event_data = (Search_Event_Data *)data;
+
+   const char *str = elm_entry_entry_get(event_data->en_obj);
+   if (!str || !strlen(str)) str = NULL;
+
+   palcols_fill(event_data->win_obj, str);
+}
+
 Evas_Object *
 palcols_add(Evas_Object *win)
 {
-   Evas_Object *o, *bxl, *btn, *bxh;
+   Evas_Object *o, *bxl, *btn, *bxh, *bx_entry;
+   Search_Event_Data* event_data = NULL;
+   Evas_Object *gl, *en;
 
    bxl = o = elm_box_add(win);
    elm_box_padding_set(o, 0, ELM_SCALE_SIZE(10));
@@ -594,7 +626,24 @@ palcols_add(Evas_Object *win)
    elm_object_content_set(btn, o);
    evas_object_show(o);
 
-   o = elm_genlist_add(win);
+   bx_entry = elm_box_add(win);
+   elm_box_horizontal_set(bx_entry, EINA_TRUE);
+   evas_object_size_hint_weight_set(bx_entry, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(bx_entry, EVAS_HINT_FILL, 0.0);
+   elm_box_pack_end(bxl, bx_entry);
+   evas_object_show(bx_entry);
+
+   en = o = elm_entry_add(win);
+   elm_entry_single_line_set(o, EINA_TRUE);
+   elm_entry_scrollable_set(o, EINA_TRUE);
+   elm_object_part_text_set(o, "guide", "Type item's name here to search.");
+   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx_entry, o);
+   evas_object_show(o);
+   elm_object_focus_set(o, EINA_TRUE);
+
+   gl = o = elm_genlist_add(win);
    evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
    elm_box_pack_end(bxl, o);
@@ -618,5 +667,12 @@ palcols_add(Evas_Object *win)
 
    _pal_hover_add(win, btn);
 
+   event_data = calloc(1, sizeof(Search_Event_Data));
+   event_data->en_obj = en;
+   event_data->win_obj = win;
+
+   evas_object_smart_callback_add(en, "changed,user", _search_changed_cb, (void*)event_data);  
+   evas_object_event_callback_add(gl, EVAS_CALLBACK_FREE, _search_del_cb, (void*)event_data);
+
    return bxl;
 }
diff --git a/src/bin/tools/paledit/undoredo.c b/src/bin/tools/paledit/undoredo.c
index 4ef1f5ed7..41173abee 100644
--- a/src/bin/tools/paledit/undoredo.c
+++ b/src/bin/tools/paledit/undoredo.c
@@ -111,17 +111,17 @@ _undo_apply(Evas_Object *win, Entry *en)
       case ENTRY_CHANGE:
         elm_config_palette_color_set(pal, en->name,
                                      en->r2, en->g2, en->b2, en->a2);
-        palcols_fill(win);
+        palcols_fill(win, NULL);
         // XXX: update colorsel
         break;
       case ENTRY_ADD:
         elm_config_palette_color_unset(pal, en->name);
-        palcols_fill(win);
+        palcols_fill(win, NULL);
         break;
       case ENTRY_DEL:
         elm_config_palette_color_set(pal, en->name,
                                      en->r, en->g, en->b, en->a);
-        palcols_fill(win);
+        palcols_fill(win, NULL);
         break;
       default:
         break;
@@ -140,17 +140,17 @@ _redo_apply(Evas_Object *win, Entry *en)
       case ENTRY_CHANGE:
         elm_config_palette_color_set(pal, en->name,
                                      en->r2, en->g2, en->b2, en->a2);
-        palcols_fill(win);
+        palcols_fill(win, NULL);
         // XXX: update colorsel
         break;
       case ENTRY_ADD:
         elm_config_palette_color_set(pal, en->name,
                                      en->r, en->g, en->b, en->a);
-        palcols_fill(win);
+        palcols_fill(win, NULL);
         break;
       case ENTRY_DEL:
         elm_config_palette_color_unset(pal, en->name);
-        palcols_fill(win);
+        palcols_fill(win, NULL);
         break;
       default:
         break;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to