diff options
-rw-r--r-- | mail/ChangeLog | 14 | ||||
-rw-r--r-- | mail/Makefile.am | 4 | ||||
-rw-r--r-- | mail/folder-browser.c | 6 | ||||
-rw-r--r-- | mail/mail-callbacks.c | 139 | ||||
-rw-r--r-- | mail/mail-callbacks.h | 4 | ||||
-rw-r--r-- | mail/message-tag-followup.c | 330 | ||||
-rw-r--r-- | mail/message-tag-followup.h | 99 | ||||
-rw-r--r-- | mail/message-tags.glade | 307 |
8 files changed, 892 insertions, 11 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index b6bf98a894..ea6260731e 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,19 @@ 2002-02-08 Jeffrey Stedfast <fejj@ximian.com> + * message-tag-followup.[c,h]: New flag-for-followup tag editor + dialog. + + * mail-callbacks.c (flag_for_followup): New callback that pops up + a flag-for-followup editor dialog. + (flag_followup_completed): Marks all flag-for-followup'd messages + as 'complete'. + (flag_followup_clear): Clears all flag-for-followup tags from the + selected messages. + + * message-tags.glade: glade file for tag editors. + +2002-02-08 Jeffrey Stedfast <fejj@ximian.com> + * message-tag-editor.[c,h]: Base class for a message tag editor. * folder-browser.c (on_right_click): Setup the hide/enable masks diff --git a/mail/Makefile.am b/mail/Makefile.am index ae237d2b90..cd4b6f29d2 100644 --- a/mail/Makefile.am +++ b/mail/Makefile.am @@ -108,6 +108,8 @@ evolution_mail_SOURCES = \ message-list.h \ message-tag-editor.c \ message-tag-editor.h \ + message-tag-followup.c \ + message-tag-followup.h \ subscribe-dialog.c \ subscribe-dialog.h \ mail.h @@ -137,7 +139,7 @@ oaf_DATA = $(oaf_in_files:.oaf.in=.oaf) @XML_I18N_MERGE_OAF_RULE@ gladedir = $(datadir)/evolution/glade -glade_DATA = mail-config.glade local-config.glade subscribe-dialog.glade +glade_DATA = mail-config.glade local-config.glade subscribe-dialog.glade message-tags.glade etspecdir = $(datadir)/evolution/etspec/ etspec_DATA = message-list.etspec subscribe-dialog.etspec diff --git a/mail/folder-browser.c b/mail/folder-browser.c index a2ca2b2a0b..d0d9887e7b 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -1471,9 +1471,9 @@ static EPopupMenu context_menu[] = { E_POPUP_SEPARATOR, - { N_("Flag for Follow-up"), NULL, GTK_SIGNAL_FUNC (flag_for_followup),NULL, CAN_FLAG_FOR_FOLLOWUP }, - { N_("Flag Completed"), NULL, GTK_SIGNAL_FUNC (flag_completed), NULL, CAN_FLAG_COMPLETED }, - { N_("Clear Flag"), NULL, GTK_SIGNAL_FUNC (flag_clear), NULL, CAN_FLAG_COMPLETED }, + { N_("Flag for Follow-up"), NULL, GTK_SIGNAL_FUNC (flag_for_followup), NULL, CAN_FLAG_FOR_FOLLOWUP }, + { N_("Flag Completed"), NULL, GTK_SIGNAL_FUNC (flag_followup_completed), NULL, CAN_FLAG_COMPLETED }, + { N_("Clear Flag"), NULL, GTK_SIGNAL_FUNC (flag_followup_clear), NULL, CAN_FLAG_COMPLETED }, /* separator here? */ diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index 2dcbec039c..d636778a04 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -58,6 +58,8 @@ #include "mail-folder-cache.h" #include "folder-browser.h" #include "subscribe-dialog.h" +#include "message-tag-editor.h" +#include "message-tag-followup.h" #include "e-messagebox.h" #include "Evolution.h" @@ -1807,22 +1809,149 @@ toggle_as_important (BonoboUIComponent *uih, void *user_data, const char *path) toggle_flags (FOLDER_BROWSER (user_data), CAMEL_MESSAGE_FLAGGED); } + +struct _tag_editor_data { + MessageTagEditor *editor; + FolderBrowser *fb; + GPtrArray *uids; +}; + +static void +tag_editor_ok (GtkWidget *button, gpointer user_data) +{ + struct _tag_editor_data *data = user_data; + const char *name, *value; + int i; + + if (FOLDER_BROWSER_IS_DESTROYED (data->fb)) + goto done; + + name = message_tag_editor_get_name (data->editor); + if (!name) + goto done; + + value = message_tag_editor_get_value (data->editor); + + camel_folder_freeze (data->fb->folder); + for (i = 0; i < data->uids->len; i++) { + camel_folder_set_message_user_tag (data->fb->folder, data->uids->pdata[i], name, value); + } + camel_folder_thaw (data->fb->folder); + + done: + gtk_widget_destroy (GTK_WIDGET (data->editor)); +} + +static void +tag_editor_cancel (GtkWidget *button, gpointer user_data) +{ + struct _tag_editor_data *data = user_data; + + gtk_widget_destroy (GTK_WIDGET (data->editor)); +} + +static void +tag_editor_destroy (GnomeDialog *dialog, gpointer user_data) +{ + struct _tag_editor_data *data = user_data; + + gtk_object_unref (GTK_OBJECT (data->fb)); + g_ptr_array_free (data->uids, TRUE); + g_free (data); +} + void flag_for_followup (BonoboUIComponent *uih, void *user_data, const char *path) { - ; + FolderBrowser *fb = FOLDER_BROWSER (user_data); + struct _tag_editor_data *data; + GtkWidget *editor; + GPtrArray *uids; + + if (FOLDER_BROWSER_IS_DESTROYED (fb)) + return; + + uids = g_ptr_array_new (); + message_list_foreach (fb->message_list, enumerate_msg, uids); + + editor = (GtkWidget *) message_tag_followup_new (); + + data = g_new (struct _tag_editor_data, 1); + data->editor = MESSAGE_TAG_EDITOR (editor); + gtk_widget_ref (GTK_WIDGET (fb)); + data->fb = fb; + data->uids = uids; + + gnome_dialog_button_connect (GNOME_DIALOG (editor), 0, tag_editor_ok, data); + gnome_dialog_button_connect (GNOME_DIALOG (editor), 1, tag_editor_cancel, data); + gnome_dialog_set_close (GNOME_DIALOG (editor), TRUE); + + gtk_signal_connect (GTK_OBJECT (editor), "destroy", + tag_editor_destroy, data); + + gtk_widget_show (editor); } void -flag_completed (BonoboUIComponent *uih, void *user_data, const char *path) +flag_followup_completed (BonoboUIComponent *uih, void *user_data, const char *path) { - ; + FolderBrowser *fb = FOLDER_BROWSER (user_data); + GPtrArray *uids; + time_t now; + int i; + + if (FOLDER_BROWSER_IS_DESTROYED (fb)) + return; + + uids = g_ptr_array_new (); + message_list_foreach (fb->message_list, enumerate_msg, uids); + + now = time (NULL); + + camel_folder_freeze (fb->folder); + for (i = 0; i < uids->len; i++) { + struct _FollowUpTag *tag; + const char *tag_value; + char *value; + + tag_value = camel_folder_get_message_user_tag (fb->folder, uids->pdata[i], "follow-up"); + if (!tag_value) + continue; + + tag = message_tag_followup_decode (tag_value); + tag->completed = now; + + value = message_tag_followup_encode (tag); + g_free (tag); + + camel_folder_set_message_user_tag (fb->folder, uids->pdata[i], "follow-up", value); + g_free (value); + } + camel_folder_thaw (fb->folder); + + g_ptr_array_free (uids, TRUE); } void -flag_clear (BonoboUIComponent *uih, void *user_data, const char *path) +flag_followup_clear (BonoboUIComponent *uih, void *user_data, const char *path) { - ; + FolderBrowser *fb = FOLDER_BROWSER (user_data); + GPtrArray *uids; + int i; + + if (FOLDER_BROWSER_IS_DESTROYED (fb)) + return; + + uids = g_ptr_array_new (); + message_list_foreach (fb->message_list, enumerate_msg, uids); + + camel_folder_freeze (fb->folder); + for (i = 0; i < uids->len; i++) { + camel_folder_set_message_user_tag (fb->folder, uids->pdata[i], "follow-up", NULL); + } + camel_folder_thaw (fb->folder); + + g_ptr_array_free (uids, TRUE); } void diff --git a/mail/mail-callbacks.h b/mail/mail-callbacks.h index d4be330565..f50763b16d 100644 --- a/mail/mail-callbacks.h +++ b/mail/mail-callbacks.h @@ -97,8 +97,8 @@ void mark_as_important (BonoboUIComponent *uih, void *user_data, const c void mark_as_unimportant (BonoboUIComponent *uih, void *user_data, const char *path); void toggle_as_important (BonoboUIComponent *uih, void *user_data, const char *path); void flag_for_followup (BonoboUIComponent *uih, void *user_data, const char *path); -void flag_completed (BonoboUIComponent *uih, void *user_data, const char *path); -void flag_clear (BonoboUIComponent *uih, void *user_data, const char *path); +void flag_followup_completed (BonoboUIComponent *uih, void *user_data, const char *path); +void flag_followup_clear (BonoboUIComponent *uih, void *user_data, const char *path); void zoom_in (BonoboUIComponent *uih, void *user_data, const char *path); void zoom_out (BonoboUIComponent *uih, void *user_data, const char *path); diff --git a/mail/message-tag-followup.c b/mail/message-tag-followup.c new file mode 100644 index 0000000000..3465dd4e69 --- /dev/null +++ b/mail/message-tag-followup.c @@ -0,0 +1,330 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast <fejj@ximian.com> + * + * Copyright 2002 Ximain, Inc. (www.ximian.com) + * + * This program 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 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <glade/glade.h> + +#include "message-tag-followup.h" + +static void message_tag_followup_class_init (MessageTagFollowUpClass *class); +static void message_tag_followup_init (MessageTagFollowUp *followup); +static void message_tag_followup_finalise (GtkObject *obj); + +static const char *tag_get_name (MessageTagEditor *editor); +static const char *tag_get_value (MessageTagEditor *editor); +static void tag_set_value (MessageTagEditor *editor, const char *value); + + +static struct { + const char *i18n_name; + const char *name; + int value; +} available_flags[] = { + { N_("Call"), "call", FLAG_CALL }, + { N_("Do Not Forward"), "do-not-forward", FLAG_DO_NOT_FORWARD }, + { N_("Follow-Up"), "follow-up", FLAG_FOLLOWUP }, + { N_("For Your Information"), "fyi", FLAG_FYI }, + { N_("Forward"), "forward", FLAG_FORWARD }, + { N_("No Response Necessary"), "no-response", FLAG_NO_RESPONSE_NECESSARY }, + { N_("Read"), "read", FLAG_READ }, + { N_("Reply"), "reply", FLAG_REPLY }, + { N_("Reply to All"), "reply-all", FLAG_REPLY_ALL }, + { N_("Review"), "review", FLAG_REVIEW }, + { N_("None"), NULL, FLAG_NONE } +}; + +static MessageTagEditorClass *parent_class; + +GtkType +message_tag_followup_get_type (void) +{ + static GtkType type = 0; + + if (!type) { + GtkTypeInfo type_info = { + "MessageTagFollowUp", + sizeof (MessageTagFollowUp), + sizeof (MessageTagFollowUpClass), + (GtkClassInitFunc) message_tag_followup_class_init, + (GtkObjectInitFunc) message_tag_followup_init, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL + }; + + type = gtk_type_unique (message_tag_editor_get_type (), &type_info); + } + + return type; +} + +static void +message_tag_followup_class_init (MessageTagFollowUpClass *klass) +{ + GtkObjectClass *object_class; + + object_class = (GtkObjectClass *) klass; + parent_class = gtk_type_class (message_tag_editor_get_type ()); + + object_class->finalize = message_tag_followup_finalise; + + parent_class->get_name = tag_get_name; + parent_class->get_value = tag_get_value; + parent_class->set_value = tag_set_value; +} + +static void +message_tag_followup_init (MessageTagFollowUp *editor) +{ + editor->tag = g_new (struct _FollowUpTag, 1); + editor->tag->type = FLAG_NONE; + editor->tag->target_date = time (NULL); + editor->tag->completed = 0; + + editor->value = NULL; + + editor->type = NULL; + editor->target_date = NULL; + editor->completed = NULL; + editor->clear = NULL; +} + + +static void +message_tag_followup_finalise (GtkObject *obj) +{ + MessageTagFollowUp *editor = (MessageTagFollowUp *) obj; + + g_free (editor->tag); + g_free (editor->value); + + ((GtkObjectClass *)(parent_class))->finalize (obj); +} + + +static const char * +tag_get_name (MessageTagEditor *editor) +{ + return "follow-up"; +} + +static const char * +tag_get_value (MessageTagEditor *editor) +{ + MessageTagFollowUp *followup = (MessageTagFollowUp *) editor; + + g_free (followup->value); + followup->value = message_tag_followup_encode (followup->tag); + + return followup->value; +} + +static void +set_widget_values (MessageTagFollowUp *followup) +{ + time_t completed; + + gtk_option_menu_set_history (followup->type, followup->tag->type); + + e_date_edit_set_time (followup->target_date, followup->tag->target_date); + + completed = followup->tag->completed; + gtk_toggle_button_set_active (followup->completed, completed ? TRUE : FALSE); + if (completed) + followup->tag->completed = completed; +} + +static void +tag_set_value (MessageTagEditor *editor, const char *value) +{ + MessageTagFollowUp *followup = (MessageTagFollowUp *) editor; + + g_free (followup->tag); + followup->tag = message_tag_followup_decode (value); + + set_widget_values (followup); +} + + +struct _FollowUpTag * +message_tag_followup_decode (const char *value) +{ + struct _FollowUpTag *tag; + const char *inptr; + int i; + + tag = g_new (struct _FollowUpTag, 1); + + for (i = 0; i < FLAG_NONE; i++) { + if (!strncmp (value, available_flags[i].name, strlen (available_flags[i].name))) + break; + } + + tag->type = i; + + inptr = value + strlen (available_flags[i].name); + + if (*inptr == ':') { + inptr++; + tag->target_date = strtoul (inptr, (char **) &inptr, 16); + if (*inptr == ':') { + inptr++; + tag->completed = strtoul (inptr, (char **) &inptr, 16); + } else + tag->completed = 0; + } else { + tag->target_date = time (NULL); + tag->completed = 0; + } + + return tag; +} + + +char * +message_tag_followup_encode (struct _FollowUpTag *tag) +{ + g_return_val_if_fail (tag != NULL, NULL); + + return g_strdup_printf ("%s:%lx:%lx", available_flags[tag->type].name, + (unsigned long) tag->target_date, + (unsigned long) tag->completed); +} + +static void +clear_clicked (GtkButton *button, gpointer user_data) +{ + MessageTagFollowUp *followup = user_data; + + /* FIXME: set dropdown == None?? */ + e_date_edit_set_time (followup->target_date, time (NULL)); + gtk_toggle_button_set_active (followup->completed, FALSE); +} + +static void +completed_toggled (GtkToggleButton *button, gpointer user_data) +{ + MessageTagFollowUp *followup = user_data; + + if (gtk_toggle_button_get_active (followup->completed)) + followup->tag->completed = time (NULL); + else + followup->tag->completed = 0; +} + +static void +type_changed (GtkMenuItem *item, gpointer user_data) +{ + MessageTagFollowUp *followup = user_data; + + followup->tag->type = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (item), "value")); +} + +static void +target_date_changed (EDateEdit *widget, gpointer user_data) +{ + MessageTagFollowUp *followup = user_data; + + followup->tag->target_date = e_date_edit_get_time (widget); +} + +GtkWidget *target_date_new (const char *s1, const char *s2, int i1, int i2); + +GtkWidget * +target_date_new (const char *s1, const char *s2, int i1, int i2) +{ + GtkWidget *widget; + + widget = e_date_edit_new (); + e_date_edit_set_show_date (E_DATE_EDIT (widget), TRUE); + e_date_edit_set_show_time (E_DATE_EDIT (widget), TRUE); + e_date_edit_set_week_start_day (E_DATE_EDIT (widget), 6); + /* FIXME: make this locale dependant?? */ + e_date_edit_set_use_24_hour_format (E_DATE_EDIT (widget), FALSE); + e_date_edit_set_allow_no_date_set (E_DATE_EDIT (widget), FALSE); + e_date_edit_set_time_popup_range (E_DATE_EDIT (widget), 0, 24); + + return widget; +} + +static void +construct (MessageTagEditor *editor) +{ + MessageTagFollowUp *followup = (MessageTagFollowUp *) editor; + GtkWidget *widget, *menu, *item; + GladeXML *gui; + int i; + + gui = glade_xml_new (EVOLUTION_GLADEDIR "/message-tags.glade", "followup_editor"); + + widget = glade_xml_get_widget (gui, "toplevel"); + + /* reparent */ + gtk_widget_reparent (widget, GNOME_DIALOG (editor)->vbox); + + followup->type = GTK_OPTION_MENU (glade_xml_get_widget (gui, "followup_type")); + gtk_option_menu_remove_menu (followup->type); + menu = gtk_menu_new (); + for (i = 0; i < FLAG_NONE; i++) { + item = gtk_menu_item_new_with_label (available_flags[i].i18n_name); + gtk_object_set_data (GTK_OBJECT (item), "value", + GINT_TO_POINTER (available_flags[i].value)); + gtk_signal_connect (GTK_OBJECT (item), "activate", + type_changed, followup); + gtk_menu_append (GTK_MENU (menu), item); + gtk_widget_show (item); + } + gtk_option_menu_set_menu (followup->type, menu); + + followup->target_date = E_DATE_EDIT (glade_xml_get_widget (gui, "target_date")); + e_date_edit_set_time (followup->target_date, time (NULL)); + gtk_signal_connect (GTK_OBJECT (followup->target_date), "changed", + target_date_changed, followup); + + followup->completed = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "completed")); + gtk_signal_connect (GTK_OBJECT (followup->completed), "toggled", + completed_toggled, followup); + + followup->clear = GTK_BUTTON (glade_xml_get_widget (gui, "clear")); + gtk_signal_connect (GTK_OBJECT (followup->clear), "clicked", + clear_clicked, followup); + + gtk_object_unref (GTK_OBJECT (gui)); +} + +MessageTagEditor * +message_tag_followup_new (void) +{ + MessageTagEditor *editor; + + editor = (MessageTagEditor *) gtk_type_new (message_tag_followup_get_type ()); + construct (editor); + + return editor; +} diff --git a/mail/message-tag-followup.h b/mail/message-tag-followup.h new file mode 100644 index 0000000000..cb5b7857e1 --- /dev/null +++ b/mail/message-tag-followup.h @@ -0,0 +1,99 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Jeffrey Stedfast <fejj@ximian.com> + * + * Copyright 2002 Ximain, Inc. (www.ximian.com) + * + * This program 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 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + + +#ifndef __MESSAGE_TAG_FOLLOWUP_H__ +#define __MESSAGE_TAG_FOLLOWUP_H__ + +#include <gtk/gtk.h> +#include <mail/message-tag-editor.h> +#include <camel/camel-folder.h> +#include <camel/camel-folder-summary.h> +#include <widgets/misc/e-dateedit.h> +#include <time.h> + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus */ + +#define MESSAGE_TAG_FOLLOWUP(obj) GTK_CHECK_CAST (obj, message_tag_followup_get_type (), MessageTagFollowUp) +#define MESSAGE_TAG_FOLLOWUP_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, message_tag_followup_get_type (), MessageTagFollowUpClass) +#define IS_MESSAGE_TAG_FOLLOWUP(obj) GTK_CHECK_TYPE (obj, message_tag_followup_get_type ()) + +enum { + FLAG_CALL, + FLAG_DO_NOT_FORWARD, + FLAG_FOLLOWUP, + FLAG_FYI, + FLAG_FORWARD, + FLAG_NO_RESPONSE_NECESSARY, + FLAG_READ, + FLAG_REPLY, + FLAG_REPLY_ALL, + FLAG_REVIEW, + FLAG_NONE +}; + +struct _FollowUpTag { + int type; + time_t target_date; + time_t completed; +}; + +typedef struct _MessageTagFollowUp MessageTagFollowUp; +typedef struct _MessageTagFollowUpClass MessageTagFollowUpClass; + +struct _MessageTagFollowUp { + MessageTagEditor parent; + + struct _FollowUpTag *tag; + char *value; + + GtkOptionMenu *type; + EDateEdit *target_date; + GtkToggleButton *completed; + GtkButton *clear; +}; + +struct _MessageTagFollowUpClass { + MessageTagEditorClass parent_class; + + /* virtual methods */ + /* signals */ +}; + + +GtkType message_tag_followup_get_type (void); + +/* utility functions */ +struct _FollowUpTag *message_tag_followup_decode (const char *tag_value); +char *message_tag_followup_encode (struct _FollowUpTag *followup); + + +MessageTagEditor *message_tag_followup_new (void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __MESSAGE_TAG_FOLLOWUP_H__ */ diff --git a/mail/message-tags.glade b/mail/message-tags.glade new file mode 100644 index 0000000000..469d74ce31 --- /dev/null +++ b/mail/message-tags.glade @@ -0,0 +1,307 @@ +<?xml version="1.0"?> +<GTK-Interface> + +<project> + <name>message-tags</name> + <program_name>message-tags</program_name> + <directory></directory> + <source_directory>src</source_directory> + <pixmaps_directory>pixmaps</pixmaps_directory> + <language>C</language> + <gnome_support>True</gnome_support> + <gettext_support>True</gettext_support> +</project> + +<widget> + <class>GnomeDialog</class> + <name>followup_editor</name> + <visible>False</visible> + <title>Flag to Follow Up</title> + <type>GTK_WINDOW_TOPLEVEL</type> + <position>GTK_WIN_POS_NONE</position> + <modal>False</modal> + <allow_shrink>False</allow_shrink> + <allow_grow>False</allow_grow> + <auto_shrink>False</auto_shrink> + <auto_close>False</auto_close> + <hide_on_close>False</hide_on_close> + + <widget> + <class>GtkVBox</class> + <child_name>GnomeDialog:vbox</child_name> + <name>vbox2</name> + <border_width>3</border_width> + <homogeneous>False</homogeneous> + <spacing>3</spacing> + <child> + <padding>4</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkHButtonBox</class> + <child_name>GnomeDialog:action_area</child_name> + <name>hbuttonbox1</name> + <layout_style>GTK_BUTTONBOX_END</layout_style> + <spacing>8</spacing> + <child_min_width>85</child_min_width> + <child_min_height>27</child_min_height> + <child_ipad_x>7</child_ipad_x> + <child_ipad_y>0</child_ipad_y> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>True</fill> + <pack>GTK_PACK_END</pack> + </child> + + <widget> + <class>GtkButton</class> + <name>button4</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <stock_button>GNOME_STOCK_BUTTON_OK</stock_button> + </widget> + + <widget> + <class>GtkButton</class> + <name>button5</name> + <can_default>True</can_default> + <can_focus>True</can_focus> + <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> + </widget> + </widget> + + <widget> + <class>GtkVBox</class> + <name>toplevel</name> + <homogeneous>False</homogeneous> + <spacing>4</spacing> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkHBox</class> + <name>hbox1</name> + <border_width>3</border_width> + <homogeneous>False</homogeneous> + <spacing>3</spacing> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + + <widget> + <class>GtkLabel</class> + <name>label6</name> + <label>Message:</label> + <justify>GTK_JUSTIFY_LEFT</justify> + <wrap>False</wrap> + <xalign>7.45058e-09</xalign> + <yalign>0</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <padding>0</padding> + <expand>False</expand> + <fill>False</fill> + </child> + </widget> + + <widget> + <class>GtkLabel</class> + <name>lblSubject</name> + <label>Bug 13256] Changed - Edits to a signature file are not saved unless 'File:Save' selected explicitly</label> + <justify>GTK_JUSTIFY_LEFT</justify> + <wrap>True</wrap> + <xalign>7.45058e-09</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + </widget> + </widget> + + <widget> + <class>GtkTable</class> + <name>table2</name> + <border_width>3</border_width> + <rows>2</rows> + <columns>3</columns> + <homogeneous>False</homogeneous> + <row_spacing>3</row_spacing> + <column_spacing>3</column_spacing> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GtkLabel</class> + <name>label3</name> + <label>_Flag:</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <default_focus_target>followup_type</default_focus_target> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkLabel</class> + <name>label4</name> + <label>_Due by:</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + <child> + <left_attach>0</left_attach> + <right_attach>1</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkButton</class> + <name>clear</name> + <can_focus>True</can_focus> + <label>_Clear Flag</label> + <relief>GTK_RELIEF_NORMAL</relief> + <child> + <left_attach>2</left_attach> + <right_attach>3</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkCheckButton</class> + <name>completed</name> + <can_focus>True</can_focus> + <label>C_ompleted</label> + <active>False</active> + <draw_indicator>True</draw_indicator> + <child> + <left_attach>2</left_attach> + <right_attach>3</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>GtkOptionMenu</class> + <name>followup_type</name> + <can_focus>True</can_focus> + <items>None +Call +Do Not Forward +Follow-Up +For Your Information +Forward +No Response Necessary +Read +Reply +Reply to All +Review +</items> + <initial_choice>0</initial_choice> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>0</top_attach> + <bottom_attach>1</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>False</yfill> + </child> + </widget> + + <widget> + <class>Custom</class> + <name>target_date</name> + <creation_function>target_date_new</creation_function> + <int1>0</int1> + <int2>0</int2> + <last_modification_time>Sat, 09 Feb 2002 00:20:24 GMT</last_modification_time> + <child> + <left_attach>1</left_attach> + <right_attach>2</right_attach> + <top_attach>1</top_attach> + <bottom_attach>2</bottom_attach> + <xpad>0</xpad> + <ypad>0</ypad> + <xexpand>False</xexpand> + <yexpand>False</yexpand> + <xshrink>False</xshrink> + <yshrink>False</yshrink> + <xfill>True</xfill> + <yfill>True</yfill> + </child> + </widget> + </widget> + </widget> + </widget> +</widget> + +</GTK-Interface> |