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