]> git.street.me.uk Git - andy/viking.git/blobdiff - src/vikgpslayer.c
Remove definition of a non existant function
[andy/viking.git] / src / vikgpslayer.c
index f30e1a7fd2fc9b90b2712c47cfe3dc09b8f2101b..276194af87de6438da6a4ad3e89b0a0efbee03a7 100644 (file)
@@ -32,6 +32,7 @@
 #include "viking.h"
 #include "icons/icons.h"
 #include "babel.h"
+#include "viktrwlayer.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #include <glib/gi18n.h>
 #ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
 #include <gps.h>
-#include "vikutils.h"
 #endif
 
 static VikGpsLayer *vik_gps_layer_create (VikViewport *vp);
-static void vik_gps_layer_realize ( VikGpsLayer *val, VikTreeview *vt, GtkTreeIter *layer_iter );
-static void vik_gps_layer_free ( VikGpsLayer *val );
-static void vik_gps_layer_draw ( VikGpsLayer *val, VikViewport *vp );
+static void vik_gps_layer_realize ( VikGpsLayer *vgl, VikTreeview *vt, GtkTreeIter *layer_iter );
+static void vik_gps_layer_free ( VikGpsLayer *vgl );
+static void vik_gps_layer_draw ( VikGpsLayer *vgl, VikViewport *vp );
 static VikGpsLayer *vik_gps_layer_new ( VikViewport *vp );
+static void vik_gps_layer_post_read ( VikGpsLayer *vgl, VikViewport *vp, gboolean from_file );
 
-static void gps_layer_marshall( VikGpsLayer *val, guint8 **data, gint *len );
+static void gps_layer_marshall( VikGpsLayer *vgl, guint8 **data, gint *len );
 static VikGpsLayer *gps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
-static gboolean gps_layer_set_param ( VikGpsLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation );
+static gboolean gps_layer_set_param ( VikGpsLayer *vgl, VikLayerSetParam *vlsp );
 static VikLayerParamData gps_layer_get_param ( VikGpsLayer *vgl, guint16 id, gboolean is_file_operation );
 
 static const gchar* gps_layer_tooltip ( VikGpsLayer *vgl );
 
-static void gps_layer_change_coord_mode ( VikGpsLayer *val, VikCoordMode mode );
+static void gps_layer_change_coord_mode ( VikGpsLayer *vgl, VikCoordMode mode );
 static void gps_layer_add_menu_items( VikGpsLayer *vtl, GtkMenu *menu, gpointer vlp );
 
 static void gps_upload_cb( gpointer layer_and_vlp[2] );
@@ -266,7 +267,7 @@ VikLayerInterface vik_gps_layer_interface = {
 
   (VikLayerFuncCreate)                  vik_gps_layer_create,
   (VikLayerFuncRealize)                 vik_gps_layer_realize,
-  (VikLayerFuncPostRead)                NULL,
+  (VikLayerFuncPostRead)                vik_gps_layer_post_read,
   (VikLayerFuncFree)                    vik_gps_layer_free,
 
   (VikLayerFuncProperties)              NULL,
@@ -530,96 +531,96 @@ static VikGpsLayer *gps_layer_unmarshall( guint8 *data, gint len, VikViewport *v
 #undef alm_next
 }
 
-static gboolean gps_layer_set_param ( VikGpsLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation )
+static gboolean gps_layer_set_param ( VikGpsLayer *vgl, VikLayerSetParam *vlsp )
 {
-  switch ( id )
+  switch ( vlsp->id )
   {
     case PARAM_PROTOCOL:
-      if (data.s) {
+      if (vlsp->data.s) {
         g_free(vgl->protocol);
         // Backwards Compatibility: previous versions <v1.4 stored protocol as an array index
-        int index = data.s[0] - '0';
-        if (data.s[0] != '\0' &&
-            g_ascii_isdigit (data.s[0]) &&
-            data.s[1] == '\0' &&
+        int index = vlsp->data.s[0] - '0';
+        if (vlsp->data.s[0] != '\0' &&
+            g_ascii_isdigit (vlsp->data.s[0]) &&
+            vlsp->data.s[1] == '\0' &&
             index < OLD_NUM_PROTOCOLS)
           // It is a single digit: activate compatibility
           vgl->protocol = g_strdup(protocols_args[index]);
         else
-          vgl->protocol = g_strdup(data.s);
+          vgl->protocol = g_strdup(vlsp->data.s);
         g_debug("%s: %s", __FUNCTION__, vgl->protocol);
       }
       else
         g_warning(_("Unknown GPS Protocol"));
       break;
     case PARAM_PORT:
-      if (data.s) {
+      if (vlsp->data.s) {
         g_free(vgl->serial_port);
         // Backwards Compatibility: previous versions <v0.9.91 stored serial_port as an array index
-        int index = data.s[0] - '0';
-        if (data.s[0] != '\0' &&
-            g_ascii_isdigit (data.s[0]) &&
-            data.s[1] == '\0' &&
+        int index = vlsp->data.s[0] - '0';
+        if (vlsp->data.s[0] != '\0' &&
+            g_ascii_isdigit (vlsp->data.s[0]) &&
+            vlsp->data.s[1] == '\0' &&
             index < OLD_NUM_PORTS)
           /* It is a single digit: activate compatibility */
           vgl->serial_port = g_strdup(old_params_ports[index]);
         else
-          vgl->serial_port = g_strdup(data.s);
+          vgl->serial_port = g_strdup(vlsp->data.s);
         g_debug("%s: %s", __FUNCTION__, vgl->serial_port);
       }
       else
         g_warning(_("Unknown serial port device"));
       break;
     case PARAM_DOWNLOAD_TRACKS:
-      vgl->download_tracks = data.b;
+      vgl->download_tracks = vlsp->data.b;
       break;
     case PARAM_UPLOAD_TRACKS:
-      vgl->upload_tracks = data.b;
+      vgl->upload_tracks = vlsp->data.b;
       break;
     case PARAM_DOWNLOAD_ROUTES:
-      vgl->download_routes = data.b;
+      vgl->download_routes = vlsp->data.b;
       break;
     case PARAM_UPLOAD_ROUTES:
-      vgl->upload_routes = data.b;
+      vgl->upload_routes = vlsp->data.b;
       break;
     case PARAM_DOWNLOAD_WAYPOINTS:
-      vgl->download_waypoints = data.b;
+      vgl->download_waypoints = vlsp->data.b;
       break;
     case PARAM_UPLOAD_WAYPOINTS:
-      vgl->upload_waypoints = data.b;
+      vgl->upload_waypoints = vlsp->data.b;
       break;
 #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
     case PARAM_GPSD_CONNECT:
-      vgl->auto_connect_to_gpsd = data.b;
+      vgl->auto_connect_to_gpsd = vlsp->data.b;
       break;
     case PARAM_GPSD_HOST:
-      if (data.s) {
+      if (vlsp->data.s) {
         if (vgl->gpsd_host)
           g_free(vgl->gpsd_host);
-        vgl->gpsd_host = g_strdup(data.s);
+        vgl->gpsd_host = g_strdup(vlsp->data.s);
       }
       break;
     case PARAM_GPSD_PORT:
-      if (data.s) {
+      if (vlsp->data.s) {
         if (vgl->gpsd_port)
           g_free(vgl->gpsd_port);
-        vgl->gpsd_port = g_strdup(data.s);
+        vgl->gpsd_port = g_strdup(vlsp->data.s);
       }
       break;
     case PARAM_GPSD_RETRY_INTERVAL:
-      vgl->gpsd_retry_interval = strtol(data.s, NULL, 10);
+      vgl->gpsd_retry_interval = strtol(vlsp->data.s, NULL, 10);
       break;
     case PARAM_REALTIME_REC:
-      vgl->realtime_record = data.b;
+      vgl->realtime_record = vlsp->data.b;
       break;
     case PARAM_REALTIME_CENTER_START:
-      vgl->realtime_jump_to_start = data.b;
+      vgl->realtime_jump_to_start = vlsp->data.b;
       break;
     case PARAM_VEHICLE_POSITION:
-      vgl->vehicle_position = data.u;
+      vgl->vehicle_position = vlsp->data.u;
       break;
     case PARAM_REALTIME_UPDATE_STATUSBAR:
-      vgl->realtime_update_statusbar = data.b;
+      vgl->realtime_update_statusbar = vlsp->data.b;
       break;
 #endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */
     default:
@@ -727,6 +728,14 @@ VikGpsLayer *vik_gps_layer_new (VikViewport *vp)
   return vgl;
 }
 
+static void vik_gps_layer_post_read ( VikGpsLayer *vgl, VikViewport *vvp, gboolean from_file )
+{
+  for (guint i = 0; i < NUM_TRW; i++) {
+    trw_layer_calculate_bounds_waypoints ( vgl->trw_children[i] );
+    trw_layer_calculate_bounds_tracks ( vgl->trw_children[i] );
+  }
+}
+
 static void vik_gps_layer_draw ( VikGpsLayer *vgl, VikViewport *vp )
 {
   gint i;
@@ -1176,6 +1185,28 @@ static void process_line_for_gps_info ( const gchar *line, GpsSession *sess )
     g_strfreev(tokens);
   }
 
+  if (strstr(line, "[ERROR] GPS")) {
+    gchar **tokens = g_strsplit(line, "\n", 0);
+    sess->info = g_strdup(tokens[0]);
+    sess->id_info = gdk_threads_add_idle ( (GSourceFunc)show_gps_info, sess );
+    g_strfreev(tokens);
+  }
+
+  if (strstr(line, "an't in")) {
+    gchar **tokens = g_strsplit(line, "\n", 0);
+    sess->info = g_strdup(tokens[0]);
+    sess->id_info = gdk_threads_add_idle ( (GSourceFunc)show_gps_info, sess );
+    g_strfreev(tokens);
+  }
+
+  if (strstr(line, "Can't get waypoint")) {
+    gchar **tokens = g_strsplit(line, "\n", 0);
+    sess->info = g_strdup(tokens[0]);
+    sess->id_info = gdk_threads_add_idle ( (GSourceFunc)show_gps_info, sess );
+    g_strfreev(tokens);
+  }
+}
+
 static gboolean show_gps_status_working ( GpsSession *sess )
 {
   g_mutex_lock(sess->mutex);
@@ -1587,6 +1618,7 @@ static void gps_empty_realtime_cb( gpointer layer_and_vlp[2] )
     return;
   vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_REALTIME]);
   vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_REALTIME]);
+  vik_trw_layer_delete_all_routes ( vgl-> trw_children[TRW_REALTIME]);
 }
 #endif
 
@@ -1607,6 +1639,7 @@ static void gps_empty_all_cb( gpointer layer_and_vlp[2] )
 #if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
   vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_REALTIME]);
   vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_REALTIME]);
+  vik_trw_layer_delete_all_routes ( vgl-> trw_children[TRW_REALTIME]);
 #endif
 }
 
@@ -1936,18 +1969,12 @@ static gboolean rt_gpsd_try_connect(gpointer *data)
 
 static gboolean rt_ask_retry(VikGpsLayer *vgl)
 {
-  GtkWidget *dialog = gtk_message_dialog_new (VIK_GTK_WINDOW_FROM_LAYER(vgl),
-                          GTK_DIALOG_DESTROY_WITH_PARENT,
-                          GTK_MESSAGE_QUESTION,
-                          GTK_BUTTONS_YES_NO,
-                          "Failed to connect to gpsd at %s (port %s)\n"
-                          "Should Viking keep trying (every %d seconds)?",
-                          vgl->gpsd_host, vgl->gpsd_port,
-                          vgl->gpsd_retry_interval);
-
-  gint res = gtk_dialog_run(GTK_DIALOG(dialog));
-  gtk_widget_destroy(dialog);
-  return (res == GTK_RESPONSE_YES);
+  gchar *msg = g_strdup_printf ( _("Failed to connect to gpsd at %s (port %s)\n"
+                                   "Should Viking keep trying (every %d seconds)?"),
+                                   vgl->gpsd_host, vgl->gpsd_port, vgl->gpsd_retry_interval );
+  gboolean ans = a_dialog_yes_or_no ( VIK_GTK_WINDOW_FROM_LAYER(vgl), msg, NULL );
+  g_free ( msg );
+  return ans;
 }
 
 static gboolean rt_gpsd_connect(VikGpsLayer *vgl, gboolean ask_if_failed)
@@ -1955,7 +1982,7 @@ static gboolean rt_gpsd_connect(VikGpsLayer *vgl, gboolean ask_if_failed)
   vgl->realtime_retry_timer = 0;
   if (rt_gpsd_try_connect((gpointer *)vgl)) {
     if (vgl->gpsd_retry_interval <= 0) {
-      g_warning("Failed to connect to gpsd but will not retry because retry intervel was set to %d (which is 0 or negative)", vgl->gpsd_retry_interval);
+      g_warning("Failed to connect to gpsd but will not retry because retry interval was set to %d (which is 0 or negative)", vgl->gpsd_retry_interval);
       return FALSE;
     }
     else if (ask_if_failed && !rt_ask_retry(vgl))