]> git.street.me.uk Git - andy/viking.git/blobdiff - src/modules.c
Fix needing to calculate bounds of *both* tracks when a track is split via the marker.
[andy/viking.git] / src / modules.c
index 1f734c15a7323cfeeb08b0067ff7c064d0376100..3b2dc794faaef498ca4d7cbea34ffb195521548d 100644 (file)
 #include "vikexttools.h"
 #include "vikexttool_datasources.h"
 #include "vikgoto.h"
 #include "vikexttools.h"
 #include "vikexttool_datasources.h"
 #include "vikgoto.h"
+#include "vikrouting.h"
+
+/* Loadable types */
+#include "vikslippymapsource.h"
+#include "viktmsmapsource.h"
+#include "vikwmscmapsource.h"
+#include "vikwebtoolcenter.h"
+#include "vikwebtoolbounds.h"
+#include "vikgotoxmltool.h"
+#include "vikwebtool_datasource.h"
+#include "vikroutingwebengine.h"
+
 #include "vikgobjectbuilder.h"
 
 #define VIKING_MAPS_FILE "maps.xml"
 #define VIKING_EXTTOOLS_FILE "external_tools.xml"
 #define VIKING_DATASOURCES_FILE "datasources.xml"
 #define VIKING_GOTOTOOLS_FILE "goto_tools.xml"
 #include "vikgobjectbuilder.h"
 
 #define VIKING_MAPS_FILE "maps.xml"
 #define VIKING_EXTTOOLS_FILE "external_tools.xml"
 #define VIKING_DATASOURCES_FILE "datasources.xml"
 #define VIKING_GOTOTOOLS_FILE "goto_tools.xml"
+#define VIKING_ROUTING_FILE "routing.xml"
 
 static void
 modules_register_map_source(VikGobjectBuilder *self, GObject *object)
 
 static void
 modules_register_map_source(VikGobjectBuilder *self, GObject *object)
@@ -85,6 +98,14 @@ modules_register_gototools(VikGobjectBuilder *self, GObject *object)
   vik_goto_register (tool);
 }
 
   vik_goto_register (tool);
 }
 
+static void
+modules_register_routing_engine(VikGobjectBuilder *self, GObject *object)
+{
+  g_debug (__FUNCTION__);
+  VikRoutingEngine *engine = VIK_ROUTING_ENGINE (object);
+  vik_routing_register (engine);
+}
+
 static void
 modules_load_config_dir(const gchar *dir)
 {
 static void
 modules_load_config_dir(const gchar *dir)
 {
@@ -99,6 +120,7 @@ modules_load_config_dir(const gchar *dir)
        vik_gobject_builder_parse (builder, maps);
        g_object_unref (builder);
   }
        vik_gobject_builder_parse (builder, maps);
        g_object_unref (builder);
   }
+  g_free ( maps );
 
   /* External tools */
   gchar *tools = g_build_filename(dir, VIKING_EXTTOOLS_FILE, NULL);
 
   /* External tools */
   gchar *tools = g_build_filename(dir, VIKING_EXTTOOLS_FILE, NULL);
@@ -109,6 +131,7 @@ modules_load_config_dir(const gchar *dir)
        vik_gobject_builder_parse (builder, tools);
        g_object_unref (builder);
   }
        vik_gobject_builder_parse (builder, tools);
        g_object_unref (builder);
   }
+  g_free ( tools );
 
   gchar *datasources = g_build_filename(dir, VIKING_DATASOURCES_FILE, NULL);
   if (g_access (datasources, R_OK) == 0)
 
   gchar *datasources = g_build_filename(dir, VIKING_DATASOURCES_FILE, NULL);
   if (g_access (datasources, R_OK) == 0)
@@ -118,6 +141,7 @@ modules_load_config_dir(const gchar *dir)
        vik_gobject_builder_parse (builder, datasources);
        g_object_unref (builder);
   }
        vik_gobject_builder_parse (builder, datasources);
        g_object_unref (builder);
   }
+  g_free ( datasources );
 
   /* Go-to search engines */
   gchar *go_to = g_build_filename(dir, VIKING_GOTOTOOLS_FILE, NULL);
 
   /* Go-to search engines */
   gchar *go_to = g_build_filename(dir, VIKING_GOTOTOOLS_FILE, NULL);
@@ -128,6 +152,18 @@ modules_load_config_dir(const gchar *dir)
        vik_gobject_builder_parse (builder, go_to);
        g_object_unref (builder);
   }
        vik_gobject_builder_parse (builder, go_to);
        g_object_unref (builder);
   }
+  g_free ( go_to );
+
+  /* Routing engines */
+  gchar *routing = g_build_filename(dir, VIKING_ROUTING_FILE, NULL);
+  if (g_access (routing, R_OK) == 0)
+  {
+       VikGobjectBuilder *builder = vik_gobject_builder_new ();
+       g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_routing_engine), NULL);
+       vik_gobject_builder_parse (builder, routing);
+       g_object_unref (builder);
+  }
+  g_free ( routing );
 }
 
 static void
 }
 
 static void
@@ -166,6 +202,34 @@ modules_load_config(void)
   modules_load_config_dir(a_get_viking_dir());
 }
 
   modules_load_config_dir(a_get_viking_dir());
 }
 
+static void
+register_loadable_types(void)
+{
+  /* Force registering of loadable types */
+  volatile GType types[] = {
+    /* Maps */
+    VIK_TYPE_SLIPPY_MAP_SOURCE,
+    VIK_TYPE_TMS_MAP_SOURCE,
+    VIK_TYPE_WMSC_MAP_SOURCE,
+
+    /* Goto */
+    VIK_GOTO_XML_TOOL_TYPE,
+
+    /* Tools */
+    VIK_WEBTOOL_CENTER_TYPE,
+    VIK_WEBTOOL_BOUNDS_TYPE,
+
+    /* Datasource */
+    VIK_WEBTOOL_DATASOURCE_TYPE,
+
+    /* Routing */
+    VIK_ROUTING_WEB_ENGINE_TYPE
+  };
+
+  /* kill 'unused variable' + argument type warnings */
+  g_debug("%d types loaded", (int)sizeof(types)/(int)sizeof(GType));
+}
+
 void modules_init()
 {
 #ifdef VIK_CONFIG_BING
 void modules_init()
 {
 #ifdef VIK_CONFIG_BING
@@ -194,6 +258,8 @@ void modules_init()
   spotmaps_init();
 #endif
 
   spotmaps_init();
 #endif
 
+  register_loadable_types ();
+
   /* As modules are loaded, we can load configuration files */
   modules_load_config ();
 }
   /* As modules are loaded, we can load configuration files */
   modules_load_config ();
 }