X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao-tools%2Faltosui%2FAltosSiteMap.java;h=0375128e1bfec7b014dcca63fea1b0f0395ede93;hp=25450e7eac02fb65ec4408a15e870ac3c50d9dc8;hb=a08b2a6363c194195db92029743f6612676373ce;hpb=c3994dd82d489289ebc99ff9c5fa88f560c023ac diff --git a/ao-tools/altosui/AltosSiteMap.java b/ao-tools/altosui/AltosSiteMap.java index 25450e7e..0375128e 100644 --- a/ao-tools/altosui/AltosSiteMap.java +++ b/ao-tools/altosui/AltosSiteMap.java @@ -106,15 +106,10 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { return latlng(pt, scale_x, scale_y); } - Vector mapTiles = new Vector(); + HashMap mapTiles = new HashMap(); Point2D.Double centre; - private Point tileOffset(AltosSiteMapTile tile) { - GridBagConstraints c = layout.getConstraints(tile); - return new Point(c.gridx - 100, c.gridy - 100); - } - private Point2D.Double tileCoordOffset(AltosSiteMapTile tile) { - Point p = tileOffset(tile); + private Point2D.Double tileCoordOffset(Point p) { return new Point2D.Double(centre.x - p.x*px_size, centre.y - p.y * px_size); } @@ -194,10 +189,10 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { } } - private void initMap(AltosSiteMapTile tile) { - Point2D.Double offset = tileCoordOffset(tile); + private void initMap(AltosSiteMapTile tile, Point offset) { + Point2D.Double coord = tileCoordOffset(offset); - LatLng map_latlng = latlng(px_size/2-offset.x, px_size/2-offset.y); + LatLng map_latlng = latlng(px_size/2-coord.x, px_size/2-coord.y); File pngfile = MapFile(map_latlng.lat, map_latlng.lng); String pngurl = MapURL(map_latlng.lat, map_latlng.lng); @@ -207,8 +202,8 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { private void initMaps(double lat, double lng) { centre = getBaseLocation(lat, lng); - for (AltosSiteMapTile tile : mapTiles) { - initMap(tile); + for (Point k : mapTiles.keySet()) { + initMap(mapTiles.get(k), k); } } @@ -229,13 +224,13 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { boolean initialised = false; Point2D.Double last_pt = null; int last_state = -1; - public void show(AltosState state, int crc_errors) { + public void show(final AltosState state, final int crc_errors) { // if insufficient gps data, nothing to update if (state.gps == null) return; + if (state.pad_lat == 0 && state.pad_lon == 0) + return; if (!state.gps.locked) { - if (state.pad_lat == 0 && state.pad_lon == 0) - return; if (state.gps.nsat < 4) return; } @@ -245,7 +240,7 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { initialised = true; } - Point2D.Double pt = pt(state.gps.lat, state.gps.lon); + final Point2D.Double pt = pt(state.gps.lat, state.gps.lon); if (last_pt == pt && last_state == state.state) return; @@ -253,29 +248,40 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { last_pt = pt; } boolean in_any = false; - for (AltosSiteMapTile tile : mapTiles) { + for (Point offset : mapTiles.keySet()) { + AltosSiteMapTile tile = mapTiles.get(offset); Point2D.Double ref, lref; - ref = translatePoint(pt, tileCoordOffset(tile)); - lref = translatePoint(last_pt, tileCoordOffset(tile)); + ref = translatePoint(pt, tileCoordOffset(offset)); + lref = translatePoint(last_pt, tileCoordOffset(offset)); tile.show(state, crc_errors, lref, ref); if (0 <= ref.x && ref.x < px_size) if (0 <= ref.y && ref.y < px_size) in_any = true; } if (!in_any) { - AltosSiteMapTile tile = addTileAt(tileOffset(pt)); + final AltosSiteMapTile tile = new AltosSiteMapTile(px_size); + final Point offset = tileOffset(pt); + mapTiles.put(offset, tile); + Point2D.Double ref, lref; - ref = translatePoint(pt, tileCoordOffset(tile)); - lref = translatePoint(last_pt, tileCoordOffset(tile)); - initMap(tile); - setViewportView(comp); + ref = translatePoint(pt, tileCoordOffset(offset)); + lref = translatePoint(last_pt, tileCoordOffset(offset)); tile.show(state, crc_errors, lref, ref); + + initMap(tile, offset); + + SwingUtilities.invokeLater( new Runnable() { + public void run() { + addTileAt(tile, offset); + setViewportView(comp); + } + } ); } last_pt = pt; last_state = state.state; } - private AltosSiteMapTile addTileAt(Point offset) { + private void addTileAt(AltosSiteMapTile tile, Point offset) { GridBagConstraints c = new GridBagConstraints(); c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.BOTH; @@ -283,14 +289,10 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { // put some space between the map tiles, debugging only // c.insets = new Insets(5, 5, 5, 5); // - AltosSiteMapTile t = new AltosSiteMapTile(px_size); - mapTiles.add(t); c.gridx = offset.x + 100; c.gridy = offset.y + 100; - layout.setConstraints(t, c); - comp.add(t); - - return t; + layout.setConstraints(tile, c); + comp.add(tile); } private AltosSiteMap(boolean knowWhatYouAreDoing) { @@ -317,7 +319,10 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay { for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { - addTileAt(new Point(x, y)); + AltosSiteMapTile t = new AltosSiteMapTile(px_size); + Point offset = new Point(x, y); + mapTiles.put(offset, t); + addTileAt(t, offset); } } setViewportView(comp);