/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2005-2007 Colin Leroy <colin@colino.net> & The Claws Mail Team
+ * Copyright (C) 2005-2009 Colin Leroy <colin@colino.net> & The Claws Mail Team
*
* 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
+ * the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
*/
#ifdef HAVE_CONFIG_H
GtkWidget *window;
+ GtkWidget *checkbtn_compose_with_format;
+ GtkWidget *entry_subject;
+ GtkWidget *text_format;
GtkWidget *entry_quotemark;
GtkWidget *text_quotefmt;
GtkWidget *entry_fw_quotemark;
GtkWidget *text_fw_quotefmt;
- GtkWidget *entry_quote_chars;
- GtkWidget *label_quote_chars;
GtkWidget *btn_quotedesc;
- GtkWidget *checkbtn_reply_with_quote;
} QuotePage;
-void prefs_quote_create_widget(PrefsPage *_page, GtkWindow *window,
- gpointer data)
-{
- QuotePage *prefs_quote = (QuotePage *) _page;
-
- GtkWidget *vbox1;
- GtkWidget *frame_quote;
- GtkWidget *vbox_quote;
- GtkWidget *hbox1;
- GtkWidget *hbox2;
- GtkWidget *label_quotemark;
- GtkWidget *entry_quotemark;
- GtkWidget *scrolledwin_quotefmt;
- GtkWidget *text_quotefmt;
-
- GtkWidget *entry_fw_quotemark;
- GtkWidget *text_fw_quotefmt;
-
- GtkWidget *entry_quote_chars;
- GtkWidget *label_quote_chars;
-
- GtkWidget *btn_quotedesc;
-
- GtkWidget *checkbtn_reply_with_quote;
-
- vbox1 = gtk_vbox_new (FALSE, VSPACING);
- gtk_widget_show (vbox1);
- gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
-
- /* reply */
+QuotePage *prefs_quote;
- PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
-
- PACK_FRAME (vbox1, frame_quote, _("Reply format"));
-
- vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
- gtk_widget_show (vbox_quote);
- gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
- gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
-
- hbox1 = gtk_hbox_new (FALSE, 32);
- gtk_widget_show (hbox1);
- gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
-
- hbox2 = gtk_hbox_new (FALSE, 8);
- gtk_widget_show (hbox2);
- gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
-
- label_quotemark = gtk_label_new (_("Quotation mark"));
- gtk_widget_show (label_quotemark);
- gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
-
- entry_quotemark = gtk_entry_new ();
- gtk_widget_show (entry_quotemark);
- gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
- gtk_widget_set_size_request (entry_quotemark, 64, -1);
-
- scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_show (scrolledwin_quotefmt);
- gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
- TRUE, TRUE, 0);
- gtk_scrolled_window_set_policy
- (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type
- (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
-
- text_quotefmt = gtk_text_view_new ();
- if (prefs_common.textfont) {
- PangoFontDescription *font_desc;
-
- font_desc = pango_font_description_from_string
- (prefs_common.textfont);
- if (font_desc) {
- gtk_widget_modify_font(text_quotefmt, font_desc);
- pango_font_description_free(font_desc);
- }
- }
- gtk_widget_show (text_quotefmt);
- gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
- gtk_text_view_set_editable (GTK_TEXT_VIEW (text_quotefmt), TRUE);
- gtk_widget_set_size_request(text_quotefmt, -1, 100);
+static void prefs_quote_set_default_new_msg_fmt(void)
+{
+ cm_return_if_fail(prefs_quote->text_format != NULL);
- /* forward */
+ pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_format),
+ _("Hello,\\n"));
+}
- PACK_FRAME (vbox1, frame_quote, _("Forward format"));
-
- vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
- gtk_widget_show (vbox_quote);
- gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
- gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
-
- hbox1 = gtk_hbox_new (FALSE, 32);
- gtk_widget_show (hbox1);
- gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
-
- hbox2 = gtk_hbox_new (FALSE, 8);
- gtk_widget_show (hbox2);
- gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
-
- label_quotemark = gtk_label_new (_("Quotation mark"));
- gtk_widget_show (label_quotemark);
- gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
-
- entry_fw_quotemark = gtk_entry_new ();
- gtk_widget_show (entry_fw_quotemark);
- gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
- FALSE, FALSE, 0);
- gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
-
- scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_show (scrolledwin_quotefmt);
- gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
- TRUE, TRUE, 0);
- gtk_scrolled_window_set_policy
- (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type
- (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
-
- text_fw_quotefmt = gtk_text_view_new ();
- if (prefs_common.textfont) {
- PangoFontDescription *font_desc;
-
- font_desc = pango_font_description_from_string
- (prefs_common.textfont);
- if (font_desc) {
- gtk_widget_modify_font(text_fw_quotefmt, font_desc);
- pango_font_description_free(font_desc);
- }
- }
- gtk_widget_show (text_fw_quotefmt);
- gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
- text_fw_quotefmt);
- gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
- gtk_widget_set_size_request (text_fw_quotefmt, -1, 100);
-
- hbox1 = gtk_hbox_new (FALSE, 32);
- gtk_widget_show (hbox1);
- gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
-
-#if GTK_CHECK_VERSION(2, 8, 0)
- btn_quotedesc = gtk_button_new_from_stock(GTK_STOCK_INFO);
-#else
- btn_quotedesc =
- gtk_button_new_with_label (_(" Description of symbols... "));
-#endif
- gtk_widget_show (btn_quotedesc);
- gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
- g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
- G_CALLBACK(quote_fmt_quote_description), GTK_WIDGET(window));
+static void prefs_quote_set_default_reply_fmt(void)
+{
+ cm_return_if_fail(prefs_quote->text_quotefmt != NULL);
- /* quote chars */
+ pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_quotefmt),
+ _("On %d\\n%f wrote:\\n\\n%q"));
+}
- PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
+static void prefs_quote_set_default_forward_fmt(void)
+{
+ cm_return_if_fail(prefs_quote->text_fw_quotefmt != NULL);
- vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
- gtk_widget_show (vbox_quote);
- gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
- gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
+ pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_fw_quotefmt),
+ _("\\n\\nBegin forwarded message:\\n\\n"
+ "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
+ "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"));
+}
- hbox1 = gtk_hbox_new (FALSE, 32);
- gtk_widget_show (hbox1);
- gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
+static void prefs_quote_create_widget(PrefsPage *_page, GtkWindow *window,
+ gpointer data)
+{
+ QuotePage *prefs_quote = (QuotePage *) _page;
+
+ GtkWidget *vbox;
+ GtkWidget *vbox2;
+ GtkWidget *notebook;
- hbox2 = gtk_hbox_new (FALSE, 8);
- gtk_widget_show (hbox2);
- gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox);
- label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
- gtk_widget_show (label_quote_chars);
- gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
+ notebook = gtk_notebook_new();
+ gtk_widget_show(notebook);
+ gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
- entry_quote_chars = gtk_entry_new ();
- gtk_widget_show (entry_quote_chars);
- gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
- FALSE, FALSE, 0);
- gtk_widget_set_size_request (entry_quote_chars, 64, -1);
+ /* new message */
+ vbox2 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
+
+ quotefmt_create_new_msg_fmt_widgets(
+ window,
+ vbox2,
+ &prefs_quote->checkbtn_compose_with_format,
+ NULL,
+ &prefs_quote->entry_subject,
+ &prefs_quote->text_format,
+ TRUE, prefs_quote_set_default_new_msg_fmt);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(_("Compose")));
- pref_set_textview_from_pref(GTK_TEXT_VIEW(text_quotefmt), prefs_common.quotefmt);
- pref_set_textview_from_pref(GTK_TEXT_VIEW(text_fw_quotefmt), prefs_common.fw_quotefmt);
+ /* reply */
+ vbox2 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
+
+ quotefmt_create_reply_fmt_widgets(
+ window,
+ vbox2,
+ NULL,
+ NULL,
+ &prefs_quote->entry_quotemark,
+ &prefs_quote->text_quotefmt,
+ TRUE, prefs_quote_set_default_reply_fmt);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(_("Reply")));
- gtk_entry_set_text(GTK_ENTRY(entry_quotemark),
+ /* forward */
+ vbox2 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox2);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
+
+ quotefmt_create_forward_fmt_widgets(
+ window,
+ vbox2,
+ NULL,
+ NULL,
+ &prefs_quote->entry_fw_quotemark,
+ &prefs_quote->text_fw_quotefmt,
+ TRUE, prefs_quote_set_default_forward_fmt);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(_("Forward")));
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_quote->checkbtn_compose_with_format),
+ prefs_common.compose_with_format);
+ pref_set_entry_from_pref(GTK_ENTRY(prefs_quote->entry_subject),
+ prefs_common.compose_subject_format);
+ if (prefs_common.compose_body_format)
+ pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_format),
+ prefs_common.compose_body_format);
+ else
+ prefs_quote_set_default_new_msg_fmt();
+
+ gtk_entry_set_text(GTK_ENTRY(prefs_quote->entry_quotemark),
prefs_common.quotemark?prefs_common.quotemark:"");
- gtk_entry_set_text(GTK_ENTRY(entry_fw_quotemark),
+ if (prefs_common.quotefmt)
+ pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_quotefmt),
+ prefs_common.quotefmt);
+ else
+ prefs_quote_set_default_reply_fmt();
+
+ gtk_entry_set_text(GTK_ENTRY(prefs_quote->entry_fw_quotemark),
prefs_common.fw_quotemark?prefs_common.fw_quotemark:"");
- gtk_entry_set_text(GTK_ENTRY(entry_quote_chars),
- prefs_common.quote_chars?prefs_common.quote_chars:"");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_reply_with_quote),
- prefs_common.reply_with_quote);
-
+ if (prefs_common.fw_quotefmt)
+ pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_fw_quotefmt),
+ prefs_common.fw_quotefmt);
+ else
+ prefs_quote_set_default_forward_fmt();
+
prefs_quote->window = GTK_WIDGET(window);
- prefs_quote->text_quotefmt = text_quotefmt;
- prefs_quote->text_fw_quotefmt = text_fw_quotefmt;
- prefs_quote->entry_quotemark = entry_quotemark;
- prefs_quote->entry_fw_quotemark = entry_fw_quotemark;
- prefs_quote->entry_quote_chars = entry_quote_chars;
- prefs_quote->checkbtn_reply_with_quote
- = checkbtn_reply_with_quote;
- prefs_quote->page.widget = vbox1;
+ prefs_quote->page.widget = vbox;
}
-void prefs_quote_save(PrefsPage *_page)
+static void prefs_quote_save(PrefsPage *_page)
{
QuotePage *page = (QuotePage *) _page;
+ g_free(prefs_common.compose_subject_format);
+ prefs_common.compose_subject_format = NULL;
+ g_free(prefs_common.compose_body_format);
+ prefs_common.compose_body_format = NULL;
g_free(prefs_common.quotefmt);
prefs_common.quotefmt = NULL;
g_free(prefs_common.fw_quotefmt);
prefs_common.quotemark = NULL;
g_free(prefs_common.fw_quotemark);
prefs_common.fw_quotemark = NULL;
- g_free(prefs_common.quote_chars);
- prefs_common.quote_chars = NULL;
- prefs_common.quotefmt = pref_get_pref_from_textview(
- GTK_TEXT_VIEW(page->text_quotefmt));
- if (!prefs_template_string_is_valid(prefs_common.quotefmt))
- alertpanel_error(_("Message reply format error."));
-
- prefs_common.fw_quotefmt = pref_get_pref_from_textview(
- GTK_TEXT_VIEW(page->text_fw_quotefmt));
- if (!prefs_template_string_is_valid(prefs_common.fw_quotefmt))
- alertpanel_error(_("Message forward format error."));
+ prefs_common.compose_with_format =
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_compose_with_format));
+ prefs_common.compose_subject_format = pref_get_pref_from_entry(
+ GTK_ENTRY(page->entry_subject));
+ prefs_common.compose_body_format = pref_get_pref_from_textview(
+ GTK_TEXT_VIEW(page->text_format));
+ quotefmt_check_new_msg_formats(prefs_common.compose_with_format,
+ NULL,
+ prefs_common.compose_subject_format,
+ prefs_common.compose_body_format);
prefs_common.quotemark = gtk_editable_get_chars(
GTK_EDITABLE(page->entry_quotemark), 0, -1);
+ prefs_common.quotefmt = pref_get_pref_from_textview(
+ GTK_TEXT_VIEW(page->text_quotefmt));
+ quotefmt_check_reply_formats(TRUE,
+ NULL,
+ prefs_common.quotemark,
+ prefs_common.quotefmt);
+
prefs_common.fw_quotemark = gtk_editable_get_chars(
GTK_EDITABLE(page->entry_fw_quotemark), 0, -1);
- prefs_common.quote_chars = gtk_editable_get_chars(
- GTK_EDITABLE(page->entry_quote_chars), 0, -1);
- prefs_common.reply_with_quote = gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(page->checkbtn_reply_with_quote));
-
- remove_space(prefs_common.quote_chars);
+ prefs_common.fw_quotefmt = pref_get_pref_from_textview(
+ GTK_TEXT_VIEW(page->text_fw_quotefmt));
+ quotefmt_check_forward_formats(TRUE,
+ NULL,
+ prefs_common.fw_quotemark,
+ prefs_common.fw_quotefmt);
}
static void prefs_quote_destroy_widget(PrefsPage *_page)
{
}
-QuotePage *prefs_quote;
-
void prefs_quote_init(void)
{
QuotePage *page;
static gchar *path[3];
path[0] = _("Compose");
- path[1] = _("Quoting");
+ path[1] = _("Templates");
path[2] = NULL;
page = g_new0(QuotePage, 1);