>From f20677dfc6f83981917b04ffc434d6c78fcc1625 Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Tue, 25 Oct 2011 21:48:15 +0200 Subject: [PATCH] wizard: added search box to search through all the items in problem_data --- src/gui-wizard-gtk/wizard.c | 87 ++++++++++++++++++++++++++++++++++++++- src/gui-wizard-gtk/wizard.glade | 46 ++++++++++++++++++++- 2 files changed, 130 insertions(+), 3 deletions(-) diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index 728b58d..65c42d4 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -105,12 +105,14 @@ enum DETAIL_COLUMN_CHECKBOX, DETAIL_COLUMN_NAME, DETAIL_COLUMN_VALUE, + DETAIL_COLUMN_COLOR, DETAIL_NUM_COLUMNS, }; /* Search in bt */ static guint g_timeout = 0; static GtkEntry *g_search_entry_bt; +static GtkEntry *g_search_entry_all; static GtkBuilder *builder; static PangoFontDescription *monospace_font; @@ -953,6 +955,10 @@ static event_gui_data_t *add_event_buttons(GtkBox *box, } return active_button; + + + + } struct cd_stats { @@ -2175,6 +2181,68 @@ static gboolean highlight_search(gpointer user_data) return false; } +static gboolean highlight_matched_rows(gpointer user_data) +{ + GtkEntry *entry = GTK_ENTRY(user_data); + bool something_to_search; + + GtkTreeIter tree_it; + something_to_search = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_ls_details), &tree_it); + + const gchar *search_str = gtk_entry_get_text(entry); + + VERB1 log("searching: %s", search_str); + + while(something_to_search) + { + //reset the color of each line + gtk_list_store_set(g_ls_details, &tree_it, + DETAIL_COLUMN_COLOR, "white", + -1); + gchar *item_name = NULL; + + //only search if we have at least one char + if (*search_str != '\0') + { + gtk_tree_model_get(GTK_TREE_MODEL(g_ls_details), &tree_it, + DETAIL_COLUMN_NAME, &item_name, + -1); + if (!item_name) /* paranoia, should never happen */ + return false; + struct problem_item *item = get_problem_data_item_or_NULL(g_cd, item_name); + if (item && (item->flags & CD_FLAG_ISEDITABLE)) + { + //if not multiline + if (!strchr(item->content, '\n')) + { + if(strcasestr(item->content, search_str) != NULL) + { + VERB1 log("found %s in\n>>>%s<<<\n", search_str, item_name); + gtk_list_store_set(g_ls_details, &tree_it, + DETAIL_COLUMN_COLOR, "red", + -1); + } + } + else + { + if(strcasestr(get_problem_item_content_or_NULL(g_cd, item_name), search_str) != NULL) + { + VERB1 log("found %s in\n>>>%s<<<\n", search_str, item_name); + gtk_list_store_set(g_ls_details, &tree_it, + DETAIL_COLUMN_COLOR, "red", + -1); + } + } + + } + } + something_to_search = gtk_tree_model_iter_next(GTK_TREE_MODEL(g_ls_details), &tree_it); + } + + /* returning false will make glib to remove this event */ + return false; +} + static void search_timeout(GtkEntry *entry) { /* this little hack makes the search start searching after 500 milisec after @@ -2187,6 +2255,18 @@ static void search_timeout(GtkEntry *entry) g_timeout = g_timeout_add(500, &highlight_search, (gpointer)entry); } +static void search_all_timeout(GtkEntry *entry) +{ + /* this little hack makes the search start searching after 500 milisec after + * user stops writing into entry box + * if this part is removed, then the search will be started on every + * change of the search entry + */ + if (g_timeout != 0) + g_source_remove(g_timeout); + g_timeout = g_timeout_add(500, &highlight_matched_rows, (gpointer)entry); +} + static void save_edited_one_liner(GtkCellRendererText *renderer, gchar *tree_path, gchar *new_text, @@ -2456,6 +2536,7 @@ static void add_pages() g_widget_warnings_area = GTK_WIDGET( gtk_builder_get_object(builder, "box_warning_area")); g_btn_refresh = GTK_BUTTON( gtk_builder_get_object(builder, "btn_refresh")); g_search_entry_bt = GTK_ENTRY( gtk_builder_get_object(builder, "entry_search_bt")); + g_search_entry_all = GTK_ENTRY( gtk_builder_get_object(builder, "entry_search_all")); g_container_details1 = GTK_CONTAINER( gtk_builder_get_object(builder, "container_details1")); g_container_details2 = GTK_CONTAINER( gtk_builder_get_object(builder, "container_details2")); g_btn_add_file = GTK_BUTTON( gtk_builder_get_object(builder, "btn_add_file")); @@ -2534,6 +2615,7 @@ static void create_details_treeview(void) _("Include"), renderer, /* which "attr" of renderer to set from which COLUMN? (can be repeated) */ "active", DETAIL_COLUMN_CHECKBOX, + "cell-background", DETAIL_COLUMN_COLOR, NULL); gtk_tree_view_append_column(g_tv_details, column); /* This column has a handler */ @@ -2543,6 +2625,7 @@ static void create_details_treeview(void) column = gtk_tree_view_column_new_with_attributes( _("Name"), renderer, "text", DETAIL_COLUMN_NAME, + "cell-background", DETAIL_COLUMN_COLOR, NULL); gtk_tree_view_append_column(g_tv_details, column); @@ -2551,6 +2634,7 @@ static void create_details_treeview(void) column = gtk_tree_view_column_new_with_attributes( _("Value"), renderer, "text", DETAIL_COLUMN_VALUE, + "cell-background", DETAIL_COLUMN_COLOR, NULL); gtk_tree_view_append_column(g_tv_details, column); @@ -2565,7 +2649,7 @@ static void create_details_treeview(void) gtk_tree_view_column_set_sort_column_id(column, DETAIL_COLUMN_NAME); - g_ls_details = gtk_list_store_new(DETAIL_NUM_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING); + g_ls_details = gtk_list_store_new(DETAIL_NUM_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model(g_tv_details, GTK_TREE_MODEL(g_ls_details)); g_signal_connect(g_tv_details, "row-activated", G_CALLBACK(tv_details_row_activated), NULL); @@ -2614,4 +2698,5 @@ void create_assistant(void) /* found items background */ gtk_text_buffer_create_tag(backtrace_buf, "search_result_bg", "background", "red", NULL); g_signal_connect(g_search_entry_bt, "changed", G_CALLBACK(search_timeout), NULL); + g_signal_connect(g_search_entry_all, "changed", G_CALLBACK(search_all_timeout), NULL); } diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade index be2c0d8..e09ca1e 100644 --- a/src/gui-wizard-gtk/wizard.glade +++ b/src/gui-wizard-gtk/wizard.glade @@ -56,6 +56,9 @@ True True + + + @@ -852,6 +855,45 @@ + + True + False + + + True + False + + + + + + True + True + 0 + + + + + True + True + + True + gtk-find + + + False + True + 1 + + + + + False + False + 3 + + + True False @@ -876,7 +918,7 @@ False True - 3 + 4 @@ -894,7 +936,7 @@ False True - 4 + 5 -- 1.7.7