summaryrefslogtreecommitdiff
path: root/src/glade-settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glade-settings.c')
-rw-r--r--src/glade-settings.c316
1 files changed, 316 insertions, 0 deletions
diff --git a/src/glade-settings.c b/src/glade-settings.c
new file mode 100644
index 00000000..c26683b7
--- /dev/null
+++ b/src/glade-settings.c
@@ -0,0 +1,316 @@
+/*
+ * Copyright 2019 Collabora Ltd.
+ *
+ * This program 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 (at your option) any later version.
+ *
+ * This program 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Authors:
+ * Corentin Noël <corentin.noel@collabora.com>
+ */
+#include <gladeui/glade-catalog.h>
+#include <gladeui/glade-utils.h>
+#include <gladeui/gladeui-enum-types.h>
+
+#include "glade-settings.h"
+
+#define CONFIG_GROUP "Preferences"
+#define CONFIG_KEY_CATALOG_PATHS "catalog-paths"
+
+#define CONFIG_GROUP_LOAD_SAVE "Load and Save"
+#define CONFIG_KEY_BACKUP "backup"
+#define CONFIG_KEY_AUTOSAVE "autosave"
+#define CONFIG_KEY_AUTOSAVE_SECONDS "autosave-seconds"
+
+#define CONFIG_GROUP_SAVE_WARNINGS "Save Warnings"
+#define CONFIG_KEY_VERSIONING "versioning"
+#define CONFIG_KEY_DEPRECATIONS "deprecations"
+#define CONFIG_KEY_UNRECOGNIZED "unrecognized"
+
+struct _GladeSettings
+{
+ GObject parent_instance;
+
+ gboolean backup;
+ gboolean autosave;
+ gint autosave_seconds;
+ GladeVerifyFlags flags;
+};
+
+enum
+{
+ PROP_BACKUP = 1,
+ PROP_AUTOSAVE,
+ PROP_AUTOSAVE_SECONDS,
+ PROP_VERIFY_FLAGS,
+ N_PROPERTIES
+};
+
+static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, };
+
+G_DEFINE_TYPE (GladeSettings, glade_settings, G_TYPE_OBJECT)
+
+static void
+glade_settings_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GladeSettings *self = GLADE_SETTINGS (object);
+
+ switch (property_id)
+ {
+ case PROP_BACKUP:
+ self->backup = g_value_get_boolean (value);
+ break;
+
+ case PROP_AUTOSAVE:
+ self->autosave = g_value_get_boolean (value);
+ break;
+
+ case PROP_AUTOSAVE_SECONDS:
+ self->autosave_seconds = g_value_get_int (value);
+ break;
+
+ case PROP_VERIFY_FLAGS:
+ self->flags = g_value_get_flags (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+glade_settings_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GladeSettings *self = GLADE_SETTINGS (object);
+
+ switch (property_id)
+ {
+ case PROP_BACKUP:
+ g_value_set_boolean (value, self->backup);
+ break;
+
+ case PROP_AUTOSAVE:
+ g_value_set_boolean (value, self->autosave);
+ break;
+
+ case PROP_AUTOSAVE_SECONDS:
+ g_value_set_int (value, self->autosave_seconds);
+ break;
+
+ case PROP_VERIFY_FLAGS:
+ g_value_set_flags (value, self->flags);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+glade_settings_class_init (GladeSettingsClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->set_property = glade_settings_set_property;
+ object_class->get_property = glade_settings_get_property;
+
+ obj_properties[PROP_BACKUP] =
+ g_param_spec_boolean ("backup",
+ "Backup",
+ "Whether a backup of the edited file is required.",
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ obj_properties[PROP_AUTOSAVE] =
+ g_param_spec_boolean ("autosave",
+ "Autosave",
+ "Save the files automatically.",
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ obj_properties[PROP_AUTOSAVE_SECONDS] =
+ g_param_spec_int ("autosave-seconds",
+ "Autosave Seconds",
+ "Time in seconds for saving the files automatically.",
+ G_MININT, G_MAXINT, 5,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ obj_properties[PROP_VERIFY_FLAGS] =
+ g_param_spec_flags ("verify-flags",
+ "Verify flags",
+ "Verify Flags.",
+ GLADE_TYPE_VERIFY_FLAGS,
+ GLADE_VERIFY_VERSIONS | GLADE_VERIFY_UNRECOGNIZED,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class,
+ N_PROPERTIES,
+ obj_properties);
+}
+
+static void
+glade_settings_init (GladeSettings *self)
+{
+ self->backup = TRUE;
+ self->autosave = TRUE;
+ self->autosave_seconds = 5;
+ self->flags = GLADE_VERIFY_VERSIONS | GLADE_VERIFY_UNRECOGNIZED;
+}
+
+GladeSettings *
+glade_settings_new (void)
+{
+ return g_object_new (GLADE_TYPE_SETTINGS, NULL);
+}
+
+void
+glade_settings_save (GladeSettings *self,
+ GKeyFile *file)
+{
+ const GList *paths, *l;
+ GString *string;
+
+ g_return_if_fail (GLADE_IS_SETTINGS (self));
+
+ string = g_string_new ("");
+ paths = glade_catalog_get_extra_paths ();
+ for (l = paths; l != NULL; l = l->next)
+ {
+ const gchar *path = (const gchar *)(l->data);
+ g_string_append (string, path);
+ if (l->next != NULL)
+ g_string_append (string, ":");
+ }
+
+ g_key_file_set_string (file, CONFIG_GROUP, CONFIG_KEY_CATALOG_PATHS,
+ string->str);
+
+ g_key_file_set_boolean (file, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_BACKUP,
+ self->backup);
+ g_key_file_set_boolean (file, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_AUTOSAVE,
+ self->autosave);
+ g_key_file_set_integer (file, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_AUTOSAVE_SECONDS,
+ self->autosave_seconds);
+
+ g_key_file_set_boolean (file, CONFIG_GROUP_SAVE_WARNINGS, CONFIG_KEY_VERSIONING,
+ self->flags & GLADE_VERIFY_VERSIONS);
+ g_key_file_set_boolean (file, CONFIG_GROUP_SAVE_WARNINGS, CONFIG_KEY_DEPRECATIONS,
+ self->flags & GLADE_VERIFY_DEPRECATIONS);
+ g_key_file_set_boolean (file, CONFIG_GROUP_SAVE_WARNINGS, CONFIG_KEY_UNRECOGNIZED,
+ self->flags & GLADE_VERIFY_UNRECOGNIZED);
+
+ g_string_free (string, TRUE);
+}
+
+void
+glade_settings_load (GladeSettings *self,
+ GKeyFile *file)
+{
+ gchar *paths_string;
+
+ g_return_if_fail (GLADE_IS_SETTINGS (self));
+
+ paths_string = g_key_file_get_string (file, CONFIG_GROUP, CONFIG_KEY_CATALOG_PATHS, NULL);
+ if (paths_string && g_strcmp0 (paths_string, ""))
+ {
+ gchar **paths = g_strsplit (paths_string, ":", -1);
+ guint paths_len = g_strv_length (paths);
+
+ glade_catalog_remove_path (NULL);
+
+ for (guint i = 0; i < paths_len; i++)
+ {
+ gchar *canonical = glade_util_canonical_path (paths[i]);
+ glade_catalog_add_path (canonical);
+ g_free (canonical);
+ }
+
+ g_strfreev (paths);
+ }
+ g_free (paths_string);
+
+ /* Load and save */
+ if (g_key_file_has_key (file, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_BACKUP, NULL))
+ self->backup = g_key_file_get_boolean (file, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_BACKUP, NULL);
+
+ if (g_key_file_has_key (file, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_AUTOSAVE, NULL))
+ self->autosave = g_key_file_get_boolean (file, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_AUTOSAVE, NULL);
+
+ if (g_key_file_has_key (file, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_AUTOSAVE_SECONDS, NULL))
+ self->autosave_seconds = g_key_file_get_integer (file, CONFIG_GROUP_LOAD_SAVE, CONFIG_KEY_AUTOSAVE_SECONDS, NULL);
+
+ /* Warnings */
+ if (g_key_file_has_key (file, CONFIG_GROUP_SAVE_WARNINGS, CONFIG_KEY_VERSIONING, NULL))
+ {
+ if (g_key_file_get_boolean (file, CONFIG_GROUP_SAVE_WARNINGS, CONFIG_KEY_VERSIONING, NULL))
+ self->flags |= GLADE_VERIFY_VERSIONS;
+ else
+ self->flags &= ~GLADE_VERIFY_VERSIONS;
+ }
+
+ if (g_key_file_has_key (file, CONFIG_GROUP_SAVE_WARNINGS, CONFIG_KEY_DEPRECATIONS, NULL))
+ {
+ if (g_key_file_get_boolean (file, CONFIG_GROUP_SAVE_WARNINGS, CONFIG_KEY_DEPRECATIONS, NULL))
+ self->flags |= GLADE_VERIFY_DEPRECATIONS;
+ else
+ self->flags &= ~GLADE_VERIFY_DEPRECATIONS;
+ }
+
+ if (g_key_file_has_key (file, CONFIG_GROUP_SAVE_WARNINGS, CONFIG_KEY_UNRECOGNIZED, NULL))
+ {
+ if (g_key_file_get_boolean (file, CONFIG_GROUP_SAVE_WARNINGS, CONFIG_KEY_UNRECOGNIZED, NULL))
+ self->flags |= GLADE_VERIFY_UNRECOGNIZED;
+ else
+ self->flags &= ~GLADE_VERIFY_UNRECOGNIZED;
+ }
+}
+
+gboolean
+glade_settings_backup (GladeSettings *self)
+{
+ g_return_val_if_fail (GLADE_IS_SETTINGS (self), FALSE);
+
+ return self->backup;
+}
+
+gboolean
+glade_settings_autosave (GladeSettings *self)
+{
+ g_return_val_if_fail (GLADE_IS_SETTINGS (self), FALSE);
+
+ return self->autosave;
+}
+
+gint
+glade_settings_autosave_seconds (GladeSettings *self)
+{
+ g_return_val_if_fail (GLADE_IS_SETTINGS (self), 0);
+
+ return self->autosave_seconds;
+}
+
+GladeVerifyFlags
+glade_settings_get_verify_flags (GladeSettings *self)
+{
+ g_return_val_if_fail (GLADE_IS_SETTINGS (self), 0);
+
+ return self->flags;
+}