]> git.street.me.uk Git - andy/viking.git/blobdiff - src/vikrouting.c
Put vikutils.h into viking.h
[andy/viking.git] / src / vikrouting.c
index 45981cbad02c2d8ca6e57c8396dbd3270b83da03..79e96e0ae13347842f7abfcf69882c8e264b4185 100644 (file)
@@ -51,7 +51,7 @@
 static GList *routing_engine_list = NULL;
 
 static VikLayerParam prefs[] = {
-  { VIK_LAYER_NUM_TYPES, VIKING_ROUTING_PARAMS_NAMESPACE "default", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Default engine:"), VIK_LAYER_WIDGET_COMBOBOX, NULL, NULL, NULL },
+  { VIK_LAYER_NUM_TYPES, VIKING_ROUTING_PARAMS_NAMESPACE "default", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Default engine:"), VIK_LAYER_WIDGET_COMBOBOX, NULL, NULL, NULL, NULL, NULL, NULL },
 };
 
 gchar **routing_engine_labels = NULL;
@@ -65,7 +65,7 @@ gchar **routing_engine_ids = NULL;
 void
 vik_routing_prefs_init()
 {
-  a_preferences_register_group ( VIKING_ROUTING_PARAMS_GROUP_KEY, "Routing" );
+  a_preferences_register_group ( VIKING_ROUTING_PARAMS_GROUP_KEY, _("Routing") );
 
   VikLayerParamData tmp;
   tmp.s = NULL;
@@ -109,7 +109,7 @@ vik_routing_find_engine ( const gchar *id )
  * 
  * Returns: the default engine
  */
-static VikRoutingEngine *
+VikRoutingEngine *
 vik_routing_default_engine ( void )
 {
   const gchar *id = a_preferences_get ( VIKING_ROUTING_PARAMS_NAMESPACE "default")->s;
@@ -125,14 +125,16 @@ vik_routing_default_engine ( void )
  * vik_routing_default_find:
  * 
  * Route computation with default engine.
+ *
+ * Return indicates success or not
  */
-void
+gboolean
 vik_routing_default_find(VikTrwLayer *vt, struct LatLon start, struct LatLon end)
 {
   /* The engine */
   VikRoutingEngine *engine = vik_routing_default_engine ( );
   /* The route computation */
-  vik_routing_engine_find ( engine, vt, start, end );
+  return vik_routing_engine_find ( engine, vt, start, end );
 }
 
 /**
@@ -238,7 +240,7 @@ fill_engine_box (gpointer data, gpointer user_data)
   /* Retrieve combo */
   GtkWidget *widget = (GtkWidget*) user_data;
 
-  /* Only register engine fulliling expected behavior */
+  /* Only register engine fulfilling expected behaviour */
   Predicate predicate = g_object_get_data ( G_OBJECT ( widget ), "func" );
   gpointer predicate_data = g_object_get_data ( G_OBJECT ( widget ), "user_data" );
   /* No predicate means to register all engines */
@@ -263,7 +265,7 @@ fill_engine_box (gpointer data, gpointer user_data)
  *
  * Creates a combo box to allow selection of a routing engine.
  *
- * We use GObject data hastable to store and retrieve the VikRoutingEngine
+ * We use GObject data hashtable to store and retrieve the VikRoutingEngine
  * associated to the selection.
  *
  * Returns: the combo box
@@ -303,3 +305,32 @@ vik_routing_ui_selector_get_nth (GtkWidget *combo, int pos)
 
   return engine;
 }
+
+// For simplicity a variable with visibility to multiple functions
+static guint engine_count = 0;
+
+static void
+count_engine_directions (gpointer data, gpointer user_data)
+{
+  VikRoutingEngine *engine = (VikRoutingEngine*) data;
+  if ( vik_routing_engine_supports_direction ( engine ) )
+    engine_count++;
+}
+
+/**
+ * vik_routing_number_of_engines:
+ *
+ * Returns: the number of engines available
+ */
+guint vik_routing_number_of_engines ( VikRoutingMethodType method )
+{
+  engine_count = 0;
+  if ( routing_engine_list ) {
+    if ( method == VIK_ROUTING_METHOD_DIRECTIONS )
+      vik_routing_foreach_engine ( count_engine_directions, NULL );
+    else
+      // ATM Every engine supports Lat/Lon requests
+      engine_count = g_list_length ( routing_engine_list );
+  }
+  return engine_count;
+}