2 * (GLABELS) Label and Business Card Creation program for GNOME
4 * prefs-dialog.c: Preferences dialog module
6 * Copyright (C) 2001-2002 Jim Evins <evins@snaught.com>.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 #include <libgnome/libgnome.h>
25 #include <libgnomeui/libgnomeui.h>
26 #include <glade/glade-xml.h>
28 #include "prefs-dialog.h"
30 #include "mygal/widget-color-combo.h"
34 /*========================================================*/
35 /* Private macros and constants. */
36 /*========================================================*/
38 #define US_LETTER_ID "US-Letter"
41 /*========================================================*/
43 /*========================================================*/
45 struct _glPrefsDialogPrivate
49 /* Units properties */
50 GtkWidget *units_points_radio;
51 GtkWidget *units_inches_radio;
52 GtkWidget *units_mm_radio;
54 /* Page size properties */
55 GtkWidget *page_size_us_letter_radio;
56 GtkWidget *page_size_a4_radio;
58 /* Default text properties */
59 GtkWidget *text_family_entry;
60 GtkWidget *text_family_combo;
61 GtkWidget *text_size_spin;
62 GtkWidget *text_bold_toggle;
63 GtkWidget *text_italic_toggle;
64 GtkWidget *text_color_combo;
65 GtkWidget *text_left_toggle;
66 GtkWidget *text_center_toggle;
67 GtkWidget *text_right_toggle;
68 GtkWidget *text_line_spacing_spin;
70 /* Default line properties */
71 GtkWidget *line_width_spin;
72 GtkWidget *line_color_combo;
74 /* Default fill properties */
75 GtkWidget *fill_color_combo;
78 /*========================================================*/
79 /* Private globals. */
80 /*========================================================*/
82 static glHigDialogClass* parent_class = NULL;
84 /*========================================================*/
85 /* Private function prototypes. */
86 /*========================================================*/
88 static void gl_prefs_dialog_class_init (glPrefsDialogClass *klass);
89 static void gl_prefs_dialog_init (glPrefsDialog *dlg);
90 static void gl_prefs_dialog_finalize (GObject *object);
91 static void gl_prefs_dialog_construct (glPrefsDialog *dlg);
93 static void response_cb (glPrefsDialog *dialog,
97 static void construct_locale_page (glPrefsDialog *dlg);
98 static void construct_object_page (glPrefsDialog *dlg);
100 static void align_toggle_cb (GtkToggleButton *toggle,
103 static void update_locale_page_from_prefs (glPrefsDialog *dlg);
104 static void update_object_page_from_prefs (glPrefsDialog *dlg);
106 static void update_prefs_from_locale_page (glPrefsDialog *dlg);
107 static void update_prefs_from_object_page (glPrefsDialog *dlg);
110 /*****************************************************************************/
111 /* Boilerplate object stuff. */
112 /*****************************************************************************/
114 gl_prefs_dialog_get_type (void)
116 static GType type = 0;
120 static const GTypeInfo info =
122 sizeof (glPrefsDialogClass),
123 NULL, /* base_init */
124 NULL, /* base_finalize */
125 (GClassInitFunc) gl_prefs_dialog_class_init,
126 NULL, /* class_finalize */
127 NULL, /* class_data */
128 sizeof (glPrefsDialog),
130 (GInstanceInitFunc) gl_prefs_dialog_init,
134 type = g_type_register_static (GL_TYPE_HIG_DIALOG,
135 "glPrefsDialog", &info, 0);
142 gl_prefs_dialog_class_init (glPrefsDialogClass *klass)
144 GObjectClass *object_class = G_OBJECT_CLASS (klass);
146 gl_debug (DEBUG_PREFS, "");
148 parent_class = g_type_class_peek_parent (klass);
150 object_class->finalize = gl_prefs_dialog_finalize;
154 gl_prefs_dialog_init (glPrefsDialog *dlg)
156 gl_debug (DEBUG_PREFS, "START");
158 dlg->priv = g_new0 (glPrefsDialogPrivate, 1);
160 dlg->priv->gui = glade_xml_new (GLABELS_GLADE_DIR "prefs-dialog.glade",
164 if (!dlg->priv->gui) {
165 g_warning ("Could not open prefs-dialog.glade, reinstall glabels!");
169 gl_debug (DEBUG_PREFS, "END");
173 gl_prefs_dialog_finalize (GObject *object)
177 gl_debug (DEBUG_PREFS, "START");
179 g_return_if_fail (object != NULL);
181 dlg = GL_PREFS_DIALOG (object);
183 g_return_if_fail (GL_IS_PREFS_DIALOG (dlg));
184 g_return_if_fail (dlg->priv != NULL);
186 G_OBJECT_CLASS (parent_class)->finalize (object);
190 gl_debug (DEBUG_PREFS, "END");
193 /*****************************************************************************/
194 /* NEW preferences dialog. */
195 /*****************************************************************************/
197 gl_prefs_dialog_new (GtkWindow *parent)
201 gl_debug (DEBUG_PREFS, "START");
202 gl_debug (DEBUG_PREFS, "page size = \"%s\"", gl_prefs->default_page_size);
204 dlg = GTK_WIDGET (g_object_new (GL_TYPE_PREFS_DIALOG, NULL));
207 gtk_window_set_transient_for (GTK_WINDOW (dlg), parent);
209 gl_prefs_dialog_construct (GL_PREFS_DIALOG(dlg));
212 gl_debug (DEBUG_PREFS, "END");
217 /*---------------------------------------------------------------------------*/
218 /* PRIVATE. Construct composite widget. */
219 /*---------------------------------------------------------------------------*/
221 gl_prefs_dialog_construct (glPrefsDialog *dlg)
225 g_return_if_fail (GL_IS_PREFS_DIALOG (dlg));
226 g_return_if_fail (dlg->priv != NULL);
228 gtk_dialog_add_button (GTK_DIALOG(dlg),
229 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
231 gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_CLOSE);
233 g_signal_connect(G_OBJECT (dlg), "response",
234 G_CALLBACK (response_cb), NULL);
236 notebook = glade_xml_get_widget (dlg->priv->gui, "prefs_notebook");
237 gl_hig_dialog_add_widget (GL_HIG_DIALOG(dlg), notebook);
239 construct_locale_page (dlg);
240 construct_object_page (dlg);
242 update_locale_page_from_prefs (dlg);
243 update_object_page_from_prefs (dlg);
245 gtk_widget_show_all (GTK_DIALOG (dlg)->vbox);
247 gtk_window_set_modal (GTK_WINDOW (dlg), TRUE);
248 gtk_window_set_title (GTK_WINDOW (dlg), _("gLabels Preferences"));
249 gtk_window_set_resizable (GTK_WINDOW (dlg), FALSE);
252 /*---------------------------------------------------------------------------*/
253 /* PRIVATE. "Response" callback. */
254 /*---------------------------------------------------------------------------*/
256 response_cb (glPrefsDialog *dlg,
260 gl_debug (DEBUG_VIEW, "START");
262 g_return_if_fail(dlg != NULL);
263 g_return_if_fail(GTK_IS_DIALOG(dlg));
266 case GTK_RESPONSE_CLOSE:
267 gtk_widget_hide (GTK_WIDGET(dlg));
269 case GTK_RESPONSE_DELETE_EVENT:
272 g_print ("response = %d", response);
273 g_assert_not_reached ();
276 gl_debug (DEBUG_VIEW, "END");
279 /*--------------------------------------------------------------------------*/
280 /* PRIVATE. Build Locale Properties Notebook Tab */
281 /*--------------------------------------------------------------------------*/
283 construct_locale_page (glPrefsDialog *dlg)
286 dlg->priv->units_points_radio =
287 glade_xml_get_widget (dlg->priv->gui, "units_points_radio");
289 dlg->priv->units_inches_radio =
290 glade_xml_get_widget (dlg->priv->gui, "units_inches_radio");
292 dlg->priv->units_mm_radio =
293 glade_xml_get_widget (dlg->priv->gui, "units_mm_radio");
295 dlg->priv->page_size_us_letter_radio =
296 glade_xml_get_widget (dlg->priv->gui, "page_size_us_letter_radio");
298 dlg->priv->page_size_a4_radio =
299 glade_xml_get_widget (dlg->priv->gui, "page_size_a4_radio");
301 g_signal_connect_swapped (
302 G_OBJECT(dlg->priv->units_points_radio),
303 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
304 g_signal_connect_swapped (
305 G_OBJECT(dlg->priv->units_inches_radio),
306 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
307 g_signal_connect_swapped (
308 G_OBJECT(dlg->priv->units_mm_radio),
309 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
310 g_signal_connect_swapped (
311 G_OBJECT(dlg->priv->page_size_us_letter_radio),
312 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
313 g_signal_connect_swapped (
314 G_OBJECT(dlg->priv->page_size_a4_radio),
315 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
318 /*--------------------------------------------------------------------------*/
319 /* PRIVATE. Build Default Object Properties Notebook Tab */
320 /*--------------------------------------------------------------------------*/
322 construct_object_page (glPrefsDialog *dlg)
326 dlg->priv->text_family_entry =
327 glade_xml_get_widget (dlg->priv->gui, "text_family_entry");
328 dlg->priv->text_family_combo =
329 glade_xml_get_widget (dlg->priv->gui, "text_family_combo");
330 dlg->priv->text_size_spin =
331 glade_xml_get_widget (dlg->priv->gui, "text_size_spin");
332 dlg->priv->text_bold_toggle =
333 glade_xml_get_widget (dlg->priv->gui, "text_bold_toggle");
334 dlg->priv->text_italic_toggle =
335 glade_xml_get_widget (dlg->priv->gui, "text_italic_toggle");
336 dlg->priv->text_color_combo =
337 glade_xml_get_widget (dlg->priv->gui, "text_color_combo");
338 dlg->priv->text_left_toggle =
339 glade_xml_get_widget (dlg->priv->gui, "text_left_toggle");
340 dlg->priv->text_center_toggle =
341 glade_xml_get_widget (dlg->priv->gui, "text_center_toggle");
342 dlg->priv->text_right_toggle =
343 glade_xml_get_widget (dlg->priv->gui, "text_right_toggle");
344 dlg->priv->text_line_spacing_spin =
345 glade_xml_get_widget (dlg->priv->gui, "text_line_spacing_spin");
347 dlg->priv->line_width_spin =
348 glade_xml_get_widget (dlg->priv->gui, "line_width_spin");
349 dlg->priv->line_color_combo =
350 glade_xml_get_widget (dlg->priv->gui, "line_color_combo");
352 dlg->priv->fill_color_combo =
353 glade_xml_get_widget (dlg->priv->gui, "fill_color_combo");
355 /* Load family names */
356 family_names = gnome_font_family_list ();
357 gtk_combo_set_popdown_strings (GTK_COMBO(dlg->priv->text_family_combo),
359 gnome_font_family_list_free (family_names);
362 g_signal_connect_swapped (G_OBJECT(dlg->priv->text_family_entry),
364 G_CALLBACK(update_prefs_from_object_page),
366 g_signal_connect_swapped (G_OBJECT(dlg->priv->text_size_spin),
368 G_CALLBACK(update_prefs_from_object_page),
370 g_signal_connect_swapped (G_OBJECT(dlg->priv->text_bold_toggle),
372 G_CALLBACK(update_prefs_from_object_page),
374 g_signal_connect_swapped (G_OBJECT(dlg->priv->text_italic_toggle),
376 G_CALLBACK(update_prefs_from_object_page),
378 g_signal_connect_swapped (G_OBJECT(dlg->priv->text_color_combo),
380 G_CALLBACK(update_prefs_from_object_page),
383 g_signal_connect (G_OBJECT(dlg->priv->text_left_toggle),
385 G_CALLBACK(align_toggle_cb),
387 g_signal_connect (G_OBJECT(dlg->priv->text_center_toggle),
389 G_CALLBACK(align_toggle_cb),
391 g_signal_connect (G_OBJECT(dlg->priv->text_right_toggle),
393 G_CALLBACK(align_toggle_cb),
396 g_signal_connect_swapped (G_OBJECT(dlg->priv->text_line_spacing_spin),
398 G_CALLBACK(update_prefs_from_object_page),
401 g_signal_connect_swapped (G_OBJECT(dlg->priv->line_width_spin),
403 G_CALLBACK(update_prefs_from_object_page),
405 g_signal_connect_swapped (G_OBJECT(dlg->priv->line_color_combo),
407 G_CALLBACK(update_prefs_from_object_page),
410 g_signal_connect_swapped (G_OBJECT(dlg->priv->fill_color_combo),
412 G_CALLBACK(update_prefs_from_object_page),
417 /*--------------------------------------------------------------------------*/
418 /* PRIVATE. Alignment togglebutton callback. */
419 /*--------------------------------------------------------------------------*/
421 align_toggle_cb (GtkToggleButton *toggle,
424 if (gtk_toggle_button_get_active (toggle)) {
426 if (GTK_WIDGET (toggle) == GTK_WIDGET (dlg->priv->text_left_toggle)) {
427 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
428 (dlg->priv->text_center_toggle),
430 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
431 (dlg->priv->text_right_toggle),
433 } else if (GTK_WIDGET (toggle) ==
434 GTK_WIDGET (dlg->priv->text_center_toggle)) {
435 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
436 (dlg->priv->text_left_toggle),
438 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
439 (dlg->priv->text_right_toggle),
441 } else if (GTK_WIDGET (toggle) ==
442 GTK_WIDGET (dlg->priv->text_right_toggle)) {
443 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
444 (dlg->priv->text_left_toggle),
446 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
447 (dlg->priv->text_center_toggle),
451 update_prefs_from_object_page (dlg);
457 /*--------------------------------------------------------------------------*/
458 /* PRIVATE. Update locale page widgets from current prefs. */
459 /*--------------------------------------------------------------------------*/
461 update_locale_page_from_prefs (glPrefsDialog *dlg)
463 g_signal_handlers_block_by_func (
464 G_OBJECT(dlg->priv->units_points_radio),
465 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
466 g_signal_handlers_block_by_func (
467 G_OBJECT(dlg->priv->units_inches_radio),
468 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
469 g_signal_handlers_block_by_func (
470 G_OBJECT(dlg->priv->units_mm_radio),
471 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
472 g_signal_handlers_block_by_func (
473 G_OBJECT(dlg->priv->page_size_us_letter_radio),
474 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
475 g_signal_handlers_block_by_func (
476 G_OBJECT(dlg->priv->page_size_a4_radio),
477 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
479 switch (gl_prefs->units) {
481 gtk_toggle_button_set_active (
482 GTK_TOGGLE_BUTTON(dlg->priv->units_points_radio),
486 gtk_toggle_button_set_active (
487 GTK_TOGGLE_BUTTON(dlg->priv->units_inches_radio),
491 gtk_toggle_button_set_active (
492 GTK_TOGGLE_BUTTON(dlg->priv->units_mm_radio),
496 g_warning ("Illegal units"); /* Should not happen */
500 if ( g_strcasecmp(gl_prefs->default_page_size, US_LETTER_ID) == 0) {
501 gtk_toggle_button_set_active (
502 GTK_TOGGLE_BUTTON(dlg->priv->page_size_us_letter_radio),
504 } else if ( g_strcasecmp(gl_prefs->default_page_size, A4_ID) == 0) {
505 gtk_toggle_button_set_active (
506 GTK_TOGGLE_BUTTON(dlg->priv->page_size_a4_radio),
509 g_warning ("Unknown default page size"); /* Shouldn't happen */
512 g_signal_handlers_unblock_by_func (
513 G_OBJECT(dlg->priv->units_points_radio),
514 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
515 g_signal_handlers_unblock_by_func (
516 G_OBJECT(dlg->priv->units_inches_radio),
517 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
518 g_signal_handlers_unblock_by_func (
519 G_OBJECT(dlg->priv->units_mm_radio),
520 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
521 g_signal_handlers_unblock_by_func (
522 G_OBJECT(dlg->priv->page_size_us_letter_radio),
523 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
524 g_signal_handlers_unblock_by_func (
525 G_OBJECT(dlg->priv->page_size_a4_radio),
526 G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dlg));
529 /*--------------------------------------------------------------------------*/
530 /* PRIVATE. Update object page widgets from current prefs. */
531 /*--------------------------------------------------------------------------*/
533 update_object_page_from_prefs (glPrefsDialog *dlg)
536 gchar *good_font_family;
539 g_signal_handlers_block_by_func (
540 G_OBJECT(dlg->priv->text_family_entry),
541 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
542 g_signal_handlers_block_by_func (
543 G_OBJECT(dlg->priv->text_size_spin),
544 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
545 g_signal_handlers_block_by_func (
546 G_OBJECT(dlg->priv->text_bold_toggle),
547 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
548 g_signal_handlers_block_by_func (
549 G_OBJECT(dlg->priv->text_italic_toggle),
550 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
551 g_signal_handlers_block_by_func (
552 G_OBJECT(dlg->priv->text_color_combo),
553 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
554 g_signal_handlers_block_by_func (
555 G_OBJECT(dlg->priv->text_left_toggle),
556 G_CALLBACK(align_toggle_cb), G_OBJECT(dlg));
557 g_signal_handlers_block_by_func (
558 G_OBJECT(dlg->priv->text_center_toggle),
559 G_CALLBACK(align_toggle_cb), G_OBJECT(dlg));
560 g_signal_handlers_block_by_func (
561 G_OBJECT(dlg->priv->text_right_toggle),
562 G_CALLBACK(align_toggle_cb), G_OBJECT(dlg));
563 g_signal_handlers_block_by_func (
564 G_OBJECT(dlg->priv->text_line_spacing_spin),
565 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
566 g_signal_handlers_block_by_func (
567 G_OBJECT(dlg->priv->line_width_spin),
568 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
569 g_signal_handlers_block_by_func (
570 G_OBJECT(dlg->priv->line_color_combo),
571 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
572 g_signal_handlers_block_by_func (
573 G_OBJECT(dlg->priv->fill_color_combo),
574 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
577 /* Make sure we have a valid font family. if not provide a good default. */
578 family_names = gnome_font_family_list ();
579 if (g_list_find_custom (family_names,
580 gl_prefs->default_font_family,
581 (GCompareFunc)g_utf8_collate)) {
582 good_font_family = g_strdup (gl_prefs->default_font_family);
584 if (family_names != NULL) {
585 good_font_family = g_strdup (family_names->data); /* 1st entry */
587 good_font_family = NULL;
590 gnome_font_family_list_free (family_names);
591 gtk_entry_set_text (GTK_ENTRY (dlg->priv->text_family_entry), good_font_family);
592 g_free (good_font_family);
594 gtk_spin_button_set_value (GTK_SPIN_BUTTON (dlg->priv->text_size_spin),
595 gl_prefs->default_font_size);
597 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->text_bold_toggle),
598 (gl_prefs->default_font_weight == GNOME_FONT_BOLD));
600 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->text_italic_toggle),
601 gl_prefs->default_font_italic_flag);
603 gdk_color = gl_color_to_gdk_color (gl_prefs->default_text_color);
604 color_combo_set_color (COLOR_COMBO(dlg->priv->text_color_combo), gdk_color);
607 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->text_left_toggle),
608 (gl_prefs->default_text_alignment == GTK_JUSTIFY_LEFT));
609 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->text_center_toggle),
610 (gl_prefs->default_text_alignment == GTK_JUSTIFY_CENTER));
611 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->text_right_toggle),
612 (gl_prefs->default_text_alignment == GTK_JUSTIFY_RIGHT));
614 gtk_spin_button_set_value (GTK_SPIN_BUTTON (dlg->priv->text_line_spacing_spin),
615 gl_prefs->default_text_line_spacing);
617 gtk_spin_button_set_value (GTK_SPIN_BUTTON (dlg->priv->line_width_spin),
618 gl_prefs->default_line_width);
620 gdk_color = gl_color_to_gdk_color (gl_prefs->default_line_color);
621 color_combo_set_color (COLOR_COMBO(dlg->priv->line_color_combo), gdk_color);
625 gdk_color = gl_color_to_gdk_color (gl_prefs->default_fill_color);
626 color_combo_set_color (COLOR_COMBO(dlg->priv->fill_color_combo), gdk_color);
630 g_signal_handlers_unblock_by_func (
631 G_OBJECT(dlg->priv->text_family_entry),
632 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
633 g_signal_handlers_unblock_by_func (
634 G_OBJECT(dlg->priv->text_size_spin),
635 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
636 g_signal_handlers_unblock_by_func (
637 G_OBJECT(dlg->priv->text_bold_toggle),
638 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
639 g_signal_handlers_unblock_by_func (
640 G_OBJECT(dlg->priv->text_italic_toggle),
641 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
642 g_signal_handlers_unblock_by_func (
643 G_OBJECT(dlg->priv->text_color_combo),
644 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
645 g_signal_handlers_unblock_by_func (
646 G_OBJECT(dlg->priv->text_left_toggle),
647 G_CALLBACK(align_toggle_cb), G_OBJECT(dlg));
648 g_signal_handlers_unblock_by_func (
649 G_OBJECT(dlg->priv->text_center_toggle),
650 G_CALLBACK(align_toggle_cb), G_OBJECT(dlg));
651 g_signal_handlers_unblock_by_func (
652 G_OBJECT(dlg->priv->text_right_toggle),
653 G_CALLBACK(align_toggle_cb), G_OBJECT(dlg));
654 g_signal_handlers_unblock_by_func (
655 G_OBJECT(dlg->priv->text_line_spacing_spin),
656 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
657 g_signal_handlers_unblock_by_func (
658 G_OBJECT(dlg->priv->line_width_spin),
659 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
660 g_signal_handlers_unblock_by_func (
661 G_OBJECT(dlg->priv->line_color_combo),
662 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
663 g_signal_handlers_unblock_by_func (
664 G_OBJECT(dlg->priv->fill_color_combo),
665 G_CALLBACK(update_prefs_from_object_page), G_OBJECT(dlg));
668 /*--------------------------------------------------------------------------*/
669 /* PRIVATE. Update prefs from current state of locale page widgets. */
670 /*--------------------------------------------------------------------------*/
672 update_prefs_from_locale_page (glPrefsDialog *dlg)
674 if (gtk_toggle_button_get_active (
675 GTK_TOGGLE_BUTTON(dlg->priv->units_points_radio))) {
676 gl_prefs->units = GL_UNITS_POINT;
678 if (gtk_toggle_button_get_active (
679 GTK_TOGGLE_BUTTON(dlg->priv->units_inches_radio))) {
680 gl_prefs->units = GL_UNITS_INCH;
682 if (gtk_toggle_button_get_active (
683 GTK_TOGGLE_BUTTON(dlg->priv->units_mm_radio))) {
684 gl_prefs->units = GL_UNITS_MM;
687 if (gtk_toggle_button_get_active (
688 GTK_TOGGLE_BUTTON(dlg->priv->page_size_us_letter_radio))) {
689 gl_prefs->default_page_size = US_LETTER_ID;
691 if (gtk_toggle_button_get_active (
692 GTK_TOGGLE_BUTTON(dlg->priv->page_size_a4_radio))) {
693 gl_prefs->default_page_size = A4_ID;
696 gl_prefs_model_save_settings (gl_prefs);
699 /*--------------------------------------------------------------------------*/
700 /* PRIVATE. Update prefs from current state of object page widgets. */
701 /*--------------------------------------------------------------------------*/
703 update_prefs_from_object_page (glPrefsDialog *dlg)
709 g_free (gl_prefs->default_font_family);
710 gl_prefs->default_font_family =
711 gtk_editable_get_chars (GTK_EDITABLE (dlg->priv->text_family_entry),
713 gl_prefs->default_font_size =
714 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->text_size_spin));
716 if (gtk_toggle_button_get_active
717 (GTK_TOGGLE_BUTTON (dlg->priv->text_bold_toggle))) {
718 gl_prefs->default_font_weight = GNOME_FONT_BOLD;
720 gl_prefs->default_font_weight = GNOME_FONT_BOOK;
723 gl_prefs->default_font_italic_flag =
724 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
725 (dlg->priv->text_italic_toggle));
727 gdk_color = color_combo_get_color (COLOR_COMBO(dlg->priv->text_color_combo),
730 gl_prefs->default_text_color = gl_color_from_gdk_color (gdk_color);
733 if (gtk_toggle_button_get_active
734 (GTK_TOGGLE_BUTTON (dlg->priv->text_left_toggle))) {
735 gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
737 if (gtk_toggle_button_get_active
738 (GTK_TOGGLE_BUTTON (dlg->priv->text_right_toggle))) {
739 gl_prefs->default_text_alignment = GTK_JUSTIFY_RIGHT;
741 if (gtk_toggle_button_get_active
742 (GTK_TOGGLE_BUTTON (dlg->priv->text_center_toggle))) {
743 gl_prefs->default_text_alignment = GTK_JUSTIFY_CENTER;
745 /* Should not happen. */
746 gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
750 gl_prefs->default_text_line_spacing =
751 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->text_line_spacing_spin));
753 gl_prefs->default_line_width =
754 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dlg->priv->line_width_spin));
756 gdk_color = color_combo_get_color (COLOR_COMBO(dlg->priv->line_color_combo),
759 gl_prefs->default_line_color = gl_color_from_gdk_color (gdk_color);
763 gdk_color = color_combo_get_color (COLOR_COMBO(dlg->priv->fill_color_combo),
766 gl_prefs->default_fill_color = gl_color_from_gdk_color (gdk_color);
769 gl_prefs_model_save_settings (gl_prefs);