]> err.no Git - mapper/blobdiff - src/track.c
More map widget integration changes
[mapper] / src / track.c
index d59aeed0e1041935174975fd13958fe4295a1241..b9c69c0cb3e49bcda736daa4df1569b53f707633 100644 (file)
@@ -5,41 +5,29 @@
 
 #include "utils.h"
 #include "gps.h"
-#include "map.h"
 #include "route.h"
 #include "settings.h"
 #include "mapper-types.h"
 #include "ui-common.h"
+#include "dialogs.h"
 #include "file.h"
 #include "track.h"
 #include "latlon.h"
 #include "path.h"
 #include "gpx.h"
 
-struct sql_select_stmt {
-       sqlite3_stmt *select_track;
-       sqlite3_stmt *select_track_nodes;
-       sqlite3_stmt *insert_track;
-       sqlite3_stmt *insert_track_node;
-       sqlite3_stmt *delete_track_nodes;
-       sqlite3_stmt *delete_track;
-};
-static struct sql_select_stmt sql;
-
 /* Add sensitivity */
 static gint sensitivity=3;
 
 void 
-track_clear(void)
+track_clear(Path *track)
 {
 GtkWidget *confirm;
 
 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window), _("Clear the track?"));
 
 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
-       _track->tail = _track->head;
-       _track->length=_track->avgspeed=0.0;
-       _track->points=0;
+       path_clear(track);
        map_force_redraw();
 }
 gtk_widget_destroy(confirm);
@@ -48,9 +36,10 @@ gtk_widget_destroy(confirm);
 gdouble
 track_calculate_distance_from(Point *point)
 {
+Point *curr;
 gdouble lat1, lon1, lat2, lon2;
 gdouble sum = 0.0;
-Point *curr;
+
 unit2latlon(_gps->data.unitx, _gps->data.unity, lat1, lon1);
 
 /* Skip _track->tail because that should be _gps. */
@@ -66,15 +55,13 @@ return sum;
 }
 
 void 
-track_show_distance_from(Point * point)
+track_show_distance_from(Point *point)
 {
 gchar buffer[80];
 gdouble sum;
 
 sum = track_calculate_distance_from(point);
-
-g_snprintf(buffer, sizeof(buffer), "%s: %.02f %s", _("Distance"),
-        sum * UNITS_CONVERT[_units], UNITS_TEXT[_units]);
+g_snprintf(buffer, sizeof(buffer), "%s: %.02f %s", _("Distance"), sum * UNITS_CONVERT[_units], UNITS_TEXT[_units]);
 MACRO_BANNER_SHOW_INFO(_window, buffer);
 }
 
@@ -111,18 +98,20 @@ if (_track->head != _track->tail) {
  * appended to _track with time zero (this produces a "break" in the track).
  */
 gboolean
-track_add(GpsData *gps)
+track_add(Path *track, GpsData *gps)
 {
 if (!gps) {
-       MACRO_PATH_INCREMENT_TAIL(*_track);
-       *_track->tail=_point_null;
+       MACRO_PATH_INCREMENT_TAIL(*track);
+       *track->tail=_point_null;
        return FALSE;
 }
 
-if (abs((gint)gps->unitx-_track->tail->unitx) > sensitivity || abs((gint)gps->unity-_track->tail->unity) > sensitivity) {
+g_assert(track);
+if (abs((gint)gps->unitx-track->tail->unitx) > sensitivity || abs((gint)gps->unity-track->tail->unity) > sensitivity) {
 
        /* If gps is available, update the nearest-waypoint data. */
-       if (gps && _route->head != _route->tail && (gps->newly_fixed ? (route_find_nearest_point(), TRUE) : route_update_nears(TRUE))) {
+       /* XXX: MOVE THIS */
+       if (gps && _route->head != _route->tail && (gps->newly_fixed ? (route_find_nearest_point(_route), TRUE) : route_update_nears(_route, TRUE))) {
                /* Nearest waypoint has changed - re-render paths. */
                map_render_paths();
                MACRO_QUEUE_DRAW_AREA();
@@ -134,11 +123,11 @@ if (abs((gint)gps->unitx-_track->tail->unitx) > sensitivity || abs((gint)gps->un
                /* Instead of calling map_render_paths(), we'll draw the new line
                 * ourselves and call gtk_widget_queue_draw_area(). */
                map_render_segment(_gc[COLORABLE_TRACK], _gc[COLORABLE_TRACK_BREAK], 
-                       _track->tail->unitx, _track->tail->unity, gps->unitx, gps->unity);
+                       track->tail->unitx, track->tail->unity, gps->unitx, gps->unity);
 
-               if (_track->tail->unity && _track->tail->unitx) {
-                       tx1 = unit2x(_track->tail->unitx);
-                       ty1 = unit2y(_track->tail->unity);
+               if (track->tail->unity && track->tail->unitx) {
+                       tx1 = unit2x(track->tail->unitx);
+                       ty1 = unit2y(track->tail->unity);
                        tx2 = unit2x(gps->unitx);
                        ty2 = unit2y(gps->unity);
 
@@ -151,63 +140,40 @@ if (abs((gint)gps->unitx-_track->tail->unitx) > sensitivity || abs((gint)gps->un
                }
        }
 
-       if (_track->tail->unity && _track->tail->unitx) {
+       if (track->tail->unity && track->tail->unitx) {
                gdouble lat, lon;
 
-               unit2latlon(_track->tail->unitx, _track->tail->unity, lat, lon);
-               _track->length += calculate_distance(lat, lon, gps->lat, gps->lon);
-               _track->tspeed+=gps->speed;
-               if (_track->points>0)
-                       _track->avgspeed=_track->tspeed/_track->points;
+               unit2latlon(track->tail->unitx, track->tail->unity, lat, lon);
+               track->length += calculate_distance(lat, lon, gps->lat, gps->lon);
+               track->tspeed+=gps->speed;
+               if (track->points>0)
+                       track->avgspeed=track->tspeed/track->points;
                else
-                       _track->avgspeed=0.0;
-               g_debug("TRACK: %f %f (%d)", _track->length, _track->avgspeed, _track->points);
+                       track->avgspeed=0.0;
+               g_debug("TRACK: %f %f (%d)", track->length, track->avgspeed, track->points);
        }
 
-       MACRO_PATH_INCREMENT_TAIL(*_track);
-       _track->tail->unitx=gps->unitx;
-       _track->tail->unity=gps->unity;
-       _track->tail->time=gps->time;
-       _track->tail->altitude=gps->altitude;
-       _track->maxspeed=gps->maxspeed;
-       _track->points++;
+       MACRO_PATH_INCREMENT_TAIL(*track);
+       track->tail->unitx=gps->unitx;
+       track->tail->unity=gps->unity;
+       track->tail->time=gps->time;
+       track->tail->altitude=gps->altitude;
+       track->maxspeed=gps->maxspeed;
+       track->points++;
 }
 
-/* Keep the display on if we are moving. */
-KEEP_DISPLAY_ON();
 return TRUE;
 }
 
-gboolean 
-track_insert_break(void)
-{
-if (_track->tail->unity) {
-       guint x1, y1;
-
-       /* To mark a "waypoint" in a track, we'll add a (0, 0) point and then
-        * another instance of the most recent track point. */
-       MACRO_PATH_INCREMENT_TAIL(*_track);
-       *_track->tail=_point_null;
-       MACRO_PATH_INCREMENT_TAIL(*_track);
-       *_track->tail=_track->tail[-2];
-
-       /* Instead of calling map_render_paths(), we'll just draw the waypoint ourselves. */
-       x1 = unit2bufx(_track->tail->unitx);
-       y1 = unit2bufy(_track->tail->unity);
-       map_render_waypoint(x1, y1, _gc[COLORABLE_TRACK_BREAK]);
-}
-return FALSE;
-}
-
 gboolean
-track_open(void)
+track_open(Path *track)
 {
 gchar *buffer;
 gint size;
 gboolean r = FALSE;
 
 if (file_open_get_contents(&_track_file_uri, &buffer, &size)) {
-       if (gpx_parse(_track, buffer, size, GPX_PATH_NEW)) {
+       if (gpx_parse(track, buffer, size, GPX_PATH_NEW)) {
                map_force_redraw();
                MACRO_BANNER_SHOW_INFO(_window, _("Track Opened"));
                r = TRUE;
@@ -220,16 +186,16 @@ return r;
 }
 
 gboolean
-track_save(void)
+track_save(Path *track)
 {
 GnomeVFSHandle *handle;
 gboolean r = FALSE;
 
 if (file_save(&_track_file_uri, &_track_file_uri, &handle)) {
-       if (gpx_write(_track, handle)) {
+       if (gpx_write(track, handle)) {
                MACRO_BANNER_SHOW_INFO(_window, _("Track Saved"));
                r = TRUE;
-               track_clear();
+               track_clear(track);
        } else {
                popup_error(_window, _("Error writing GPX file."));
        }
@@ -243,7 +209,7 @@ return r;
  *
  */
 gboolean
-track_insert_mark(void)
+track_insert_mark(Path *track)
 {
 gdouble lat, lon;
 gchar tmp1[16], tmp2[16], *p_latlon;
@@ -255,10 +221,10 @@ GtkWidget *txt_desc;
 gboolean ret;
 
 dialog = gtk_dialog_new_with_buttons(_("Insert Mark"),
-                                       GTK_WINDOW(_window), GTK_DIALOG_MODAL, 
-                                       GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
-                                       GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, 
-                                       NULL);
+                               GTK_WINDOW(_window), GTK_DIALOG_MODAL, 
+                               GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                               GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, 
+                               NULL);
 
 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table = gtk_table_new(2, 2, FALSE), TRUE, TRUE, 0);
 
@@ -300,7 +266,7 @@ while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
        gtk_text_buffer_get_end_iter(tbuf, &ti2);
 
        if (gtk_text_buffer_get_char_count(tbuf)>0) {
-               path_insert_mark_text(_track, gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE));
+               path_insert_mark_text(track, gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE));
        } else {
                popup_error(dialog, _("Please provide a description for the mark."));
                continue;