From 3af81a45be69b4693396de4a5e2c386be566b933 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 4 Dec 2020 14:58:15 -0800 Subject: [PATCH] altoslib: Add all known launch sites and names to map preload This shows all of the known launch sites and their names in the map preload screen. Signed-off-by: Keith Packard --- .../AltosDroid/AltosMapOffline.java | 8 +++++ altoslib/AltosMap.java | 10 +++++-- altoslib/AltosMapInterface.java | 2 ++ altoslib/AltosMapMark.java | 12 +++++++- altosuilib/AltosUIMap.java | 30 +++++++++++++++++++ altosuilib/AltosUIMapPreload.java | 30 +++++++++++++++++-- 6 files changed, 86 insertions(+), 6 deletions(-) diff --git a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOffline.java b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOffline.java index cca958c5..60c209e1 100644 --- a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOffline.java +++ b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOffline.java @@ -223,12 +223,20 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal MapMark(double lat, double lon, int state) { super(lat, lon, state); } + + MapMark(double lat, double lon, int state, String label) { + super(lat, lon, state, label); + } } public AltosMapMark new_mark(double lat, double lon, int state) { return new MapMark(lat, lon, state); } + public AltosMapMark new_mark(double lat, double lon, int state, String label) { + return new MapMark(lat, lon, state, label); + } + public int width() { return getWidth(); } diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java index 519ecfdf..3877c7dc 100644 --- a/altoslib/AltosMap.java +++ b/altoslib/AltosMap.java @@ -82,7 +82,7 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { static final long auto_scroll_delay = 20 * 1000; public AltosMapTransform transform; - AltosLatLon centre; + public AltosLatLon centre; public void reset() { // nothing @@ -289,10 +289,10 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { centre(lat_lon); } - public AltosMapMark add_mark(double lat, double lon, int state) { + public AltosMapMark add_mark(double lat, double lon, int state, String label) { AltosMapMark mark; synchronized(marks) { - mark = map_interface.new_mark(lat, lon, state); + mark = map_interface.new_mark(lat, lon, state, label); if (mark != null) marks.add(mark); } @@ -300,6 +300,10 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { return mark; } + public AltosMapMark add_mark(double lat, double lon, int state) { + return add_mark(lat, lon, state, null); + } + public void del_mark(AltosMapMark mark) { marks.remove(mark); } diff --git a/altoslib/AltosMapInterface.java b/altoslib/AltosMapInterface.java index 0ce49d12..560f85da 100644 --- a/altoslib/AltosMapInterface.java +++ b/altoslib/AltosMapInterface.java @@ -30,6 +30,8 @@ public interface AltosMapInterface { public abstract AltosMapMark new_mark(double lat, double lon, int state); + public abstract AltosMapMark new_mark(double lat, double lon, int state, String label); + public abstract AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale); public abstract int width(); diff --git a/altoslib/AltosMapMark.java b/altoslib/AltosMapMark.java index dcb75430..0676f54f 100644 --- a/altoslib/AltosMapMark.java +++ b/altoslib/AltosMapMark.java @@ -27,13 +27,23 @@ public abstract class AltosMapMark { public AltosLatLon lat_lon; public int state; + public String label; static public int stroke_width = 6; public abstract void paint(AltosMapTransform t); - public AltosMapMark (double lat, double lon, int state) { + public AltosMapMark (double lat, double lon, int state, String label) { lat_lon = new AltosLatLon(lat, lon); this.state = state; + this.label = label; + } + + public AltosMapMark (double lat, double lon, int state) { + this(lat, lon, state, null); + } + + public AltosMapMark () { + this(0, 0, 0); } } diff --git a/altosuilib/AltosUIMap.java b/altosuilib/AltosUIMap.java index 5f1b7ae6..58371f05 100644 --- a/altosuilib/AltosUIMap.java +++ b/altosuilib/AltosUIMap.java @@ -62,6 +62,28 @@ public class AltosUIMap extends JComponent implements AltosFlightDisplay, AltosM g.drawOval((int)pt.x-5, (int)pt.y-5, 10, 10); g.drawOval((int)pt.x-20, (int)pt.y-20, 40, 40); g.drawOval((int)pt.x-35, (int)pt.y-35, 70, 70); + + if (label != null) { + Rectangle2D bounds; + bounds = line_font.getStringBounds(label, g.getFontRenderContext()); + float x = (float) pt.x; + float y = (float) pt.y + (float) bounds.getHeight() / 2.0f; + + g.setFont(line_font); + g.setColor(Color.WHITE); + for (int dy = -2; dy <= 2; dy += 2) + for (int dx = -2; dx <= 2; dx += 2) + g.drawString(label, x + dx, y + dy); + if (0 <= state && state < AltosUIMap.stateColors.length) + g.setColor(AltosUIMap.stateColors[state]); + else + g.setColor(AltosUIMap.stateColors[AltosLib.ao_flight_invalid]); + g.drawString(label, x, y); + } + } + + MapMark(double lat, double lon, int state, String label) { + super(lat, lon, state, label); } MapMark(double lat, double lon, int state) { @@ -403,6 +425,10 @@ public class AltosUIMap extends JComponent implements AltosFlightDisplay, AltosM return new MapMark(lat, lon, state); } + public AltosMapMark new_mark(double lat, double lon, int state, String label) { + return new MapMark(lat, lon, state, label); + } + public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) { return new MapTile(cache, upper_left, center, zoom, maptype, px_size, scale); } @@ -476,6 +502,10 @@ public class AltosUIMap extends JComponent implements AltosFlightDisplay, AltosM map.add_mark(lat, lon, status); } + public void add_mark(double lat, double lon, int status, String label) { + map.add_mark(lat, lon, status, label); + } + public void clear_marks() { map.clear_marks(); } diff --git a/altosuilib/AltosUIMapPreload.java b/altosuilib/AltosUIMapPreload.java index 9ba27355..1fec169c 100644 --- a/altosuilib/AltosUIMapPreload.java +++ b/altosuilib/AltosUIMapPreload.java @@ -139,6 +139,7 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I JProgressBar pbar; JLabel site_list_label; + java.util.List sites; JComboBox site_list; JToggleButton load_button; @@ -227,10 +228,33 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I return 1 << AltosMap.maptype_hybrid; } + void add_mark(double lat, double lon, int state, String label) { + map.add_mark(lat, lon, state, label); + if (lon <= 0) + map.add_mark(lat, lon + 360, state, label); + if (lon >= 0) + map.add_mark(lat, lon - 360, state, label); + } + + void reset_marks() { + map.clear_marks(); + AltosLatLon centre = null; + String centre_name = null; + if (map != null && map.map != null) + centre = map.map.centre; + for (AltosLaunchSite site : sites) { + if (centre != null && centre.lat == site.latitude && centre.lon == site.longitude) + centre_name = site.name; + else + add_mark(site.latitude, site.longitude, AltosLib.ao_flight_main, site.name); + } + if (centre != null) + add_mark(centre.lat, centre.lon, AltosLib.ao_flight_boost, centre_name); + } + void center_map(double latitude, double longitude) { map.map.centre(new AltosLatLon(latitude, longitude)); - map.clear_marks(); - map.add_mark(latitude, longitude, AltosLib.ao_flight_boost); + reset_marks(); } void center_map() { @@ -294,6 +318,7 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I } public void notify_launch_sites(final java.util.List sites) { + this.sites = sites; SwingUtilities.invokeLater(new Runnable() { public void run() { int i = 1; @@ -301,6 +326,7 @@ public class AltosUIMapPreload extends AltosUIFrame implements ActionListener, I site_list.insertItemAt(site, i); i++; } + reset_marks(); } }); } -- 2.30.2