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