summaryrefslogtreecommitdiff
path: root/altoslib
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2015-05-25 20:10:37 -0700
committerKeith Packard <keithp@keithp.com>2015-05-25 20:10:37 -0700
commit00aca369c4070901e0400f291d5f269b5fb8015c (patch)
treef75b418df8d7cc6e8cbd47133f7fa1fce804035a /altoslib
parent6ca2c42061b3c0160bf0137c9cd65989c522b826 (diff)
altoslib: Get new abstract mapping code compiling
Not useful yet, but at least it compiles now? Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib')
-rw-r--r--altoslib/AltosMap.java48
-rw-r--r--altoslib/AltosMapInterface.java15
-rw-r--r--altoslib/AltosMapLine.java14
-rw-r--r--altoslib/AltosMapPath.java25
-rw-r--r--altoslib/AltosMapPathPoint.java41
-rw-r--r--altoslib/AltosMapTile.java4
-rw-r--r--altoslib/AltosMapTransform.java20
-rw-r--r--altoslib/AltosRectangle.java29
-rw-r--r--altoslib/Makefile.am2
9 files changed, 138 insertions, 60 deletions
diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java
index b42f9f85..f8c3a36b 100644
--- a/altoslib/AltosMap.java
+++ b/altoslib/AltosMap.java
@@ -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()) {
diff --git a/altoslib/AltosMapInterface.java b/altoslib/AltosMapInterface.java
index ea5454de..c548744b 100644
--- a/altoslib/AltosMapInterface.java
+++ b/altoslib/AltosMapInterface.java
@@ -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;
- }
}
diff --git a/altoslib/AltosMapLine.java b/altoslib/AltosMapLine.java
index 83de47f9..77807b94 100644
--- a/altoslib/AltosMapLine.java
+++ b/altoslib/AltosMapLine.java
@@ -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);
}
diff --git a/altoslib/AltosMapPath.java b/altoslib/AltosMapPath.java
index 272a4316..e7224b57 100644
--- a/altoslib/AltosMapPath.java
+++ b/altoslib/AltosMapPath.java
@@ -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
index 00000000..757211af
--- /dev/null
+++ b/altoslib/AltosMapPathPoint.java
@@ -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;
+ }
+}
+
diff --git a/altoslib/AltosMapTile.java b/altoslib/AltosMapTile.java
index b5dee7a4..923b7c6b 100644
--- a/altoslib/AltosMapTile.java
+++ b/altoslib/AltosMapTile.java
@@ -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;
diff --git a/altoslib/AltosMapTransform.java b/altoslib/AltosMapTransform.java
index f5fc5ebe..384c1744 100644
--- a/altoslib/AltosMapTransform.java
+++ b/altoslib/AltosMapTransform.java
@@ -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
index 00000000..c55fd613
--- /dev/null
+++ b/altoslib/AltosRectangle.java
@@ -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;
+ }
+}
diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am
index 0ee7b935..481c974f 100644
--- a/altoslib/Makefile.am
+++ b/altoslib/Makefile.am
@@ -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