]> err.no Git - mapper/blobdiff - src/route.c
Add header and cast properly.
[mapper] / src / route.c
index 26c30a00105aebba662afa8ba247adb1f9f8b2c3..3144f60650eddf3a704738d10bfd6e6e75ed2d40 100644 (file)
 
 #include "help.h"
 
+#define DISTANCE_SQUARED(a, b) \
+   ((guint64)((((gint64)(b).unitx)-(a).unitx)*(((gint64)(b).unitx)-(a).unitx))\
+  + (guint64)((((gint64)(b).unity)-(a).unity)*(((gint64)(b).unity)-(a).unity)))
+
 void route_find_nearest_point(void);
 void cancel_autoroute(gboolean temporary);
 void route_show_distance_to_last(void);
@@ -68,8 +72,8 @@ confirm = hildon_note_new_confirmation(GTK_WINDOW(_window), _("Really clear the
 
 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
        cancel_autoroute(FALSE);
-       MACRO_PATH_FREE(_route);
-       MACRO_PATH_INIT(_route);
+       route_deinit();
+       route_init();
        route_find_nearest_point();
        map_force_redraw();
 }
@@ -134,8 +138,8 @@ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle))) {
                gchar buffer[80];
                gchar strlat[32];
                gchar strlon[32];
-               g_ascii_formatd(strlat, 32, "%.06f", _gps.lat);
-               g_ascii_formatd(strlon, 32, "%.06f", _gps.lon);
+               g_ascii_formatd(strlat, 32, "%.06f", _gps->data.lat);
+               g_ascii_formatd(strlon, 32, "%.06f", _gps->data.lon);
                g_snprintf(buffer, sizeof(buffer), "%s, %s", strlat, strlon);
                gtk_entry_set_text(GTK_ENTRY(oti->txt_from), buffer);
        } else if (toggle == oti->rad_use_route) {
@@ -214,8 +218,8 @@ auto_route_dl_idle()
 {
 gchar latstr[32], lonstr[32], *latlonstr;
 
-g_ascii_dtostr(latstr, 32, _gps.lat);
-g_ascii_dtostr(lonstr, 32, _gps.lon);
+g_ascii_dtostr(latstr, 32, _gps->data.lat);
+g_ascii_dtostr(lonstr, 32, _gps->data.lon);
 latlonstr = g_strdup_printf("%s,%s", latstr, lonstr);
 _autoroute_data.src_str =
     g_strdup_printf(_route_dl_url, latlonstr, _autoroute_data.dest);
@@ -484,7 +488,7 @@ guint64 nearest_squared;
 Point pos = { unitx, unity, 0, NAN };
 
 wcurr = wnear = _route.whead;
-if (wcurr && wcurr != _route.wtail) {
+if (wcurr && wcurr->point && wcurr != _route.wtail) {
        nearest_squared = DISTANCE_SQUARED(pos, *(wcurr->point));
 
        while (wcurr++ != _route.wtail) {
@@ -496,13 +500,11 @@ if (wcurr && wcurr != _route.wtail) {
        }
 }
 
-if (wnear) {
+if (wnear && wnear->point) {
        /* Only use the waypoint if it is within a 6*_draw_width square drawn
         * around the position. This is consistent with select_poi(). */
-       if (abs(unitx - wnear->point->unitx) <
-           pixel2unit(3 * _draw_width)
-           && abs(unity - wnear->point->unity) <
-           pixel2unit(3 * _draw_width))
+       if (abs(unitx - wnear->point->unitx) < pixel2unit(3 * _draw_width) &&
+                       abs(unity - wnear->point->unity) < pixel2unit(3 * _draw_width))
                return wnear;
 }
 
@@ -533,14 +535,14 @@ if (_next_way) {
        /* First, set near_dist_squared with the new distance from
         * _near_point. */
        near = _near_point;
-       near_dist_squared = DISTANCE_SQUARED(_pos, *near);
+       near_dist_squared = DISTANCE_SQUARED(_gps->data, *near);
 
        /* Now, search _route for a closer point.  If quick is TRUE, then we'll
         * only search forward, only as long as we keep finding closer points.
         */
        for (curr = _near_point; curr++ != _route.tail;) {
                if (curr->unity) {
-                       guint dist_squared = DISTANCE_SQUARED(_pos, *curr);
+                       guint dist_squared = DISTANCE_SQUARED(_gps->data, *curr);
                        if (dist_squared <= near_dist_squared) {
                                near = curr;
                                near_dist_squared = dist_squared;
@@ -555,12 +557,12 @@ if (_next_way) {
 
        for (wnext = wcurr = _next_way; wcurr != _route.wtail; wcurr++) {
                if (wcurr->point < near || (wcurr->point == near && quick 
-                               && (_next_wpt && (DISTANCE_SQUARED(_pos, *near) > _next_way_dist_squared
-                               && DISTANCE_SQUARED(_pos, *_next_wpt) < _next_wpt_dist_squared))))
+                               && (_next_wpt && (DISTANCE_SQUARED(_gps->data, *near) > _next_way_dist_squared
+                               && DISTANCE_SQUARED(_gps->data, *_next_wpt) < _next_wpt_dist_squared))))
                    /* Okay, this else if expression warrants explanation.  If the
                     * nearest track point happens to be a waypoint, then we want to
                     * check if we have "passed" that waypoint.  To check this, we
-                    * test the distance from _pos to the waypoint and from _pos to
+                    * test the distance from _gps to the waypoint and from _gps to
                     * _next_wpt, and if the former is increasing and the latter is
                     * decreasing, then we have passed the waypoint, and thus we
                     * should skip it.  Note that if there is no _next_wpt, then
@@ -571,8 +573,8 @@ if (_next_way) {
        }
 
        if (wnext == _route.wtail && (wnext->point < near || (wnext->point == near && quick
-                                         && (_next_wpt && (DISTANCE_SQUARED (_pos, *near) > _next_way_dist_squared
-                                              && DISTANCE_SQUARED(_pos, *_next_wpt) < _next_wpt_dist_squared)))))
+                                         && (_next_wpt && (DISTANCE_SQUARED (_gps->data, *near) > _next_way_dist_squared
+                                              && DISTANCE_SQUARED(_gps->data, *_next_wpt) < _next_wpt_dist_squared)))))
        {
                _next_way = NULL;
                _next_wpt = NULL;
@@ -598,9 +600,9 @@ if (_next_way) {
                        }
                        ret = TRUE;
                }
-               _next_way_dist_squared = DISTANCE_SQUARED(_pos, *wnext->point);
+               _next_way_dist_squared = DISTANCE_SQUARED(_gps->data, *wnext->point);
                if (_next_wpt)
-                       _next_wpt_dist_squared = DISTANCE_SQUARED(_pos, *_next_wpt);
+                       _next_wpt_dist_squared = DISTANCE_SQUARED(_gps->data, *_next_wpt);
        }
 }
 return ret;
@@ -654,7 +656,7 @@ if (point == NULL && _next_way)
 if (point == NULL)
        return FALSE;
 
-unit2latlon(_pos.unitx, _pos.unity, lat1, lon1);
+unit2latlon(_gps->data.unitx, _gps->data.unity, lat1, lon1);
 if (point > _near_point) {
        Point *curr;
        /* Skip _near_point in case we have already passed it. */
@@ -731,50 +733,3 @@ if (_route.head != _route.tail) {
 
 /***/
 
-GtkListStore *
-route_generate_store(Path *route)
-{
-WayPoint *wcurr;
-GtkTreeIter iter;
-GtkListStore *store;
-gchar buffer1[80];
-gchar buffer2[32];
-gdouble lat1, lon1, lat2, lon2;
-gfloat sum=0.0;
-
-if (route->whead==route->wtail)
-       return NULL;
-
-wcurr=route->whead;
-
-if (!wcurr->point)
-       return NULL;
-
-unit2latlon(wcurr->point->unitx, wcurr->point->unity, lat1, lon1);
-
-store = gtk_list_store_new(ROUTE_NUM_COLUMNS,G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
-
-while (wcurr!=route->wtail) {
-       if (!wcurr)
-               break;
-
-       unit2latlon(wcurr->point->unitx, wcurr->point->unity, lat2, lon2);
-       g_snprintf(buffer1, sizeof(buffer1), "%.05f,%.05f", lat2, lon2);
-       sum += calculate_distance(lat1, lon1, lat2, lon2);
-       g_snprintf(buffer2, sizeof(buffer2), "%.02f %s", sum * UNITS_CONVERT[_units], UNITS_TEXT[_units]);
-
-       lat1=lat2;
-       lon1=lon2;
-
-       gtk_list_store_append(store, &iter);
-       gtk_list_store_set(store, &iter,
-        ROUTE_LATLON, buffer1,
-               ROUTE_DISTANCE, buffer2,
-               ROUTE_WAYPOINT, wcurr->desc,
-               -1);
-
-       wcurr++;
-}
-
-return store;
-}