-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
-
/*
- * (GLABELS) Label and Business Card Creation program for GNOME
- *
- * prefs-model.c: Application preferences model module
+ * prefs-model.h
+ * Copyright (C) 2001-2009 Jim Evins <evins@snaught.com>.
*
- * Copyright (C) 2001-2003 Jim Evins <evins@snaught.com>.
+ * This file is part of gLabels.
*
- * This program is free software; you can redistribute it and/or modify
+ * gLabels is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
+ * gLabels is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
*/
+
#include <config.h>
#include "prefs-model.h"
-#include <libglabels/db.h>
-#include <libglabels/xml.h>
-#include <gtk/gtkpapersize.h>
+#include <gio/gio.h>
+#include <gtk/gtk.h>
+#include <string.h>
+#include <libglabels.h>
#include "marshal.h"
-#include "util.h"
+#include "str-util.h"
#include "color.h"
#include "debug.h"
+
/*========================================================*/
/* Private macros and constants. */
/*========================================================*/
-/* GConf keys */
-#define BASE_KEY "/apps/glabels"
-
-#define PREF_UNITS "/units"
-#define PREF_DEFAULT_PAGE_SIZE "/default-page-size"
-
-#define PREF_DEFAULT_FONT_FAMILY "/default-font-family"
-#define PREF_DEFAULT_FONT_SIZE "/default-font-size"
-#define PREF_DEFAULT_FONT_WEIGHT "/default-font-weight"
-#define PREF_DEFAULT_FONT_ITALIC_FLAG "/default-font-italic-flag"
-#define PREF_DEFAULT_TEXT_COLOR "/default-text-color"
-#define PREF_DEFAULT_TEXT_ALIGNMENT "/default-text-alignment"
-#define PREF_DEFAULT_TEXT_LINE_SPACING "/default-text-line-spacing"
-
-#define PREF_DEFAULT_LINE_WIDTH "/default-line-width"
-#define PREF_DEFAULT_LINE_COLOR "/default-line-color"
-
-#define PREF_DEFAULT_FILL_COLOR "/default-fill-color"
-
-#define PREF_MAIN_TOOLBAR_VISIBLE "/main-toolbar-visible"
-#define PREF_MAIN_TOOLBAR_BUTTONS_STYLE "/main-toolbar-buttons-style"
-#define PREF_MAIN_TOOLBAR_VIEW_TOOLTIPS "/main-toolbar-view-tooltips"
-
-#define PREF_DRAWING_TOOLBAR_VISIBLE "/drawing-toolbar-visible"
-#define PREF_DRAWING_TOOLBAR_VIEW_TOOLTIPS "/drawing-toolbar-view-tooltips"
-
-#define PREF_PROPERTY_TOOLBAR_VISIBLE "/property-toolbar-visible"
-#define PREF_PROPERTY_TOOLBAR_VIEW_TOOLTIPS "/property-toolbar-view-tooltips"
-
-#define PREF_GRID_VISIBLE "/grid-visible"
-#define PREF_MARKUP_VISIBLE "/markup-visible"
-
-#define PREF_MAX_RECENTS "/max-recents"
-
-#define PREF_RECENT_TEMPLATES "/recent-templates"
-#define PREF_MAX_RECENT_TEMPLATES "/max-recent-templates"
-
/* Default values */
-#define DEFAULT_UNITS_STRING_US units_to_string (LGL_UNITS_INCH)
-#define DEFAULT_PAGE_SIZE_US "US-Letter"
-
-#define DEFAULT_UNITS_STRING_METRIC units_to_string (LGL_UNITS_MM)
-#define DEFAULT_PAGE_SIZE_METRIC "A4"
-
-#define DEFAULT_FONT_FAMILY "Sans"
-#define DEFAULT_FONT_SIZE 14.0
-#define DEFAULT_FONT_WEIGHT_STRING gl_util_weight_to_string (PANGO_WEIGHT_NORMAL)
-#define DEFAULT_FONT_ITALIC_FLAG FALSE
-#define DEFAULT_TEXT_ALIGN_STRING gl_util_align_to_string (PANGO_ALIGN_LEFT)
-#define DEFAULT_TEXT_COLOR GL_COLOR (0,0,0)
-#define DEFAULT_TEXT_LINE_SPACING 1.0
+#define DEFAULT_UNITS_STRING_US lgl_units_get_id (LGL_UNITS_INCH)
+#define DEFAULT_PAGE_SIZE_US "US-Letter"
-#define DEFAULT_LINE_WIDTH 1.0
-#define DEFAULT_LINE_COLOR GL_COLOR_A (0, 0, 0, 255)
+#define DEFAULT_UNITS_STRING_METRIC lgl_units_get_id (LGL_UNITS_MM)
+#define DEFAULT_PAGE_SIZE_METRIC "A4"
-#define DEFAULT_FILL_COLOR GL_COLOR_A (0, 255, 0, 255)
/*========================================================*/
/* Private types. */
/*========================================================*/
-enum {
- CHANGED,
- LAST_SIGNAL
+struct _glPrefsModelPrivate {
+
+ GSettings *locale;
+ GSettings *objects;
+ GSettings *ui;
+
};
+enum {
+ CHANGED,
+ LAST_SIGNAL
+};
/*========================================================*/
static guint signals[LAST_SIGNAL] = {0};
+
/*========================================================*/
/* Private function prototypes. */
/*========================================================*/
static void gl_prefs_model_finalize (GObject *object);
-static void notify_cb (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- glPrefsModel *prefs_model);
-
-static gchar *get_string (GConfClient *client,
- const gchar *key,
- const gchar *def);
-
-static gboolean get_bool (GConfClient *client,
- const gchar *key,
- gboolean def);
-
-static gint get_int (GConfClient *client,
- const gchar *key,
- gint def);
+static void gsettings_changed_cb (glPrefsModel *prefs_model);
-static gdouble get_float (GConfClient *client,
- const gchar *key,
- gdouble def);
-static lglUnitsType string_to_units (const gchar *string);
-static const gchar *units_to_string (lglUnitsType units);
-
-
-\f
/*****************************************************************************/
/* Boilerplate object stuff. */
/*****************************************************************************/
-G_DEFINE_TYPE (glPrefsModel, gl_prefs_model, G_TYPE_OBJECT);
+G_DEFINE_TYPE (glPrefsModel, gl_prefs_model, G_TYPE_OBJECT)
+
static void
gl_prefs_model_class_init (glPrefsModelClass *class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
- gl_debug (DEBUG_PREFS, "START");
+ gl_debug (DEBUG_PREFS, "START");
- gl_prefs_model_parent_class = g_type_class_peek_parent (class);
+ gl_prefs_model_parent_class = g_type_class_peek_parent (class);
- object_class->finalize = gl_prefs_model_finalize;
+ object_class->finalize = gl_prefs_model_finalize;
- signals[CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (glPrefsModelClass, changed),
- NULL, NULL,
- gl_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
+ signals[CHANGED] =
+ g_signal_new ("changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (glPrefsModelClass, changed),
+ NULL, NULL,
+ gl_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
- gl_debug (DEBUG_PREFS, "END");
+ gl_debug (DEBUG_PREFS, "END");
}
+
static void
-gl_prefs_model_init (glPrefsModel *prefs_model)
+gl_prefs_model_init (glPrefsModel *this)
{
- gl_debug (DEBUG_PREFS, "START");
+ gl_debug (DEBUG_PREFS, "START");
- prefs_model->gconf_client = gconf_client_get_default ();
+ this->priv = g_new0 (glPrefsModelPrivate, 1);
- g_return_if_fail (prefs_model->gconf_client != NULL);
-
- gconf_client_add_dir (prefs_model->gconf_client,
- BASE_KEY,
- GCONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
-
- gconf_client_notify_add (prefs_model->gconf_client,
- BASE_KEY,
- (GConfClientNotifyFunc)notify_cb, prefs_model,
- NULL, NULL);
+ this->priv->locale = g_settings_new ("org.gnome.glabels-3.locale");
+ this->priv->objects = g_settings_new ("org.gnome.glabels-3.objects");
+ this->priv->ui = g_settings_new ("org.gnome.glabels-3.ui");
- gl_debug (DEBUG_PREFS, "END");
+ g_return_if_fail (this->priv->locale != NULL);
+ g_return_if_fail (this->priv->objects != NULL);
+ g_return_if_fail (this->priv->ui != NULL);
+
+ g_signal_connect_swapped (G_OBJECT (this->priv->locale), "changed",
+ G_CALLBACK (gsettings_changed_cb), this);
+ g_signal_connect_swapped (G_OBJECT (this->priv->objects), "changed",
+ G_CALLBACK (gsettings_changed_cb), this);
+ g_signal_connect_swapped (G_OBJECT (this->priv->ui), "changed",
+ G_CALLBACK (gsettings_changed_cb), this);
+
+ gl_debug (DEBUG_PREFS, "END");
}
+
static void
gl_prefs_model_finalize (GObject *object)
{
- glPrefsModel *prefs_model = GL_PREFS_MODEL (object);
+ glPrefsModel *this = GL_PREFS_MODEL (object);
- gl_debug (DEBUG_PREFS, "START");
+ gl_debug (DEBUG_PREFS, "START");
- g_return_if_fail (object && GL_IS_PREFS_MODEL (object));
+ g_return_if_fail (object && GL_IS_PREFS_MODEL (object));
- g_object_unref (G_OBJECT(prefs_model->gconf_client));
- g_free (prefs_model->default_page_size);
- g_free (prefs_model->default_font_family);
+ g_object_unref (G_OBJECT(this->priv->locale));
+ g_object_unref (G_OBJECT(this->priv->objects));
+ g_object_unref (G_OBJECT(this->priv->ui));
+ g_free (this->priv);
- G_OBJECT_CLASS (gl_prefs_model_parent_class)->finalize (object);
+ G_OBJECT_CLASS (gl_prefs_model_parent_class)->finalize (object);
- gl_debug (DEBUG_PREFS, "END");
+ gl_debug (DEBUG_PREFS, "END");
}
+
/*****************************************************************************/
/* New prefs_model object. */
/*****************************************************************************/
glPrefsModel *
gl_prefs_model_new (void)
{
- glPrefsModel *prefs_model;
+ glPrefsModel *this;
- gl_debug (DEBUG_PREFS, "START");
+ gl_debug (DEBUG_PREFS, "START");
- prefs_model = GL_PREFS_MODEL (g_object_new (gl_prefs_model_get_type(), NULL));
+ this = GL_PREFS_MODEL (g_object_new (gl_prefs_model_get_type(), NULL));
- gl_debug (DEBUG_PREFS, "END");
+ gl_debug (DEBUG_PREFS, "END");
- return prefs_model;
+ return this;
}
+/*****************************************************************************/
+/* Set units. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_units (glPrefsModel *this,
+ lglUnits units)
+{
+ g_settings_set_string (this->priv->locale,
+ "units",
+ lgl_units_get_id (units));
+}
+
/*****************************************************************************/
-/* Save all settings. */
+/* Get units. */
/*****************************************************************************/
-void
-gl_prefs_model_save_settings (glPrefsModel *prefs_model)
+lglUnits
+gl_prefs_model_get_units (glPrefsModel *this)
{
- gl_debug (DEBUG_PREFS, "START");
-
- g_return_if_fail (prefs_model && GL_IS_PREFS_MODEL(prefs_model));
- g_return_if_fail (prefs_model->gconf_client != NULL);
+ const gchar *pgsize;
+ gchar *string;
+ lglUnits units;
+
+ string = g_settings_get_string (this->priv->locale, "units");
+
+ /* If not set, make educated guess about locale default. */
+ if ( !string || (*string == '\0') )
+ {
+ pgsize = gtk_paper_size_get_default ();
+ if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
+ {
+ string = g_strdup (DEFAULT_UNITS_STRING_US);
+ }
+ else
+ {
+ string = g_strdup (DEFAULT_UNITS_STRING_METRIC);
+ }
+ }
- /* We are saving settings because presumably some of them have been changed. */
- g_signal_emit (G_OBJECT(prefs_model), signals[CHANGED], 0);
+ units = lgl_units_from_id (string);
+ g_free (string);
- /* Units */
- gconf_client_set_string (prefs_model->gconf_client,
- BASE_KEY PREF_UNITS,
- units_to_string(prefs_model->units),
- NULL);
- lgl_xml_set_default_units (prefs_model->units);
+ /* If invalid, make an educated guess from locale. */
+ if (units == LGL_UNITS_INVALID)
+ {
+ pgsize = gtk_paper_size_get_default ();
+ if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
+ {
+ units = LGL_UNITS_INCH;
+ }
+ else
+ {
+ units = LGL_UNITS_MM;
+ }
+ }
- /* Default page size */
- gconf_client_set_string (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_PAGE_SIZE,
- prefs_model->default_page_size,
- NULL);
+ return units;
+}
- /* Text properties */
- gconf_client_set_string (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_FONT_FAMILY,
- prefs_model->default_font_family,
- NULL);
+/*****************************************************************************/
+/* Set default page size. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_page_size (glPrefsModel *this,
+ const gchar *page_size)
+{
+ g_settings_set_string (this->priv->locale,
+ "default-page-size",
+ page_size);
+}
- gconf_client_set_float (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_FONT_SIZE,
- prefs_model->default_font_size,
- NULL);
- gconf_client_set_string (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_FONT_WEIGHT,
- gl_util_weight_to_string(prefs_model->default_font_weight),
- NULL);
+/*****************************************************************************/
+/* Get default page size. */
+/*****************************************************************************/
+gchar *
+gl_prefs_model_get_default_page_size (glPrefsModel *this)
+{
+ const gchar *pgsize;
+ gchar *page_size;
+ lglPaper *paper;
- gconf_client_set_int (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_TEXT_COLOR,
- prefs_model->default_text_color,
- NULL);
+ page_size = g_settings_get_string (this->priv->locale, "default-page-size");
- gconf_client_set_string (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_TEXT_ALIGNMENT,
- gl_util_align_to_string(prefs_model->default_text_alignment),
- NULL);
+ /* If not set, make educated guess about locale default. */
+ if ( !page_size || (*page_size == '\0') )
+ {
+ pgsize = gtk_paper_size_get_default ();
+ if ( strcmp (pgsize, GTK_PAPER_NAME_LETTER) == 0 )
+ {
+ page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
+ }
+ else
+ {
+ page_size = g_strdup (DEFAULT_PAGE_SIZE_METRIC);
+ }
+ }
- gconf_client_set_float (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_TEXT_LINE_SPACING,
- prefs_model->default_text_line_spacing,
- NULL);
+ /* Proof read the default page size -- it must be a valid id. */
+ /* (For compatability with older versions.) */
+ paper = lgl_db_lookup_paper_from_id (page_size);
+ if ( paper == NULL ) {
+ g_free (page_size);
+ page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
+ } else {
+ lgl_paper_free (paper);
+ }
- /* Line properties */
- gconf_client_set_float (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_LINE_WIDTH,
- prefs_model->default_line_width,
- NULL);
+ return page_size;
+}
- gconf_client_set_int (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_LINE_COLOR,
- prefs_model->default_line_color,
- NULL);
+/*****************************************************************************/
+/* Set default font family. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_font_family (glPrefsModel *this,
+ const gchar *family)
+{
+ g_settings_set_string (this->priv->objects,
+ "default-font-family",
+ family);
+}
- /* Fill properties */
- gconf_client_set_int (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_FILL_COLOR,
- prefs_model->default_fill_color,
- NULL);
+/*****************************************************************************/
+/* Get default font family. */
+/*****************************************************************************/
+gchar *
+gl_prefs_model_get_default_font_family (glPrefsModel *this)
+{
+ gchar *family;
- /* Main Toolbar */
- gconf_client_set_bool (prefs_model->gconf_client,
- BASE_KEY PREF_MAIN_TOOLBAR_VISIBLE,
- prefs_model->main_toolbar_visible,
- NULL);
+ family = g_settings_get_string (this->priv->objects,
+ "default-font-family");
- gconf_client_set_int (prefs_model->gconf_client,
- BASE_KEY PREF_MAIN_TOOLBAR_BUTTONS_STYLE,
- prefs_model->main_toolbar_buttons_style,
- NULL);
+ return family;
+}
- gconf_client_set_bool (prefs_model->gconf_client,
- BASE_KEY PREF_MAIN_TOOLBAR_VIEW_TOOLTIPS,
- prefs_model->main_toolbar_view_tooltips,
- NULL);
- /* Drawing Toolbar */
- gconf_client_set_bool (prefs_model->gconf_client,
- BASE_KEY PREF_DRAWING_TOOLBAR_VISIBLE,
- prefs_model->drawing_toolbar_visible,
- NULL);
-
- gconf_client_set_bool (prefs_model->gconf_client,
- BASE_KEY PREF_DRAWING_TOOLBAR_VIEW_TOOLTIPS,
- prefs_model->drawing_toolbar_view_tooltips,
- NULL);
-
- /* Property Toolbar */
- gconf_client_set_bool (prefs_model->gconf_client,
- BASE_KEY PREF_PROPERTY_TOOLBAR_VISIBLE,
- prefs_model->property_toolbar_visible,
- NULL);
-
- gconf_client_set_bool (prefs_model->gconf_client,
- BASE_KEY PREF_PROPERTY_TOOLBAR_VIEW_TOOLTIPS,
- prefs_model->property_toolbar_view_tooltips,
- NULL);
-
- /* View properties */
- gconf_client_set_bool (prefs_model->gconf_client,
- BASE_KEY PREF_GRID_VISIBLE,
- prefs_model->grid_visible,
- NULL);
-
- gconf_client_set_bool (prefs_model->gconf_client,
- BASE_KEY PREF_MARKUP_VISIBLE,
- prefs_model->markup_visible,
- NULL);
-
- /* Recent files */
- gconf_client_set_int (prefs_model->gconf_client,
- BASE_KEY PREF_MAX_RECENTS,
- prefs_model->max_recents,
- NULL);
-
- /* Recent templates */
- gconf_client_set_list (prefs_model->gconf_client,
- BASE_KEY PREF_RECENT_TEMPLATES,
- GCONF_VALUE_STRING,
- prefs_model->recent_templates,
- NULL);
- gconf_client_set_int (prefs_model->gconf_client,
- BASE_KEY PREF_MAX_RECENT_TEMPLATES,
- prefs_model->max_recent_templates,
- NULL);
-
-
- gconf_client_suggest_sync (prefs_model->gconf_client, NULL);
-
- gl_debug (DEBUG_PREFS, "END");
-}
-
-/*****************************************************************************/
-/* Load all settings. */
+/*****************************************************************************/
+/* Set default font size. */
/*****************************************************************************/
void
-gl_prefs_model_load_settings (glPrefsModel *prefs_model)
+gl_prefs_model_set_default_font_size (glPrefsModel *this,
+ gdouble size)
{
- const gchar *pgsize, *default_units_string, *default_page_size;
- gchar *string;
- lglPaper *paper;
- GSList *p, *p_next;
+ g_settings_set_double (this->priv->objects,
+ "default-font-size",
+ size);
+}
- gl_debug (DEBUG_PREFS, "START");
-
- g_return_if_fail (prefs_model && GL_IS_PREFS_MODEL(prefs_model));
- g_return_if_fail (prefs_model->gconf_client != NULL);
- /* Make educated guess about locale defaults. */
- pgsize = gtk_paper_size_get_default ();
- if ( strcmp (pgsize,GTK_PAPER_NAME_LETTER) == 0 )
- {
- default_units_string = DEFAULT_UNITS_STRING_US;
- default_page_size = DEFAULT_PAGE_SIZE_US;
- }
- else
- {
- default_units_string = DEFAULT_UNITS_STRING_METRIC;
- default_page_size = DEFAULT_PAGE_SIZE_METRIC;
- }
+/*****************************************************************************/
+/* Get default font size. */
+/*****************************************************************************/
+gdouble
+gl_prefs_model_get_default_font_size (glPrefsModel *this)
+{
+ gdouble size;
- /* Units */
- string =
- get_string (prefs_model->gconf_client,
- BASE_KEY PREF_UNITS,
- default_units_string);
- prefs_model->units = string_to_units( string );
- g_free( string );
- lgl_xml_set_default_units (prefs_model->units);
-
-
- /* Page size */
- g_free (prefs_model->default_page_size);
- prefs_model->default_page_size =
- get_string (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_PAGE_SIZE,
- default_page_size);
-
- /* Text properties */
- g_free (prefs_model->default_font_family);
- prefs_model->default_font_family =
- get_string (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_FONT_FAMILY,
- DEFAULT_FONT_FAMILY);
-
- prefs_model->default_font_size =
- get_float (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_FONT_SIZE,
- DEFAULT_FONT_SIZE);
-
- string =
- get_string (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_FONT_WEIGHT,
- DEFAULT_FONT_WEIGHT_STRING);
- prefs_model->default_font_weight = gl_util_string_to_weight( string );
- g_free( string );
-
- prefs_model->default_text_color =
- get_int (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_TEXT_COLOR,
- DEFAULT_TEXT_COLOR);
-
- string =
- get_string (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_TEXT_ALIGNMENT,
- DEFAULT_TEXT_ALIGN_STRING);
- prefs_model->default_text_alignment = gl_util_string_to_align( string );
- g_free( string );
-
- prefs_model->default_text_line_spacing =
- get_float (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_TEXT_LINE_SPACING,
- DEFAULT_TEXT_LINE_SPACING);
-
- gl_debug (DEBUG_PREFS, "text_line_spacing = %f", prefs_model->default_text_line_spacing);
-
- /* Line properties */
- prefs_model->default_line_width =
- get_float (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_LINE_WIDTH,
- DEFAULT_LINE_WIDTH);
- prefs_model->default_line_color =
- get_int (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_LINE_COLOR,
- DEFAULT_LINE_COLOR);
-
- /* Fill properties */
- prefs_model->default_fill_color =
- get_int (prefs_model->gconf_client,
- BASE_KEY PREF_DEFAULT_FILL_COLOR,
- DEFAULT_FILL_COLOR);
-
-
- /* User Inferface/Main Toolbar */
- prefs_model->main_toolbar_visible =
- get_bool (prefs_model->gconf_client,
- BASE_KEY PREF_MAIN_TOOLBAR_VISIBLE,
- TRUE);
-
- prefs_model->main_toolbar_buttons_style =
- get_int (prefs_model->gconf_client,
- BASE_KEY PREF_MAIN_TOOLBAR_BUTTONS_STYLE,
- GL_TOOLBAR_SYSTEM);
-
- prefs_model->main_toolbar_view_tooltips =
- get_bool (prefs_model->gconf_client,
- BASE_KEY PREF_MAIN_TOOLBAR_VIEW_TOOLTIPS,
- TRUE);
-
- /* User Inferface/Drawing Toolbar */
- prefs_model->drawing_toolbar_visible =
- get_bool (prefs_model->gconf_client,
- BASE_KEY PREF_DRAWING_TOOLBAR_VISIBLE,
- TRUE);
-
- prefs_model->drawing_toolbar_view_tooltips =
- get_bool (prefs_model->gconf_client,
- BASE_KEY PREF_DRAWING_TOOLBAR_VIEW_TOOLTIPS,
- TRUE);
-
- /* User Inferface/Property Toolbar */
- prefs_model->property_toolbar_visible =
- get_bool (prefs_model->gconf_client,
- BASE_KEY PREF_PROPERTY_TOOLBAR_VISIBLE,
- TRUE);
-
- prefs_model->property_toolbar_view_tooltips =
- get_bool (prefs_model->gconf_client,
- BASE_KEY PREF_PROPERTY_TOOLBAR_VIEW_TOOLTIPS,
- TRUE);
-
-
- /* View properties */
- prefs_model->grid_visible =
- get_bool (prefs_model->gconf_client,
- BASE_KEY PREF_GRID_VISIBLE,
- TRUE);
-
- prefs_model->markup_visible =
- get_bool (prefs_model->gconf_client,
- BASE_KEY PREF_MARKUP_VISIBLE,
- TRUE);
-
- /* Recent files */
- prefs_model->max_recents =
- get_int (prefs_model->gconf_client,
- BASE_KEY PREF_MAX_RECENTS,
- -1);
-
- /* Recent templates */
- for (p=prefs_model->recent_templates; p != NULL; p=p->next)
- {
- g_free (p->data);
- }
- g_slist_free (prefs_model->recent_templates);
- prefs_model->recent_templates =
- gconf_client_get_list (prefs_model->gconf_client,
- BASE_KEY PREF_RECENT_TEMPLATES,
- GCONF_VALUE_STRING,
- NULL);
- prefs_model->max_recent_templates =
- get_int (prefs_model->gconf_client,
- BASE_KEY PREF_MAX_RECENT_TEMPLATES,
- 5);
-
-
- /* Proof read the default page size -- it must be a valid id. */
- /* (For compatability with older versions.) */
- paper = lgl_db_lookup_paper_from_id (prefs_model->default_page_size);
- if ( paper == NULL ) {
- prefs_model->default_page_size = g_strdup (DEFAULT_PAGE_SIZE_US);
- } else {
- lgl_paper_free (paper);
- paper = NULL;
- }
-
- /* Proof read the recent templates list. Make sure the template names */
- /* are valid. Remove from list if not. */
- for (p=prefs_model->recent_templates; p != NULL; p=p_next)
- {
- p_next = p->next;
+ size = g_settings_get_double (this->priv->objects,
+ "default-font-size");
- if ( !lgl_db_does_template_name_exist (p->data) )
- {
- g_free (p->data);
- prefs_model->recent_templates = g_slist_delete_link (prefs_model->recent_templates, p);
- }
- }
+ return size;
+}
+
+
+/*****************************************************************************/
+/* Set default font weight. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_font_weight (glPrefsModel *this,
+ PangoWeight weight)
+{
+ g_settings_set_string (this->priv->objects,
+ "default-font-weight",
+ gl_str_util_weight_to_string(weight));
+}
- gl_debug (DEBUG_PREFS, "max_recents = %d", prefs_model->max_recents);
+/*****************************************************************************/
+/* Get default font weight. */
+/*****************************************************************************/
+PangoWeight
+gl_prefs_model_get_default_font_weight (glPrefsModel *this)
+{
+ gchar *string;
+ PangoWeight weight;
- g_signal_emit (G_OBJECT(prefs_model), signals[CHANGED], 0);
+ string = g_settings_get_string (this->priv->objects,
+ "default-font-weight");
+ weight = gl_str_util_string_to_weight (string);
+ g_free (string);
- gl_debug (DEBUG_PREFS, "END");
+ return weight;
}
-/*---------------------------------------------------------------------------*/
-/* PRIVATE. Key changed callback. */
-/*---------------------------------------------------------------------------*/
-static void
-notify_cb (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- glPrefsModel *prefs_model)
+
+/*****************************************************************************/
+/* Set default font italic flag. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_font_italic_flag (glPrefsModel *this,
+ gboolean italic_flag)
{
- gl_debug (DEBUG_PREFS, "Key was changed: %s", entry->key);
+ g_settings_set_boolean (this->priv->objects,
+ "default-font-italic-flag",
+ italic_flag);
+}
- gl_prefs_model_load_settings (prefs_model);
+
+/*****************************************************************************/
+/* Get default font italic flag. */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_default_font_italic_flag (glPrefsModel *this)
+{
+ gboolean italic_flag;
+
+ italic_flag = g_settings_get_boolean (this->priv->objects,
+ "default-font-italic-flag");
+
+ return italic_flag;
}
-/*---------------------------------------------------------------------------*/
-/* PRIVATE. Utilities to get values with defaults. */
-/*---------------------------------------------------------------------------*/
-static gchar*
-get_string (GConfClient *client,
- const gchar *key,
- const gchar *def)
+
+/*****************************************************************************/
+/* Set default text color. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_text_color (glPrefsModel *this,
+ guint color)
+{
+ g_settings_set_value (this->priv->objects,
+ "default-text-color",
+ g_variant_new_uint32 (color));
+}
+
+
+/*****************************************************************************/
+/* Get default text color. */
+/*****************************************************************************/
+guint
+gl_prefs_model_get_default_text_color (glPrefsModel *this)
+{
+ GVariant *value;
+ guint color;
+
+ value = g_settings_get_value (this->priv->objects, "default-text-color");
+ color = g_variant_get_uint32 (value);
+ g_variant_unref (value);
+
+ return color;
+}
+
+
+/*****************************************************************************/
+/* Set default text alignment. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_text_alignment (glPrefsModel *this,
+ PangoAlignment alignment)
{
- gchar* val;
+ g_settings_set_string (this->priv->objects,
+ "default-text-alignment",
+ gl_str_util_align_to_string(alignment));
+}
- val = gconf_client_get_string (client, key, NULL);
- if (val != NULL) {
+/*****************************************************************************/
+/* Get default text alignment. */
+/*****************************************************************************/
+PangoAlignment
+gl_prefs_model_get_default_text_alignment (glPrefsModel *this)
+{
+ gchar *string;
+ PangoAlignment alignment;
- return val;
+ string = g_settings_get_string (this->priv->objects,
+ "default-text-alignment");
+ alignment = gl_str_util_string_to_align (string);
+ g_free (string);
- } else {
+ return alignment;
+}
- return def ? g_strdup (def) : NULL;
- }
+/*****************************************************************************/
+/* Set default text line spacing. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_text_line_spacing (glPrefsModel *this,
+ gdouble spacing)
+{
+ g_settings_set_double (this->priv->objects,
+ "default-text-line-spacing",
+ spacing);
}
-static gboolean
-get_bool (GConfClient *client,
- const gchar *key,
- gboolean def)
+
+/*****************************************************************************/
+/* Get default text line spacing. */
+/*****************************************************************************/
+gdouble
+gl_prefs_model_get_default_text_line_spacing (glPrefsModel *this)
{
- GConfValue* val;
- gboolean retval;
+ gdouble spacing;
- val = gconf_client_get (client, key, NULL);
+ spacing = g_settings_get_double (this->priv->objects,
+ "default-text-line-spacing");
- if (val != NULL) {
+ return spacing;
+}
- if ( val->type == GCONF_VALUE_BOOL ) {
- retval = gconf_value_get_bool (val);
- } else {
- retval = def;
- }
- gconf_value_free (val);
+/*****************************************************************************/
+/* Set default line width. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_line_width (glPrefsModel *this,
+ gdouble width)
+{
+ g_settings_set_double (this->priv->objects,
+ "default-line-width",
+ width);
+}
- return retval;
- } else {
+/*****************************************************************************/
+/* Get default line width. */
+/*****************************************************************************/
+gdouble
+gl_prefs_model_get_default_line_width (glPrefsModel *this)
+{
+ gdouble width;
- return def;
+ width = g_settings_get_double (this->priv->objects,
+ "default-line-width");
- }
+ return width;
}
-static gint
-get_int (GConfClient *client,
- const gchar *key,
- gint def)
+
+/*****************************************************************************/
+/* Set default line color. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_line_color (glPrefsModel *this,
+ guint color)
{
- GConfValue* val;
- gint retval;
+ g_settings_set_value (this->priv->objects,
+ "default-line-color",
+ g_variant_new_uint32 (color));
+}
- val = gconf_client_get (client, key, NULL);
- if (val != NULL) {
+/*****************************************************************************/
+/* Get default line color. */
+/*****************************************************************************/
+guint
+gl_prefs_model_get_default_line_color (glPrefsModel *this)
+{
+ GVariant *value;
+ guint color;
- if ( val->type == GCONF_VALUE_INT) {
- retval = gconf_value_get_int(val);
- } else {
- retval = def;
- }
+ value = g_settings_get_value (this->priv->objects, "default-line-color");
+ color = g_variant_get_uint32 (value);
+ g_variant_unref (value);
- gconf_value_free (val);
+ return color;
+}
- return retval;
- } else {
+/*****************************************************************************/
+/* Set default fill color. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_default_fill_color (glPrefsModel *this,
+ guint color)
+{
+ g_settings_set_value (this->priv->objects,
+ "default-fill-color",
+ g_variant_new_uint32 (color));
+}
- return def;
- }
+/*****************************************************************************/
+/* Get default fill color. */
+/*****************************************************************************/
+guint
+gl_prefs_model_get_default_fill_color (glPrefsModel *this)
+{
+ GVariant *value;
+ guint color;
+
+ value = g_settings_get_value (this->priv->objects, "default-fill-color");
+ color = g_variant_get_uint32 (value);
+ g_variant_unref (value);
+
+ return color;
}
-static gdouble
-get_float (GConfClient *client,
- const gchar *key,
- gdouble def)
+
+/*****************************************************************************/
+/* Set main toolbar visible flag. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_main_toolbar_visible (glPrefsModel *this,
+ gboolean visible)
{
- GConfValue* val;
- gdouble retval;
+ g_settings_set_boolean (this->priv->ui,
+ "main-toolbar-visible",
+ visible);
+}
+
+
+/*****************************************************************************/
+/* Get main toolbar visible flag. */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_main_toolbar_visible (glPrefsModel *this)
+{
+ gboolean visible;
- val = gconf_client_get (client, key, NULL);
+ visible = g_settings_get_boolean (this->priv->ui,
+ "main-toolbar-visible");
+
+ return visible;
+}
- if (val != NULL) {
- if ( val->type == GCONF_VALUE_FLOAT ) {
- retval = gconf_value_get_float(val);
- } else {
- retval = def;
- }
+/*****************************************************************************/
+/* Set drawing toolbar visible flag. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_drawing_toolbar_visible (glPrefsModel *this,
+ gboolean visible)
+{
+ g_settings_set_boolean (this->priv->ui,
+ "drawing-toolbar-visible",
+ visible);
+}
- gconf_value_free (val);
- return retval;
+/*****************************************************************************/
+/* Get drawing toolbar visible flag. */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_drawing_toolbar_visible (glPrefsModel *this)
+{
+ gboolean visible;
- } else {
- return def;
+ visible = g_settings_get_boolean (this->priv->ui,
+ "drawing-toolbar-visible");
- }
+ return visible;
}
-/*---------------------------------------------------------------------------*/
-/* PRIVATE. Utilities to deal with units. */
-/*---------------------------------------------------------------------------*/
-static lglUnitsType
-string_to_units (const gchar *string)
+
+/*****************************************************************************/
+/* Set property toolbar visible flag. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_property_toolbar_visible (glPrefsModel *this,
+ gboolean visible)
+{
+ g_settings_set_boolean (this->priv->ui,
+ "property-toolbar-visible",
+ visible);
+}
+
+
+/*****************************************************************************/
+/* Get property toolbar visible flag. */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_property_toolbar_visible (glPrefsModel *this)
+{
+ gboolean visible;
+
+ visible = g_settings_get_boolean (this->priv->ui,
+ "property-toolbar-visible");
+
+ return visible;
+}
+
+
+/*****************************************************************************/
+/* Set grid visible flag. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_grid_visible (glPrefsModel *this,
+ gboolean visible)
+{
+ g_settings_set_boolean (this->priv->ui,
+ "grid-visible",
+ visible);
+}
+
+
+/*****************************************************************************/
+/* Get grid visible flag. */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_grid_visible (glPrefsModel *this)
+{
+ gboolean visible;
+
+ visible = g_settings_get_boolean (this->priv->ui,
+ "grid-visible");
+
+ return visible;
+}
+
+
+/*****************************************************************************/
+/* Set markup visible flag. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_markup_visible (glPrefsModel *this,
+ gboolean visible)
+{
+ g_settings_set_boolean (this->priv->ui,
+ "markup-visible",
+ visible);
+}
+
+
+/*****************************************************************************/
+/* Get markup visible flag. */
+/*****************************************************************************/
+gboolean
+gl_prefs_model_get_markup_visible (glPrefsModel *this)
{
- lglUnitsType units;
+ gboolean visible;
- if (g_strcasecmp (string, "Points") == 0) {
- units = LGL_UNITS_POINT;
- } else if (g_strcasecmp (string, "Inches") == 0) {
- units = LGL_UNITS_INCH;
- } else if (g_strcasecmp (string, "Millimeters") == 0) {
- units = LGL_UNITS_MM;
- } else {
- units = LGL_UNITS_INCH;
- }
+ visible = g_settings_get_boolean (this->priv->ui,
+ "markup-visible");
- return units;
+ return visible;
}
-static const
-gchar *units_to_string (lglUnitsType units)
+
+/*****************************************************************************/
+/* Set max recents. */
+/*****************************************************************************/
+void
+gl_prefs_model_set_max_recents (glPrefsModel *this,
+ gint max_recents)
{
- switch (units) {
- case LGL_UNITS_POINT:
- return "Points";
- break;
- case LGL_UNITS_INCH:
- return "Inches";
- break;
- case LGL_UNITS_MM:
- return "Millimeters";
- break;
- default:
- return "Inches";
- break;
- }
+ g_settings_set_int (this->priv->ui,
+ "max-recents",
+ max_recents);
}
+/*****************************************************************************/
+/* Get max recents. */
+/*****************************************************************************/
+gint
+gl_prefs_model_get_max_recents (glPrefsModel *this)
+{
+ gint max_recents;
+
+ max_recents = g_settings_get_int (this->priv->ui,
+ "max-recents");
+
+ return max_recents;
+}
+
+
+/*---------------------------------------------------------------------------*/
+/* PRIVATE. Key changed callback. */
+/*---------------------------------------------------------------------------*/
+static void
+gsettings_changed_cb (glPrefsModel *this)
+{
+ g_signal_emit (G_OBJECT(this), signals[CHANGED], 0);
+}
+
+
+
+
+/*
+ * Local Variables: -- emacs
+ * mode: C -- emacs
+ * c-basic-offset: 8 -- emacs
+ * tab-width: 8 -- emacs
+ * indent-tabs-mode: nil -- emacs
+ * End: -- emacs
+ */