altosui: Add speed and gps height to map display data
[fw/altos] / altoslib / AltosMap.java
index 286cf1bb696de34e2992728af6e0328810ecf45a..69142c375c3656bf37b1c75a3d80a260dd994b40 100644 (file)
@@ -16,7 +16,7 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altoslib_12;
+package org.altusmetrum.altoslib_13;
 
 import java.io.*;
 import java.lang.*;
@@ -211,17 +211,18 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
        }
 
        public boolean set_maptype(int maptype) {
+/*
                if (maptype != this.maptype) {
                        this.maptype = maptype;
                        tiles.clear();
                        repaint();
                        return true;
                }
+*/
                return false;
        }
 
-       public void show(AltosGPS gps, int state) {
-
+       public void show(AltosGPS gps, double time, int state, double gps_height) {
                /*
                 * If insufficient gps data, nothing to update
                 */
@@ -248,7 +249,7 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
                }
 
                if (path != null) {
-                       AltosMapRectangle       damage = path.add(gps.lat, gps.lon, state);
+                       AltosMapRectangle       damage = path.add(gps, time, state, gps_height);
 
                        if (damage != null)
                                repaint(damage, AltosMapPath.stroke_width);
@@ -260,7 +261,7 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
        }
 
        public void show(AltosState state, AltosListenerState listener_state) {
-               show(state.gps, state.state());
+               show(state.gps, state.time, state.state(), state.gps_height());
        }
 
        public void centre(AltosLatLon lat_lon) {
@@ -288,13 +289,19 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
                        centre(lat_lon);
        }
 
-       public void add_mark(double lat, double lon, int state) {
+       public AltosMapMark add_mark(double lat, double lon, int state) {
+               AltosMapMark mark;
                synchronized(marks) {
-                       AltosMapMark mark = map_interface.new_mark(lat, lon, state);
+                       mark = map_interface.new_mark(lat, lon, state);
                        if (mark != null)
                                marks.add(mark);
                }
                repaint();
+               return mark;
+       }
+
+       public void del_mark(AltosMapMark mark) {
+               marks.remove(mark);
        }
 
        public void clear_marks() {
@@ -339,7 +346,9 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
                                        AltosLatLon     ul = transform.lat_lon(point);
                                        AltosLatLon     center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2));
                                        AltosMapTile tile = map_interface.new_tile(cache, ul, center, zoom, maptype, px_size, scale);
-                                       debug("show state %s url %s\n", AltosMapTile.status_name(tile.store.status()), tile.store.url);
+                                       int status = tile.store.status();
+                                       if (status == AltosMapTile.fetching)
+                                               debug("Fetching %.6f %.6f %d\n", center.lat, center.lon, zoom);
                                        tile.add_listener(this);
                                        tiles.put(point, tile);
                                }
@@ -350,7 +359,7 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
        public void set_load_params(int new_zoom, int new_type, double lat, double lon, int radius, AltosMapTileListener listener) {
                if (AltosMap.min_zoom <= new_zoom && new_zoom <= AltosMap.max_zoom)
                        zoom = new_zoom;
-               maptype = new_type;
+/*             maptype = new_type; */
                load_centre = new AltosLatLon(lat, lon);
                load_radius = radius;
                load_listener = listener;
@@ -486,6 +495,14 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
                        drag_stop(x, y);
        }
 
+       public AltosMapPathPoint nearest(int x, int y) {
+               notice_user_input();
+               if (path == null)
+                       return null;
+               AltosLatLon     at = transform.screen_lat_lon(new  AltosPointInt(x, y));
+               return path.nearest(at);
+       }
+
        public AltosMap(AltosMapInterface map_interface, int scale) {
                this.map_interface = map_interface;
                this.scale = scale;