From 1e14dc4228cbfdb63e7df3905031cd0c318372f6 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 1 Feb 2012 17:29:05 +0000 Subject: -moving code around --- src/fs/Makefile.am | 3 +- src/fs/gnunet-fs-gtk-main_window_namespace.c | 25 ----- src/fs/gnunet-fs-gtk-main_window_search.c | 137 +++++++++++++++++++++++++++ 3 files changed, 139 insertions(+), 26 deletions(-) create mode 100644 src/fs/gnunet-fs-gtk-main_window_search.c diff --git a/src/fs/Makefile.am b/src/fs/Makefile.am index 3db3ffed..6b699c2b 100644 --- a/src/fs/Makefile.am +++ b/src/fs/Makefile.am @@ -18,12 +18,13 @@ gnunet_fs_gtk_SOURCES = \ gnunet-fs-gtk-anonymity_spin_buttons.c gnunet-fs-gtk-anonymity_spin_buttons.h \ gnunet-fs-gtk-main_window_meta_data_context_menu.c \ gnunet-fs-gtk.c gnunet-fs-gtk.h \ + gnunet-fs-gtk-main_window_adv_pseudonym.c \ gnunet-fs-gtk-main_window_create_pseudonym.c \ gnunet-fs-gtk-main_window_file_download.c \ gnunet-fs-gtk-main_window_file_publish.c \ gnunet-fs-gtk-main_window_namespace.c \ + gnunet-fs-gtk-main_window_search.c \ gnunet-fs-gtk-main_window_open_directory.c \ - gnunet-fs-gtk-main_window_adv_pseudonym.c \ gnunet-fs-gtk-main_window_view_toggles.c gnunet_fs_gtk_LDADD = \ $(top_builddir)/src/lib/libgnunetgtk.la \ diff --git a/src/fs/gnunet-fs-gtk-main_window_namespace.c b/src/fs/gnunet-fs-gtk-main_window_namespace.c index b2ca9b42..3af3845d 100644 --- a/src/fs/gnunet-fs-gtk-main_window_namespace.c +++ b/src/fs/gnunet-fs-gtk-main_window_namespace.c @@ -134,31 +134,6 @@ namespace_selector_window_leave_notify_event_cb (GtkWidget * widget, } -static gboolean -GNUNET_GTK_get_tree_string (GtkTreeView * treeview, GtkTreePath * treepath, - guint column, gchar ** value) -{ - gboolean ok; - GtkTreeModel *model; - - model = gtk_tree_view_get_model (treeview); - if (!model) - return FALSE; - - GtkTreeIter iter; - - ok = gtk_tree_model_get_iter (model, &iter, treepath); - if (!ok) - return FALSE; - - *value = NULL; - gtk_tree_model_get (model, &iter, column, value, -1); - if (*value == NULL) - return FALSE; - return TRUE; -} - - gboolean get_selected_namespace_treepath_iter_model_widget (GtkBuilder * builder, diff --git a/src/fs/gnunet-fs-gtk-main_window_search.c b/src/fs/gnunet-fs-gtk-main_window_search.c new file mode 100644 index 00000000..870b5f18 --- /dev/null +++ b/src/fs/gnunet-fs-gtk-main_window_search.c @@ -0,0 +1,137 @@ +/* + This file is part of GNUnet + (C) 2011, 2012 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 2, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +/** + * @file src/fs/gnunet-fs-gtk-main_window_search.c + * @author Christian Grothoff + * @brief event handlers for the search function in the main window + */ +#include "gnunet-fs-gtk-common.h" +#include + + + +void +main_window_search_button_clicked_cb (GtkButton * button, gpointer user_data) +{ + GtkBuilder *builder; + GtkTreePath *namespace_treepath = NULL; + GtkTreeModel *namespace_model = NULL; + GtkComboBox *mime_combo; + GtkTreeModel *mime_model; + GtkEntry *query_entry; + guint anonymity_level; + GtkTreeRowReference *ref = NULL; + GtkTreeIter iter; + GtkToggleButton *toggle_button; + const char *entry_keywords; + gchar *keywords; + gchar *mime_keyword; + + GNUNET_HashCode *nsid = NULL; + struct GNUNET_FS_Uri *uri; + char *emsg; + + builder = GTK_BUILDER (user_data); + + toggle_button = + GTK_TOGGLE_BUTTON (gtk_builder_get_object + (builder, + "main_window_search_namespace_dropdown_button")); + + if (!GNUNET_GTK_get_selected_anonymity_level + (builder, "main_window_search_anonymity_combobox", &anonymity_level)) + return; + + mime_combo = + GTK_COMBO_BOX (GNUNET_FS_GTK_get_main_window_object + ("main_window_search_mime_combobox")); + mime_model = gtk_combo_box_get_model (mime_combo); + mime_keyword = NULL; + if (mime_model && gtk_combo_box_get_active_iter (mime_combo, &iter)) + gtk_tree_model_get (mime_model, &iter, 0, &mime_keyword, -1); + if (strcmp (mime_keyword, " ") == 0) + { + g_free (mime_keyword); + mime_keyword = NULL; + } + + ref = g_object_get_data (G_OBJECT (toggle_button), "selected-row-reference"); + if (ref) + { + namespace_model = gtk_tree_row_reference_get_model (ref); + namespace_treepath = gtk_tree_row_reference_get_path (ref); + if ((NULL != namespace_treepath) && + (TRUE == + gtk_tree_model_get_iter (namespace_model, &iter, namespace_treepath))) + gtk_tree_model_get (namespace_model, &iter, 1, &nsid, -1); + } + query_entry = + GTK_ENTRY (gtk_builder_get_object (builder, "main_window_search_entry")); + entry_keywords = gtk_entry_get_text (query_entry); + keywords = + g_strdup_printf ("%s %s%s", entry_keywords, mime_keyword ? "+" : "", + mime_keyword ? mime_keyword : ""); + g_free (mime_keyword); + if (nsid != NULL) + { + uri = GNUNET_FS_uri_sks_create_from_nsid (nsid, keywords); + GNUNET_assert (uri != NULL); + } + else + { + emsg = NULL; + uri = GNUNET_FS_uri_ksk_create (keywords, &emsg); + if (uri == NULL) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Invalid keyword string `%s': %s"), + keywords, emsg); + GNUNET_free_non_null (emsg); + return; + } + } + GNUNET_FS_search_start (GNUNET_FS_GTK_get_fs_handle (), uri, anonymity_level, + GNUNET_FS_SEARCH_OPTION_NONE, NULL); + + g_free (keywords); + GNUNET_FS_uri_destroy (uri); +} + + +gboolean +main_window_search_entry_key_press_event_cb (GtkWidget * widget, + GdkEventKey * event, + gpointer user_data) +{ + GtkBuilder *builder; + + builder = GTK_BUILDER (user_data); + + if (event->keyval == GDK_KEY_Return) + { + GtkWidget *find = GTK_WIDGET (gtk_builder_get_object (builder, + "main_window_search_button")); + + main_window_search_button_clicked_cb (GTK_BUTTON (find), user_data); + return TRUE; + } + return FALSE; +} + -- cgit v1.2.3