]> git.street.me.uk Git - andy/viking.git/blobdiff - src/modules.c
Fix function's return value
[andy/viking.git] / src / modules.c
index da528b089986b464677ad4cd3cfb514102b117f3..2ed757e634b33d4e7620469d3505921c08ee2579 100644 (file)
 #include "config.h"
 #endif
 
+#include <glib.h>
+#include <glib/gstdio.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 #include "modules.h"
 
 #include "google.h"
-#include "googlemaps.h"
 #include "terraserver.h"
-#include "khmaps.h"
 #include "expedia.h"
 #include "osm.h"
+#include "osm-traces.h"
+#include "bluemarble.h"
+#include "geonames.h"
+#include "file.h"
+#include "vikmapslayer.h"
+#include "vikexttools.h"
+#include "vikgoto.h"
+#include "vikgobjectbuilder.h"
+
+#define VIKING_MAPS_FILE "maps.xml"
+#define VIKING_EXTTOOLS_FILE "external_tools.xml"
+#define VIKING_GOTOTOOLS_FILE "goto_tools.xml"
+
+static void
+modules_register_map_source(VikGobjectBuilder *self, GObject *object)
+{
+  g_debug (__FUNCTION__);
+  VikMapSource *mapsource = VIK_MAP_SOURCE (object);
+  /* FIXME label should be hosted by object */
+  maps_layer_register_map_source (mapsource);
+}
+
+static void
+modules_register_exttools(VikGobjectBuilder *self, GObject *object)
+{
+  g_debug (__FUNCTION__);
+  VikExtTool *tool = VIK_EXT_TOOL (object);
+  vik_ext_tools_register (tool);
+}
+
+static void
+modules_register_gototools(VikGobjectBuilder *self, GObject *object)
+{
+  g_debug (__FUNCTION__);
+  VikGotoTool *tool = VIK_GOTO_TOOL (object);
+  vik_goto_register (tool);
+}
+
+static void
+modules_load_config(void)
+{
+  /* Maps sources */
+  gchar *maps = g_build_filename(a_get_viking_dir(), VIKING_MAPS_FILE, NULL);
+  if (g_access (maps, R_OK) == 0)
+  {
+       VikGobjectBuilder *builder = vik_gobject_builder_new ();
+       g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_map_source), NULL);
+       vik_gobject_builder_parse (builder, maps);
+       g_object_unref (builder);
+  }
+
+  /* External tools */
+  gchar *tools = g_build_filename(a_get_viking_dir(), VIKING_EXTTOOLS_FILE, NULL);
+  if (g_access (tools, R_OK) == 0)
+  {
+       VikGobjectBuilder *builder = vik_gobject_builder_new ();
+       g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_exttools), NULL);
+       vik_gobject_builder_parse (builder, tools);
+       g_object_unref (builder);
+  }
+
+  /* Go-to search engines */
+  gchar *go_to = g_build_filename(a_get_viking_dir(), VIKING_GOTOTOOLS_FILE, NULL);
+  if (g_access (go_to, R_OK) == 0)
+  {
+       VikGobjectBuilder *builder = vik_gobject_builder_new ();
+       g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_gototools), NULL);
+       vik_gobject_builder_parse (builder, go_to);
+       g_object_unref (builder);
+  }
+}
 
 void modules_init()
 {
 #ifdef VIK_CONFIG_GOOGLE 
   google_init();
-  googlemaps_init();
-  khmaps_init();
 #endif
 #ifdef VIK_CONFIG_EXPEDIA
   expedia_init();
@@ -45,6 +118,18 @@ void modules_init()
 #ifdef VIK_CONFIG_TERRASERVER
   terraserver_init();
 #endif
+#ifdef VIK_CONFIG_OPENSTREETMAP
   osm_init();
+  osm_traces_init();
+#endif
+#ifdef VIK_CONFIG_BLUEMARBLE
+  bluemarble_init();
+#endif
+#ifdef VIK_CONFIG_GEONAMES
+  geonames_init();
+#endif
+  
+  /* As modules are loaded, we can load configuration files */
+  modules_load_config ();
 }