From 9bac55c4cea19bd50751d63c07156dbb7d55afba Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 4 Feb 2017 12:17:41 +0100 Subject: [PATCH] Added field selection to search --- glade/mainWindow.glade | 78 +++++++++++++++++++++++++++++++++++++++++- src/mainwindow.c | 51 ++++++++++++++++++++++----- src/mainwindow.h | 6 ++++ 3 files changed, 126 insertions(+), 9 deletions(-) diff --git a/glade/mainWindow.glade b/glade/mainWindow.glade index f750c18..cfc1fff 100644 --- a/glade/mainWindow.glade +++ b/glade/mainWindow.glade @@ -41,6 +41,82 @@ 0 + + + True + False + + + True + False + search in: + + + False + True + 0 + + + + + Title + True + True + False + True + + + False + True + 1 + + + + + Tags + True + True + False + True + + + False + True + 2 + + + + + Text + True + True + False + True + + + False + True + 3 + + + + + False + True + 1 + + + + + True + False + + + False + True + 2 + + True @@ -88,7 +164,7 @@ False True - 1 + 3 diff --git a/src/mainwindow.c b/src/mainwindow.c index ce84569..442b22b 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -194,21 +194,29 @@ static gboolean mainWindow_list_entry_visible(GtkTreeModel *model, GtkTreeIter * /* Check text search */ searchString = (gchar *)gtk_entry_get_text(GTK_ENTRY(mainWindow->searchEntry)); - if (searchString[0] != 0) { + if (searchString[0] != 0 && ( + mainWindow->filterSettings.search_title || + mainWindow->filterSettings.search_tags || + mainWindow->filterSettings.search_text)) { regex = g_regex_new(searchString, G_REGEX_CASELESS, 0, NULL); gtk_tree_model_get(model, iter, COL_TITLE, &temp, -1); - if (g_regex_match(regex, temp, 0, &match_info) && g_match_info_matches(match_info)) - search_matched = 1; - g_free(temp); - - gtk_tree_model_get(model, iter, COL_TEXT, &temp, -1); - if (!search_matched && g_regex_match(regex, temp, 0, &match_info) && g_match_info_matches(match_info)) + if (mainWindow->filterSettings.search_title && + g_regex_match(regex, temp, 0, &match_info) && g_match_info_matches(match_info)) search_matched = 1; g_free(temp); gtk_tree_model_get(model, iter, COL_TAGS_TEXT, &temp, -1); - if (!search_matched && g_regex_match(regex, temp, 0, &match_info) && g_match_info_matches(match_info)) + if (!search_matched && + mainWindow->filterSettings.search_tags && + g_regex_match(regex, temp, 0, &match_info) && g_match_info_matches(match_info)) + search_matched = 1; + g_free(temp); + + gtk_tree_model_get(model, iter, COL_TEXT, &temp, -1); + if (!search_matched && + mainWindow->filterSettings.search_text && + g_regex_match(regex, temp, 0, &match_info) && g_match_info_matches(match_info)) search_matched = 1; g_free(temp); @@ -390,6 +398,19 @@ static void mainWindow_connect_signals(struct mainWindow *mainWindow) "changed", (GCallback) mainWindow_filterChanged, mainWindow); + + g_signal_connect(mainWindow->checkSearchTitle, + "toggled", + (GCallback) mainWindow_filterChanged, + mainWindow); + g_signal_connect(mainWindow->checkSearchTags, + "toggled", + (GCallback) mainWindow_filterChanged, + mainWindow); + g_signal_connect(mainWindow->checkSearchText, + "toggled", + (GCallback) mainWindow_filterChanged, + mainWindow); } /** @@ -412,6 +433,9 @@ struct mainWindow *mainWindow_new() mainWindow->entryText = GTK_WIDGET(gtk_builder_get_object(builder, "entryText")); mainWindow->popoverDate = GTK_WIDGET(gtk_builder_get_object(builder, "popoverDate")); mainWindow->calendarRange = GTK_WIDGET(gtk_builder_get_object(builder, "calendarRange")); + mainWindow->checkSearchTitle = GTK_WIDGET(gtk_builder_get_object(builder, "checkSearchTitle")); + mainWindow->checkSearchTags = GTK_WIDGET(gtk_builder_get_object(builder, "checkSearchTags")); + mainWindow->checkSearchText = GTK_WIDGET(gtk_builder_get_object(builder, "checkSearchText")); mainWindow->entryListView = GTK_TREE_VIEW(gtk_builder_get_object(builder, "entryListView")); mainWindow->entryListSelection = GTK_TREE_SELECTION(gtk_builder_get_object(builder, "entryListSelection")); mainWindow->textBuffer = GTK_TEXT_BUFFER(gtk_builder_get_object(builder, "entryTextBuffer")); @@ -426,6 +450,10 @@ struct mainWindow *mainWindow_new() mainWindow_configure_treeView(mainWindow); mainWindow_connect_signals(mainWindow); + gtk_toggle_button_set_active(mainWindow->checkSearchTitle, 1); + gtk_toggle_button_set_active(mainWindow->checkSearchTags, 1); + gtk_toggle_button_set_active(mainWindow->checkSearchText, 0); + /** * These need to be set to oldest and newest after indexing date */ @@ -548,6 +576,13 @@ void mainWindow_filterChanged(GtkWidget *widget, gpointer user_data) } } + mainWindow->filterSettings.search_title = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( + mainWindow->checkSearchTitle)); + mainWindow->filterSettings.search_tags = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( + mainWindow->checkSearchTags)); + mainWindow->filterSettings.search_text = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( + mainWindow->checkSearchText)); + gtk_tree_model_filter_refilter(mainWindow->entryListFiltered); } diff --git a/src/mainwindow.h b/src/mainwindow.h index c7b6982..d7ebed0 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -13,6 +13,9 @@ struct mainWindow { GtkWidget *entryText; GtkWidget *popoverDate; GtkWidget *calendarRange; + GtkWidget *checkSearchTitle; + GtkWidget *checkSearchTags; + GtkWidget *checkSearchText; GtkTreeView *entryListView; GtkTreeSelection *entryListSelection; GtkTextBuffer *textBuffer; @@ -24,6 +27,9 @@ struct mainWindow { struct filterSettings { guint time_start; guint time_end; + gboolean search_title; + gboolean search_tags; + gboolean search_text; } filterSettings; };