]> git.sur5r.net Git - glabels/blob - glabels2/src/prefs-dialog.c
2007-09-27 Jim Evins <evins@snaught.com>
[glabels] / glabels2 / src / prefs-dialog.c
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
2
3 /*
4  *  (GLABELS) Label and Business Card Creation program for GNOME
5  *
6  *  prefs-dialog.c:  Preferences dialog module
7  *
8  *  Copyright (C) 2001-2002  Jim Evins <evins@snaught.com>.
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  (at your option) any later version.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with this program; if not, write to the Free Software
22  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
23  */
24 #include <config.h>
25
26 #include "prefs-dialog.h"
27
28 #include <glib/gi18n.h>
29 #include <glade/glade-xml.h>
30 #include <gtk/gtktogglebutton.h>
31 #include <gtk/gtkstock.h>
32 #include <gtk/gtkcombobox.h>
33 #include <gtk/gtkspinbutton.h>
34
35 #include "prefs.h"
36 #include "hig.h"
37 #include "mygal/widget-color-combo.h"
38 #include "color.h"
39 #include "util.h"
40
41 #include "debug.h"
42
43 /*========================================================*/
44 /* Private macros and constants.                          */
45 /*========================================================*/
46
47 #define US_LETTER_ID "US-Letter"
48 #define A4_ID        "A4"
49
50 /*========================================================*/
51 /* Private types.                                         */
52 /*========================================================*/
53
54 struct _glPrefsDialogPrivate
55 {
56         GladeXML   *gui;
57
58         /* Units properties */
59         GtkWidget       *units_points_radio;
60         GtkWidget       *units_inches_radio;
61         GtkWidget       *units_mm_radio;
62
63         /* Page size properties */
64         GtkWidget       *page_size_us_letter_radio;
65         GtkWidget       *page_size_a4_radio;
66
67         /* Default text properties */
68         GtkWidget       *text_family_combo;
69         GtkWidget       *text_size_spin;
70         GtkWidget       *text_bold_toggle;
71         GtkWidget       *text_italic_toggle;
72         GtkWidget       *text_color_combo;
73         GtkWidget       *text_left_toggle;
74         GtkWidget       *text_center_toggle;
75         GtkWidget       *text_right_toggle;
76         GtkWidget       *text_line_spacing_spin;
77
78         /* Default line properties */
79         GtkWidget       *line_width_spin;
80         GtkWidget       *line_color_combo;
81
82         /* Default fill properties */
83         GtkWidget       *fill_color_combo;
84
85         /* Prevent recursion */
86         gboolean    stop_signals;
87 };
88
89 /*========================================================*/
90 /* Private globals.                                       */
91 /*========================================================*/
92
93
94 /*========================================================*/
95 /* Private function prototypes.                           */
96 /*========================================================*/
97
98 static void gl_prefs_dialog_finalize      (GObject            *object);
99 static void gl_prefs_dialog_construct     (glPrefsDialog      *dialog);
100
101 static void response_cb                   (glPrefsDialog      *dialog,
102                                            gint                response,
103                                            gpointer            user_data);
104
105 static void construct_locale_page         (glPrefsDialog      *dialog);
106 static void construct_object_page         (glPrefsDialog      *dialog);
107
108 static void align_toggle_cb               (GtkToggleButton    *toggle,
109                                            glPrefsDialog      *dialog);
110                                                                                 
111 static void update_locale_page_from_prefs (glPrefsDialog      *dialog);
112 static void update_object_page_from_prefs (glPrefsDialog      *dialog);
113
114 static void update_prefs_from_locale_page (glPrefsDialog      *dialog);
115 static void update_prefs_from_object_page (glPrefsDialog      *dialog);
116
117 \f
118 /*****************************************************************************/
119 /* Boilerplate object stuff.                                                 */
120 /*****************************************************************************/
121 G_DEFINE_TYPE (glPrefsDialog, gl_prefs_dialog, GTK_TYPE_DIALOG);
122
123 static void
124 gl_prefs_dialog_class_init (glPrefsDialogClass *class)
125 {
126         GObjectClass *object_class = G_OBJECT_CLASS (class);
127
128         gl_debug (DEBUG_PREFS, "");
129         
130         gl_prefs_dialog_parent_class = g_type_class_peek_parent (class);
131
132         object_class->finalize = gl_prefs_dialog_finalize;      
133 }
134
135 static void
136 gl_prefs_dialog_init (glPrefsDialog *dialog)
137 {
138         gl_debug (DEBUG_PREFS, "START");
139
140         dialog->priv = g_new0 (glPrefsDialogPrivate, 1);
141
142         dialog->priv->gui = glade_xml_new (GLABELS_GLADE_DIR "prefs-dialog.glade",
143                                         "prefs_notebook",
144                                         NULL);
145
146         if (!dialog->priv->gui)
147         {
148                 g_critical ("Could not open prefs-dialog.glade. gLabels may not be installed correctly!");
149                 return;
150         }
151
152         gtk_container_set_border_width (GTK_CONTAINER(dialog), GL_HIG_PAD2);
153
154         gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
155         gtk_dialog_add_button (GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
156         gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
157
158         g_signal_connect(G_OBJECT (dialog), "response",
159                          G_CALLBACK (response_cb), NULL);
160
161         gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
162         gtk_window_set_title (GTK_WINDOW (dialog), _("gLabels Preferences"));
163         gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
164
165         gl_debug (DEBUG_PREFS, "END");
166 }
167
168 static void 
169 gl_prefs_dialog_finalize (GObject *object)
170 {
171         glPrefsDialog* dialog = GL_PREFS_DIALOG (object);
172         
173         gl_debug (DEBUG_PREFS, "START");
174
175         g_return_if_fail (object != NULL);
176         g_return_if_fail (GL_IS_PREFS_DIALOG (dialog));
177         g_return_if_fail (dialog->priv != NULL);
178
179         if (dialog->priv->gui)
180         {
181                 g_object_unref (G_OBJECT (dialog->priv->gui));
182         }
183         g_free (dialog->priv);
184
185         G_OBJECT_CLASS (gl_prefs_dialog_parent_class)->finalize (object);
186
187         gl_debug (DEBUG_PREFS, "END");
188 }
189
190 /*****************************************************************************/
191 /* NEW preferences dialog.                                                   */
192 /*****************************************************************************/
193 GtkWidget*
194 gl_prefs_dialog_new (GtkWindow *parent)
195 {
196         GtkWidget *dialog;
197
198         gl_debug (DEBUG_PREFS, "START");
199         gl_debug (DEBUG_PREFS, "page size = \"%s\"", gl_prefs->default_page_size);
200
201         dialog = GTK_WIDGET (g_object_new (GL_TYPE_PREFS_DIALOG, NULL));
202
203         if (parent)
204                 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
205         
206         gl_prefs_dialog_construct (GL_PREFS_DIALOG(dialog));
207
208
209         gl_debug (DEBUG_PREFS, "END");
210
211         return dialog;
212 }
213
214 /*---------------------------------------------------------------------------*/
215 /* PRIVATE.  Construct composite widget.                                     */
216 /*---------------------------------------------------------------------------*/
217 static void
218 gl_prefs_dialog_construct (glPrefsDialog *dialog)
219 {
220         GtkWidget *notebook;
221
222         g_return_if_fail (GL_IS_PREFS_DIALOG (dialog));
223         g_return_if_fail (dialog->priv != NULL);
224
225         notebook = glade_xml_get_widget (dialog->priv->gui, "prefs_notebook");
226         gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), notebook, FALSE, FALSE, 0);
227
228         construct_locale_page (dialog);
229         construct_object_page (dialog);
230
231         update_locale_page_from_prefs (dialog);
232         update_object_page_from_prefs (dialog);
233
234         gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);   
235 }
236
237 /*---------------------------------------------------------------------------*/
238 /* PRIVATE.  "Response" callback.                                            */
239 /*---------------------------------------------------------------------------*/
240 static void
241 response_cb (glPrefsDialog *dialog,
242              gint          response,
243              gpointer      user_data)
244 {
245         gl_debug (DEBUG_VIEW, "START");
246
247         g_return_if_fail(dialog != NULL);
248         g_return_if_fail(GTK_IS_DIALOG(dialog));
249
250         switch(response) {
251         case GTK_RESPONSE_CLOSE:
252                 gtk_widget_hide (GTK_WIDGET(dialog));
253                 break;
254         case GTK_RESPONSE_DELETE_EVENT:
255                 break;
256         default:
257                 g_print ("response = %d", response);
258                 g_assert_not_reached ();
259         }
260
261         gl_debug (DEBUG_VIEW, "END");
262 }
263
264 /*--------------------------------------------------------------------------*/
265 /* PRIVATE.  Build Locale Properties Notebook Tab                           */
266 /*--------------------------------------------------------------------------*/
267 static void
268 construct_locale_page (glPrefsDialog *dialog)
269 {
270
271         dialog->priv->units_points_radio =
272                 glade_xml_get_widget (dialog->priv->gui, "units_points_radio");
273
274         dialog->priv->units_inches_radio =
275                 glade_xml_get_widget (dialog->priv->gui, "units_inches_radio");
276
277         dialog->priv->units_mm_radio =
278                 glade_xml_get_widget (dialog->priv->gui, "units_mm_radio");
279
280         dialog->priv->page_size_us_letter_radio =
281                 glade_xml_get_widget (dialog->priv->gui, "page_size_us_letter_radio");
282
283         dialog->priv->page_size_a4_radio =
284                 glade_xml_get_widget (dialog->priv->gui, "page_size_a4_radio");
285
286         g_signal_connect_swapped (
287                 G_OBJECT(dialog->priv->units_points_radio),
288                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
289         g_signal_connect_swapped (
290                 G_OBJECT(dialog->priv->units_inches_radio),
291                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
292         g_signal_connect_swapped (
293                 G_OBJECT(dialog->priv->units_mm_radio),
294                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
295         g_signal_connect_swapped (
296                 G_OBJECT(dialog->priv->page_size_us_letter_radio),
297                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
298         g_signal_connect_swapped (
299                 G_OBJECT(dialog->priv->page_size_a4_radio),
300                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
301 }
302
303 /*--------------------------------------------------------------------------*/
304 /* PRIVATE.  Build Default Object Properties Notebook Tab                   */
305 /*--------------------------------------------------------------------------*/
306 static void
307 construct_object_page (glPrefsDialog *dialog)
308 {
309         GList    *family_names;
310
311         dialog->priv->text_family_combo =
312                 glade_xml_get_widget (dialog->priv->gui, "text_family_combo");
313         dialog->priv->text_size_spin =
314                 glade_xml_get_widget (dialog->priv->gui, "text_size_spin");
315         dialog->priv->text_bold_toggle =
316                 glade_xml_get_widget (dialog->priv->gui, "text_bold_toggle");
317         dialog->priv->text_italic_toggle =
318                 glade_xml_get_widget (dialog->priv->gui, "text_italic_toggle");
319         dialog->priv->text_color_combo =
320                 glade_xml_get_widget (dialog->priv->gui, "text_color_combo");
321         dialog->priv->text_left_toggle =
322                 glade_xml_get_widget (dialog->priv->gui, "text_left_toggle");
323         dialog->priv->text_center_toggle =
324                 glade_xml_get_widget (dialog->priv->gui, "text_center_toggle");
325         dialog->priv->text_right_toggle =
326                 glade_xml_get_widget (dialog->priv->gui, "text_right_toggle");
327         dialog->priv->text_line_spacing_spin =
328                 glade_xml_get_widget (dialog->priv->gui, "text_line_spacing_spin");
329
330         dialog->priv->line_width_spin =
331                 glade_xml_get_widget (dialog->priv->gui, "line_width_spin");
332         dialog->priv->line_color_combo =
333                 glade_xml_get_widget (dialog->priv->gui, "line_color_combo");
334
335         dialog->priv->fill_color_combo =
336                 glade_xml_get_widget (dialog->priv->gui, "fill_color_combo");
337
338         gl_util_combo_box_add_text_model (GTK_COMBO_BOX (dialog->priv->text_family_combo));
339
340         /* Load family names */
341         family_names = gl_util_get_font_family_list ();
342         gl_util_combo_box_set_strings (GTK_COMBO_BOX (dialog->priv->text_family_combo),
343                                        family_names);
344         gl_util_font_family_list_free (family_names);
345                                                                                 
346
347         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_family_combo),
348                                   "changed",
349                                   G_CALLBACK(update_prefs_from_object_page),
350                                   G_OBJECT(dialog));
351         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_size_spin),
352                                   "changed",
353                                   G_CALLBACK(update_prefs_from_object_page),
354                                   G_OBJECT(dialog));
355         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_bold_toggle),
356                                   "toggled",
357                                   G_CALLBACK(update_prefs_from_object_page),
358                                   G_OBJECT(dialog));
359         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_italic_toggle),
360                                   "toggled",
361                                   G_CALLBACK(update_prefs_from_object_page),
362                                   G_OBJECT(dialog));
363         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_color_combo),
364                                   "color_changed",
365                                   G_CALLBACK(update_prefs_from_object_page),
366                                   G_OBJECT(dialog));
367
368         g_signal_connect (G_OBJECT(dialog->priv->text_left_toggle),
369                           "toggled",
370                           G_CALLBACK(align_toggle_cb),
371                           G_OBJECT(dialog));
372         g_signal_connect (G_OBJECT(dialog->priv->text_center_toggle),
373                           "toggled",
374                           G_CALLBACK(align_toggle_cb),
375                           G_OBJECT(dialog));
376         g_signal_connect (G_OBJECT(dialog->priv->text_right_toggle),
377                           "toggled",
378                           G_CALLBACK(align_toggle_cb),
379                           G_OBJECT(dialog));
380
381         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_line_spacing_spin),
382                                   "changed",
383                                   G_CALLBACK(update_prefs_from_object_page),
384                                   G_OBJECT(dialog));
385
386         g_signal_connect_swapped (G_OBJECT(dialog->priv->line_width_spin),
387                                   "changed",
388                                   G_CALLBACK(update_prefs_from_object_page),
389                                   G_OBJECT(dialog));
390         g_signal_connect_swapped (G_OBJECT(dialog->priv->line_color_combo),
391                                   "color_changed",
392                                   G_CALLBACK(update_prefs_from_object_page),
393                                   G_OBJECT(dialog));
394
395         g_signal_connect_swapped (G_OBJECT(dialog->priv->fill_color_combo),
396                                   "color_changed",
397                                   G_CALLBACK(update_prefs_from_object_page),
398                                   G_OBJECT(dialog));
399 }
400
401
402 /*--------------------------------------------------------------------------*/
403 /* PRIVATE.  Alignment togglebutton callback.                               */
404 /*--------------------------------------------------------------------------*/
405 static void
406 align_toggle_cb (GtkToggleButton *toggle,
407                  glPrefsDialog   *dialog)
408 {
409         if (gtk_toggle_button_get_active (toggle))
410         {
411   
412                 if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_left_toggle))
413                 {
414                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
415                                                       (dialog->priv->text_center_toggle),
416                                                       FALSE);
417                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
418                                                       (dialog->priv->text_right_toggle),
419                                                       FALSE);
420                 }
421                 else if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_center_toggle))
422                 {
423                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
424                                                       (dialog->priv->text_left_toggle),
425                                                       FALSE);
426                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
427                                                       (dialog->priv->text_right_toggle),
428                                                       FALSE);
429                 }
430                 else if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_right_toggle))
431                 {
432                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
433                                                       (dialog->priv->text_left_toggle),
434                                                       FALSE);
435                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
436                                                       (dialog->priv->text_center_toggle),
437                                                       FALSE);
438                 }
439                                                                                 
440                 update_prefs_from_object_page (dialog);
441         }
442                                                                                 
443 }
444                                                                                 
445
446 /*--------------------------------------------------------------------------*/
447 /* PRIVATE.  Update locale page widgets from current prefs.                 */
448 /*--------------------------------------------------------------------------*/
449 static void
450 update_locale_page_from_prefs (glPrefsDialog *dialog)
451 {
452         dialog->priv->stop_signals = TRUE;
453
454         switch (gl_prefs->units) {
455         case LGL_UNITS_POINT:
456                 gtk_toggle_button_set_active (
457                         GTK_TOGGLE_BUTTON(dialog->priv->units_points_radio),
458                         TRUE);
459                 break;
460         case LGL_UNITS_INCH:
461                 gtk_toggle_button_set_active (
462                         GTK_TOGGLE_BUTTON(dialog->priv->units_inches_radio),
463                         TRUE);
464                 break;
465         case LGL_UNITS_MM:
466                 gtk_toggle_button_set_active (
467                         GTK_TOGGLE_BUTTON(dialog->priv->units_mm_radio),
468                         TRUE);
469                 break;
470         default:
471                 g_message ("Illegal units");    /* Should not happen */
472                 break;
473         }
474
475         if ( g_strcasecmp(gl_prefs->default_page_size, US_LETTER_ID) == 0)
476         {
477                 gtk_toggle_button_set_active (
478                         GTK_TOGGLE_BUTTON(dialog->priv->page_size_us_letter_radio), TRUE);
479         }
480         else if ( g_strcasecmp(gl_prefs->default_page_size, A4_ID) == 0)
481         {
482                 gtk_toggle_button_set_active (
483                         GTK_TOGGLE_BUTTON(dialog->priv->page_size_a4_radio), TRUE);
484         }
485         else
486         {
487                 g_message ("Unknown default page size"); /* Shouldn't happen */
488         }
489
490         dialog->priv->stop_signals = FALSE;
491 }
492
493 /*--------------------------------------------------------------------------*/
494 /* PRIVATE.  Update object page widgets from current prefs.                 */
495 /*--------------------------------------------------------------------------*/
496 static void
497 update_object_page_from_prefs (glPrefsDialog *dialog)
498 {
499         GList    *family_names;
500         gchar    *good_font_family;
501         GdkColor *gdk_color;
502  
503         dialog->priv->stop_signals = TRUE;
504
505
506         /* Make sure we have a valid font family.  if not provide a good default. */
507         family_names = gl_util_get_font_family_list ();
508         if (g_list_find_custom (family_names,
509                                 gl_prefs->default_font_family,
510                                 (GCompareFunc)g_utf8_collate))
511         {
512                 good_font_family = g_strdup (gl_prefs->default_font_family);
513         }
514         else
515         {
516                 if (family_names != NULL)
517                 {
518                         good_font_family = g_strdup (family_names->data); /* 1st entry */
519                 }
520                 else
521                 {
522                         good_font_family = NULL;
523                 }
524         }
525         gl_util_font_family_list_free (family_names);
526         gl_util_combo_box_set_active_text (GTK_COMBO_BOX (dialog->priv->text_family_combo),
527                                            good_font_family);
528         g_free (good_font_family);
529
530         gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->text_size_spin),
531                                    gl_prefs->default_font_size);
532  
533         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_bold_toggle),
534                                       (gl_prefs->default_font_weight == PANGO_WEIGHT_BOLD));
535  
536         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_italic_toggle),
537                                       gl_prefs->default_font_italic_flag);
538  
539         gdk_color = gl_color_to_gdk_color (gl_prefs->default_text_color);
540         color_combo_set_color (COLOR_COMBO(dialog->priv->text_color_combo), gdk_color);
541         g_free (gdk_color);
542
543         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_left_toggle),
544                                  (gl_prefs->default_text_alignment == GTK_JUSTIFY_LEFT));
545         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_center_toggle),
546                                  (gl_prefs->default_text_alignment == GTK_JUSTIFY_CENTER));
547         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_right_toggle),
548                                  (gl_prefs->default_text_alignment == GTK_JUSTIFY_RIGHT));
549
550         gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->text_line_spacing_spin),
551                                    gl_prefs->default_text_line_spacing);
552
553         gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->line_width_spin),
554                                    gl_prefs->default_line_width);
555  
556         gdk_color = gl_color_to_gdk_color (gl_prefs->default_line_color);
557         color_combo_set_color (COLOR_COMBO(dialog->priv->line_color_combo), gdk_color);
558         g_free (gdk_color);
559
560
561         gdk_color = gl_color_to_gdk_color (gl_prefs->default_fill_color);
562         color_combo_set_color (COLOR_COMBO(dialog->priv->fill_color_combo), gdk_color);
563         g_free (gdk_color);
564
565
566         dialog->priv->stop_signals = FALSE;
567 }
568
569 /*--------------------------------------------------------------------------*/
570 /* PRIVATE.  Update prefs from current state of locale page widgets.        */
571 /*--------------------------------------------------------------------------*/
572 static void
573 update_prefs_from_locale_page (glPrefsDialog *dialog)
574 {
575         if (dialog->priv->stop_signals) return;
576
577         if (gtk_toggle_button_get_active (
578                     GTK_TOGGLE_BUTTON(dialog->priv->units_points_radio)))
579         {
580                 gl_prefs->units = LGL_UNITS_POINT;
581         }
582         if (gtk_toggle_button_get_active (
583                     GTK_TOGGLE_BUTTON(dialog->priv->units_inches_radio)))
584         {
585                 gl_prefs->units = LGL_UNITS_INCH;
586         }
587         if (gtk_toggle_button_get_active (
588                     GTK_TOGGLE_BUTTON(dialog->priv->units_mm_radio)))
589         {
590                 gl_prefs->units = LGL_UNITS_MM;
591         }
592
593         if (gtk_toggle_button_get_active (
594                     GTK_TOGGLE_BUTTON(dialog->priv->page_size_us_letter_radio)))
595         {
596                 gl_prefs->default_page_size = US_LETTER_ID;
597         }
598         if (gtk_toggle_button_get_active (
599                     GTK_TOGGLE_BUTTON(dialog->priv->page_size_a4_radio)))
600         {
601                 gl_prefs->default_page_size = A4_ID;
602         }
603
604         gl_prefs_model_save_settings (gl_prefs);
605 }
606
607 /*--------------------------------------------------------------------------*/
608 /* PRIVATE.  Update prefs from current state of object page widgets.        */
609 /*--------------------------------------------------------------------------*/
610 static void
611 update_prefs_from_object_page (glPrefsDialog *dialog)
612 {
613         GdkColor *gdk_color;
614         gboolean  is_default;
615
616         if (dialog->priv->stop_signals) return;
617
618         g_free (gl_prefs->default_font_family);
619         gl_prefs->default_font_family =
620                 gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->priv->text_family_combo));
621         gl_prefs->default_font_size =
622                 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->text_size_spin));
623
624         if (gtk_toggle_button_get_active
625             (GTK_TOGGLE_BUTTON (dialog->priv->text_bold_toggle)))
626         {
627                 gl_prefs->default_font_weight = PANGO_WEIGHT_BOLD;
628         }
629         else
630         {
631                 gl_prefs->default_font_weight = PANGO_WEIGHT_NORMAL;
632         }
633
634         gl_prefs->default_font_italic_flag =
635                 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
636                                               (dialog->priv->text_italic_toggle));
637
638         gdk_color = color_combo_get_color (COLOR_COMBO(dialog->priv->text_color_combo),
639                                            &is_default);
640         if (!is_default)
641         {
642                 gl_prefs->default_text_color = gl_color_from_gdk_color (gdk_color);
643         }
644
645         if (gtk_toggle_button_get_active
646             (GTK_TOGGLE_BUTTON (dialog->priv->text_left_toggle)))
647         {
648                 gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
649         }
650         else if (gtk_toggle_button_get_active
651                  (GTK_TOGGLE_BUTTON (dialog->priv->text_right_toggle)))
652         {
653                 gl_prefs->default_text_alignment = GTK_JUSTIFY_RIGHT;
654         }
655         else if (gtk_toggle_button_get_active
656                  (GTK_TOGGLE_BUTTON (dialog->priv->text_center_toggle)))
657         {
658                 gl_prefs->default_text_alignment = GTK_JUSTIFY_CENTER;
659         }
660         else
661         {
662                 /* Should not happen. */
663                 gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
664         }
665                                                                                 
666
667         gl_prefs->default_text_line_spacing =
668                 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->text_line_spacing_spin));
669
670         gl_prefs->default_line_width =
671                 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->line_width_spin));
672
673         gdk_color = color_combo_get_color (COLOR_COMBO(dialog->priv->line_color_combo),
674                                            &is_default);
675         if (!is_default)
676         {
677                 gl_prefs->default_line_color = gl_color_from_gdk_color (gdk_color);
678         }
679
680
681         gdk_color = color_combo_get_color (COLOR_COMBO(dialog->priv->fill_color_combo),
682                                            &is_default);
683         if (!is_default)
684         {
685                 gl_prefs->default_fill_color = gl_color_from_gdk_color (gdk_color);
686         }
687
688         gl_prefs_model_save_settings (gl_prefs);
689 }
690
691
692