From 24926636e65df9318a9e688f885b34fccdb77cd6 Mon Sep 17 00:00:00 2001 From: Michael Zucci Date: Mon, 9 Oct 2000 22:54:21 +0000 Subject: Oops, forgot these files last night. svn path=/trunk/; revision=5804 --- mail/mail-search-dialogue.c | 160 ++++++++++++++++++++++++++++++++++++++++++++ mail/mail-search-dialogue.h | 61 +++++++++++++++++ 2 files changed, 221 insertions(+) create mode 100644 mail/mail-search-dialogue.c create mode 100644 mail/mail-search-dialogue.h (limited to 'mail') 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 + * + * 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 +#include + +#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; +} diff --git a/mail/mail-search-dialogue.h b/mail/mail-search-dialogue.h new file mode 100644 index 0000000000..f952bebaf6 --- /dev/null +++ b/mail/mail-search-dialogue.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2000 Helix Code Inc. + * + * Authors: Not Zed + * + * 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. + */ + +#ifndef _MAIL_SEARCH_DIALOGUE_H +#define _MAIL_SEARCH_DIALOGUE_H + +#include +#include + +#include "filter/rule-context.h" +#include "filter/filter-rule.h" + +#define MAIL_SEARCH_DIALOGUE(obj) GTK_CHECK_CAST (obj, mail_search_dialogue_get_type (), MailSearchDialogue) +#define MAIL_SEARCH_DIALOGUE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, mail_search_dialogue_get_type (), MailSearchDialogueClass) +#define IS_MAIL_SEARCH_DIALOGUE(obj) GTK_CHECK_TYPE (obj, mail_search_dialogue_get_type ()) + +typedef struct _MailSearchDialogue MailSearchDialogue; +typedef struct _MailSearchDialogueClass MailSearchDialogueClass; + +struct _MailSearchDialogue { + GnomeDialog parent; + + RuleContext *context; + FilterRule *rule; + GtkWidget *guts; +}; + +struct _MailSearchDialogueClass { + GnomeDialogClass parent_class; + + /* virtual methods */ + + /* signals */ +}; + +guint mail_search_dialogue_get_type (void); +MailSearchDialogue *mail_search_dialogue_new (void); +MailSearchDialogue *mail_search_dialogue_new_with_rule(FilterRule *rule); + +/* methods */ +char *mail_search_dialogue_get_query(MailSearchDialogue *msd); + +#endif /* ! _MAIL_SEARCH_DIALOGUE_H */ + -- cgit v1.2.3