2009-07-06 [colin] 3.7.2cvs2
[claws.git] / src / prefs_wrapping.c
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 2004-2009 Hiroyuki Yamamoto & The Claws Mail Team
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  * 
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #  include "config.h"
22 #endif
23
24 #include "defs.h"
25
26 #include <stdio.h>
27 #include <stdlib.h>
28
29 #include <glib.h>
30 #include <glib/gi18n.h>
31 #include <gtk/gtk.h>
32 #include <gdk/gdkkeysyms.h>
33
34 #include "prefs_common.h"
35 #include "prefs_gtk.h"
36
37 #include "gtk/gtkutils.h"
38 #include "gtk/prefswindow.h"
39
40 #include "manage_window.h"
41
42 typedef struct _WrappingPage
43 {
44         PrefsPage page;
45
46         GtkWidget *window;
47
48         GtkWidget *spinbtn_linewrap;
49         GtkWidget *checkbtn_wrapquote;
50         GtkWidget *checkbtn_wrappastes;
51         GtkWidget *checkbtn_autowrap;
52         GtkWidget *checkbtn_autoindent;
53 } WrappingPage;
54
55 static void prefs_wrapping_create_widget(PrefsPage *_page, GtkWindow *window, 
56                                   gpointer data)
57 {
58         WrappingPage *prefs_wrapping = (WrappingPage *) _page;
59         
60         GtkWidget *vbox1;
61         GtkWidget *vbox2;
62         GtkWidget *label_linewrap;
63         GtkObject *spinbtn_linewrap_adj;
64         GtkWidget *spinbtn_linewrap;
65         GtkWidget *checkbtn_wrapquote;
66         GtkWidget *checkbtn_wrappastes;
67         GtkWidget *checkbtn_autowrap;
68         GtkWidget *checkbtn_autoindent;
69         GtkWidget *hbox1;
70
71         vbox1 = gtk_vbox_new (FALSE, VSPACING);
72         gtk_widget_show (vbox1);
73         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
74
75         vbox2 = gtk_vbox_new (FALSE, 0);
76         gtk_widget_show (vbox2);
77         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
78
79         PACK_CHECK_BUTTON (vbox2, checkbtn_autowrap, _("Auto wrapping"));
80         PACK_CHECK_BUTTON (vbox2, checkbtn_wrapquote, _("Wrap quotation"));
81         PACK_CHECK_BUTTON (vbox2, checkbtn_wrappastes, _("Wrap pasted text"));
82         PACK_CHECK_BUTTON (vbox2, checkbtn_autoindent, _("Auto indent"));
83
84         hbox1 = gtk_hbox_new (FALSE, 8);
85         gtk_widget_show (hbox1);
86         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
87
88         label_linewrap = gtk_label_new (_("Wrap messages at"));
89         gtk_widget_show (label_linewrap);
90         gtk_box_pack_start (GTK_BOX (hbox1), label_linewrap, FALSE, FALSE, 4);
91
92         spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 0);
93         spinbtn_linewrap = gtk_spin_button_new
94                 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
95         gtk_widget_set_size_request (spinbtn_linewrap, 64, -1);
96         gtk_widget_show (spinbtn_linewrap);
97         gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_linewrap, FALSE, FALSE, 0);
98         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
99
100         label_linewrap = gtk_label_new (_("characters"));
101         gtk_widget_show (label_linewrap);
102         gtk_box_pack_start (GTK_BOX (hbox1), label_linewrap, FALSE, FALSE, 0);
103
104         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_autowrap),
105                                      prefs_common.autowrap);
106         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_wrapquote),
107                                      prefs_common.linewrap_quote);
108         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_wrappastes),
109                                      prefs_common.linewrap_pastes);
110         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_autoindent),
111                                      prefs_common.auto_indent);
112         gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_linewrap),
113                                   prefs_common.linewrap_len);
114
115         prefs_wrapping->window                  = GTK_WIDGET(window);
116         prefs_wrapping->spinbtn_linewrap        = spinbtn_linewrap;
117         prefs_wrapping->checkbtn_wrapquote      = checkbtn_wrapquote;
118         prefs_wrapping->checkbtn_wrappastes     = checkbtn_wrappastes;
119         prefs_wrapping->checkbtn_autowrap       = checkbtn_autowrap;
120         prefs_wrapping->checkbtn_autoindent     = checkbtn_autoindent;
121
122         prefs_wrapping->page.widget = vbox1;
123 }
124
125 static void prefs_wrapping_save(PrefsPage *_page)
126 {
127         WrappingPage *page = (WrappingPage *) _page;
128
129         prefs_common.linewrap_len = 
130                 gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(page->spinbtn_linewrap));
131         prefs_common.linewrap_quote = 
132                 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_wrapquote));
133         prefs_common.linewrap_pastes = 
134                 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_wrappastes));
135         prefs_common.autowrap =
136                 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_autowrap));
137         prefs_common.auto_indent =
138                 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_autoindent));
139 }
140
141 static void prefs_wrapping_destroy_widget(PrefsPage *_page)
142 {
143 }
144
145 WrappingPage *prefs_wrapping;
146
147 void prefs_wrapping_init(void)
148 {
149         WrappingPage *page;
150         static gchar *path[3];
151
152         path[0] = _("Compose");
153         path[1] = _("Wrapping");
154         path[2] = NULL;
155
156         page = g_new0(WrappingPage, 1);
157         page->page.path = path;
158         page->page.create_widget = prefs_wrapping_create_widget;
159         page->page.destroy_widget = prefs_wrapping_destroy_widget;
160         page->page.save_page = prefs_wrapping_save;
161         page->page.weight = 182.0;
162         prefs_gtk_register_page((PrefsPage *) page);
163         prefs_wrapping = page;
164 }
165
166 void prefs_wrapping_done(void)
167 {
168         prefs_gtk_unregister_page((PrefsPage *) prefs_wrapping);
169         g_free(prefs_wrapping);
170 }