aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-search-dialogue.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-search-dialogue.c')
-rw-r--r--mail/mail-search-dialogue.c160
1 files changed, 160 insertions, 0 deletions
diff --git a/mail/mail-search-dialogue.c b/mail/mail-search-dialogue.c
new file mode 100644
index 0000000000..b336ac753e
--- /dev/null
+++ b/mail/mail-search-dialogue.c
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2000 Helix Code Inc.
+ *
+ * Authors: Not Zed <notzed@lostzed.mmc.com.au>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public License
+ * as published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <gtk/gtk.h>
+#include <gnome.h>
+
+#include "mail-search-dialogue.h"
+
+static void mail_search_dialogue_class_init (MailSearchDialogueClass *class);
+static void mail_search_dialogue_init (MailSearchDialogue *gspaper);
+static void mail_search_dialogue_finalise (GtkObject *obj);
+
+static GnomeDialogClass *parent_class;
+
+guint
+mail_search_dialogue_get_type (void)
+{
+ static guint type = 0;
+
+ if (!type) {
+ GtkTypeInfo type_info = {
+ "MailSearchDialogue",
+ sizeof(MailSearchDialogue),
+ sizeof(MailSearchDialogueClass),
+ (GtkClassInitFunc)mail_search_dialogue_class_init,
+ (GtkObjectInitFunc)mail_search_dialogue_init,
+ (GtkArgSetFunc)NULL,
+ (GtkArgGetFunc)NULL
+ };
+
+ type = gtk_type_unique(gnome_dialog_get_type (), &type_info);
+ }
+
+ return type;
+}
+
+static void
+mail_search_dialogue_class_init (MailSearchDialogueClass *class)
+{
+ GtkObjectClass *object_class;
+
+ object_class = (GtkObjectClass *)class;
+ parent_class = gtk_type_class(gnome_dialog_get_type ());
+
+ object_class->finalize = mail_search_dialogue_finalise;
+ /* override methods */
+
+}
+
+static void
+mail_search_dialogue_construct (MailSearchDialogue *o, FilterRule *rule)
+{
+ FilterPart *part;
+ GnomeDialog *dialogue = GNOME_DIALOG(o);
+
+ o->context = rule_context_new();
+ rule_context_add_part_set(o->context, "partset", filter_part_get_type(),
+ rule_context_add_part, rule_context_next_part);
+ rule_context_load(o->context, EVOLUTION_DATADIR "/evolution/vfoldertypes.xml", "");
+ if (rule) {
+ o->rule = rule;
+ o->guts = filter_rule_get_widget(o->rule, o->context);
+ } else {
+ o->rule = filter_rule_new();
+ part = rule_context_next_part(o->context, NULL);
+ if (part == NULL) {
+ g_warning("Problem loading search: no parts to load");
+ o->guts = gtk_entry_new();
+ } else {
+ filter_rule_add_part(o->rule, filter_part_clone(part));
+ o->guts = filter_rule_get_widget(o->rule, o->context);
+ }
+ }
+
+ gtk_widget_show(o->guts);
+ gtk_box_pack_start(GTK_BOX(dialogue->vbox), o->guts, FALSE, FALSE, 0);
+}
+
+static void
+mail_search_dialogue_init (MailSearchDialogue *o)
+{
+ GnomeDialog *dialogue = GNOME_DIALOG(o);
+
+ gnome_dialog_append_buttons(dialogue, _("Ok"), _("Search"), _("Cancel"), 0);
+}
+
+
+static void
+mail_search_dialogue_finalise(GtkObject *obj)
+{
+ MailSearchDialogue *o = (MailSearchDialogue *)obj;
+
+ if (o->context)
+ gtk_object_unref((GtkObject *)o->context);
+ if (o->rule)
+ gtk_object_unref((GtkObject *)o->rule);
+
+ ((GtkObjectClass *)(parent_class))->finalize(obj);
+}
+
+/**
+ * mail_search_dialogue_new:
+ *
+ * Create a new MailSearchDialogue object.
+ *
+ * Return value: A new #MailSearchDialogue object.
+ **/
+MailSearchDialogue *
+mail_search_dialogue_new(void)
+{
+ MailSearchDialogue *o = (MailSearchDialogue *)gtk_type_new(mail_search_dialogue_get_type ());
+ mail_search_dialogue_construct(o, NULL);
+ return o;
+}
+
+MailSearchDialogue *mail_search_dialogue_new_with_rule(FilterRule *rule)
+{
+ MailSearchDialogue *o = (MailSearchDialogue *)gtk_type_new(mail_search_dialogue_get_type ());
+ if (rule)
+ gtk_object_ref((GtkObject *)rule);
+ mail_search_dialogue_construct(o, rule);
+ return o;
+}
+
+/**
+ * mail_search_dialogue_get_query:
+ * @msd:
+ *
+ * Get the query string represting the current search criterea.
+ *
+ * Return value:
+ **/
+char *
+mail_search_dialogue_get_query(MailSearchDialogue *msd)
+{
+ GString *out = g_string_new("");
+ char *ret;
+
+ filter_rule_build_code(msd->rule, out);
+ ret = out->str;
+ g_string_free(out, FALSE);
+ return ret;
+}