]> git.street.me.uk Git - andy/viking.git/blob - src/modules.c
Add GPS Layer tooltip to say the protocol (aka device manufacturer) type.
[andy/viking.git] / src / modules.c
1 /*
2  * viking -- GPS Data and Topo Analyzer, Explorer, and Manager
3  *
4  * Copyright (C) 2006-2010, Guilhem Bonnefille <guilhem.bonnefille@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #ifdef HAVE_CONFIG_H
23 #include "config.h"
24 #endif
25
26 #include <glib.h>
27 #include <glib/gstdio.h>
28 #ifdef HAVE_UNISTD_H
29 #include <unistd.h>
30 #endif
31
32 #include "modules.h"
33
34 #include "spotmaps.h"
35 #include "google.h"
36 #include "terraserver.h"
37 #include "expedia.h"
38 #include "osm.h"
39 #include "osm-traces.h"
40 #include "bluemarble.h"
41 #include "geonames.h"
42 #include "file.h"
43 #include "vikmapslayer.h"
44 #include "vikexttools.h"
45 #include "vikgoto.h"
46 #include "vikgobjectbuilder.h"
47
48 #define VIKING_MAPS_FILE "maps.xml"
49 #define VIKING_EXTTOOLS_FILE "external_tools.xml"
50 #define VIKING_GOTOTOOLS_FILE "goto_tools.xml"
51
52 static void
53 modules_register_map_source(VikGobjectBuilder *self, GObject *object)
54 {
55   g_debug (__FUNCTION__);
56   VikMapSource *mapsource = VIK_MAP_SOURCE (object);
57   /* FIXME label should be hosted by object */
58   maps_layer_register_map_source (mapsource);
59 }
60
61 static void
62 modules_register_exttools(VikGobjectBuilder *self, GObject *object)
63 {
64   g_debug (__FUNCTION__);
65   VikExtTool *tool = VIK_EXT_TOOL (object);
66   vik_ext_tools_register (tool);
67 }
68
69 static void
70 modules_register_gototools(VikGobjectBuilder *self, GObject *object)
71 {
72   g_debug (__FUNCTION__);
73   VikGotoTool *tool = VIK_GOTO_TOOL (object);
74   vik_goto_register (tool);
75 }
76
77 static void
78 modules_load_config(void)
79 {
80   /* Maps sources */
81   gchar *maps = g_build_filename(a_get_viking_dir(), VIKING_MAPS_FILE, NULL);
82   if (g_access (maps, R_OK) == 0)
83   {
84         VikGobjectBuilder *builder = vik_gobject_builder_new ();
85         g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_map_source), NULL);
86         vik_gobject_builder_parse (builder, maps);
87         g_object_unref (builder);
88   }
89
90   /* External tools */
91   gchar *tools = g_build_filename(a_get_viking_dir(), VIKING_EXTTOOLS_FILE, NULL);
92   if (g_access (tools, R_OK) == 0)
93   {
94         VikGobjectBuilder *builder = vik_gobject_builder_new ();
95         g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_exttools), NULL);
96         vik_gobject_builder_parse (builder, tools);
97         g_object_unref (builder);
98   }
99
100   /* Go-to search engines */
101   gchar *go_to = g_build_filename(a_get_viking_dir(), VIKING_GOTOTOOLS_FILE, NULL);
102   if (g_access (go_to, R_OK) == 0)
103   {
104         VikGobjectBuilder *builder = vik_gobject_builder_new ();
105         g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_gototools), NULL);
106         vik_gobject_builder_parse (builder, go_to);
107         g_object_unref (builder);
108   }
109 }
110
111 void modules_init()
112 {
113 #ifdef VIK_CONFIG_GOOGLE 
114   google_init();
115 #endif
116 #ifdef VIK_CONFIG_EXPEDIA
117   expedia_init();
118 #endif
119 #ifdef VIK_CONFIG_TERRASERVER
120   terraserver_init();
121 #endif
122 #ifdef VIK_CONFIG_OPENSTREETMAP
123   osm_init();
124   osm_traces_init();
125 #endif
126 #ifdef VIK_CONFIG_BLUEMARBLE
127   bluemarble_init();
128 #endif
129 #ifdef VIK_CONFIG_GEONAMES
130   geonames_init();
131 #endif
132 #ifdef VIK_CONFIG_SPOTMAPS
133   spotmaps_init();
134 #endif
135
136   /* As modules are loaded, we can load configuration files */
137   modules_load_config ();
138 }
139