summaryrefslogtreecommitdiff
path: root/libnautilus-private
diff options
context:
space:
mode:
authorRamiro Estrugo <ramiro@src.gnome.org>2000-05-30 12:57:16 +0000
committerRamiro Estrugo <ramiro@src.gnome.org>2000-05-30 12:57:16 +0000
commit6cb850158a6b1e23a6c35e49c48775807605400b (patch)
treeb4e1dc98a2e626593ff7defa013ab50a331c7018 /libnautilus-private
parented231e9a40c62201887a591a4acd08c22cc6600b (diff)
downloadnautilus-6cb850158a6b1e23a6c35e49c48775807605400b.tar.gz
New class to manager user level stuff.
* nautilus-widgets/nautilus-user-level-manager.c: (user_level_manager_new), (nautilus_user_level_manager_initialize), (nautilus_user_level_manager_initialize_class), (user_level_manager_destroy), (user_level_manager_get_global_manager), (user_level_manager_is_initialized), (get_gconf_user_level_string), (user_level_set_default_if_needed), (nautilus_user_level_manager_get), (nautilus_user_level_manager_set_user_level), (nautilus_user_level_manager_get_user_level), (nautilus_user_level_manager_get_num_user_levels), (nautilus_user_level_manager_get_user_level_names): * nautilus-widgets/nautilus-user-level-manager.h: New class to manager user level stuff. * libnautilus-extensions/nautilus-global-preferences.c: (nautilus_global_preferences_startup): * nautilus-widgets/Makefile.am: * nautilus-widgets/nautilus-preferences.c: (nautilus_preferences_initialize): * nautilus-widgets/nautilus-preferences.h: * nautilus-widgets/test-nautilus-preferences.c: (main): Undo the last stoopid change cuz the user level stuff is now hidden in the NautilusUserLevelManager class.
Diffstat (limited to 'libnautilus-private')
-rw-r--r--libnautilus-private/nautilus-global-preferences.c15
-rw-r--r--libnautilus-private/nautilus-preferences.c9
-rw-r--r--libnautilus-private/nautilus-preferences.h4
-rw-r--r--libnautilus-private/nautilus-user-level-manager.c303
-rw-r--r--libnautilus-private/nautilus-user-level-manager.h50
-rw-r--r--libnautilus-private/test-nautilus-preferences.c15
6 files changed, 359 insertions, 37 deletions
diff --git a/libnautilus-private/nautilus-global-preferences.c b/libnautilus-private/nautilus-global-preferences.c
index 45dda0337..1b62490f1 100644
--- a/libnautilus-private/nautilus-global-preferences.c
+++ b/libnautilus-private/nautilus-global-preferences.c
@@ -543,21 +543,10 @@ nautilus_global_preferences_shutdown (void)
void
nautilus_global_preferences_startup (int argc, char **argv)
{
- NautilusStringList *user_level_names;
- gboolean result;
-
- user_level_names = nautilus_string_list_new ();
- nautilus_string_list_insert (user_level_names, "novice");
- nautilus_string_list_insert (user_level_names, "intermediate");
- nautilus_string_list_insert (user_level_names, "hacker");
+ gboolean result;
/* Initialize preferences */
- result = nautilus_preferences_initialize (argc,
- argv,
- nautilus_string_list_get_length (user_level_names),
- user_level_names);
-
- nautilus_string_list_free (user_level_names);
+ result = nautilus_preferences_initialize (argc, argv);
/* FIXME bugzilla.eazel.com 672:
* Need error reporting if this fails instead of a core dump.
diff --git a/libnautilus-private/nautilus-preferences.c b/libnautilus-private/nautilus-preferences.c
index d57dcdedb..84918c8ba 100644
--- a/libnautilus-private/nautilus-preferences.c
+++ b/libnautilus-private/nautilus-preferences.c
@@ -905,17 +905,10 @@ nautilus_preferences_get (const char *name,
}
gboolean
-nautilus_preferences_initialize (int argc,
- char **argv,
- guint num_user_levels,
- const NautilusStringList *user_level_names)
+nautilus_preferences_initialize (int argc, char **argv)
{
GConfError *error = NULL;
- g_return_val_if_fail (num_user_levels > 0, FALSE);
- g_return_val_if_fail (user_level_names != NULL, FALSE);
- g_return_val_if_fail (nautilus_string_list_get_length (user_level_names) == num_user_levels, FALSE);
-
if (!gconf_init (argc, argv, &error)) {
g_assert (error != NULL);
diff --git a/libnautilus-private/nautilus-preferences.h b/libnautilus-private/nautilus-preferences.h
index 390956e88..22978e835 100644
--- a/libnautilus-private/nautilus-preferences.h
+++ b/libnautilus-private/nautilus-preferences.h
@@ -72,9 +72,7 @@ void nautilus_preferences_set (const char
char * nautilus_preferences_get (const char *name,
const gchar *default_value);
gboolean nautilus_preferences_initialize (int argc,
- char **argv,
- guint num_user_levels,
- const NautilusStringList *user_level_names);
+ char **argv);
gboolean nautilus_preferences_is_initialized (void);
gboolean nautilus_preferences_shutdown (void);
diff --git a/libnautilus-private/nautilus-user-level-manager.c b/libnautilus-private/nautilus-user-level-manager.c
new file mode 100644
index 000000000..f77f914cf
--- /dev/null
+++ b/libnautilus-private/nautilus-user-level-manager.c
@@ -0,0 +1,303 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
+
+ nautilus-user-level-manager.c - User level manager class.
+
+ Copyright (C) 2000 Eazel, Inc.
+
+ 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+ Author: Ramiro Estrugo <ramiro@eazel.com>
+*/
+
+#include <config.h>
+#include "nautilus-user-level-manager.h"
+#include <libnautilus-extensions/nautilus-gtk-macros.h>
+#include <libnautilus-extensions/nautilus-glib-extensions.h>
+
+#include <gtk/gtksignal.h>
+
+#include <gconf/gconf.h>
+#include <gconf/gconf-client.h>
+
+#define NAUTILUS_TYPE_USER_LEVEL_MANAGER (nautilus_user_level_manager_get_type ())
+#define NAUTILUS_USER_LEVEL_MANAGER(obj) (GTK_CHECK_CAST ((obj), NAUTILUS_TYPE_USER_LEVEL_MANAGER, NautilusUserLevelManager))
+#define NAUTILUS_USER_LEVEL_MANAGER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_USER_LEVEL_MANAGER, NautilusUserLevelManagerClass))
+#define NAUTILUS_IS_USER_LEVEL_MANAGER(obj) (GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_USER_LEVEL_MANAGER))
+#define NAUTILUS_IS_USER_LEVEL_MANAGER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_USER_LEVEL_MANAGER))
+
+static const char *DEFAULT_USER_LEVEL_NAMES[] =
+{
+ "novice",
+ "intermediate",
+ "hacker"
+};
+
+#define USER_LEVEL_NOVICE 0
+#define USER_LEVEL_INTERMEDIATE 1
+#define USER_LEVEL_HACKER 2
+
+static const guint DEFAULT_NUM_USER_LEVELS = NAUTILUS_N_ELEMENTS (DEFAULT_USER_LEVEL_NAMES);
+static const guint DEFAULT_USER_LEVEL = USER_LEVEL_HACKER;
+
+static const char USER_LEVEL_KEY[] = "/nautilus/user_level";
+
+struct _NautilusUserLevelManager
+{
+ GtkObject object;
+
+ guint num_user_levels;
+ NautilusStringList *user_level_names;
+
+ GConfClient *gconf_client;
+};
+
+typedef struct
+{
+ GtkObjectClass parent_class;
+} NautilusUserLevelManagerClass;
+
+enum
+{
+ USER_LEVEL_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint user_level_manager_signals[LAST_SIGNAL];
+
+static GtkType nautilus_user_level_manager_get_type (void);
+static void nautilus_user_level_manager_initialize_class (NautilusUserLevelManagerClass *user_level_manager_class);
+static void nautilus_user_level_manager_initialize (NautilusUserLevelManager *user_level_manager);
+static void user_level_manager_destroy (GtkObject *object);
+static NautilusUserLevelManager *user_level_manager_new (void);
+static gboolean user_level_manager_is_initialized (void);
+static NautilusUserLevelManager *user_level_manager_get_global_manager (void);
+static void user_level_set_default_if_needed (void);
+char * get_gconf_user_level_string (void);
+
+NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusUserLevelManager, nautilus_user_level_manager, GTK_TYPE_OBJECT)
+
+/* Create the icon factory. */
+static NautilusUserLevelManager *
+user_level_manager_new ()
+{
+ NautilusUserLevelManager *manager;
+ guint i;
+
+ manager = NAUTILUS_USER_LEVEL_MANAGER (gtk_object_new (nautilus_user_level_manager_get_type (), NULL));
+
+ manager->gconf_client = gconf_client_new ();
+ manager->num_user_levels = DEFAULT_NUM_USER_LEVELS;
+ manager->user_level_names = nautilus_string_list_new ();
+
+ for (i = 0; i < DEFAULT_NUM_USER_LEVELS; i++) {
+ nautilus_string_list_insert (manager->user_level_names, DEFAULT_USER_LEVEL_NAMES[i]);
+ }
+
+ g_assert (manager->gconf_client != NULL);
+
+ user_level_set_default_if_needed ();
+
+ g_print ("user_level_manager_new: user_level = %d\n", nautilus_user_level_manager_get_user_level ());
+
+ return manager;
+}
+
+static void
+nautilus_user_level_manager_initialize (NautilusUserLevelManager *manager)
+{
+ manager->num_user_levels = 0;
+
+ manager->gconf_client = NULL;
+}
+
+static void
+nautilus_user_level_manager_initialize_class (NautilusUserLevelManagerClass *user_level_manager_class)
+{
+ GtkObjectClass *object_class = GTK_OBJECT_CLASS (user_level_manager_class);
+
+ user_level_manager_signals[USER_LEVEL_CHANGED] = gtk_signal_new ("icons_changed",
+ GTK_RUN_LAST,
+ object_class->type,
+ 0,
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE,
+ 0);
+
+ gtk_object_class_add_signals (object_class, user_level_manager_signals, LAST_SIGNAL);
+
+ /* GtkObjectClass */
+ object_class->destroy = user_level_manager_destroy;
+}
+
+static void
+user_level_manager_destroy (GtkObject *object)
+{
+ NautilusUserLevelManager *manager;
+
+ manager = NAUTILUS_USER_LEVEL_MANAGER (object);
+
+ /* Right now, the global manager is not destroyed on purpose */
+ g_assert_not_reached ();
+
+ if (manager->gconf_client != NULL) {
+ gtk_object_unref (GTK_OBJECT (manager->gconf_client));
+ }
+
+ nautilus_string_list_free (manager->user_level_names);
+}
+
+static NautilusUserLevelManager *
+user_level_manager_get_global_manager (void)
+{
+ static NautilusUserLevelManager *global_manager = NULL;
+
+ if (global_manager == NULL) {
+ global_manager = user_level_manager_new ();
+ }
+
+ return global_manager;
+}
+
+static gboolean
+user_level_manager_is_initialized (void)
+{
+ NautilusUserLevelManager *manager = user_level_manager_get_global_manager ();
+
+ return (manager && manager->num_user_levels && manager->user_level_names);
+}
+
+char *
+get_gconf_user_level_string (void)
+{
+ NautilusUserLevelManager *manager = nautilus_user_level_manager_get ();
+ char *user_level_string;
+
+ g_assert (manager->gconf_client != NULL);
+
+ user_level_string = gconf_client_get_string (manager->gconf_client, USER_LEVEL_KEY, NULL);
+
+ return user_level_string;
+}
+
+static void
+user_level_set_default_if_needed (void)
+{
+ NautilusUserLevelManager *manager = user_level_manager_get_global_manager ();
+ GConfValue *value;
+
+ g_assert (manager->gconf_client != NULL);
+
+ value = gconf_client_get_without_default (manager->gconf_client, USER_LEVEL_KEY, NULL);
+
+ if (!value) {
+ value = gconf_value_new (GCONF_VALUE_STRING);
+
+ gconf_value_set_string (value, DEFAULT_USER_LEVEL_NAMES[DEFAULT_USER_LEVEL]);
+
+ gconf_client_set (manager->gconf_client, USER_LEVEL_KEY, value, NULL);
+
+ gconf_client_suggest_sync (manager->gconf_client, NULL);
+
+ g_print ("setting default user_level to %s\n", DEFAULT_USER_LEVEL_NAMES[DEFAULT_USER_LEVEL]);
+ }
+
+ g_assert (value != NULL);
+
+ gconf_value_destroy (value);
+}
+
+/* Public NautilusUserLevelManager functions */
+NautilusUserLevelManager *
+nautilus_user_level_manager_get (void)
+{
+ NautilusUserLevelManager *manager = user_level_manager_get_global_manager ();
+
+ g_assert (user_level_manager_is_initialized ());
+
+ return manager;
+}
+
+void
+nautilus_user_level_manager_set_user_level (guint user_level)
+{
+ NautilusUserLevelManager *manager = nautilus_user_level_manager_get ();
+ char *user_level_string;
+ gboolean result;
+ guint old_user_level;
+
+ g_return_if_fail (user_level < manager->num_user_levels);
+ g_return_if_fail (user_level < nautilus_string_list_get_length (manager->user_level_names));
+
+ old_user_level = nautilus_user_level_manager_get_user_level ();
+
+ if (old_user_level == user_level) {
+ return;
+ }
+
+ user_level_string = nautilus_string_list_nth (manager->user_level_names, user_level);
+
+ g_assert (user_level_string != NULL);
+
+ result = gconf_client_set_string (manager->gconf_client,
+ USER_LEVEL_KEY,
+ user_level_string,
+ NULL);
+
+ g_assert (result);
+
+ gconf_client_suggest_sync (manager->gconf_client, NULL);
+
+ g_print ("user_level changed from %d to %d\n", old_user_level, user_level);
+
+ gtk_signal_emit (GTK_OBJECT (manager), user_level_manager_signals[USER_LEVEL_CHANGED]);
+}
+
+guint
+nautilus_user_level_manager_get_user_level (void)
+{
+ NautilusUserLevelManager *manager = nautilus_user_level_manager_get ();
+ char *user_level_string;
+ gint index;
+
+ user_level_string = get_gconf_user_level_string ();
+ g_assert (user_level_string != NULL);
+
+ index = nautilus_string_list_get_index_for_string (manager->user_level_names,
+ user_level_string);
+
+ g_free (user_level_string);
+
+ g_assert (index != NAUTILUS_STRING_LIST_NOT_FOUND);
+
+ return (guint) index;
+}
+
+guint
+nautilus_user_level_manager_get_num_user_levels (void)
+{
+ NautilusUserLevelManager *manager = nautilus_user_level_manager_get ();
+
+ return manager->num_user_levels;
+}
+
+NautilusStringList *
+nautilus_user_level_manager_get_user_level_names (void)
+{
+ NautilusUserLevelManager *manager = nautilus_user_level_manager_get ();
+
+ return nautilus_string_list_new_from_string_list (manager->user_level_names);
+}
+
diff --git a/libnautilus-private/nautilus-user-level-manager.h b/libnautilus-private/nautilus-user-level-manager.h
new file mode 100644
index 000000000..bd0a70907
--- /dev/null
+++ b/libnautilus-private/nautilus-user-level-manager.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* nautilus-user-level-manager.h - User level manager interface.
+
+ Copyright (C) 2000 Eazel, Inc.
+
+ The Gnome Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The Gnome Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the Gnome Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+ Authors: Ramiro Estrugo <ramiro@eazel.com>
+*/
+
+#ifndef NAUTILUS_USER_LEVEL_MANAGER_H
+#define NAUTILUS_USER_LEVEL_MANAGER_H
+
+#include <gtk/gtkobject.h>
+#include <libgnome/gnome-defs.h>
+#include <libnautilus-extensions/nautilus-string-list.h>
+
+BEGIN_GNOME_DECLS
+
+typedef struct _NautilusUserLevelManager NautilusUserLevelManager;
+
+/* There is a single NautilusUserLevelManager object.
+ * The only thing you need it for is to connect to its signals.
+ *
+ * "user_level_changed", no parameters
+ *
+ */
+NautilusUserLevelManager* nautilus_user_level_manager_get (void);
+void nautilus_user_level_manager_set_user_level (guint user_level);
+guint nautilus_user_level_manager_get_user_level (void);
+guint nautilus_user_level_manager_get_num_user_levels (void);
+NautilusStringList *nautilus_user_level_manager_get_user_level_names (void);
+
+BEGIN_GNOME_DECLS
+
+#endif /* NAUTILUS_USER_LEVEL_MANAGER_H */
diff --git a/libnautilus-private/test-nautilus-preferences.c b/libnautilus-private/test-nautilus-preferences.c
index d5cecec24..b2bc35090 100644
--- a/libnautilus-private/test-nautilus-preferences.c
+++ b/libnautilus-private/test-nautilus-preferences.c
@@ -27,23 +27,12 @@ static const char FRUIT_PREFERENCE[] = "/a/very/fruity/path";
int
main (int argc, char * argv[])
{
- NautilusStringList *user_level_names;
- gboolean result;
+ gboolean result;
gnome_init ("foo", "bar", argc, argv);
- user_level_names = nautilus_string_list_new ();
- nautilus_string_list_insert (user_level_names, "novice");
- nautilus_string_list_insert (user_level_names, "intermediate");
- nautilus_string_list_insert (user_level_names, "hacker");
-
/* Initialize preferences */
- result = nautilus_preferences_initialize (argc,
- argv,
- nautilus_string_list_get_length (user_level_names),
- user_level_names);
-
- nautilus_string_list_free (user_level_names);
+ result = nautilus_preferences_initialize (argc, argv);
g_assert (result);