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