1 /* PSPPIRE - a graphical user interface for PSPP.
2 Copyright (C) 2009, 2010 Free Software Foundation
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 This module provides an interface for simple user preference config
27 #include "psppire-conf.h"
29 static void psppire_conf_init (PsppireConf *conf);
30 static void psppire_conf_class_init (PsppireConfClass *class);
32 static void psppire_conf_finalize (GObject *object);
33 static void psppire_conf_dispose (GObject *object);
35 static GObjectClass *parent_class = NULL;
39 psppire_conf_get_type (void)
41 static GType conf_type = 0;
45 static const GTypeInfo conf_info =
47 sizeof (PsppireConfClass),
49 NULL, /* base_finalize */
50 (GClassInitFunc) psppire_conf_class_init,
51 NULL, /* class_finalize */
52 NULL, /* class_data */
55 (GInstanceInitFunc) psppire_conf_init,
58 conf_type = g_type_register_static (G_TYPE_OBJECT,
68 conf_read (PsppireConf *conf)
70 g_key_file_load_from_file (conf->keyfile,
72 G_KEY_FILE_KEEP_COMMENTS,
77 conf_write (PsppireConf *conf)
81 gchar *kf = g_key_file_to_data (conf->keyfile, &length, NULL);
83 if ( ! g_file_set_contents (conf->filename, kf, length, NULL) )
85 g_warning ("Cannot open %s for writing", conf->filename);
92 psppire_conf_dispose (GObject *object)
97 psppire_conf_finalize (GObject *object)
99 PsppireConf *conf = PSPPIRE_CONF (object);
100 g_key_file_free (conf->keyfile);
101 g_free (conf->filename);
105 static PsppireConf *the_instance = NULL;
108 psppire_conf_construct (GType type,
109 guint n_construct_params,
110 GObjectConstructParam *construct_params)
116 object = G_OBJECT_CLASS (parent_class)->constructor (type,
119 the_instance = PSPPIRE_CONF (object);
122 object = g_object_ref (G_OBJECT (the_instance));
128 psppire_conf_class_init (PsppireConfClass *class)
130 GObjectClass *object_class;
132 parent_class = g_type_class_peek_parent (class);
133 object_class = (GObjectClass*) class;
135 object_class->finalize = psppire_conf_finalize;
136 object_class->dispose = psppire_conf_dispose;
137 object_class->constructor = psppire_conf_construct;
143 psppire_conf_init (PsppireConf *conf)
145 const gchar *dirname;
148 /* Get the name of the directory for user configuration files, then, if it
149 doesn't already exist, create it, since we might be the first program
150 to want to put files there. */
151 dirname = g_get_user_config_dir ();
152 if (stat (dirname, &s) == -1 && errno == ENOENT)
153 mkdir (dirname, 0700);
155 conf->filename = g_strdup_printf ("%s/%s", dirname, "psppirerc");
157 conf->keyfile = g_key_file_new ();
159 conf->dispose_has_run = FALSE;
164 psppire_conf_new (void)
166 return g_object_new (psppire_conf_get_type (), NULL);
172 psppire_conf_get_int (PsppireConf *conf, const gchar *base,
173 const gchar *name, gint *value)
178 *value = g_key_file_get_integer (conf->keyfile,
190 psppire_conf_get_boolean (PsppireConf *conf, const gchar *base,
191 const gchar *name, gboolean *value)
197 b = g_key_file_get_boolean (conf->keyfile,
213 psppire_conf_set_int (PsppireConf *conf,
214 const gchar *base, const gchar *name,
217 g_key_file_set_integer (conf->keyfile, base, name, value);
222 psppire_conf_set_boolean (PsppireConf *conf,
223 const gchar *base, const gchar *name,
226 g_key_file_set_boolean (conf->keyfile, base, name, value);
231 A convenience function to set the geometry of a
232 window from from a saved config
235 psppire_conf_set_window_geometry (PsppireConf *conf,
243 if (psppire_conf_get_int (conf, base, "height", &height)
245 psppire_conf_get_int (conf, base, "width", &width) )
247 gtk_window_set_default_size (window, width, height);
250 if ( psppire_conf_get_int (conf, base, "x", &x)
252 psppire_conf_get_int (conf, base, "y", &y) )
254 gtk_window_move (window, x, y);
257 if ( psppire_conf_get_boolean (conf, base, "maximize", &maximize))
260 gtk_window_maximize (window);
262 gtk_window_unmaximize (window);
268 A convenience function to save the window geometry.
269 This should typically be called from a window's
270 "configure-event" and "window-state-event" signal handlers
273 psppire_conf_save_window_geometry (PsppireConf *conf,
275 GtkWindow *gtk_window)
280 w = gtk_widget_get_window (GTK_WIDGET (gtk_window));
284 maximized = (gdk_window_get_state (w) & GDK_WINDOW_STATE_MAXIMIZED) != 0;
285 psppire_conf_set_boolean (conf, base, "maximize", maximized);
292 gdk_drawable_get_size (w, &width, &height);
293 gdk_window_get_position (w, &x, &y);
295 psppire_conf_set_int (conf, base, "height", height);
296 psppire_conf_set_int (conf, base, "width", width);
297 psppire_conf_set_int (conf, base, "x", x);
298 psppire_conf_set_int (conf, base, "y", y);