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