/* 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 "gnunet-fs-gtk.h" #include #include "gnunet-fs-gtk-anonymity_spin_buttons.h" 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; }