]> Pileus Git - grits/commitdiff
Move around a lot of preferences management
authorAndy Spencer <andy753421@gmail.com>
Thu, 28 Jan 2010 08:48:23 +0000 (08:48 +0000)
committerAndy Spencer <andy753421@gmail.com>
Thu, 28 Jan 2010 08:48:23 +0000 (08:48 +0000)
Things like setting offline, and plugin usage are not handled by libgis
directly instead of by the main programs.

src/gis-opengl.c
src/gis-opengl.h
src/gis-plugin.c
src/gis-plugin.h
src/gis-prefs.c
src/gis-viewer.c
src/gis-viewer.h

index 9a88896eccb5d67e3b2c9da580cf7c684157d5b1..30671aad9f0772aef8534de401b338bbb4f6e5e9 100644 (file)
@@ -414,11 +414,11 @@ static gboolean on_idle(GisOpenGL *self)
 /*********************
  * GisViewer methods *
  *********************/
-GisViewer *gis_opengl_new(GisPlugins *plugins)
+GisViewer *gis_opengl_new(GisPlugins *plugins, GisPrefs *prefs)
 {
        g_debug("GisOpenGL: new");
        GisViewer *self = g_object_new(GIS_TYPE_OPENGL, NULL);
-       self->plugins = plugins;
+       gis_viewer_setup(self, plugins, prefs);
        return self;
 }
 
index 2cf49686c312f0d4e9889b6d9fb0b339fd7107f6..df40002fa84a9765eb5c3554be1bed553e16a418 100644 (file)
@@ -56,6 +56,6 @@ struct _GisOpenGLClass {
 GType gis_opengl_get_type(void);
 
 /* Methods */
-GisViewer *gis_opengl_new(GisPlugins *plugins);
+GisViewer *gis_opengl_new(GisPlugins *plugins, GisPrefs *prefs);
 
 #endif
index 05e415a40c3df6d8b3bd7f30fc29cc2180bd38bb..a2e2cc3b4bbd2757db7b95c7a7748bece83d6d75 100644 (file)
@@ -47,12 +47,26 @@ GType gis_plugin_get_type()
        return type;
 }
 
+const gchar *gis_plugin_get_name(GisPlugin *self)
+{
+       if (!GIS_IS_PLUGIN(self))
+               return NULL;
+       return GIS_PLUGIN_GET_INTERFACE(self)->name;
+}
+
+const gchar *gis_plugin_get_description(GisPlugin *self)
+{
+       if (!GIS_IS_PLUGIN(self))
+               return NULL;
+       return GIS_PLUGIN_GET_INTERFACE(self)->description;
+}
+
 GtkWidget *gis_plugin_get_config(GisPlugin *self)
 {
        if (!GIS_IS_PLUGIN(self))
                return NULL;
        GisPluginInterface *iface = GIS_PLUGIN_GET_INTERFACE(self);
-       return iface->get_config ? iface->get_config (self) : NULL;
+       return iface->get_config ? iface->get_config(self) : NULL;
 }
 
 
@@ -64,13 +78,14 @@ typedef struct {
        GisPlugin *plugin;
 } GisPluginStore;
 
-GisPlugins *gis_plugins_new(gchar *dir)
+GisPlugins *gis_plugins_new(const gchar *dir, GisPrefs *prefs)
 {
        g_debug("GisPlugins: new - dir=%s", dir);
-       GisPlugins *plugins = g_new0(GisPlugins, 1);
+       GisPlugins *self = g_new0(GisPlugins, 1);
+       self->prefs = prefs;
        if (dir)
-               plugins->dir = g_strdup(dir);
-       return plugins;
+               self->dir = g_strdup(dir);
+       return self;
 }
 
 void gis_plugins_free(GisPlugins *self)
@@ -98,6 +113,8 @@ GList *gis_plugins_available(GisPlugins *self)
        gchar *dirs[] = {self->dir, PLUGINSDIR};
        g_debug("pluginsdir=%s", PLUGINSDIR);
        for (int i = 0; i<2; i++) {
+               if (dirs[i] == NULL)
+                       continue;
                GDir *dir = g_dir_open(dirs[i], 0, NULL);
                if (dir == NULL)
                        continue;
@@ -156,6 +173,28 @@ GisPlugin *gis_plugins_load(GisPlugins *self, const char *name,
        return store->plugin;
 }
 
+GisPlugin *gis_plugins_enable(GisPlugins *self, const char *name,
+               GisViewer *viewer, GisPrefs *prefs)
+{
+       GisPlugin *plugin = gis_plugins_load(self, name, viewer, prefs);
+       gis_prefs_set_boolean_v(self->prefs, "plugins", name, TRUE);
+       return plugin;
+}
+
+GList *gis_plugins_load_enabled(GisPlugins *self,
+               GisViewer *viewer, GisPrefs *prefs)
+{
+       GList *loaded = NULL;
+       for (GList *cur = gis_plugins_available(self); cur; cur = cur->next) {
+               gchar *name = cur->data;
+               if (gis_prefs_get_boolean_v(self->prefs, "plugins", name, NULL)) {
+                       GisPlugin *plugin = gis_plugins_load(self, name, viewer, prefs);
+                       loaded = g_list_prepend(loaded, plugin);
+               }
+       }
+       return loaded;
+}
+
 gboolean gis_plugins_unload(GisPlugins *self, const char *name)
 {
        g_debug("GisPlugins: unload %s", name);
@@ -170,6 +209,14 @@ gboolean gis_plugins_unload(GisPlugins *self, const char *name)
        }
        return FALSE;
 }
+
+gboolean gis_plugins_disable(GisPlugins *self, const char *name)
+{
+       gis_prefs_set_boolean_v(self->prefs, "plugins", name, FALSE);
+       gis_plugins_unload(self, name);
+       return FALSE;
+}
+
 void gis_plugins_foreach(GisPlugins *self, GCallback _callback, gpointer user_data)
 {
        g_debug("GisPlugins: foreach");
index 685c8a125bb39d6606ab76cdf95059016c478a42..26c0519ce40874d70ec3431f8785d6ec0fd7f86e 100644 (file)
@@ -34,6 +34,10 @@ struct _GisPluginInterface
 {
        GTypeInterface parent_iface;
 
+       /* Virtual data */
+       const gchar *name;
+       const gchar *description;
+
        /* Virtual functions */
        GtkWidget *(*get_config)(GisPlugin *self);
 };
@@ -41,7 +45,10 @@ struct _GisPluginInterface
 GType gis_plugin_get_type();
 
 /* Methods */
-void       gis_plugin_expose(GisPlugin *self);
+const gchar *gis_plugin_get_name(GisPlugin *self);
+
+const gchar *gis_plugin_get_description(GisPlugin *self);
+
 GtkWidget *gis_plugin_get_config(GisPlugin *self);
 
 /* Plugins API */
@@ -49,18 +56,32 @@ GtkWidget *gis_plugin_get_config(GisPlugin *self);
 #include "gis-prefs.h"
 
 struct _GisPlugins {
-       gchar *dir;
-       GList *plugins;
+       gchar    *dir;
+       GList    *plugins;
+       GisPrefs *prefs;
 };
 
 typedef GisPlugin *(*GisPluginConstructor)(GisViewer *viewer, GisPrefs *prefs);
 
-GisPlugins *gis_plugins_new(gchar *dir);
-void        gis_plugins_free();
-GList      *gis_plugins_available(GisPlugins *plugins);
-GisPlugin  *gis_plugins_load(GisPlugins *plugins, const char *name,
+GisPlugins *gis_plugins_new(const gchar *dir, GisPrefs *prefs);
+
+void gis_plugins_free();
+
+GList *gis_plugins_available(GisPlugins *plugins);
+
+GisPlugin *gis_plugins_load(GisPlugins *plugins, const char *name,
                GisViewer *viewer, GisPrefs *prefs);
-gboolean    gis_plugins_unload(GisPlugins *plugins, const char *name);
-void        gis_plugins_foreach(GisPlugins *plugins, GCallback callback, gpointer user_data);
+
+GisPlugin *gis_plugins_enable(GisPlugins *self, const char *name,
+               GisViewer *viewer, GisPrefs *prefs);
+
+GList *gis_plugins_load_enabled(GisPlugins *self,
+               GisViewer *viewer, GisPrefs *prefs);
+
+gboolean gis_plugins_disable(GisPlugins *self, const char *name);
+
+gboolean gis_plugins_unload(GisPlugins *plugins, const char *name);
+
+void gis_plugins_foreach(GisPlugins *plugins, GCallback callback, gpointer user_data);
 
 #endif
index e66be1a2117ffa448bf5d44c1d9c3f666b048f24..95f3812da55bdf93d2deb4cfb341b005bc7ff653 100644 (file)
@@ -60,6 +60,7 @@ GisPrefs *gis_prefs_new(const gchar *config, const gchar *defaults)
                g_debug("GisPrefs: new - Unable to load key file `%s': %s",
                        self->key_path, error->message);
        }
+       g_debug("GisPrefs: new - using %s", self->key_path);
        return self;
 }
 
index 30464e3deb2a4973f3f5a947f61b4106915bd515..f85f60939dfa737fb748cf132a3a3abe0d2c2e38 100644 (file)
@@ -120,6 +120,13 @@ static void on_view_changed(GisViewer *self,
 /***********
  * Methods *
  ***********/
+void gis_viewer_setup(GisViewer *self, GisPlugins *plugins, GisPrefs *prefs)
+{
+       self->plugins = plugins;
+       self->prefs   = prefs;
+       self->offline = gis_prefs_get_boolean(prefs, "gis/offline", NULL);
+}
+
 void gis_viewer_set_time(GisViewer *self, const char *time)
 {
        g_assert(GIS_IS_VIEWER(self));
@@ -214,6 +221,7 @@ void gis_viewer_set_offline(GisViewer *self, gboolean offline)
 {
        g_assert(GIS_IS_VIEWER(self));
        g_debug("GisViewer: set_offline - %d", offline);
+       gis_prefs_set_boolean(self->prefs, "gis/offline", offline);
        self->offline = offline;
        _gis_viewer_emit_offline(self);
 }
index 86833f6c79a1861a9b02c10805a3f3d7f1f26232..02596f38468483d1fc64cf1be6496646f0ee5ae2 100644 (file)
@@ -42,6 +42,7 @@ typedef gdouble (*GisHeightFunc)(gdouble lat, gdouble lon, gpointer user_data);
 
 #include "gis-tile.h"
 #include "gis-plugin.h"
+#include "gis-prefs.h"
 #include "gis-object.h"
 
 struct _GisViewer {
@@ -49,6 +50,7 @@ struct _GisViewer {
 
        /* instance members */
        GisPlugins *plugins;
+       GisPrefs   *prefs;
        gchar      *time;
        gdouble     location[3];
        gdouble     rotation[3];
@@ -85,7 +87,7 @@ struct _GisViewerClass {
 GType gis_viewer_get_type(void);
 
 /* Methods */
-GisViewer *gis_viewer_new();
+void gis_viewer_setup(GisViewer *viewer, GisPlugins *plugins, GisPrefs *prefs);
 
 void gis_viewer_set_time(GisViewer *viewer, const gchar *time);
 gchar *gis_viewer_get_time(GisViewer *viewer);