+ <title>Extending Viking</title>
+
+ <para>Currently, &dhpackage; has some extention points based on configuration files. The file format is heavily inspired by the GtkBuilder file format: you specify the class of the GObject to build and set its properties. Technically, it is a XML file containing a "objects" root element. Inside this element, you set a collection of "object".</para>
+ <para>Here is an example:
+<literallayout><![CDATA[
+<objects>
+ <object class="ClassName">
+ <property name="property_name1">Property value</property>
+ <property name="property_name2">Property value</property>
+ </object>
+ ...
+<objects>
+]]>
+</literallayout>
+</para>
+ <para>You can find more examples in the documentation part of the distribution.</para>
+ <formalpara>
+ <title>Map Source</title>
+ <para>It is possible to add new map's sources. The file is <filename>~/.viking/maps.xml</filename>.</para>
+ <para>An example of the file in the distribution <filename>doc/examples/maps.xml</filename>.</para>
+ <para>The VikSlippyMapSource allows to declare any map's source working like OpenStreetMap. It supports the following properties:
+ <variablelist>
+ <varlistentry>
+ <term>id</term>
+ <listitem><para>this is an integer and should be unique as it used to identify the map source</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>label</term>
+ <listitem><para>the text displayed in the map's source selection dialog</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>hostname</term>
+ <listitem><para>the server's hostname (eg. "tile.openstreetmap.org")</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>url</term>
+ <listitem><para>the parametrized address of the tile, in the spirit of C printf format, with 3 "%d" fields for X, Y and Z (zoom level) (eg. "/%d/%d/%d.png")</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ <para>The VikTmsMapSource allows to declare any TMS service. It supports the following properties:
+ <variablelist>
+ <varlistentry>
+ <term>id</term>
+ <listitem><para>this is an integer and should be unique as it used to identify the map source</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>label</term>
+ <listitem><para>the text displayed in the map's source selection dialog</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>hostname</term>
+ <listitem><para>the server's hostname (eg. "tile.openstreetmap.org")</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>url</term>
+ <listitem><para>the parametrized address of the tile, in the spirit of C printf format, with 3 "%d" fields for X, Y and Z (zoom level) (eg. "/%d/%d/%d.png")</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ <para>The VikWmscMapSource allows to declare any WMS or WMS-C service. It supports the following properties:
+ <variablelist>
+ <varlistentry>
+ <term>id</term>
+ <listitem><para>this is an integer and should be unique as it used to identify the map source</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>label</term>
+ <listitem><para>the text displayed in the map's source selection dialog</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>hostname</term>
+ <listitem><para>the server's hostname (eg. "tile.openstreetmap.org")</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>url</term>
+ <listitem><para>the parametrized address of the tile, in the spirit of C printf format, with 4 "%s" fields for bounding box coordinates (eg. "/coord=%s,%s,%s,%s")</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </formalpara>
+
+ <formalpara>
+ <title>Go-to search engines</title>
+ <para>It is possible to add new new search engines for the "Go-To" feature. The file is <filename>~/.viking/goto_tools.xml</filename>.</para>
+ <para>An example of the file in the distribution <filename>doc/examples/goto_tools.xml</filename>.</para>
+ <para>Currently, there is a single object class available: VikGotoXmlTool. Such feature allows to declare any search engine using a XML format as result.</para>
+ <para>The related properties are:
+ <variablelist>
+ <varlistentry>
+ <term>label</term>
+ <listitem><para>the text displayed in the <guilabel>Go-To</guilabel> dialog</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>url-format</term>
+ <listitem><para>the parametrized address of the query, in the spirit of C <function>printf</function> format, with a single "%s" field (replaced by the query string)</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>lat-path</term>
+ <listitem><para>XML path of the latitude (eg. <literal>/root/parent/elem</literal>)</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>lat-attr (optional)</term>
+ <listitem><para>name of the attribute (of previous element) containing the latitude</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>lon-path</term>
+ <listitem><para>XML path of the longitude (eg. <literal>/root/parent/elem</literal>)</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>lon-attr (optional)</term>
+ <listitem><para>name of the attribute (of previous element) containing the longiude</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ <para>As a facility (or readability) it is possible to set both path and attribute name in a single property, like an XPath expression. To do so, simply set both info in lat-path (or lon-path) in the following format: <literal>/root/parent/elem@attribute</literal>.</para>
+ </formalpara>
+
+ <formalpara>
+ <title>External tools</title>
+ <para>It is possible to add new external tools. The file is <filename>~/.viking/external_tools.xml</filename>.</para>
+ <para>An example of the file in the distribution <filename>doc/examples/external_tools.xml</filename>.</para>
+ <para>The VikWebtoolCenter allows to declare any Webtool using a logic based on center coordinates and zoom level value.</para>
+ <para>The related properties are:
+ <variablelist>
+ <varlistentry>
+ <term>label</term>
+ <listitem><para>the text displayed in the menu entry</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>url</term>
+ <listitem><para>the parametrized URL to open, in the spirit of C printf format, with 2 "%s" and a "%d" fields for X, Y and Z (zoom level) (eg. "http://hostname/?lat=%s&lon=%s&zoom=%d")</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ <para>The VikWebtoolBounds allows to declare any Webtool using a logic based on bounds coordinates.</para>
+ <para>The related properties are:
+ <variablelist>
+ <varlistentry>
+ <term>label</term>
+ <listitem><para>the text displayed in the menu entry</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>url</term>
+ <listitem><para>the parametrized address of the tile, in the spirit of C printf format, with 4 "%s" fields for left, right, bottom and top (eg. "http://hostname:8111/load_and_zoom?left=%s&right=%s&bottom=%s&top=%s")</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </formalpara>
+
+ <formalpara>
+ <title>Remote File Datasources</title>
+ <para>It is possible to add web references expected to return a file which can then be opened directly or converted via GPSBabel.</para>
+ <para>The file is <filename>~/.viking/datasources.xml</filename>.</para>
+ <para>An example of the file is in the source distribution <filename>doc/examples/datasources.xml</filename>.</para>
+ <para>The VikWebtoolDatasource allows to declare any URL using logic based on coordinates.</para>
+ <para>The related properties are:
+ <variablelist>
+ <varlistentry>
+ <term>label</term>
+ <listitem><para>the text displayed in the menu entry</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>url</term>
+ <listitem>
+ <para>the parametrized URL to open in the spirit of C printf format, with up to 7 "%s" values. e.g. <literal>http://hostname/getfile?lat=%s&lon=%s</literal></para>
+ <para>The order and meaning of these parameters is given by the url_format_code below</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>url_format_code</term>
+ <listitem>
+ <para>A string describing the parametrized URL substitution parameters, each character represents how to translate each term.</para>
+ <para>B = Bottom of the current view i.e. minimum latitude</para>
+ <para>L = Left of the current view i.e. minimum longitude</para>
+ <para>T = Top of the current view i.e. maximum latitude</para>
+ <para>R = Right of the current view i.e. maximum longitude</para>
+ <para>A = center lAtitude of the current view</para>
+ <para>O = center lOngitude of the current view</para>
+ <para>Z = OSM Zoom value of the current view. See <ulink url="http://wiki.openstreetmap.org/wiki/Zoom_levels">Zoom Levels</ulink></para>
+ <para>Thus for the url example above then the format code should be <emphasis>AO</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>file_type</term>
+ <listitem>
+ <para>This value is passed on for the -i parameter in interfacing with GPSBabel.</para>
+ <para>If it is not defined then the returned file is interpreted internally as a GPX file.</para>
+ <para>Possible values such as 'kml', 'mapsource' etc.. can be used. See <ulink url="http://www.gpsbabel.org/capabilities.html">GPSBabel File Formats</ulink> for the full list.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </formalpara>
+
+ </refsect1>
+ <refsect1>
+ <title>FILES</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><filename>~/.viking/maps.xml</filename></term>
+ <listitem>
+ <para>File containing definition of map sources.</para>
+ <para>See previous section for details.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>~/.viking/goto_tools.xml</filename></term>
+ <listitem>
+ <para>File containing definition of "Go-to" services.</para>
+ <para>See previous section for details.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>~/.viking/external_tools.xml</filename></term>
+ <listitem>
+ <para>File containing definition of external tools.</para>
+ <para>See previous section for details.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>~/.viking/datasources.xml</filename></term>
+ <listitem>
+ <para>File containing definition of remote file datasources.</para>
+ <para>See previous section for details.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>~/.viking/viking.prefs</filename></term>
+ <listitem>
+ <para>Preferences for &dhpackage;.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>~/.viking/viking_layer_defaults.ini</filename></term>
+ <listitem>
+ <para>Layer default values for &dhpackage;.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>~/.viking/viking.ini</filename></term>
+ <listitem>
+ <para>Values for &dhpackage; automatically saved between sessions.</para>
+ <para>Not generally intended to be manually edited.</para>
+ <para>However some finer control of default internal values can be set.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>~/.viking/cookies.txt</filename></term>
+ <listitem>
+ <para>File hosting cookies used by &dhpackage;.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>~/.viking-maps/</filename></term>
+ <listitem>
+ <para>Map cache of tiles downloaded by &dhpackage;.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Extension files (<filename>maps.xml</filename>,
+ <filename>goto_tools.xml</filename>,
+ <filename>datasources.xml</filename>,
+ <filename>external_tools.xml</filename>)
+ are also searched in <filename>/etc/viking</filename> and
+ <filename>/usr/share/viking</filename> directories (or related in your system).</para>
+
+ </refsect1>
+ <refsect1>
+ <title>ENVIRONMENT</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><envar>XDG_DATA_HOME</envar></term>
+ <listitem>
+ <para>Optional directory to look for extension files
+ (<filename>maps.xml</filename>, <filename>goto_tools.xml</filename>,
+ <filename>external_tools.xml</filename>).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><envar>XDG_DATA_DIRS</envar></term>
+ <listitem>
+ <para>Path used to change the directories scanned for extension files
+ (<filename>maps.xml</filename>, <filename>goto_tools.xml</filename>,
+ <filename>external_tools.xml</filename>).</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>