]> git.sur5r.net Git - glabels/blob - glabels2/src/prefs-dialog.c
97c0546bd4213d7af347feeedb0f24bdb72cd22e
[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/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 "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         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         gtk_builder_add_objects_from_file (dialog->priv->builder,
153                                            GLABELS_BUILDER_DIR "prefs-dialog.builder",
154                                            object_ids,
155                                            &error);
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         gl_debug (DEBUG_PREFS, "page size = \"%s\"", gl_prefs->default_page_size);
212
213         dialog = GTK_WIDGET (g_object_new (GL_TYPE_PREFS_DIALOG, NULL));
214
215         if (parent)
216                 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
217         
218         gl_prefs_dialog_construct (GL_PREFS_DIALOG(dialog));
219
220
221         gl_debug (DEBUG_PREFS, "END");
222
223         return dialog;
224 }
225
226
227 /*---------------------------------------------------------------------------*/
228 /* PRIVATE.  Construct composite widget.                                     */
229 /*---------------------------------------------------------------------------*/
230 static void
231 gl_prefs_dialog_construct (glPrefsDialog *dialog)
232 {
233         GtkWidget *notebook;
234
235         g_return_if_fail (GL_IS_PREFS_DIALOG (dialog));
236         g_return_if_fail (dialog->priv != NULL);
237
238         gl_util_get_builder_widgets (dialog->priv->builder,
239                                      "prefs_notebook", &notebook,
240                                      NULL);
241         gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), notebook, FALSE, FALSE, 0);
242
243         construct_locale_page (dialog);
244         construct_object_page (dialog);
245
246         update_locale_page_from_prefs (dialog);
247         update_object_page_from_prefs (dialog);
248
249         gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);   
250 }
251
252
253 /*---------------------------------------------------------------------------*/
254 /* PRIVATE.  "Response" callback.                                            */
255 /*---------------------------------------------------------------------------*/
256 static void
257 response_cb (glPrefsDialog *dialog,
258              gint          response,
259              gpointer      user_data)
260 {
261         gl_debug (DEBUG_VIEW, "START");
262
263         g_return_if_fail(dialog != NULL);
264         g_return_if_fail(GTK_IS_DIALOG(dialog));
265
266         switch(response) {
267         case GTK_RESPONSE_CLOSE:
268                 gtk_widget_hide (GTK_WIDGET(dialog));
269                 break;
270         case GTK_RESPONSE_DELETE_EVENT:
271                 break;
272         default:
273                 g_print ("response = %d", response);
274                 g_assert_not_reached ();
275         }
276
277         gl_debug (DEBUG_VIEW, "END");
278 }
279
280
281 /*--------------------------------------------------------------------------*/
282 /* PRIVATE.  Build Locale Properties Notebook Tab                           */
283 /*--------------------------------------------------------------------------*/
284 static void
285 construct_locale_page (glPrefsDialog *dialog)
286 {
287
288         gl_util_get_builder_widgets (dialog->priv->builder,
289                                      "units_points_radio",        &dialog->priv->units_points_radio,
290                                      "units_inches_radio",        &dialog->priv->units_inches_radio,
291                                      "units_mm_radio",            &dialog->priv->units_mm_radio,
292                                      "page_size_us_letter_radio", &dialog->priv->page_size_us_letter_radio,
293                                      "page_size_a4_radio",        &dialog->priv->page_size_a4_radio,
294                                      NULL);
295
296         g_signal_connect_swapped (
297                 G_OBJECT(dialog->priv->units_points_radio),
298                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
299         g_signal_connect_swapped (
300                 G_OBJECT(dialog->priv->units_inches_radio),
301                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
302         g_signal_connect_swapped (
303                 G_OBJECT(dialog->priv->units_mm_radio),
304                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
305         g_signal_connect_swapped (
306                 G_OBJECT(dialog->priv->page_size_us_letter_radio),
307                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
308         g_signal_connect_swapped (
309                 G_OBJECT(dialog->priv->page_size_a4_radio),
310                 "toggled", G_CALLBACK(update_prefs_from_locale_page), G_OBJECT(dialog));
311 }
312
313
314 /*--------------------------------------------------------------------------*/
315 /* PRIVATE.  Build Default Object Properties Notebook Tab                   */
316 /*--------------------------------------------------------------------------*/
317 static void
318 construct_object_page (glPrefsDialog *dialog)
319 {
320         gl_util_get_builder_widgets (dialog->priv->builder,
321                                      "text_family_hbox",       &dialog->priv->text_family_hbox,
322                                      "text_size_spin",         &dialog->priv->text_size_spin,
323                                      "text_bold_toggle",       &dialog->priv->text_bold_toggle,
324                                      "text_italic_toggle",     &dialog->priv->text_italic_toggle,
325                                      "text_color_hbox",        &dialog->priv->text_color_hbox,
326                                      "text_left_toggle",       &dialog->priv->text_left_toggle,
327                                      "text_center_toggle",     &dialog->priv->text_center_toggle,
328                                      "text_right_toggle",      &dialog->priv->text_right_toggle,
329                                      "text_line_spacing_spin", &dialog->priv->text_line_spacing_spin,
330                                      "line_width_spin",        &dialog->priv->line_width_spin,
331                                      "line_color_hbox",        &dialog->priv->line_color_hbox,
332                                      "fill_color_hbox",        &dialog->priv->fill_color_hbox,
333                                      NULL);
334
335         dialog->priv->text_family_combo = gl_font_combo_new ("Sans");
336
337         dialog->priv->text_color_combo = gl_color_combo_new (_("Default"),
338                                                              GL_COLOR_TEXT_DEFAULT,
339                                                              gl_prefs->default_text_color);
340         dialog->priv->line_color_combo = gl_color_combo_new (_("No Line"),
341                                                              GL_COLOR_NO_LINE,
342                                                              gl_prefs->default_line_color);
343         dialog->priv->fill_color_combo = gl_color_combo_new (_("No Fill"),
344                                                              GL_COLOR_NO_FILL,
345                                                              gl_prefs->default_fill_color);
346
347         gtk_box_pack_start (GTK_BOX (dialog->priv->text_family_hbox),
348                             dialog->priv->text_family_combo,
349                             FALSE, FALSE, 0);
350         gtk_box_pack_start (GTK_BOX (dialog->priv->text_color_hbox),
351                             dialog->priv->text_color_combo,
352                             FALSE, FALSE, 0);
353         gtk_box_pack_start (GTK_BOX (dialog->priv->line_color_hbox),
354                             dialog->priv->line_color_combo,
355                             FALSE, FALSE, 0);
356         gtk_box_pack_start (GTK_BOX (dialog->priv->fill_color_hbox),
357                             dialog->priv->fill_color_combo,
358                             FALSE, FALSE, 0);
359
360         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_family_combo),
361                                   "changed",
362                                   G_CALLBACK(update_prefs_from_object_page),
363                                   G_OBJECT(dialog));
364         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_size_spin),
365                                   "changed",
366                                   G_CALLBACK(update_prefs_from_object_page),
367                                   G_OBJECT(dialog));
368         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_bold_toggle),
369                                   "toggled",
370                                   G_CALLBACK(update_prefs_from_object_page),
371                                   G_OBJECT(dialog));
372         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_italic_toggle),
373                                   "toggled",
374                                   G_CALLBACK(update_prefs_from_object_page),
375                                   G_OBJECT(dialog));
376         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_color_combo),
377                                   "color_changed",
378                                   G_CALLBACK(update_prefs_from_object_page),
379                                   G_OBJECT(dialog));
380
381         g_signal_connect (G_OBJECT(dialog->priv->text_left_toggle),
382                           "toggled",
383                           G_CALLBACK(align_toggle_cb),
384                           G_OBJECT(dialog));
385         g_signal_connect (G_OBJECT(dialog->priv->text_center_toggle),
386                           "toggled",
387                           G_CALLBACK(align_toggle_cb),
388                           G_OBJECT(dialog));
389         g_signal_connect (G_OBJECT(dialog->priv->text_right_toggle),
390                           "toggled",
391                           G_CALLBACK(align_toggle_cb),
392                           G_OBJECT(dialog));
393
394         g_signal_connect_swapped (G_OBJECT(dialog->priv->text_line_spacing_spin),
395                                   "changed",
396                                   G_CALLBACK(update_prefs_from_object_page),
397                                   G_OBJECT(dialog));
398
399         g_signal_connect_swapped (G_OBJECT(dialog->priv->line_width_spin),
400                                   "changed",
401                                   G_CALLBACK(update_prefs_from_object_page),
402                                   G_OBJECT(dialog));
403         g_signal_connect_swapped (G_OBJECT(dialog->priv->line_color_combo),
404                                   "color_changed",
405                                   G_CALLBACK(update_prefs_from_object_page),
406                                   G_OBJECT(dialog));
407
408         g_signal_connect_swapped (G_OBJECT(dialog->priv->fill_color_combo),
409                                   "color_changed",
410                                   G_CALLBACK(update_prefs_from_object_page),
411                                   G_OBJECT(dialog));
412 }
413
414
415 /*--------------------------------------------------------------------------*/
416 /* PRIVATE.  Alignment togglebutton callback.                               */
417 /*--------------------------------------------------------------------------*/
418 static void
419 align_toggle_cb (GtkToggleButton *toggle,
420                  glPrefsDialog   *dialog)
421 {
422         if (gtk_toggle_button_get_active (toggle))
423         {
424   
425                 if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_left_toggle))
426                 {
427                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
428                                                       (dialog->priv->text_center_toggle),
429                                                       FALSE);
430                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
431                                                       (dialog->priv->text_right_toggle),
432                                                       FALSE);
433                 }
434                 else if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_center_toggle))
435                 {
436                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
437                                                       (dialog->priv->text_left_toggle),
438                                                       FALSE);
439                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
440                                                       (dialog->priv->text_right_toggle),
441                                                       FALSE);
442                 }
443                 else if (GTK_WIDGET (toggle) == GTK_WIDGET (dialog->priv->text_right_toggle))
444                 {
445                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
446                                                       (dialog->priv->text_left_toggle),
447                                                       FALSE);
448                         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
449                                                       (dialog->priv->text_center_toggle),
450                                                       FALSE);
451                 }
452                                                                                 
453                 update_prefs_from_object_page (dialog);
454         }
455                                                                                 
456 }
457                                                                                 
458
459 /*--------------------------------------------------------------------------*/
460 /* PRIVATE.  Update locale page widgets from current prefs.                 */
461 /*--------------------------------------------------------------------------*/
462 static void
463 update_locale_page_from_prefs (glPrefsDialog *dialog)
464 {
465         dialog->priv->stop_signals = TRUE;
466
467         switch (gl_prefs->units) {
468         case LGL_UNITS_POINT:
469                 gtk_toggle_button_set_active (
470                         GTK_TOGGLE_BUTTON(dialog->priv->units_points_radio),
471                         TRUE);
472                 break;
473         case LGL_UNITS_INCH:
474                 gtk_toggle_button_set_active (
475                         GTK_TOGGLE_BUTTON(dialog->priv->units_inches_radio),
476                         TRUE);
477                 break;
478         case LGL_UNITS_MM:
479                 gtk_toggle_button_set_active (
480                         GTK_TOGGLE_BUTTON(dialog->priv->units_mm_radio),
481                         TRUE);
482                 break;
483         default:
484                 g_message ("Illegal units");    /* Should not happen */
485                 break;
486         }
487
488         if ( g_ascii_strcasecmp(gl_prefs->default_page_size, US_LETTER_ID) == 0)
489         {
490                 gtk_toggle_button_set_active (
491                         GTK_TOGGLE_BUTTON(dialog->priv->page_size_us_letter_radio), TRUE);
492         }
493         else if ( g_ascii_strcasecmp(gl_prefs->default_page_size, A4_ID) == 0)
494         {
495                 gtk_toggle_button_set_active (
496                         GTK_TOGGLE_BUTTON(dialog->priv->page_size_a4_radio), TRUE);
497         }
498         else
499         {
500                 g_message ("Unknown default page size"); /* Shouldn't happen */
501         }
502
503         dialog->priv->stop_signals = FALSE;
504 }
505
506
507 /*--------------------------------------------------------------------------*/
508 /* PRIVATE.  Update object page widgets from current prefs.                 */
509 /*--------------------------------------------------------------------------*/
510 static void
511 update_object_page_from_prefs (glPrefsDialog *dialog)
512 {
513  
514         dialog->priv->stop_signals = TRUE;
515
516         gl_font_combo_set_family (GL_FONT_COMBO (dialog->priv->text_family_combo),
517                                   gl_prefs->default_font_family);
518
519         gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->text_size_spin),
520                                    gl_prefs->default_font_size);
521  
522         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_bold_toggle),
523                                       (gl_prefs->default_font_weight == PANGO_WEIGHT_BOLD));
524  
525         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_italic_toggle),
526                                       gl_prefs->default_font_italic_flag);
527  
528         gl_color_combo_set_color (GL_COLOR_COMBO(dialog->priv->text_color_combo),
529                                   gl_prefs->default_text_color);
530
531         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_left_toggle),
532                                  (gl_prefs->default_text_alignment == GTK_JUSTIFY_LEFT));
533         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_center_toggle),
534                                  (gl_prefs->default_text_alignment == GTK_JUSTIFY_CENTER));
535         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->text_right_toggle),
536                                  (gl_prefs->default_text_alignment == GTK_JUSTIFY_RIGHT));
537
538         gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->text_line_spacing_spin),
539                                    gl_prefs->default_text_line_spacing);
540
541         gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->line_width_spin),
542                                    gl_prefs->default_line_width);
543  
544         gl_color_combo_set_color (GL_COLOR_COMBO(dialog->priv->line_color_combo),
545                 gl_prefs->default_line_color);
546
547
548         gl_color_combo_set_color (GL_COLOR_COMBO(dialog->priv->fill_color_combo),
549                                   gl_prefs->default_fill_color);
550
551
552         dialog->priv->stop_signals = FALSE;
553 }
554
555
556 /*--------------------------------------------------------------------------*/
557 /* PRIVATE.  Update prefs from current state of locale page widgets.        */
558 /*--------------------------------------------------------------------------*/
559 static void
560 update_prefs_from_locale_page (glPrefsDialog *dialog)
561 {
562         if (dialog->priv->stop_signals) return;
563
564         if (gtk_toggle_button_get_active (
565                     GTK_TOGGLE_BUTTON(dialog->priv->units_points_radio)))
566         {
567                 gl_prefs->units = LGL_UNITS_POINT;
568         }
569         if (gtk_toggle_button_get_active (
570                     GTK_TOGGLE_BUTTON(dialog->priv->units_inches_radio)))
571         {
572                 gl_prefs->units = LGL_UNITS_INCH;
573         }
574         if (gtk_toggle_button_get_active (
575                     GTK_TOGGLE_BUTTON(dialog->priv->units_mm_radio)))
576         {
577                 gl_prefs->units = LGL_UNITS_MM;
578         }
579
580         if (gtk_toggle_button_get_active (
581                     GTK_TOGGLE_BUTTON(dialog->priv->page_size_us_letter_radio)))
582         {
583                 g_free (gl_prefs->default_page_size);
584                 gl_prefs->default_page_size = g_strdup (US_LETTER_ID);
585         }
586         if (gtk_toggle_button_get_active (
587                     GTK_TOGGLE_BUTTON(dialog->priv->page_size_a4_radio)))
588         {
589                 g_free (gl_prefs->default_page_size);
590                 gl_prefs->default_page_size = g_strdup (A4_ID);
591         }
592
593         gl_prefs_model_save_settings (gl_prefs);
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         g_free (gl_prefs->default_font_family);
609         gl_prefs->default_font_family =
610                 gl_font_combo_get_family (GL_FONT_COMBO (dialog->priv->text_family_combo));
611         gl_prefs->default_font_size =
612                 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->text_size_spin));
613
614         if (gtk_toggle_button_get_active
615             (GTK_TOGGLE_BUTTON (dialog->priv->text_bold_toggle)))
616         {
617                 gl_prefs->default_font_weight = PANGO_WEIGHT_BOLD;
618         }
619         else
620         {
621                 gl_prefs->default_font_weight = PANGO_WEIGHT_NORMAL;
622         }
623
624         gl_prefs->default_font_italic_flag =
625                 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
626                                               (dialog->priv->text_italic_toggle));
627
628         color = gl_color_combo_get_color (GL_COLOR_COMBO(dialog->priv->text_color_combo),
629                                           &is_default);
630         if (!is_default)
631         {
632                 gl_prefs->default_text_color = color;
633         }
634
635         if (gtk_toggle_button_get_active
636             (GTK_TOGGLE_BUTTON (dialog->priv->text_left_toggle)))
637         {
638                 gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
639         }
640         else if (gtk_toggle_button_get_active
641                  (GTK_TOGGLE_BUTTON (dialog->priv->text_right_toggle)))
642         {
643                 gl_prefs->default_text_alignment = GTK_JUSTIFY_RIGHT;
644         }
645         else if (gtk_toggle_button_get_active
646                  (GTK_TOGGLE_BUTTON (dialog->priv->text_center_toggle)))
647         {
648                 gl_prefs->default_text_alignment = GTK_JUSTIFY_CENTER;
649         }
650         else
651         {
652                 /* Should not happen. */
653                 gl_prefs->default_text_alignment = GTK_JUSTIFY_LEFT;
654         }
655                                                                                 
656
657         gl_prefs->default_text_line_spacing =
658                 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->text_line_spacing_spin));
659
660         gl_prefs->default_line_width =
661                 gtk_spin_button_get_value (GTK_SPIN_BUTTON(dialog->priv->line_width_spin));
662
663         color = gl_color_combo_get_color (GL_COLOR_COMBO(dialog->priv->line_color_combo),
664                                           &is_default);
665         if (!is_default)
666         {
667                 gl_prefs->default_line_color = color;
668         }
669
670
671         color = gl_color_combo_get_color (GL_COLOR_COMBO(dialog->priv->fill_color_combo),
672                                           &is_default);
673         if (!is_default)
674         {
675                 gl_prefs->default_fill_color = color;
676         }
677
678         gl_prefs_model_save_settings (gl_prefs);
679 }
680
681
682
683 /*
684  * Local Variables:       -- emacs
685  * mode: C                -- emacs
686  * c-basic-offset: 8      -- emacs
687  * tab-width: 8           -- emacs
688  * indent-tabs-mode: nil  -- emacs
689  * End:                   -- emacs
690  */