]> git.street.me.uk Git - andy/viking.git/blobdiff - src/vikroutingengine.c
Enable compile time option for geonames username
[andy/viking.git] / src / vikroutingengine.c
index 34fa34aee0401a82cbddf2cf83385349693c4ec2..00b8689a529d543149bd5bae6f1766ea23ac8b68 100644 (file)
 #include <glib/gstdio.h>
 #include <glib/gi18n.h>
 
-#include "curl_download.h"
 #include "babel.h"
 
 #include "vikroutingengine.h"
 
 static void vik_routing_engine_finalize ( GObject *gob );
-static DownloadMapOptions *vik_routing_engine_get_download_options_default ( VikRoutingEngine *self );
 static GObjectClass *parent_class;
 
 typedef struct _VikRoutingPrivate VikRoutingPrivate;
@@ -143,9 +141,12 @@ vik_routing_engine_class_init ( VikRoutingEngineClass *klass )
 
   routing_class = VIK_ROUTING_ENGINE_CLASS ( klass );
   routing_class->find = NULL;
-  routing_class->get_download_options = vik_routing_engine_get_download_options_default;
-  routing_class->get_url_for_coords = NULL;
 
+  routing_class->supports_direction = NULL;
+  routing_class->get_url_from_directions = NULL;
+
+  routing_class->refine = NULL;
+  routing_class->supports_refine = NULL;
 
   pspec = g_param_spec_string ("id",
                                "Identifier",
@@ -198,52 +199,27 @@ vik_routing_engine_finalize ( GObject *self )
   G_OBJECT_CLASS(parent_class)->finalize(self);
 }
 
-static DownloadMapOptions *
-vik_routing_engine_get_download_options_default ( VikRoutingEngine *self )
-{
-       // Default: return NULL
-       return NULL;
-}
-
-static gchar *
-vik_routing_engine_get_url_for_coords ( VikRoutingEngine *self, struct LatLon start, struct LatLon end )
-{
-       VikRoutingEngineClass *klass;
-       
-       g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), NULL );
-       klass = VIK_ROUTING_ENGINE_GET_CLASS( self );
-       g_return_val_if_fail ( klass->get_url_for_coords != NULL, NULL );
-       
-       return klass->get_url_for_coords( self, start, end );
-}
-
-static DownloadMapOptions *
-vik_routing_engine_get_download_options ( VikRoutingEngine *self )
+/**
+ * vik_routing_engine_find:
+ * @self: self object
+ * @vtl:
+ * @start: starting point
+ * @end: ending point
+ *
+ * Retrieve a route between two coordinates.
+ * 
+ * Returns: indicates success or not.
+ */
+gboolean
+vik_routing_engine_find ( VikRoutingEngine *self, VikTrwLayer *vtl, struct LatLon start, struct LatLon end )
 {
        VikRoutingEngineClass *klass;
        
-       g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), NULL );
+       g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), 0 );
        klass = VIK_ROUTING_ENGINE_GET_CLASS( self );
-       g_return_val_if_fail ( klass->get_download_options != NULL, NULL );
+       g_return_val_if_fail ( klass->find != NULL, 0 );
 
-       return klass->get_download_options( self );
-}
-
-int
-vik_routing_engine_find ( VikRoutingEngine *self, VikTrwLayer *vtl, struct LatLon start, struct LatLon end )
-{
-  gchar *uri;
-  int ret = 0;  /* OK */
-
-  uri = vik_routing_engine_get_url_for_coords(self, start, end);
-
-  DownloadMapOptions *options = vik_routing_engine_get_download_options(self);
-  
-  gchar *format = vik_routing_engine_get_format ( self );
-  a_babel_convert_from_url ( vtl, uri, format, NULL, NULL, options );
-
-  g_free(uri);
-  return ret;
+       return klass->find( self, vtl, start, end );
 }
 
 /**
@@ -274,7 +250,9 @@ vik_routing_engine_get_label ( VikRoutingEngine *self )
 
 /**
  * vik_routing_engine_get_format:
- * 
+ *
+ * GPSbabel's Format of result.
+ *
  * Returns: the format of self
  */
 gchar *
@@ -284,3 +262,86 @@ vik_routing_engine_get_format ( VikRoutingEngine *self )
 
   return priv->format;
 }
+
+/**
+ * vik_routing_engine_supports_direction:
+ * 
+ * Returns: %TRUE if this engine supports the route finding based on directions
+ */
+gboolean
+vik_routing_engine_supports_direction ( VikRoutingEngine *self )
+{
+  VikRoutingEngineClass *klass;
+
+  g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), FALSE );
+  klass = VIK_ROUTING_ENGINE_GET_CLASS( self );
+  g_return_val_if_fail ( klass->supports_direction != NULL, FALSE );
+
+  return klass->supports_direction( self );
+}
+
+/**
+ * vik_routing_engine_get_url_from_directions:
+ * @self: routing engine
+ * @start: the start direction
+ * @end: the end direction
+ *
+ * Compute the URL used with the acquire framework.
+ *
+ * Returns: the computed URL
+ */
+gchar *
+vik_routing_engine_get_url_from_directions ( VikRoutingEngine *self, const gchar *start, const gchar *end )
+{
+  VikRoutingEngineClass *klass;
+
+  g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), NULL );
+  klass = VIK_ROUTING_ENGINE_GET_CLASS( self );
+  g_return_val_if_fail ( klass->get_url_from_directions != NULL, NULL );
+
+  return klass->get_url_from_directions( self, start, end );
+}
+
+/**
+ * vik_routing_engine_refine:
+ * @self: self object
+ * @vtl: layer where to create new track
+ * @vt: the simple route to refine
+ *
+ * Retrieve a route refining the @vt track/route.
+ *
+ * A refined route is computed from @vt.
+ * The route is computed from first trackpoint to last trackpoint,
+ * and going via all intermediate trackpoints.
+ *
+ * Returns: indicates success or not.
+ */
+gboolean
+vik_routing_engine_refine ( VikRoutingEngine *self, VikTrwLayer *vtl, VikTrack *vt )
+{
+  VikRoutingEngineClass *klass;
+
+  g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), 0 );
+  klass = VIK_ROUTING_ENGINE_GET_CLASS ( self );
+  g_return_val_if_fail ( klass->refine != NULL, 0 );
+
+  return klass->refine ( self, vtl, vt );
+}
+
+/**
+ * vik_routing_engine_supports_refine:
+ * @self: routing engine
+ *
+ * Returns: %TRUE if this engine supports the refine of track
+ */
+gboolean
+vik_routing_engine_supports_refine ( VikRoutingEngine *self )
+{
+  VikRoutingEngineClass *klass;
+
+  g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), FALSE );
+  klass = VIK_ROUTING_ENGINE_GET_CLASS ( self );
+  g_return_val_if_fail ( klass->supports_refine != NULL, FALSE );
+
+  return klass->supports_refine ( self );
+}