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 this->priv->locale = g_settings_new ("org.gnome.glabels-3.locale");
122 this->priv->objects = g_settings_new ("org.gnome.glabels-3.objects");
123 this->priv->ui = g_settings_new ("org.gnome.glabels-3.ui");
125 g_return_if_fail (this->priv->locale != NULL);
126 g_return_if_fail (this->priv->objects != NULL);
127 g_return_if_fail (this->priv->ui != NULL);
129 g_signal_connect_swapped (G_OBJECT (this->priv->locale), "changed",
130 G_CALLBACK (gsettings_changed_cb), this);
131 g_signal_connect_swapped (G_OBJECT (this->priv->objects), "changed",
132 G_CALLBACK (gsettings_changed_cb), this);
133 g_signal_connect_swapped (G_OBJECT (this->priv->ui), "changed",
134 G_CALLBACK (gsettings_changed_cb), this);
136 gl_debug (DEBUG_PREFS, "END");
141 gl_prefs_model_finalize (GObject *object)
143 glPrefsModel *this = GL_PREFS_MODEL (object);
145 gl_debug (DEBUG_PREFS, "START");
147 g_return_if_fail (object && GL_IS_PREFS_MODEL (object));
149 g_object_unref (G_OBJECT(this->priv->locale));
150 g_object_unref (G_OBJECT(this->priv->objects));
151 g_object_unref (G_OBJECT(this->priv->ui));
154 G_OBJECT_CLASS (gl_prefs_model_parent_class)->finalize (object);
156 gl_debug (DEBUG_PREFS, "END");
160 /*****************************************************************************/
161 /* New prefs_model object. */
162 /*****************************************************************************/
164 gl_prefs_model_new (void)
168 gl_debug (DEBUG_PREFS, "START");
170 this = GL_PREFS_MODEL (g_object_new (gl_prefs_model_get_type(), NULL));
172 gl_debug (DEBUG_PREFS, "END");
178 /*****************************************************************************/
180 /*****************************************************************************/
182 gl_prefs_model_set_units (glPrefsModel *this,
185 g_settings_set_string (this->priv->locale,
187 lgl_units_get_id (units));
191 /*****************************************************************************/
193 /*****************************************************************************/
195 gl_prefs_model_get_units (glPrefsModel *this)
201 string = g_settings_get_string (this->priv->locale, "units");
203 /* If not set, make educated guess about locale default. */
204 if ( !string || (*string == '\0') )
206 pgsize = gtk_paper_size_get_default ();
207 if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
209 string = g_strdup (DEFAULT_UNITS_STRING_US);
213 string = g_strdup (DEFAULT_UNITS_STRING_METRIC);
217 units = lgl_units_from_id (string);
220 /* If invalid, make an educated guess from locale. */
221 if (units == LGL_UNITS_INVALID)
223 pgsize = gtk_paper_size_get_default ();
224 if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
226 units = LGL_UNITS_INCH;
230 units = LGL_UNITS_MM;
238 /*****************************************************************************/
239 /* Set default page size. */
240 /*****************************************************************************/
242 gl_prefs_model_set_default_page_size (glPrefsModel *this,
243 const gchar *page_size)
245 g_settings_set_string (this->priv->locale,
251 /*****************************************************************************/
252 /* Get default page size. */
253 /*****************************************************************************/
255 gl_prefs_model_get_default_page_size (glPrefsModel *this)
261 page_size = g_settings_get_string (this->priv->locale, "default-page-size");
263 /* If not set, make educated guess about locale default. */
264 if ( !page_size || (*page_size == '\0') )
266 pgsize = gtk_paper_size_get_default ();
267 if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
269 page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
273 page_size = g_strdup (DEFAULT_PAGE_SIZE_METRIC);
277 /* Proof read the default page size -- it must be a valid id. */
278 /* (For compatability with older versions.) */
279 paper = lgl_db_lookup_paper_from_id (page_size);
280 if ( paper == NULL ) {
282 page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
284 lgl_paper_free (paper);
291 /*****************************************************************************/
292 /* Set default font family. */
293 /*****************************************************************************/
295 gl_prefs_model_set_default_font_family (glPrefsModel *this,
298 g_settings_set_string (this->priv->objects,
299 "default-font-family",
304 /*****************************************************************************/
305 /* Get default font family. */
306 /*****************************************************************************/
308 gl_prefs_model_get_default_font_family (glPrefsModel *this)
312 family = g_settings_get_string (this->priv->objects,
313 "default-font-family");
319 /*****************************************************************************/
320 /* Set default font size. */
321 /*****************************************************************************/
323 gl_prefs_model_set_default_font_size (glPrefsModel *this,
326 g_settings_set_double (this->priv->objects,
332 /*****************************************************************************/
333 /* Get default font size. */
334 /*****************************************************************************/
336 gl_prefs_model_get_default_font_size (glPrefsModel *this)
340 size = g_settings_get_double (this->priv->objects,
341 "default-font-size");
347 /*****************************************************************************/
348 /* Set default font weight. */
349 /*****************************************************************************/
351 gl_prefs_model_set_default_font_weight (glPrefsModel *this,
354 g_settings_set_string (this->priv->objects,
355 "default-font-weight",
356 gl_str_util_weight_to_string(weight));
360 /*****************************************************************************/
361 /* Get default font weight. */
362 /*****************************************************************************/
364 gl_prefs_model_get_default_font_weight (glPrefsModel *this)
369 string = g_settings_get_string (this->priv->objects,
370 "default-font-weight");
371 weight = gl_str_util_string_to_weight (string);
378 /*****************************************************************************/
379 /* Set default font italic flag. */
380 /*****************************************************************************/
382 gl_prefs_model_set_default_font_italic_flag (glPrefsModel *this,
383 gboolean italic_flag)
385 g_settings_set_boolean (this->priv->objects,
386 "default-font-italic-flag",
391 /*****************************************************************************/
392 /* Get default font italic flag. */
393 /*****************************************************************************/
395 gl_prefs_model_get_default_font_italic_flag (glPrefsModel *this)
397 gboolean italic_flag;
399 italic_flag = g_settings_get_boolean (this->priv->objects,
400 "default-font-italic-flag");
406 /*****************************************************************************/
407 /* Set default text color. */
408 /*****************************************************************************/
410 gl_prefs_model_set_default_text_color (glPrefsModel *this,
413 g_settings_set_value (this->priv->objects,
414 "default-text-color",
415 g_variant_new_uint32 (color));
419 /*****************************************************************************/
420 /* Get default text color. */
421 /*****************************************************************************/
423 gl_prefs_model_get_default_text_color (glPrefsModel *this)
428 value = g_settings_get_value (this->priv->objects, "default-text-color");
429 color = g_variant_get_uint32 (value);
430 g_variant_unref (value);
436 /*****************************************************************************/
437 /* Set default text alignment. */
438 /*****************************************************************************/
440 gl_prefs_model_set_default_text_alignment (glPrefsModel *this,
441 PangoAlignment alignment)
443 g_settings_set_string (this->priv->objects,
444 "default-text-alignment",
445 gl_str_util_align_to_string(alignment));
449 /*****************************************************************************/
450 /* Get default text alignment. */
451 /*****************************************************************************/
453 gl_prefs_model_get_default_text_alignment (glPrefsModel *this)
456 PangoAlignment alignment;
458 string = g_settings_get_string (this->priv->objects,
459 "default-text-alignment");
460 alignment = gl_str_util_string_to_align (string);
467 /*****************************************************************************/
468 /* Set default text line spacing. */
469 /*****************************************************************************/
471 gl_prefs_model_set_default_text_line_spacing (glPrefsModel *this,
474 g_settings_set_double (this->priv->objects,
475 "default-text-line-spacing",
480 /*****************************************************************************/
481 /* Get default text line spacing. */
482 /*****************************************************************************/
484 gl_prefs_model_get_default_text_line_spacing (glPrefsModel *this)
488 spacing = g_settings_get_double (this->priv->objects,
489 "default-text-line-spacing");
495 /*****************************************************************************/
496 /* Set default line width. */
497 /*****************************************************************************/
499 gl_prefs_model_set_default_line_width (glPrefsModel *this,
502 g_settings_set_double (this->priv->objects,
503 "default-line-width",
508 /*****************************************************************************/
509 /* Get default line width. */
510 /*****************************************************************************/
512 gl_prefs_model_get_default_line_width (glPrefsModel *this)
516 width = g_settings_get_double (this->priv->objects,
517 "default-line-width");
523 /*****************************************************************************/
524 /* Set default line color. */
525 /*****************************************************************************/
527 gl_prefs_model_set_default_line_color (glPrefsModel *this,
530 g_settings_set_value (this->priv->objects,
531 "default-line-color",
532 g_variant_new_uint32 (color));
536 /*****************************************************************************/
537 /* Get default line color. */
538 /*****************************************************************************/
540 gl_prefs_model_get_default_line_color (glPrefsModel *this)
545 value = g_settings_get_value (this->priv->objects, "default-line-color");
546 color = g_variant_get_uint32 (value);
547 g_variant_unref (value);
553 /*****************************************************************************/
554 /* Set default fill color. */
555 /*****************************************************************************/
557 gl_prefs_model_set_default_fill_color (glPrefsModel *this,
560 g_settings_set_value (this->priv->objects,
561 "default-fill-color",
562 g_variant_new_uint32 (color));
566 /*****************************************************************************/
567 /* Get default fill color. */
568 /*****************************************************************************/
570 gl_prefs_model_get_default_fill_color (glPrefsModel *this)
575 value = g_settings_get_value (this->priv->objects, "default-fill-color");
576 color = g_variant_get_uint32 (value);
577 g_variant_unref (value);
583 /*****************************************************************************/
584 /* Set main toolbar visible flag. */
585 /*****************************************************************************/
587 gl_prefs_model_set_main_toolbar_visible (glPrefsModel *this,
590 g_settings_set_boolean (this->priv->ui,
591 "main-toolbar-visible",
596 /*****************************************************************************/
597 /* Get main toolbar visible flag. */
598 /*****************************************************************************/
600 gl_prefs_model_get_main_toolbar_visible (glPrefsModel *this)
604 visible = g_settings_get_boolean (this->priv->ui,
605 "main-toolbar-visible");
611 /*****************************************************************************/
612 /* Set drawing toolbar visible flag. */
613 /*****************************************************************************/
615 gl_prefs_model_set_drawing_toolbar_visible (glPrefsModel *this,
618 g_settings_set_boolean (this->priv->ui,
619 "drawing-toolbar-visible",
624 /*****************************************************************************/
625 /* Get drawing toolbar visible flag. */
626 /*****************************************************************************/
628 gl_prefs_model_get_drawing_toolbar_visible (glPrefsModel *this)
632 visible = g_settings_get_boolean (this->priv->ui,
633 "drawing-toolbar-visible");
639 /*****************************************************************************/
640 /* Set property toolbar visible flag. */
641 /*****************************************************************************/
643 gl_prefs_model_set_property_toolbar_visible (glPrefsModel *this,
646 g_settings_set_boolean (this->priv->ui,
647 "property-toolbar-visible",
652 /*****************************************************************************/
653 /* Get property toolbar visible flag. */
654 /*****************************************************************************/
656 gl_prefs_model_get_property_toolbar_visible (glPrefsModel *this)
660 visible = g_settings_get_boolean (this->priv->ui,
661 "property-toolbar-visible");
667 /*****************************************************************************/
668 /* Set grid visible flag. */
669 /*****************************************************************************/
671 gl_prefs_model_set_grid_visible (glPrefsModel *this,
674 g_settings_set_boolean (this->priv->ui,
680 /*****************************************************************************/
681 /* Get grid visible flag. */
682 /*****************************************************************************/
684 gl_prefs_model_get_grid_visible (glPrefsModel *this)
688 visible = g_settings_get_boolean (this->priv->ui,
695 /*****************************************************************************/
696 /* Set markup visible flag. */
697 /*****************************************************************************/
699 gl_prefs_model_set_markup_visible (glPrefsModel *this,
702 g_settings_set_boolean (this->priv->ui,
708 /*****************************************************************************/
709 /* Get markup visible flag. */
710 /*****************************************************************************/
712 gl_prefs_model_get_markup_visible (glPrefsModel *this)
716 visible = g_settings_get_boolean (this->priv->ui,
723 /*****************************************************************************/
724 /* Set max recents. */
725 /*****************************************************************************/
727 gl_prefs_model_set_max_recents (glPrefsModel *this,
730 g_settings_set_int (this->priv->ui,
736 /*****************************************************************************/
737 /* Get max recents. */
738 /*****************************************************************************/
740 gl_prefs_model_get_max_recents (glPrefsModel *this)
744 max_recents = g_settings_get_int (this->priv->ui,
751 /*---------------------------------------------------------------------------*/
752 /* PRIVATE. Key changed callback. */
753 /*---------------------------------------------------------------------------*/
755 gsettings_changed_cb (glPrefsModel *this)
757 g_signal_emit (G_OBJECT(this), signals[CHANGED], 0);
764 * Local Variables: -- emacs
766 * c-basic-offset: 8 -- emacs
767 * tab-width: 8 -- emacs
768 * indent-tabs-mode: nil -- emacs