replace another: "pixel(s)" -> "pixels"
[claws.git] / src / prefs_message.c
index f6ef5cccd38899829e14327291f0a0564fe406ae..47f5e07a61f8a2ae0f248dca5bea412c15250dc0 100644 (file)
@@ -1,10 +1,10 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2005-2006 Colin Leroy <colin@colino.net> & The Sylpheed-Claws Team
+ * Copyright (C) 2005-2012 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
 #  include "config.h"
+#include "claws-features.h"
 #endif
 
 #include "defs.h"
@@ -46,19 +47,22 @@ typedef struct _MessagePage
 
        GtkWidget *window;
 
-       GtkWidget *chkbtn_disphdrpane;
-       GtkWidget *chkbtn_disphdr;
-       GtkWidget *chkbtn_dispxface;
+       GtkWidget *checkbtn_disphdrpane;
+       GtkWidget *checkbtn_disphdr;
+       GtkWidget *checkbtn_dispxface;
 
-       GtkWidget *chkbtn_html;
-       GtkWidget *chkbtn_html_plugin;
+       GtkWidget *checkbtn_html;
+       GtkWidget *checkbtn_html_plugin;
+       GtkWidget *checkbtn_promote_html_part;
        GtkWidget *spinbtn_linespc;
 
-       GtkWidget *chkbtn_smoothscroll;
+       GtkWidget *checkbtn_smoothscroll;
        GtkWidget *spinbtn_scrollstep;
-       GtkWidget *chkbtn_halfpage;
+       GtkWidget *checkbtn_halfpage;
+       GtkWidget *checkbtn_hide_quoted;
 
-       GtkWidget *chkbtn_attach_desc;
+       GtkWidget *checkbtn_attach_desc;
+       GtkWidget *entry_quote_chars;
 } MessagePage;
 
 static void disphdr_pane_toggled(GtkToggleButton *toggle_btn, GtkWidget *widget)
@@ -70,7 +74,7 @@ static void disphdr_pane_toggled(GtkToggleButton *toggle_btn, GtkWidget *widget)
        gtk_widget_set_sensitive(widget, !is_active);
 }
 
-void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window, 
+static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window, 
                                  gpointer data)
 {
        MessagePage *prefs_message = (MessagePage *) _page;
@@ -78,62 +82,68 @@ void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
        GtkWidget *vbox1;
        GtkWidget *vbox2;
        GtkWidget *hbox1;
-       GtkWidget *chkbtn_disphdrpane;
-       GtkWidget *chkbtn_disphdr;
-       GtkWidget *chkbtn_dispxface;
+       GtkWidget *checkbtn_disphdrpane;
+       GtkWidget *checkbtn_disphdr;
+       GtkWidget *checkbtn_dispxface;
 
        GtkWidget *button_edit_disphdr;
-       GtkWidget *chkbtn_html;
-       GtkWidget *chkbtn_html_plugin;
+       GtkWidget *checkbtn_html;
+       GtkWidget *checkbtn_html_plugin;
+       GtkWidget *checkbtn_promote_html_part;
        GtkWidget *hbox_linespc;
        GtkWidget *label_linespc;
-       GtkObject *spinbtn_linespc_adj;
+       GtkAdjustment *spinbtn_linespc_adj;
        GtkWidget *spinbtn_linespc;
 
-       GtkWidget *frame_scr;
+       GtkWidget *frame;
        GtkWidget *vbox_scr;
-       GtkWidget *chkbtn_smoothscroll;
+       GtkWidget *checkbtn_smoothscroll;
        GtkWidget *hbox_scr;
        GtkWidget *label_scr;
-       GtkObject *spinbtn_scrollstep_adj;
+       GtkAdjustment *spinbtn_scrollstep_adj;
        GtkWidget *spinbtn_scrollstep;
-       GtkWidget *chkbtn_halfpage;
+       GtkWidget *checkbtn_halfpage;
+       GtkWidget *checkbtn_hide_quoted;
 
-       GtkWidget *chkbtn_attach_desc;
+       GtkWidget *checkbtn_attach_desc;
+       
+       GtkWidget *frame_quote;
+       GtkWidget *hbox2;
+       GtkWidget *vbox_quote;
+       GtkWidget *entry_quote_chars;
+       GtkWidget *label_quote_chars;
 
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
        gtk_widget_show (vbox1);
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
 
-       vbox2 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox2);
-       gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
+       vbox2 = gtkut_get_options_frame(vbox1, &frame, _("Headers"));
 
-       PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
+       PACK_CHECK_BUTTON(vbox2, checkbtn_disphdrpane,
                          _("Display header pane above message view"));
 
 #if HAVE_LIBCOMPFACE
-       PACK_CHECK_BUTTON(vbox2, chkbtn_dispxface,
+       PACK_CHECK_BUTTON(vbox2, checkbtn_dispxface,
                          _("Display (X-)Face in message view"));
 #else
-       PACK_CHECK_BUTTON(vbox2, chkbtn_dispxface,
+       PACK_CHECK_BUTTON(vbox2, checkbtn_dispxface,
                          _("Display Face in message view"));
 #endif
 
-       gtk_widget_set_sensitive(chkbtn_dispxface, 
+       gtk_widget_set_sensitive(checkbtn_dispxface, 
                !prefs_common.display_header_pane);
 
-       g_signal_connect(G_OBJECT(chkbtn_disphdrpane), "toggled",
-                        G_CALLBACK(disphdr_pane_toggled), chkbtn_dispxface);
+       g_signal_connect(G_OBJECT(checkbtn_disphdrpane), "toggled",
+                        G_CALLBACK(disphdr_pane_toggled), checkbtn_dispxface);
 
        hbox1 = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox1);
        gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
 
-       PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
-                         _("Display short headers on message view"));
+       PACK_CHECK_BUTTON(hbox1, checkbtn_disphdr,
+                         _("Display headers in message view"));
 
-       button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
+       button_edit_disphdr = gtk_button_new_from_stock(GTK_STOCK_EDIT);
        gtk_widget_show (button_edit_disphdr);
        gtk_box_pack_start (GTK_BOX (hbox1), button_edit_disphdr,
                          FALSE, TRUE, 0);
@@ -141,20 +151,22 @@ void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
                          G_CALLBACK (prefs_display_header_open),
                          NULL);
 
-       SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
+       SET_TOGGLE_SENSITIVITY(checkbtn_disphdr, button_edit_disphdr);
+
+       vbox2 = gtkut_get_options_frame(vbox1, &frame, _("HTML messages"));
 
-       PACK_CHECK_BUTTON(vbox2, chkbtn_html,
+       PACK_CHECK_BUTTON(vbox2, checkbtn_html,
                          _("Render HTML messages as text"));
 
-       PACK_CHECK_BUTTON(vbox2, chkbtn_html_plugin,
+       PACK_CHECK_BUTTON(vbox2, checkbtn_html_plugin,
                          _("Render HTML-only messages with plugin if possible"));
-
-       PACK_CHECK_BUTTON(vbox2, chkbtn_attach_desc,
-                         _("Show attachment descriptions (rather than names)"));
+       
+       PACK_CHECK_BUTTON(vbox2, checkbtn_promote_html_part,
+                         _("Select the HTML part of multipart/alternative messages"));
 
        hbox1 = gtk_hbox_new (FALSE, 32);
        gtk_widget_show (hbox1);
-       gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
 
        hbox_linespc = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox1);
@@ -165,7 +177,7 @@ void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
        gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
                            FALSE, FALSE, 0);
 
-       spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
+       spinbtn_linespc_adj = GTK_ADJUSTMENT(gtk_adjustment_new (2, 0, 16, 1, 1, 0));
        spinbtn_linespc = gtk_spin_button_new
                (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
        gtk_widget_show (spinbtn_linespc);
@@ -174,25 +186,21 @@ void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
        gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
        gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
 
-       label_linespc = gtk_label_new (_("pixel(s)"));
+       label_linespc = gtk_label_new (_("pixels"));
        gtk_widget_show (label_linespc);
        gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
                            FALSE, FALSE, 0);
+       gtk_widget_show_all (hbox1);
 
-       PACK_FRAME(vbox1, frame_scr, _("Scroll"));
-
-       vbox_scr = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox_scr);
-       gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
+       vbox_scr = gtkut_get_options_frame(vbox1, &frame, _("Scroll"));
 
-       PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
+       PACK_CHECK_BUTTON(vbox_scr, checkbtn_halfpage, _("Half page"));
 
        hbox1 = gtk_hbox_new (FALSE, 32);
        gtk_widget_show (hbox1);
        gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
 
-       PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
+       PACK_CHECK_BUTTON(hbox1, checkbtn_smoothscroll, _("Smooth scroll"));
 
        hbox_scr = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox_scr);
@@ -202,7 +210,7 @@ void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
        gtk_widget_show (label_scr);
        gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
 
-       spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
+       spinbtn_scrollstep_adj = GTK_ADJUSTMENT(gtk_adjustment_new (1, 1, 100, 1, 10, 0));
        spinbtn_scrollstep = gtk_spin_button_new
                (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
        gtk_widget_show (spinbtn_scrollstep);
@@ -212,75 +220,123 @@ void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
        gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
                                     TRUE);
 
-       label_scr = gtk_label_new (_("pixel(s)"));
+       label_scr = gtk_label_new (_("pixels"));
        gtk_widget_show (label_scr);
        gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
 
-       SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
+       SET_TOGGLE_SENSITIVITY (checkbtn_smoothscroll, hbox_scr)
+
+       PACK_CHECK_BUTTON(vbox1, checkbtn_attach_desc,
+                         _("Show attachment descriptions (rather than names)"));
+
+       /* quote chars */
+       PACK_FRAME (vbox1, frame_quote, _("Quotation"));
 
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_disphdrpane),
+       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);
+       PACK_CHECK_BUTTON(vbox_quote, checkbtn_hide_quoted, _("Collapse quoted text on double click"));
+       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_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);
+
+       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);
+
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_disphdrpane),
                prefs_common.display_header_pane);
 
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_dispxface),
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_dispxface),
                prefs_common.display_xface);
 
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_disphdr),
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_disphdr),
                prefs_common.display_header);
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_html),
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_html),
                prefs_common.render_html);
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_html_plugin),
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_html_plugin),
                prefs_common.invoke_plugin_on_html);
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_smoothscroll),
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_promote_html_part),
+               prefs_common.promote_html_part);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_smoothscroll),
                prefs_common.enable_smooth_scroll);
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_halfpage),
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_hide_quoted),
+               prefs_common.hide_quoted);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_halfpage),
                prefs_common.scroll_halfpage);
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_attach_desc),
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_attach_desc),
                prefs_common.attach_desc);
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_linespc),
                prefs_common.line_space);
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_scrollstep),
                prefs_common.scroll_step);
+       gtk_entry_set_text(GTK_ENTRY(entry_quote_chars), 
+                       prefs_common.quote_chars?prefs_common.quote_chars:"");
                
        prefs_message->window = GTK_WIDGET(window);
-       prefs_message->chkbtn_disphdrpane = chkbtn_disphdrpane;
-       prefs_message->chkbtn_dispxface = chkbtn_dispxface;
-       prefs_message->chkbtn_disphdr = chkbtn_disphdr;
-       prefs_message->chkbtn_html = chkbtn_html;
-       prefs_message->chkbtn_html_plugin = chkbtn_html_plugin;
+       prefs_message->checkbtn_disphdrpane = checkbtn_disphdrpane;
+       prefs_message->checkbtn_dispxface = checkbtn_dispxface;
+       prefs_message->checkbtn_disphdr = checkbtn_disphdr;
+       prefs_message->checkbtn_html = checkbtn_html;
+       prefs_message->checkbtn_html_plugin = checkbtn_html_plugin;
+       prefs_message->checkbtn_promote_html_part = checkbtn_promote_html_part;
        prefs_message->spinbtn_linespc = spinbtn_linespc;
-       prefs_message->chkbtn_smoothscroll = chkbtn_smoothscroll;
+       prefs_message->checkbtn_smoothscroll = checkbtn_smoothscroll;
+       prefs_message->checkbtn_hide_quoted = checkbtn_hide_quoted;
        prefs_message->spinbtn_scrollstep = spinbtn_scrollstep;
-       prefs_message->chkbtn_halfpage = chkbtn_halfpage;
-       prefs_message->chkbtn_attach_desc = chkbtn_attach_desc;
+       prefs_message->checkbtn_halfpage = checkbtn_halfpage;
+       prefs_message->checkbtn_attach_desc = checkbtn_attach_desc;
+       prefs_message->entry_quote_chars = entry_quote_chars;
        
        prefs_message->page.widget = vbox1;
 }
 
-void prefs_message_save(PrefsPage *_page)
+static void prefs_message_save(PrefsPage *_page)
 {
        MessagePage *page = (MessagePage *) _page;
 
        prefs_common.display_header_pane = gtk_toggle_button_get_active(
-               GTK_TOGGLE_BUTTON(page->chkbtn_disphdrpane));
+               GTK_TOGGLE_BUTTON(page->checkbtn_disphdrpane));
        prefs_common.display_xface = gtk_toggle_button_get_active(
-               GTK_TOGGLE_BUTTON(page->chkbtn_dispxface));
+               GTK_TOGGLE_BUTTON(page->checkbtn_dispxface));
        prefs_common.display_header = gtk_toggle_button_get_active(
-               GTK_TOGGLE_BUTTON(page->chkbtn_disphdr));
+               GTK_TOGGLE_BUTTON(page->checkbtn_disphdr));
        prefs_common.render_html = gtk_toggle_button_get_active(
-               GTK_TOGGLE_BUTTON(page->chkbtn_html));
+               GTK_TOGGLE_BUTTON(page->checkbtn_html));
        prefs_common.invoke_plugin_on_html = gtk_toggle_button_get_active(
-               GTK_TOGGLE_BUTTON(page->chkbtn_html_plugin));
+               GTK_TOGGLE_BUTTON(page->checkbtn_html_plugin));
+       prefs_common.promote_html_part = gtk_toggle_button_get_active(
+               GTK_TOGGLE_BUTTON(page->checkbtn_promote_html_part));
        prefs_common.enable_smooth_scroll = gtk_toggle_button_get_active(
-               GTK_TOGGLE_BUTTON(page->chkbtn_smoothscroll));
+               GTK_TOGGLE_BUTTON(page->checkbtn_smoothscroll));
        prefs_common.scroll_halfpage = gtk_toggle_button_get_active(
-               GTK_TOGGLE_BUTTON(page->chkbtn_halfpage));
+               GTK_TOGGLE_BUTTON(page->checkbtn_halfpage));
+       prefs_common.hide_quoted = gtk_toggle_button_get_active(
+               GTK_TOGGLE_BUTTON(page->checkbtn_hide_quoted));
        prefs_common.attach_desc = gtk_toggle_button_get_active(
-               GTK_TOGGLE_BUTTON(page->chkbtn_attach_desc));
+               GTK_TOGGLE_BUTTON(page->checkbtn_attach_desc));
        prefs_common.line_space = gtk_spin_button_get_value_as_int(
                GTK_SPIN_BUTTON(page->spinbtn_linespc));
        prefs_common.scroll_step = gtk_spin_button_get_value_as_int(
                GTK_SPIN_BUTTON(page->spinbtn_scrollstep));
 
+       g_free(prefs_common.quote_chars); 
+       prefs_common.quote_chars = gtk_editable_get_chars(
+                       GTK_EDITABLE(page->entry_quote_chars), 0, -1);
+       remove_space(prefs_common.quote_chars);
+
        main_window_reflect_prefs_all_real(FALSE);
 }