altoslib: Get new abstract mapping code compiling
authorKeith Packard <keithp@keithp.com>
Tue, 26 May 2015 03:10:37 +0000 (20:10 -0700)
committerKeith Packard <keithp@keithp.com>
Tue, 26 May 2015 03:10:37 +0000 (20:10 -0700)
Not useful yet, but at least it compiles now?

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosMap.java
altoslib/AltosMapInterface.java
altoslib/AltosMapLine.java
altoslib/AltosMapPath.java
altoslib/AltosMapPathPoint.java [new file with mode: 0644]
altoslib/AltosMapTile.java
altoslib/AltosMapTransform.java
altoslib/AltosRectangle.java [new file with mode: 0644]
altoslib/Makefile.am

index b42f9f851ef02beb2586008bbf020fcc662a4932..f8c3a36bcc534bf8b102659cd1e9fb90bf3a0c6a 100644 (file)
@@ -24,19 +24,19 @@ import java.util.concurrent.*;
 
 public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, AltosMapStoreListener {
 
-       static final int px_size = 512;
+       public static final int px_size = 512;
 
-       static final int maptype_hybrid = 0;
-       static final int maptype_roadmap = 1;
-       static final int maptype_satellite = 2;
-       static final int maptype_terrain = 3;
-       static final int maptype_default = maptype_hybrid;
+       public static final int maptype_hybrid = 0;
+       public static final int maptype_roadmap = 1;
+       public static final int maptype_satellite = 2;
+       public static final int maptype_terrain = 3;
+       public static final int maptype_default = maptype_hybrid;
 
-       static final int default_zoom = 15;
-       static final int min_zoom = 3;
-       static final int max_zoom = 21;
+       public static final int default_zoom = 15;
+       public static final int min_zoom = 3;
+       public static final int max_zoom = 21;
 
-       static final String[] maptype_names = {
+       public static final String[] maptype_names = {
                "hybrid",
                "roadmap",
                "satellite",
@@ -157,7 +157,7 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos
        }
 
        public void font_size_changed(int font_size) {
-               map_interface.line.font_size_changed(font_size);
+               map_interface.line().font_size_changed(font_size);
                for (AltosMapTile tile : tiles.values())
                        tile.font_size_changed(font_size);
                repaint();
@@ -211,7 +211,7 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos
                if (!gps.locked && gps.nsat < 4)
                        return;
 
-               AltosMapRectangle       damage = map_interface.path.add(gps.lat, gps.lon, state.state);
+               AltosMapRectangle       damage = map_interface.path().add(gps.lat, gps.lon, state.state);
 
                switch (state.state) {
                case AltosLib.ao_flight_boost:
@@ -279,8 +279,8 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos
                        lower_right = new AltosPointInt(centre.x + load_radius * AltosMap.px_size,
                                                                centre.y + load_radius * AltosMap.px_size);
                } else {
-                       upper_left = floor(transform.screen_point(new AltosPointDouble(0.0, 0.0)));
-                       lower_right = floor(transform.screen_point(new AltosPointDouble(width(), height())));
+                       upper_left = floor(transform.screen_point(new AltosPointInt(0, 0)));
+                       lower_right = floor(transform.screen_point(new AltosPointInt(width(), height())));
                }
                LinkedList<AltosPointInt> to_remove = new LinkedList<AltosPointInt>();
 
@@ -302,8 +302,8 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos
                                if (!tiles.containsKey(point)) {
                                        AltosLatLon     ul = transform.lat_lon(new AltosPointDouble(x, y));
                                        AltosLatLon     center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2));
-                                       AltosMapTile tile = new AltosMapTile(this, ul, center, zoom, maptype,
-                                                                            AltosMap.px_size);
+                                       AltosMapTile tile = map_interface.new_tile(this, ul, center, zoom, maptype,
+                                                                                  AltosMap.px_size);
                                        tiles.put(point, tile);
                                }
                        }
@@ -328,6 +328,22 @@ public class AltosMap implements AltosFlightDisplay, AltosMapTileListener, Altos
                return "Map";
        }
 
+       public void paint() {
+               make_tiles();
+
+               for (AltosMapTile tile : tiles.values())
+                       tile.paint(transform);
+
+               synchronized(marks) {
+                       for (AltosMapMark mark : marks)
+                               mark.paint(transform);
+               }
+
+               map_interface.path().paint(transform);
+
+               map_interface.line().paint(transform);
+       }
+
        /* AltosMapTileListener methods */
        public synchronized void notify_tile(AltosMapTile tile, int status) {
                for (AltosPointInt point : tiles.keySet()) {
index ea5454de99757642d308bfa04b7890902bd432eb..c548744ba338105922c3f52e20d46066dc805461 100644 (file)
@@ -20,16 +20,18 @@ package org.altusmetrum.altoslib_6;
 import java.io.*;
 import java.net.*;
 
-public abstract class AltosMapInterface {
-
-       public AltosMapPath             path;
-       public AltosMapLine             line;
+public interface AltosMapInterface {
+       public abstract AltosMapPath path();
+       public abstract AltosMapLine line();
 
        public abstract AltosImage load_image(File file) throws Exception;
 
        public abstract AltosMapMark new_mark(double lat, double lon, int state);
 
+       public abstract AltosMapTile new_tile(AltosMapTileListener listener, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size);
+
        public abstract int width();
+
        public abstract int height();
 
        public abstract void repaint();
@@ -39,9 +41,4 @@ public abstract class AltosMapInterface {
        public abstract void repaint(double x, double y, double w, double h);
 
        public abstract void set_units();
-
-       public AltosMapInterface (AltosMapPath path, AltosMapLine line) {
-               this.path = path;
-               this.line = line;
-       }
 }
index 83de47f9c2c460973293c129ded5d781fc0ba52e..77807b9403f9de3b4c0f48c9d2fb7315e0e0c5a4 100644 (file)
@@ -23,26 +23,28 @@ import java.util.*;
 import java.util.concurrent.*;
 
 public abstract class AltosMapLine implements AltosFontListener {
-       AltosLatLon     start, end;
+       public AltosLatLon      start, end;
 
        static public int stroke_width = 6;
 
        public abstract void font_size_changed(int font_size);
 
-       private AltosLatLon lat_lon(AltosPointDouble pt, AltosMapTransform t) {
+       public abstract void paint(AltosMapTransform t);
+
+       private AltosLatLon lat_lon(AltosPointInt pt, AltosMapTransform t) {
                return t.screen_lat_lon(pt);
        }
 
-       public void dragged(AltosPointDouble pt, AltosMapTransform t) {
+       public void dragged(AltosPointInt pt, AltosMapTransform t) {
                end = lat_lon(pt, t);
        }
 
-       public void pressed(AltosPointDouble pt, AltosMapTransform t) {
+       public void pressed(AltosPointInt pt, AltosMapTransform t) {
                start = lat_lon(pt, t);
                end = null;
        }
 
-       private String line_dist() {
+       public String line_dist() {
                String  format;
                AltosGreatCircle        g = new AltosGreatCircle(start.lat, start.lon,
                                                                 end.lat, end.lon);
@@ -78,6 +80,4 @@ public abstract class AltosMapLine implements AltosFontListener {
                }
                return String.format(format, distance);
        }
-
-       public abstract void paint(AltosMapTransform t);
 }
index 272a4316c78f212296de23ba1cb43ca82a58dd08..e7224b5778d232d8d12e625ca48e817d7fb15008 100644 (file)
@@ -22,34 +22,17 @@ import java.lang.Math;
 import java.util.*;
 import java.util.concurrent.*;
 
-class PathPoint {
-       AltosLatLon     lat_lon;
-       int             state;
-
-       public PathPoint(AltosLatLon lat_lon, int state) {
-               this.lat_lon = lat_lon;
-               this.state = state;
-       }
-
-       public boolean equals(PathPoint other) {
-               if (other == null)
-                       return false;
-
-               return lat_lon.equals(other.lat_lon) && state == other.state;
-       }
-}
-
 public abstract class AltosMapPath {
 
-       LinkedList<PathPoint>   points = new LinkedList<PathPoint>();
-       PathPoint               last_point = null;
+       public LinkedList<AltosMapPathPoint>    points = new LinkedList<AltosMapPathPoint>();
+       public AltosMapPathPoint                last_point = null;
 
        static public int stroke_width = 6;
 
        public abstract void paint(AltosMapTransform t);
 
        public AltosMapRectangle add(double lat, double lon, int state) {
-               PathPoint               point = new PathPoint(new AltosLatLon (lat, lon), state);
+               AltosMapPathPoint               point = new AltosMapPathPoint(new AltosLatLon (lat, lon), state);
                AltosMapRectangle       rect = null;
 
                if (!point.equals(last_point)) {
@@ -62,6 +45,6 @@ public abstract class AltosMapPath {
        }
 
        public void clear () {
-               points = new LinkedList<PathPoint>();
+               points = new LinkedList<AltosMapPathPoint>();
        }
 }
diff --git a/altoslib/AltosMapPathPoint.java b/altoslib/AltosMapPathPoint.java
new file mode 100644 (file)
index 0000000..757211a
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright © 2015 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altoslib_6;
+
+import java.io.*;
+import java.lang.Math;
+import java.util.*;
+import java.util.concurrent.*;
+
+public class AltosMapPathPoint {
+       public AltosLatLon      lat_lon;
+       public int              state;
+
+       public boolean equals(AltosMapPathPoint other) {
+               if (other == null)
+                       return false;
+
+               return lat_lon.equals(other.lat_lon) && state == other.state;
+       }
+
+       public AltosMapPathPoint(AltosLatLon lat_lon, int state) {
+               this.lat_lon = lat_lon;
+               this.state = state;
+       }
+}
+
index b5dee7a4ae660dcb211a76375b019b8928ad2ce6..923b7c6bf7127611c24d28dbb086ebf144eac29e 100644 (file)
@@ -20,7 +20,7 @@ package org.altusmetrum.altoslib_6;
 import java.io.*;
 import java.util.*;
 
-public class AltosMapTile implements AltosFontListener {
+public abstract class AltosMapTile implements AltosFontListener {
        AltosMapTileListener    listener;
        AltosLatLon     upper_left, center;
        int             px_size;
@@ -94,6 +94,8 @@ public class AltosMapTile implements AltosFontListener {
                store.remove_listener(listener);
        }
 
+       public abstract void paint(AltosMapTransform t);
+
        public AltosMapTile(AltosMapTileListener listener, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
                this.listener = listener;
                this.upper_left = upper_left;
index f5fc5ebe597531953d0a41413381198d558452a3..384c1744bc0131eebaef87007f4c9d9cf6d9636a 100644 (file)
@@ -39,10 +39,18 @@ public class AltosMapTransform {
                return new AltosLatLon(lat,lon);
        }
 
+       public AltosPointDouble screen_point(AltosPointInt screen) {
+               return new AltosPointDouble(screen.x + offset_x, screen.y + offset_y);
+       }
+
        public AltosPointDouble screen_point(AltosPointDouble screen) {
                return new AltosPointDouble(screen.x + offset_x, screen.y + offset_y);
        }
 
+       public AltosLatLon screen_lat_lon(AltosPointInt screen) {
+               return lat_lon(screen_point(screen));
+       }
+
        public AltosLatLon screen_lat_lon(AltosPointDouble screen) {
                return lat_lon(screen_point(screen));
        }
@@ -71,12 +79,12 @@ public class AltosMapTransform {
                                         (int) (point.y - offset_y + 0.5));
        }
 
-//     public Rectangle screen(AltosMapRectangle map_rect) {
-//             AltosPoint2D    ul = screen(map_rect.ul);
-//             AltosPoint2D    lr = screen(map_rect.lr);
-//
-//             return new Rectangle((int) ul.x, (int) ul.y, (int) (lr.x - ul.x), (int) (lr.y - ul.y));
-//     }
+       public AltosRectangle screen(AltosMapRectangle map_rect) {
+               AltosPointDouble        ul = screen(map_rect.ul);
+               AltosPointDouble        lr = screen(map_rect.lr);
+
+               return new AltosRectangle((int) ul.x, (int) ul.y, (int) (lr.x - ul.x), (int) (lr.y - ul.y));
+       }
 
        public AltosPointDouble screen(AltosLatLon lat_lon) {
                return screen(point(lat_lon));
diff --git a/altoslib/AltosRectangle.java b/altoslib/AltosRectangle.java
new file mode 100644 (file)
index 0000000..c55fd61
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright © 2015 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altoslib_6;
+
+public class AltosRectangle {
+       public int      x, y, width, height;
+
+       public AltosRectangle(int x, int y, int w, int h) {
+               this.x = x;
+               this.y = y;
+               this.width = w;
+               this.height = h;
+       }
+}
index 0ee7b935fed4a8103ad5e76dffc1122bf72efbe5..481c974f834e7f0ee9d2ed0d56fa88178b1e3cf8 100644 (file)
@@ -138,6 +138,7 @@ altoslib_JAVA = \
        AltosMapLine.java \
        AltosMapMark.java \
        AltosMapPath.java \
+       AltosMapPathPoint.java \
        AltosMapRectangle.java \
        AltosMapStore.java \
        AltosMapStoreListener.java \
@@ -147,6 +148,7 @@ altoslib_JAVA = \
        AltosMapZoomListener.java \
        AltosPointDouble.java \
        AltosPointInt.java \
+       AltosRectangle.java \
        AltosFlightDisplay.java \
        AltosFontListener.java \
        AltosVersion.java