#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);
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. */
}
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);
}
* 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();
/* 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);
}
}
- 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;
}
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."));
}
*
*/
gboolean
-track_insert_mark(void)
+track_insert_mark(Path *track)
{
gdouble lat, lon;
gchar tmp1[16], tmp2[16], *p_latlon;
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);
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;