2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 2005-2006 Colin Leroy <colin@colino.net> & The Sylpheed-Claws Team
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 2 of the License, or
8 * (at your option) any later version.
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.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30 #include <glib/gi18n.h>
32 #include <gdk/gdkkeysyms.h>
34 #include "prefs_common.h"
35 #include "prefs_gtk.h"
37 #include "gtk/gtkutils.h"
38 #include "gtk/prefswindow.h"
40 #include "manage_window.h"
41 #include "quote_fmt.h"
43 typedef struct _QuotePage
49 GtkWidget *entry_quotemark;
50 GtkWidget *text_quotefmt;
51 GtkWidget *entry_fw_quotemark;
52 GtkWidget *text_fw_quotefmt;
53 GtkWidget *entry_quote_chars;
54 GtkWidget *label_quote_chars;
55 GtkWidget *btn_quotedesc;
56 GtkWidget *checkbtn_reply_with_quote;
59 void prefs_quote_create_widget(PrefsPage *_page, GtkWindow *window,
62 QuotePage *prefs_quote = (QuotePage *) _page;
65 GtkWidget *frame_quote;
66 GtkWidget *vbox_quote;
69 GtkWidget *label_quotemark;
70 GtkWidget *entry_quotemark;
71 GtkWidget *scrolledwin_quotefmt;
72 GtkWidget *text_quotefmt;
74 GtkWidget *entry_fw_quotemark;
75 GtkWidget *text_fw_quotefmt;
77 GtkWidget *entry_quote_chars;
78 GtkWidget *label_quote_chars;
80 GtkWidget *btn_quotedesc;
82 GtkWidget *checkbtn_reply_with_quote;
84 vbox1 = gtk_vbox_new (FALSE, VSPACING);
85 gtk_widget_show (vbox1);
86 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
90 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
92 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
94 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
95 gtk_widget_show (vbox_quote);
96 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
97 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
99 hbox1 = gtk_hbox_new (FALSE, 32);
100 gtk_widget_show (hbox1);
101 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
103 hbox2 = gtk_hbox_new (FALSE, 8);
104 gtk_widget_show (hbox2);
105 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
107 label_quotemark = gtk_label_new (_("Quotation mark"));
108 gtk_widget_show (label_quotemark);
109 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
111 entry_quotemark = gtk_entry_new ();
112 gtk_widget_show (entry_quotemark);
113 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
114 gtk_widget_set_size_request (entry_quotemark, 64, -1);
116 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
117 gtk_widget_show (scrolledwin_quotefmt);
118 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
120 gtk_scrolled_window_set_policy
121 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
122 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
123 gtk_scrolled_window_set_shadow_type
124 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
126 text_quotefmt = gtk_text_view_new ();
127 gtk_widget_show (text_quotefmt);
128 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
129 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_quotefmt), TRUE);
130 gtk_widget_set_size_request(text_quotefmt, -1, 60);
134 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
136 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
137 gtk_widget_show (vbox_quote);
138 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
139 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
141 hbox1 = gtk_hbox_new (FALSE, 32);
142 gtk_widget_show (hbox1);
143 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
145 hbox2 = gtk_hbox_new (FALSE, 8);
146 gtk_widget_show (hbox2);
147 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
149 label_quotemark = gtk_label_new (_("Quotation mark"));
150 gtk_widget_show (label_quotemark);
151 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
153 entry_fw_quotemark = gtk_entry_new ();
154 gtk_widget_show (entry_fw_quotemark);
155 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
157 gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
159 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
160 gtk_widget_show (scrolledwin_quotefmt);
161 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
163 gtk_scrolled_window_set_policy
164 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
165 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
166 gtk_scrolled_window_set_shadow_type
167 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
169 text_fw_quotefmt = gtk_text_view_new ();
170 gtk_widget_show (text_fw_quotefmt);
171 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
173 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
174 gtk_widget_set_size_request (text_fw_quotefmt, -1, 60);
176 hbox1 = gtk_hbox_new (FALSE, 32);
177 gtk_widget_show (hbox1);
178 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
181 gtk_button_new_with_label (_(" Description of symbols... "));
182 gtk_widget_show (btn_quotedesc);
183 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
184 g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
185 G_CALLBACK(quote_fmt_quote_description), GTK_WIDGET(window));
189 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
191 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
192 gtk_widget_show (vbox_quote);
193 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
194 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
196 hbox1 = gtk_hbox_new (FALSE, 32);
197 gtk_widget_show (hbox1);
198 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
200 hbox2 = gtk_hbox_new (FALSE, 8);
201 gtk_widget_show (hbox2);
202 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
204 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
205 gtk_widget_show (label_quote_chars);
206 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
208 entry_quote_chars = gtk_entry_new ();
209 gtk_widget_show (entry_quote_chars);
210 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
212 gtk_widget_set_size_request (entry_quote_chars, 64, -1);
214 pref_set_textview_from_pref(GTK_TEXT_VIEW(text_quotefmt), prefs_common.quotefmt);
215 pref_set_textview_from_pref(GTK_TEXT_VIEW(text_fw_quotefmt), prefs_common.fw_quotefmt);
217 gtk_entry_set_text(GTK_ENTRY(entry_quotemark),
218 prefs_common.quotemark?prefs_common.quotemark:"");
219 gtk_entry_set_text(GTK_ENTRY(entry_fw_quotemark),
220 prefs_common.fw_quotemark?prefs_common.fw_quotemark:"");
221 gtk_entry_set_text(GTK_ENTRY(entry_quote_chars),
222 prefs_common.quote_chars?prefs_common.quote_chars:"");
223 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_reply_with_quote),
224 prefs_common.reply_with_quote);
226 prefs_quote->window = GTK_WIDGET(window);
227 prefs_quote->text_quotefmt = text_quotefmt;
228 prefs_quote->text_fw_quotefmt = text_fw_quotefmt;
229 prefs_quote->entry_quotemark = entry_quotemark;
230 prefs_quote->entry_fw_quotemark = entry_fw_quotemark;
231 prefs_quote->entry_quote_chars = entry_quote_chars;
232 prefs_quote->checkbtn_reply_with_quote
233 = checkbtn_reply_with_quote;
234 prefs_quote->page.widget = vbox1;
237 void prefs_quote_save(PrefsPage *_page)
239 QuotePage *page = (QuotePage *) _page;
241 g_free(prefs_common.quotefmt);
242 prefs_common.quotefmt = NULL;
243 g_free(prefs_common.fw_quotefmt);
244 prefs_common.fw_quotefmt = NULL;
245 g_free(prefs_common.quotemark);
246 prefs_common.quotemark = NULL;
247 g_free(prefs_common.fw_quotemark);
248 prefs_common.fw_quotemark = NULL;
249 g_free(prefs_common.quote_chars);
250 prefs_common.quote_chars = NULL;
252 prefs_common.quotefmt = pref_get_pref_from_textview(
253 GTK_TEXT_VIEW(page->text_quotefmt));
255 prefs_common.fw_quotefmt = pref_get_pref_from_textview(
256 GTK_TEXT_VIEW(page->text_fw_quotefmt));
258 prefs_common.quotemark = gtk_editable_get_chars(
259 GTK_EDITABLE(page->entry_quotemark), 0, -1);
260 prefs_common.fw_quotemark = gtk_editable_get_chars(
261 GTK_EDITABLE(page->entry_fw_quotemark), 0, -1);
262 prefs_common.quote_chars = gtk_editable_get_chars(
263 GTK_EDITABLE(page->entry_quote_chars), 0, -1);
264 prefs_common.reply_with_quote = gtk_toggle_button_get_active(
265 GTK_TOGGLE_BUTTON(page->checkbtn_reply_with_quote));
267 remove_space(prefs_common.quote_chars);
270 static void prefs_quote_destroy_widget(PrefsPage *_page)
274 QuotePage *prefs_quote;
276 void prefs_quote_init(void)
279 static gchar *path[3];
281 path[0] = _("Compose");
282 path[1] = _("Quoting");
285 page = g_new0(QuotePage, 1);
286 page->page.path = path;
287 page->page.create_widget = prefs_quote_create_widget;
288 page->page.destroy_widget = prefs_quote_destroy_widget;
289 page->page.save_page = prefs_quote_save;
290 page->page.weight = 185.0;
291 prefs_gtk_register_page((PrefsPage *) page);
295 void prefs_quote_done(void)
297 prefs_gtk_unregister_page((PrefsPage *) prefs_quote);