X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/7363caa739bd64724ec6b12208d4f30f06258845..53ac8302de217e951b13e3b216c6fcd14a5a80f2:/src/modules.c?ds=sidebyside diff --git a/src/modules.c b/src/modules.c index e0568cc4..68a8cb9f 100644 --- a/src/modules.c +++ b/src/modules.c @@ -1,7 +1,7 @@ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * - * Copyright (C) 2006-2007, Guilhem Bonnefille + * Copyright (C) 2006-2010, Guilhem Bonnefille * * 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 @@ -23,6 +23,12 @@ #include "config.h" #endif +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif + #include "modules.h" #include "google.h" @@ -31,7 +37,75 @@ #include "osm.h" #include "osm-traces.h" #include "bluemarble.h" -#include "openaerial.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() { @@ -51,8 +125,11 @@ void modules_init() #ifdef VIK_CONFIG_BLUEMARBLE bluemarble_init(); #endif -#ifdef VIK_CONFIG_OPENAERIAL - openaerial_init(); +#ifdef VIK_CONFIG_GEONAMES + geonames_init(); #endif + + /* As modules are loaded, we can load configuration files */ + modules_load_config (); }