3 * Copyright (C) 2001-2009 Jim Evins <evins@snaught.com>.
5 * This file is part of gLabels.
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.
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.
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/>.
23 #include "prefs-model.h"
29 #include <libglabels.h>
37 /*========================================================*/
38 /* Private macros and constants. */
39 /*========================================================*/
42 #define DEFAULT_UNITS_STRING_US lgl_units_get_id (LGL_UNITS_INCH)
43 #define DEFAULT_PAGE_SIZE_US "US-Letter"
45 #define DEFAULT_UNITS_STRING_METRIC lgl_units_get_id (LGL_UNITS_MM)
46 #define DEFAULT_PAGE_SIZE_METRIC "A4"
49 /*========================================================*/
51 /*========================================================*/
53 struct _glPrefsModelPrivate {
67 /*========================================================*/
68 /* Private globals. */
69 /*========================================================*/
71 static guint signals[LAST_SIGNAL] = {0};
74 /*========================================================*/
75 /* Private function prototypes. */
76 /*========================================================*/
78 static void gl_prefs_model_finalize (GObject *object);
80 static void gsettings_changed_cb (glPrefsModel *prefs_model);
83 /*****************************************************************************/
84 /* Boilerplate object stuff. */
85 /*****************************************************************************/
86 G_DEFINE_TYPE (glPrefsModel, gl_prefs_model, G_TYPE_OBJECT)
90 gl_prefs_model_class_init (glPrefsModelClass *class)
92 GObjectClass *object_class = G_OBJECT_CLASS (class);
94 gl_debug (DEBUG_PREFS, "START");
96 gl_prefs_model_parent_class = g_type_class_peek_parent (class);
98 object_class->finalize = gl_prefs_model_finalize;
101 g_signal_new ("changed",
102 G_OBJECT_CLASS_TYPE (object_class),
104 G_STRUCT_OFFSET (glPrefsModelClass, changed),
106 gl_marshal_VOID__VOID,
110 gl_debug (DEBUG_PREFS, "END");
115 gl_prefs_model_init (glPrefsModel *this)
117 gl_debug (DEBUG_PREFS, "START");
119 this->priv = g_new0 (glPrefsModelPrivate, 1);
121 gl_debug (DEBUG_PREFS, "END");
126 gl_prefs_model_finalize (GObject *object)
128 glPrefsModel *this = GL_PREFS_MODEL (object);
130 gl_debug (DEBUG_PREFS, "START");
132 g_return_if_fail (object && GL_IS_PREFS_MODEL (object));
134 g_object_unref (G_OBJECT(this->priv->locale));
135 g_object_unref (G_OBJECT(this->priv->objects));
136 g_object_unref (G_OBJECT(this->priv->ui));
139 G_OBJECT_CLASS (gl_prefs_model_parent_class)->finalize (object);
141 gl_debug (DEBUG_PREFS, "END");
145 /*****************************************************************************/
146 /* New prefs_model object. */
147 /*****************************************************************************/
149 gl_prefs_model_new (void)
153 gl_debug (DEBUG_PREFS, "START");
155 this = GL_PREFS_MODEL (g_object_new (gl_prefs_model_get_type(), NULL));
157 this->priv->locale = g_settings_new ("org.gnome.glabels-3.locale");
158 this->priv->objects = g_settings_new ("org.gnome.glabels-3.objects");
159 this->priv->ui = g_settings_new ("org.gnome.glabels-3.ui");
161 g_signal_connect_swapped (G_OBJECT (this->priv->locale), "changed",
162 G_CALLBACK (gsettings_changed_cb), this);
163 g_signal_connect_swapped (G_OBJECT (this->priv->objects), "changed",
164 G_CALLBACK (gsettings_changed_cb), this);
165 g_signal_connect_swapped (G_OBJECT (this->priv->ui), "changed",
166 G_CALLBACK (gsettings_changed_cb), this);
168 gl_debug (DEBUG_PREFS, "END");
174 /*****************************************************************************/
175 /* New null prefs_model object. */
176 /*****************************************************************************/
178 gl_prefs_model_new_null (void)
182 gl_debug (DEBUG_PREFS, "START");
184 this = GL_PREFS_MODEL (g_object_new (gl_prefs_model_get_type(), NULL));
186 gl_debug (DEBUG_PREFS, "END");
192 /*****************************************************************************/
194 /*****************************************************************************/
196 gl_prefs_model_set_units (glPrefsModel *this,
199 if ( this->priv->locale )
201 g_settings_set_string (this->priv->locale,
203 lgl_units_get_id (units));
208 /*****************************************************************************/
210 /*****************************************************************************/
212 gl_prefs_model_get_units (glPrefsModel *this)
214 if ( !this->priv->locale )
216 return lgl_units_from_id (DEFAULT_UNITS_STRING_METRIC);
223 string = g_settings_get_string (this->priv->locale, "units");
225 /* If not set, make educated guess about locale default. */
226 if ( !string || (*string == '\0') )
228 pgsize = gtk_paper_size_get_default ();
229 if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
231 string = g_strdup (DEFAULT_UNITS_STRING_US);
235 string = g_strdup (DEFAULT_UNITS_STRING_METRIC);
239 units = lgl_units_from_id (string);
242 /* If invalid, make an educated guess from locale. */
243 if (units == LGL_UNITS_INVALID)
245 pgsize = gtk_paper_size_get_default ();
246 if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
248 units = LGL_UNITS_INCH;
252 units = LGL_UNITS_MM;
260 /*****************************************************************************/
261 /* Set default page size. */
262 /*****************************************************************************/
264 gl_prefs_model_set_default_page_size (glPrefsModel *this,
265 const gchar *page_size)
267 if ( this->priv->locale )
269 g_settings_set_string (this->priv->locale,
276 /*****************************************************************************/
277 /* Get default page size. */
278 /*****************************************************************************/
280 gl_prefs_model_get_default_page_size (glPrefsModel *this)
282 if ( !this->priv->locale )
284 return g_strdup (DEFAULT_PAGE_SIZE_METRIC);
291 page_size = g_settings_get_string (this->priv->locale, "default-page-size");
293 /* If not set, make educated guess about locale default. */
294 if ( !page_size || (*page_size == '\0') )
296 pgsize = gtk_paper_size_get_default ();
297 if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
299 page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
303 page_size = g_strdup (DEFAULT_PAGE_SIZE_METRIC);
307 /* Proof read the default page size -- it must be a valid id. */
308 /* (For compatability with older versions.) */
309 paper = lgl_db_lookup_paper_from_id (page_size);
310 if ( paper == NULL ) {
312 page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
314 lgl_paper_free (paper);
321 /*****************************************************************************/
322 /* Set default font family. */
323 /*****************************************************************************/
325 gl_prefs_model_set_default_font_family (glPrefsModel *this,
328 if ( this->priv->objects )
330 g_settings_set_string (this->priv->objects,
331 "default-font-family",
337 /*****************************************************************************/
338 /* Get default font family. */
339 /*****************************************************************************/
341 gl_prefs_model_get_default_font_family (glPrefsModel *this)
343 if ( !this->priv->objects )
345 return g_strdup ("Sans");
348 gchar *family = g_settings_get_string (this->priv->objects,
349 "default-font-family");
355 /*****************************************************************************/
356 /* Set default font size. */
357 /*****************************************************************************/
359 gl_prefs_model_set_default_font_size (glPrefsModel *this,
362 if ( this->priv->objects )
364 g_settings_set_double (this->priv->objects,
371 /*****************************************************************************/
372 /* Get default font size. */
373 /*****************************************************************************/
375 gl_prefs_model_get_default_font_size (glPrefsModel *this)
377 if ( !this->priv->objects )
382 gdouble size = g_settings_get_double (this->priv->objects,
383 "default-font-size");
389 /*****************************************************************************/
390 /* Set default font weight. */
391 /*****************************************************************************/
393 gl_prefs_model_set_default_font_weight (glPrefsModel *this,
396 if ( this->priv->objects )
398 g_settings_set_string (this->priv->objects,
399 "default-font-weight",
400 gl_str_util_weight_to_string(weight));
405 /*****************************************************************************/
406 /* Get default font weight. */
407 /*****************************************************************************/
409 gl_prefs_model_get_default_font_weight (glPrefsModel *this)
411 if ( !this->priv->objects )
413 return PANGO_WEIGHT_NORMAL;
416 gchar *string = g_settings_get_string (this->priv->objects,
417 "default-font-weight");
418 PangoWeight weight = gl_str_util_string_to_weight (string);
425 /*****************************************************************************/
426 /* Set default font italic flag. */
427 /*****************************************************************************/
429 gl_prefs_model_set_default_font_italic_flag (glPrefsModel *this,
430 gboolean italic_flag)
432 if ( this->priv->objects )
434 g_settings_set_boolean (this->priv->objects,
435 "default-font-italic-flag",
441 /*****************************************************************************/
442 /* Get default font italic flag. */
443 /*****************************************************************************/
445 gl_prefs_model_get_default_font_italic_flag (glPrefsModel *this)
447 if ( !this->priv->objects )
452 gboolean italic_flag = g_settings_get_boolean (this->priv->objects,
453 "default-font-italic-flag");
459 /*****************************************************************************/
460 /* Set default text color. */
461 /*****************************************************************************/
463 gl_prefs_model_set_default_text_color (glPrefsModel *this,
466 if ( this->priv->objects )
468 g_settings_set_value (this->priv->objects,
469 "default-text-color",
470 g_variant_new_uint32 (color));
475 /*****************************************************************************/
476 /* Get default text color. */
477 /*****************************************************************************/
479 gl_prefs_model_get_default_text_color (glPrefsModel *this)
481 if ( !this->priv->objects )
486 GVariant *value = g_settings_get_value (this->priv->objects, "default-text-color");
487 guint color = g_variant_get_uint32 (value);
488 g_variant_unref (value);
494 /*****************************************************************************/
495 /* Set default text alignment. */
496 /*****************************************************************************/
498 gl_prefs_model_set_default_text_alignment (glPrefsModel *this,
499 PangoAlignment alignment)
501 if ( this->priv->objects )
503 g_settings_set_string (this->priv->objects,
504 "default-text-alignment",
505 gl_str_util_align_to_string(alignment));
510 /*****************************************************************************/
511 /* Get default text alignment. */
512 /*****************************************************************************/
514 gl_prefs_model_get_default_text_alignment (glPrefsModel *this)
516 if ( !this->priv->objects )
518 return PANGO_ALIGN_LEFT;
521 gchar *string = g_settings_get_string (this->priv->objects,
522 "default-text-alignment");
523 PangoAlignment alignment = gl_str_util_string_to_align (string);
530 /*****************************************************************************/
531 /* Set default text line spacing. */
532 /*****************************************************************************/
534 gl_prefs_model_set_default_text_line_spacing (glPrefsModel *this,
537 if ( this->priv->objects )
539 g_settings_set_double (this->priv->objects,
540 "default-text-line-spacing",
546 /*****************************************************************************/
547 /* Get default text line spacing. */
548 /*****************************************************************************/
550 gl_prefs_model_get_default_text_line_spacing (glPrefsModel *this)
552 if ( !this->priv->objects )
557 gdouble spacing = g_settings_get_double (this->priv->objects,
558 "default-text-line-spacing");
564 /*****************************************************************************/
565 /* Set default line width. */
566 /*****************************************************************************/
568 gl_prefs_model_set_default_line_width (glPrefsModel *this,
571 if ( this->priv->objects )
573 g_settings_set_double (this->priv->objects,
574 "default-line-width",
580 /*****************************************************************************/
581 /* Get default line width. */
582 /*****************************************************************************/
584 gl_prefs_model_get_default_line_width (glPrefsModel *this)
586 if ( !this->priv->objects )
591 gdouble width = g_settings_get_double (this->priv->objects,
592 "default-line-width");
598 /*****************************************************************************/
599 /* Set default line color. */
600 /*****************************************************************************/
602 gl_prefs_model_set_default_line_color (glPrefsModel *this,
605 if ( this->priv->objects )
607 g_settings_set_value (this->priv->objects,
608 "default-line-color",
609 g_variant_new_uint32 (color));
614 /*****************************************************************************/
615 /* Get default line color. */
616 /*****************************************************************************/
618 gl_prefs_model_get_default_line_color (glPrefsModel *this)
620 if ( !this->priv->objects )
625 GVariant *value = g_settings_get_value (this->priv->objects, "default-line-color");
626 guint color = g_variant_get_uint32 (value);
627 g_variant_unref (value);
633 /*****************************************************************************/
634 /* Set default fill color. */
635 /*****************************************************************************/
637 gl_prefs_model_set_default_fill_color (glPrefsModel *this,
640 if ( this->priv->objects )
642 g_settings_set_value (this->priv->objects,
643 "default-fill-color",
644 g_variant_new_uint32 (color));
649 /*****************************************************************************/
650 /* Get default fill color. */
651 /*****************************************************************************/
653 gl_prefs_model_get_default_fill_color (glPrefsModel *this)
655 if ( !this->priv->objects )
660 GVariant *value = g_settings_get_value (this->priv->objects, "default-fill-color");
661 guint color = g_variant_get_uint32 (value);
662 g_variant_unref (value);
668 /*****************************************************************************/
669 /* Set main toolbar visible flag. */
670 /*****************************************************************************/
672 gl_prefs_model_set_main_toolbar_visible (glPrefsModel *this,
675 if ( this->priv->ui )
677 g_settings_set_boolean (this->priv->ui,
678 "main-toolbar-visible",
684 /*****************************************************************************/
685 /* Get main toolbar visible flag. */
686 /*****************************************************************************/
688 gl_prefs_model_get_main_toolbar_visible (glPrefsModel *this)
690 if ( !this->priv->ui )
695 gboolean visible = g_settings_get_boolean (this->priv->ui,
696 "main-toolbar-visible");
702 /*****************************************************************************/
703 /* Set drawing toolbar visible flag. */
704 /*****************************************************************************/
706 gl_prefs_model_set_drawing_toolbar_visible (glPrefsModel *this,
709 if ( this->priv->ui )
711 g_settings_set_boolean (this->priv->ui,
712 "drawing-toolbar-visible",
718 /*****************************************************************************/
719 /* Get drawing toolbar visible flag. */
720 /*****************************************************************************/
722 gl_prefs_model_get_drawing_toolbar_visible (glPrefsModel *this)
724 if ( !this->priv->ui )
729 gboolean visible = g_settings_get_boolean (this->priv->ui,
730 "drawing-toolbar-visible");
736 /*****************************************************************************/
737 /* Set property toolbar visible flag. */
738 /*****************************************************************************/
740 gl_prefs_model_set_property_toolbar_visible (glPrefsModel *this,
743 if ( this->priv->ui )
745 g_settings_set_boolean (this->priv->ui,
746 "property-toolbar-visible",
752 /*****************************************************************************/
753 /* Get property toolbar visible flag. */
754 /*****************************************************************************/
756 gl_prefs_model_get_property_toolbar_visible (glPrefsModel *this)
758 if ( !this->priv->ui )
763 gboolean visible = g_settings_get_boolean (this->priv->ui,
764 "property-toolbar-visible");
770 /*****************************************************************************/
771 /* Set grid visible flag. */
772 /*****************************************************************************/
774 gl_prefs_model_set_grid_visible (glPrefsModel *this,
777 if ( this->priv->ui )
779 g_settings_set_boolean (this->priv->ui,
786 /*****************************************************************************/
787 /* Get grid visible flag. */
788 /*****************************************************************************/
790 gl_prefs_model_get_grid_visible (glPrefsModel *this)
792 if ( !this->priv->ui )
797 gboolean visible = g_settings_get_boolean (this->priv->ui,
804 /*****************************************************************************/
805 /* Set markup visible flag. */
806 /*****************************************************************************/
808 gl_prefs_model_set_markup_visible (glPrefsModel *this,
811 if ( this->priv->ui )
813 g_settings_set_boolean (this->priv->ui,
820 /*****************************************************************************/
821 /* Get markup visible flag. */
822 /*****************************************************************************/
824 gl_prefs_model_get_markup_visible (glPrefsModel *this)
826 if ( !this->priv->ui )
831 gboolean visible = g_settings_get_boolean (this->priv->ui,
838 /*****************************************************************************/
839 /* Set max recents. */
840 /*****************************************************************************/
842 gl_prefs_model_set_max_recents (glPrefsModel *this,
845 if ( this->priv->ui )
847 g_settings_set_int (this->priv->ui,
854 /*****************************************************************************/
855 /* Get max recents. */
856 /*****************************************************************************/
858 gl_prefs_model_get_max_recents (glPrefsModel *this)
860 if ( !this->priv->ui )
865 gint max_recents = g_settings_get_int (this->priv->ui,
872 /*---------------------------------------------------------------------------*/
873 /* PRIVATE. Key changed callback. */
874 /*---------------------------------------------------------------------------*/
876 gsettings_changed_cb (glPrefsModel *this)
878 g_signal_emit (G_OBJECT(this), signals[CHANGED], 0);
885 * Local Variables: -- emacs
887 * c-basic-offset: 8 -- emacs
888 * tab-width: 8 -- emacs
889 * indent-tabs-mode: nil -- emacs