]> git.sur5r.net Git - glabels/blob - src/prefs-model.c
ed83c8b9d6e4e05ed6891afd95439ee37cc5d0dd
[glabels] / src / prefs-model.c
1 /*
2  *  prefs-model.h
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-model.h"
24
25 #include <glib.h>
26 #include <gtk/gtk.h>
27 #include <string.h>
28 #include <gconf/gconf-client.h>
29
30 #include <libglabels/libglabels.h>
31 #include "marshal.h"
32 #include "str-util.h"
33 #include "color.h"
34
35 #include "debug.h"
36
37
38 /*========================================================*/
39 /* Private macros and constants.                          */
40 /*========================================================*/
41
42 /* GConf keys */
43 #define BASE_KEY                            "/apps/glabels"
44
45 #define PREF_UNITS                          "/units"
46 #define PREF_DEFAULT_PAGE_SIZE              "/default-page-size"
47
48 #define PREF_DEFAULT_FONT_FAMILY            "/default-font-family"
49 #define PREF_DEFAULT_FONT_SIZE              "/default-font-size"
50 #define PREF_DEFAULT_FONT_WEIGHT            "/default-font-weight"
51 #define PREF_DEFAULT_FONT_ITALIC_FLAG       "/default-font-italic-flag"
52 #define PREF_DEFAULT_TEXT_COLOR             "/default-text-color"
53 #define PREF_DEFAULT_TEXT_ALIGNMENT         "/default-text-alignment"
54 #define PREF_DEFAULT_TEXT_LINE_SPACING      "/default-text-line-spacing"
55
56 #define PREF_DEFAULT_LINE_WIDTH             "/default-line-width"
57 #define PREF_DEFAULT_LINE_COLOR             "/default-line-color"
58
59 #define PREF_DEFAULT_FILL_COLOR             "/default-fill-color"
60
61 #define PREF_MAIN_TOOLBAR_VISIBLE           "/main-toolbar-visible"
62
63 #define PREF_DRAWING_TOOLBAR_VISIBLE        "/drawing-toolbar-visible"
64
65 #define PREF_PROPERTY_TOOLBAR_VISIBLE        "/property-toolbar-visible"
66
67 #define PREF_GRID_VISIBLE                   "/grid-visible"
68 #define PREF_MARKUP_VISIBLE                 "/markup-visible"
69
70 #define PREF_MAX_RECENTS                    "/max-recents"
71
72
73 /* Default values */
74 #define DEFAULT_UNITS_STRING_US     lgl_units_get_id (LGL_UNITS_INCH)
75 #define DEFAULT_PAGE_SIZE_US        "US-Letter"
76
77 #define DEFAULT_UNITS_STRING_METRIC lgl_units_get_id (LGL_UNITS_MM)
78 #define DEFAULT_PAGE_SIZE_METRIC    "A4"
79
80 #define DEFAULT_FONT_FAMILY        "Sans"
81 #define DEFAULT_FONT_SIZE          14.0
82 #define DEFAULT_FONT_WEIGHT_STRING gl_str_util_weight_to_string (PANGO_WEIGHT_NORMAL)
83 #define DEFAULT_FONT_ITALIC_FLAG   FALSE
84 #define DEFAULT_TEXT_ALIGN_STRING  gl_str_util_align_to_string (PANGO_ALIGN_LEFT)
85 #define DEFAULT_TEXT_COLOR         GL_COLOR (0,0,0)
86 #define DEFAULT_TEXT_LINE_SPACING  1.0
87
88 #define DEFAULT_LINE_WIDTH         1.0
89 #define DEFAULT_LINE_COLOR         GL_COLOR_A (0, 0, 0, 255)
90
91 #define DEFAULT_FILL_COLOR         GL_COLOR_A (0, 255, 0, 255)
92
93
94 /*========================================================*/
95 /* Private types.                                         */
96 /*========================================================*/
97
98 struct _glPrefsModelPrivate {
99
100         GConfClient *gconf_client;
101
102 };
103
104 enum {
105         CHANGED,
106         LAST_SIGNAL
107 };
108
109
110 /*========================================================*/
111 /* Private globals.                                       */
112 /*========================================================*/
113
114 static guint signals[LAST_SIGNAL] = {0};
115
116
117 /*========================================================*/
118 /* Private function prototypes.                           */
119 /*========================================================*/
120
121 static void           gl_prefs_model_finalize      (GObject             *object);
122
123 static void           notify_cb                    (GConfClient         *client,
124                                                     guint                cnxn_id,
125                                                     GConfEntry          *entry,
126                                                     glPrefsModel        *prefs_model);
127
128 static gchar         *get_string                   (GConfClient         *client,
129                                                     const gchar         *key,
130                                                     const gchar         *def);
131
132 static gboolean       get_bool                     (GConfClient         *client,
133                                                     const gchar         *key,
134                                                     gboolean             def);
135
136 static gint           get_int                      (GConfClient         *client,
137                                                     const gchar         *key,
138                                                     gint                 def);
139
140 static gdouble        get_float                    (GConfClient         *client,
141                                                     const gchar         *key,
142                                                     gdouble              def);
143
144
145 /*****************************************************************************/
146 /* Boilerplate object stuff.                                                 */
147 /*****************************************************************************/
148 G_DEFINE_TYPE (glPrefsModel, gl_prefs_model, G_TYPE_OBJECT);
149
150
151 static void
152 gl_prefs_model_class_init (glPrefsModelClass *class)
153 {
154         GObjectClass *object_class = G_OBJECT_CLASS (class);
155
156         gl_debug (DEBUG_PREFS, "START");
157
158         gl_prefs_model_parent_class = g_type_class_peek_parent (class);
159
160         object_class->finalize = gl_prefs_model_finalize;
161
162         signals[CHANGED] =
163                 g_signal_new ("changed",
164                               G_OBJECT_CLASS_TYPE (object_class),
165                               G_SIGNAL_RUN_LAST,
166                               G_STRUCT_OFFSET (glPrefsModelClass, changed),
167                               NULL, NULL,
168                               gl_marshal_VOID__VOID,
169                               G_TYPE_NONE,
170                               0);
171
172         gl_debug (DEBUG_PREFS, "END");
173 }
174
175
176 static void
177 gl_prefs_model_init (glPrefsModel *this)
178 {
179         gl_debug (DEBUG_PREFS, "START");
180
181         this->priv = g_new0 (glPrefsModelPrivate, 1);
182
183         this->priv->gconf_client = gconf_client_get_default ();
184
185         g_return_if_fail (this->priv->gconf_client != NULL);
186  
187         gconf_client_add_dir (this->priv->gconf_client,
188                               BASE_KEY,
189                               GCONF_CLIENT_PRELOAD_ONELEVEL,
190                               NULL);
191          
192         gconf_client_notify_add (this->priv->gconf_client,
193                                  BASE_KEY,
194                                  (GConfClientNotifyFunc)notify_cb, this,
195                                  NULL, NULL);
196
197         gl_debug (DEBUG_PREFS, "END");
198 }
199
200
201 static void
202 gl_prefs_model_finalize (GObject *object)
203 {
204         glPrefsModel *this = GL_PREFS_MODEL (object);
205
206         gl_debug (DEBUG_PREFS, "START");
207
208         g_return_if_fail (object && GL_IS_PREFS_MODEL (object));
209
210         g_object_unref (G_OBJECT(this->priv->gconf_client));
211         g_free (this->priv);
212
213         G_OBJECT_CLASS (gl_prefs_model_parent_class)->finalize (object);
214
215         gl_debug (DEBUG_PREFS, "END");
216 }
217
218
219 /*****************************************************************************/
220 /* New prefs_model object.                                                   */
221 /*****************************************************************************/
222 glPrefsModel *
223 gl_prefs_model_new (void)
224 {
225         glPrefsModel *this;
226
227         gl_debug (DEBUG_PREFS, "START");
228
229         this = GL_PREFS_MODEL (g_object_new (gl_prefs_model_get_type(), NULL));
230
231         gl_debug (DEBUG_PREFS, "END");
232
233         return this;
234 }
235
236
237 /*****************************************************************************/
238 /* Set units.                                                                */
239 /*****************************************************************************/
240 void
241 gl_prefs_model_set_units (glPrefsModel     *this,
242                           lglUnits          units)
243 {
244         gconf_client_set_string (this->priv->gconf_client,
245                                  BASE_KEY PREF_UNITS,
246                                  lgl_units_get_id (units),
247                                  NULL);
248 }
249
250
251 /*****************************************************************************/
252 /* Get units.                                                                */
253 /*****************************************************************************/
254 lglUnits
255 gl_prefs_model_get_units (glPrefsModel     *this)
256 {
257         const gchar  *pgsize;
258         const gchar  *default_units_string;
259         gchar        *string;
260         lglUnits      units;
261
262         /* Make educated guess about locale default. */
263         pgsize = gtk_paper_size_get_default ();
264         if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
265         {
266                 default_units_string = DEFAULT_UNITS_STRING_US;
267         }
268         else
269         {
270                 default_units_string = DEFAULT_UNITS_STRING_METRIC;
271         }
272
273         string = get_string (this->priv->gconf_client,
274                              BASE_KEY PREF_UNITS,
275                              default_units_string);
276         units = lgl_units_from_id (string);
277         g_free (string);
278
279         /* If invalid, make an educated guess from locale. */
280         if (units == LGL_UNITS_INVALID)
281         {
282                 if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
283                 {
284                         units = LGL_UNITS_INCH;
285                 }
286                 else
287                 {
288                         units = LGL_UNITS_MM;
289                 }
290         }
291
292         return units;
293 }
294
295
296 /*****************************************************************************/
297 /* Set default page size.                                                    */
298 /*****************************************************************************/
299 void
300 gl_prefs_model_set_default_page_size (glPrefsModel     *this,
301                                       const gchar      *page_size)
302 {
303         gconf_client_set_string (this->priv->gconf_client,
304                                  BASE_KEY PREF_DEFAULT_PAGE_SIZE,
305                                  page_size,
306                                  NULL);
307 }
308
309
310 /*****************************************************************************/
311 /* Get default page size.                                                    */
312 /*****************************************************************************/
313 gchar *
314 gl_prefs_model_get_default_page_size (glPrefsModel     *this)
315 {
316         const gchar *pgsize;
317         const gchar *default_page_size;
318         gchar       *page_size;
319         lglPaper    *paper;
320
321         /* Make educated guess about locale default. */
322         pgsize = gtk_paper_size_get_default ();
323         if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
324         {
325                 default_page_size = DEFAULT_PAGE_SIZE_US;
326         }
327         else
328         {
329                 default_page_size = DEFAULT_PAGE_SIZE_METRIC;
330         }
331
332         page_size = get_string (this->priv->gconf_client,
333                                 BASE_KEY PREF_DEFAULT_PAGE_SIZE,
334                                 default_page_size);
335
336         /* Proof read the default page size -- it must be a valid id. */
337         /* (For compatability with older versions.) */
338         paper = lgl_db_lookup_paper_from_id (page_size);
339         if ( paper == NULL ) {
340                 g_free (page_size);
341                 page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
342         } else {
343                 lgl_paper_free (paper);
344         }
345
346         return page_size;
347 }
348
349
350 /*****************************************************************************/
351 /* Set default font family.                                                  */
352 /*****************************************************************************/
353 void
354 gl_prefs_model_set_default_font_family (glPrefsModel     *this,
355                                         const gchar      *family)
356 {
357         gconf_client_set_string (this->priv->gconf_client,
358                                  BASE_KEY PREF_DEFAULT_FONT_FAMILY,
359                                  family,
360                                  NULL);
361 }
362
363
364 /*****************************************************************************/
365 /* Get default font family.                                                  */
366 /*****************************************************************************/
367 gchar *
368 gl_prefs_model_get_default_font_family (glPrefsModel     *this)
369 {
370         gchar *family;
371
372         family = get_string (this->priv->gconf_client,
373                              BASE_KEY PREF_DEFAULT_FONT_FAMILY,
374                              DEFAULT_FONT_FAMILY);
375
376         return family;
377 }
378
379
380 /*****************************************************************************/
381 /* Set default font size.                                                    */
382 /*****************************************************************************/
383 void
384 gl_prefs_model_set_default_font_size (glPrefsModel     *this,
385                                       gdouble           size)
386 {
387         gconf_client_set_float (this->priv->gconf_client,
388                                 BASE_KEY PREF_DEFAULT_FONT_SIZE,
389                                 size,
390                                 NULL);
391 }
392
393
394 /*****************************************************************************/
395 /* Get default font size.                                                    */
396 /*****************************************************************************/
397 gdouble
398 gl_prefs_model_get_default_font_size (glPrefsModel     *this)
399 {
400         gdouble size;
401
402         size = get_float (this->priv->gconf_client,
403                           BASE_KEY PREF_DEFAULT_FONT_SIZE,
404                           DEFAULT_FONT_SIZE);
405
406         return size;
407 }
408
409
410 /*****************************************************************************/
411 /* Set default font weight.                                                  */
412 /*****************************************************************************/
413 void
414 gl_prefs_model_set_default_font_weight (glPrefsModel     *this,
415                                         PangoWeight       weight)
416 {
417         gconf_client_set_string (this->priv->gconf_client,
418                                  BASE_KEY PREF_DEFAULT_FONT_WEIGHT,
419                                  gl_str_util_weight_to_string(weight),
420                                  NULL);
421 }
422
423
424 /*****************************************************************************/
425 /* Get default font weight.                                                  */
426 /*****************************************************************************/
427 PangoWeight
428 gl_prefs_model_get_default_font_weight (glPrefsModel     *this)
429 {
430         gchar       *string;
431         PangoWeight  weight;
432
433         string = get_string (this->priv->gconf_client,
434                              BASE_KEY PREF_DEFAULT_FONT_WEIGHT,
435                              DEFAULT_FONT_WEIGHT_STRING);
436         weight = gl_str_util_string_to_weight (string);
437         g_free (string);
438
439         return weight;
440 }
441
442
443 /*****************************************************************************/
444 /* Set default font italic flag.                                             */
445 /*****************************************************************************/
446 void
447 gl_prefs_model_set_default_font_italic_flag (glPrefsModel     *this,
448                                              gboolean          italic_flag)
449 {
450         gconf_client_set_bool (this->priv->gconf_client,
451                                BASE_KEY PREF_DEFAULT_FONT_ITALIC_FLAG,
452                                italic_flag,
453                                NULL);
454 }
455
456
457 /*****************************************************************************/
458 /* Get default font italic flag.                                             */
459 /*****************************************************************************/
460 gboolean
461 gl_prefs_model_get_default_font_italic_flag (glPrefsModel     *this)
462 {
463         gboolean italic_flag;
464
465         italic_flag = get_bool (this->priv->gconf_client,
466                                 BASE_KEY PREF_DEFAULT_FONT_ITALIC_FLAG,
467                                 DEFAULT_FONT_ITALIC_FLAG);
468
469         return italic_flag;
470 }
471
472
473 /*****************************************************************************/
474 /* Set default text color.                                                   */
475 /*****************************************************************************/
476 void
477 gl_prefs_model_set_default_text_color (glPrefsModel     *this,
478                                        guint             color)
479 {
480         gconf_client_set_int    (this->priv->gconf_client,
481                                  BASE_KEY PREF_DEFAULT_TEXT_COLOR,
482                                  color,
483                                  NULL);
484 }
485
486
487 /*****************************************************************************/
488 /* Get default text color.                                                   */
489 /*****************************************************************************/
490 guint
491 gl_prefs_model_get_default_text_color (glPrefsModel     *this)
492 {
493         guint color;
494
495         color = get_int (this->priv->gconf_client,
496                          BASE_KEY PREF_DEFAULT_TEXT_COLOR,
497                          DEFAULT_TEXT_COLOR);
498
499         return color;
500 }
501
502
503 /*****************************************************************************/
504 /* Set default text alignment.                                               */
505 /*****************************************************************************/
506 void
507 gl_prefs_model_set_default_text_alignment (glPrefsModel     *this,
508                                            PangoAlignment    alignment)
509 {
510         gconf_client_set_string (this->priv->gconf_client,
511                                  BASE_KEY PREF_DEFAULT_TEXT_ALIGNMENT,
512                                  gl_str_util_align_to_string(alignment),
513                                  NULL);
514 }
515
516
517 /*****************************************************************************/
518 /* Get default text alignment.                                               */
519 /*****************************************************************************/
520 PangoAlignment
521 gl_prefs_model_get_default_text_alignment (glPrefsModel     *this)
522 {
523         gchar          *string;
524         PangoAlignment  alignment;
525
526         string = get_string (this->priv->gconf_client,
527                              BASE_KEY PREF_DEFAULT_TEXT_ALIGNMENT,
528                              DEFAULT_TEXT_ALIGN_STRING);
529         alignment = gl_str_util_string_to_align (string);
530         g_free (string);
531
532         return alignment;
533 }
534
535
536 /*****************************************************************************/
537 /* Set default text line spacing.                                            */
538 /*****************************************************************************/
539 void
540 gl_prefs_model_set_default_text_line_spacing (glPrefsModel     *this,
541                                               gdouble           spacing)
542 {
543         gconf_client_set_float  (this->priv->gconf_client,
544                                  BASE_KEY PREF_DEFAULT_TEXT_LINE_SPACING,
545                                  spacing,
546                                  NULL);
547 }
548
549
550 /*****************************************************************************/
551 /* Get default text line spacing.                                            */
552 /*****************************************************************************/
553 gdouble
554 gl_prefs_model_get_default_text_line_spacing (glPrefsModel     *this)
555 {
556         gdouble spacing;
557
558         spacing = get_float (this->priv->gconf_client,
559                              BASE_KEY PREF_DEFAULT_TEXT_LINE_SPACING,
560                              DEFAULT_TEXT_LINE_SPACING);
561
562         return spacing;
563 }
564
565
566 /*****************************************************************************/
567 /* Set default line width.                                                   */
568 /*****************************************************************************/
569 void
570 gl_prefs_model_set_default_line_width (glPrefsModel     *this,
571                                        gdouble           width)
572 {
573         gconf_client_set_float  (this->priv->gconf_client,
574                                  BASE_KEY PREF_DEFAULT_LINE_WIDTH,
575                                  width,
576                                  NULL);
577 }
578
579
580 /*****************************************************************************/
581 /* Get default line width.                                                   */
582 /*****************************************************************************/
583 gdouble
584 gl_prefs_model_get_default_line_width (glPrefsModel     *this)
585 {
586         gdouble width;
587
588         width = get_float (this->priv->gconf_client,
589                            BASE_KEY PREF_DEFAULT_LINE_WIDTH,
590                            DEFAULT_LINE_WIDTH);
591
592         return width;
593 }
594
595
596 /*****************************************************************************/
597 /* Set default line color.                                                   */
598 /*****************************************************************************/
599 void
600 gl_prefs_model_set_default_line_color (glPrefsModel     *this,
601                                        guint             color)
602 {
603         gconf_client_set_int (this->priv->gconf_client,
604                               BASE_KEY PREF_DEFAULT_LINE_COLOR,
605                               color,
606                               NULL);
607 }
608
609
610 /*****************************************************************************/
611 /* Get default line color.                                                   */
612 /*****************************************************************************/
613 guint
614 gl_prefs_model_get_default_line_color (glPrefsModel     *this)
615 {
616         guint color;
617
618         color = get_int (this->priv->gconf_client,
619                          BASE_KEY PREF_DEFAULT_LINE_COLOR,
620                          DEFAULT_LINE_COLOR);
621
622         return color;
623 }
624
625
626 /*****************************************************************************/
627 /* Set default fill color.                                                   */
628 /*****************************************************************************/
629 void
630 gl_prefs_model_set_default_fill_color (glPrefsModel     *this,
631                                        guint             color)
632 {
633         gconf_client_set_int (this->priv->gconf_client,
634                               BASE_KEY PREF_DEFAULT_FILL_COLOR,
635                               color,
636                               NULL);
637 }
638
639
640 /*****************************************************************************/
641 /* Get default fill color.                                                   */
642 /*****************************************************************************/
643 guint
644 gl_prefs_model_get_default_fill_color (glPrefsModel     *this)
645 {
646         guint color;
647
648         color = get_int (this->priv->gconf_client,
649                          BASE_KEY PREF_DEFAULT_FILL_COLOR,
650                          DEFAULT_FILL_COLOR);
651
652         return color;
653 }
654
655
656 /*****************************************************************************/
657 /* Set main toolbar visible flag.                                            */
658 /*****************************************************************************/
659 void
660 gl_prefs_model_set_main_toolbar_visible (glPrefsModel     *this,
661                                          gboolean          visible)
662 {
663         gconf_client_set_bool (this->priv->gconf_client,
664                                BASE_KEY PREF_MAIN_TOOLBAR_VISIBLE,
665                                visible,
666                                NULL);
667 }
668
669
670 /*****************************************************************************/
671 /* Get main toolbar visible flag.                                            */
672 /*****************************************************************************/
673 gboolean
674 gl_prefs_model_get_main_toolbar_visible (glPrefsModel     *this)
675 {
676         gboolean visible;
677
678         visible = get_bool (this->priv->gconf_client,
679                             BASE_KEY PREF_MAIN_TOOLBAR_VISIBLE,
680                             TRUE);
681
682         return visible;
683 }
684
685
686 /*****************************************************************************/
687 /* Set drawing toolbar visible flag.                                         */
688 /*****************************************************************************/
689 void
690 gl_prefs_model_set_drawing_toolbar_visible (glPrefsModel     *this,
691                                             gboolean          visible)
692 {
693         gconf_client_set_bool (this->priv->gconf_client,
694                                BASE_KEY PREF_DRAWING_TOOLBAR_VISIBLE,
695                                visible,
696                                NULL);
697 }
698
699
700 /*****************************************************************************/
701 /* Get drawing toolbar visible flag.                                         */
702 /*****************************************************************************/
703 gboolean
704 gl_prefs_model_get_drawing_toolbar_visible (glPrefsModel     *this)
705 {
706         gboolean visible;
707
708         visible = get_bool (this->priv->gconf_client,
709                             BASE_KEY PREF_DRAWING_TOOLBAR_VISIBLE,
710                             TRUE);
711
712         return visible;
713 }
714
715
716 /*****************************************************************************/
717 /* Set property toolbar visible flag.                                        */
718 /*****************************************************************************/
719 void
720 gl_prefs_model_set_property_toolbar_visible (glPrefsModel     *this,
721                                              gboolean          visible)
722 {
723         gconf_client_set_bool (this->priv->gconf_client,
724                                BASE_KEY PREF_PROPERTY_TOOLBAR_VISIBLE,
725                                visible,
726                                NULL);
727 }
728
729
730 /*****************************************************************************/
731 /* Get property toolbar visible flag.                                        */
732 /*****************************************************************************/
733 gboolean
734 gl_prefs_model_get_property_toolbar_visible (glPrefsModel     *this)
735 {
736         gboolean visible;
737
738         visible = get_bool (this->priv->gconf_client,
739                             BASE_KEY PREF_PROPERTY_TOOLBAR_VISIBLE,
740                             TRUE);
741
742         return visible;
743 }
744
745
746 /*****************************************************************************/
747 /* Set grid visible flag.                                                    */
748 /*****************************************************************************/
749 void
750 gl_prefs_model_set_grid_visible (glPrefsModel     *this,
751                                  gboolean          visible)
752 {
753         gconf_client_set_bool (this->priv->gconf_client,
754                                BASE_KEY PREF_GRID_VISIBLE,
755                                visible,
756                                NULL);
757 }
758
759
760 /*****************************************************************************/
761 /* Get grid visible flag.                                                    */
762 /*****************************************************************************/
763 gboolean
764 gl_prefs_model_get_grid_visible (glPrefsModel     *this)
765 {
766         gboolean visible;
767
768         visible = get_bool (this->priv->gconf_client,
769                             BASE_KEY PREF_GRID_VISIBLE,
770                             TRUE);
771
772         return visible;
773 }
774
775
776 /*****************************************************************************/
777 /* Set markup visible flag.                                                  */
778 /*****************************************************************************/
779 void
780 gl_prefs_model_set_markup_visible (glPrefsModel     *this,
781                                    gboolean          visible)
782 {
783         gconf_client_set_bool (this->priv->gconf_client,
784                                BASE_KEY PREF_MARKUP_VISIBLE,
785                                visible,
786                                NULL);
787 }
788
789
790 /*****************************************************************************/
791 /* Get markup visible flag.                                                  */
792 /*****************************************************************************/
793 gboolean
794 gl_prefs_model_get_markup_visible (glPrefsModel     *this)
795 {
796         gboolean visible;
797
798         visible = get_bool (this->priv->gconf_client,
799                             BASE_KEY PREF_MARKUP_VISIBLE,
800                             TRUE);
801
802         return visible;
803 }
804
805
806 /*****************************************************************************/
807 /* Set max recents.                                                          */
808 /*****************************************************************************/
809 void
810 gl_prefs_model_set_max_recents (glPrefsModel     *this,
811                                 gint              max_recents)
812 {
813         gconf_client_set_int (this->priv->gconf_client,
814                               BASE_KEY PREF_MAX_RECENTS,
815                               max_recents,
816                               NULL);
817 }
818
819
820 /*****************************************************************************/
821 /* Get max recents.                                                          */
822 /*****************************************************************************/
823 gint
824 gl_prefs_model_get_max_recents (glPrefsModel     *this)
825 {
826         gint max_recents;
827
828         max_recents = get_int (this->priv->gconf_client,
829                                BASE_KEY PREF_MAX_RECENTS,
830                                -1);
831
832         return max_recents;
833 }
834
835
836 /*---------------------------------------------------------------------------*/
837 /* PRIVATE.  Key changed callback.                                           */
838 /*---------------------------------------------------------------------------*/
839 static void 
840 notify_cb (GConfClient  *client,
841            guint         cnxn_id,
842            GConfEntry   *entry,
843            glPrefsModel *this)
844 {
845         gl_debug (DEBUG_PREFS, "Key was changed: %s", entry->key);
846
847         g_signal_emit (G_OBJECT(this), signals[CHANGED], 0);
848 }
849
850
851 /*---------------------------------------------------------------------------*/
852 /* PRIVATE.  Utilities to get values with defaults.                          */
853 /*---------------------------------------------------------------------------*/
854 static gchar*
855 get_string (GConfClient *client,
856             const gchar *key,
857             const gchar *def)
858 {
859         gchar* val;
860
861         val = gconf_client_get_string (client, key, NULL);
862
863         if (val != NULL) {
864
865                 return val;
866
867         } else {
868
869                 return def ? g_strdup (def) : NULL;
870
871         }
872 }
873
874
875 static gboolean
876 get_bool (GConfClient *client,
877           const gchar *key,
878           gboolean     def)
879 {
880         GConfValue* val;
881         gboolean retval;
882
883         val = gconf_client_get (client, key, NULL);
884
885         if (val != NULL) {
886
887                 if ( val->type == GCONF_VALUE_BOOL ) {
888                         retval = gconf_value_get_bool (val);
889                 } else {
890                         retval = def;
891                 }
892
893                 gconf_value_free (val);
894
895                 return retval;
896
897         } else {
898
899                 return def;
900
901         }
902 }
903
904
905 static gint
906 get_int (GConfClient *client,
907          const gchar *key,
908          gint         def)
909 {
910         GConfValue* val;
911         gint retval;
912
913         val = gconf_client_get (client, key, NULL);
914
915         if (val != NULL) {
916
917                 if ( val->type == GCONF_VALUE_INT) {
918                         retval = gconf_value_get_int(val);
919                 } else {
920                         retval = def;
921                 }
922
923                 gconf_value_free (val);
924
925                 return retval;
926
927         } else {
928
929                 return def;
930
931         }
932 }
933
934
935 static gdouble
936 get_float (GConfClient *client,
937            const gchar *key,
938            gdouble      def)
939 {
940         GConfValue* val;
941         gdouble retval;
942
943         val = gconf_client_get (client, key, NULL);
944
945         if (val != NULL) {
946
947                 if ( val->type == GCONF_VALUE_FLOAT ) {
948                         retval = gconf_value_get_float(val);
949                 } else {
950                         retval = def;
951                 }
952
953                 gconf_value_free (val);
954
955                 return retval;
956
957         } else {
958                 return def;
959
960         }
961 }
962
963
964
965
966
967 /*
968  * Local Variables:       -- emacs
969  * mode: C                -- emacs
970  * c-basic-offset: 8      -- emacs
971  * tab-width: 8           -- emacs
972  * indent-tabs-mode: nil  -- emacs
973  * End:                   -- emacs
974  */