summaryrefslogtreecommitdiff
path: root/altosuilib/AltosSiteMap.java
diff options
context:
space:
mode:
Diffstat (limited to 'altosuilib/AltosSiteMap.java')
-rw-r--r--altosuilib/AltosSiteMap.java64
1 files changed, 45 insertions, 19 deletions
diff --git a/altosuilib/AltosSiteMap.java b/altosuilib/AltosSiteMap.java
index f22d9531..ee9b8c05 100644
--- a/altosuilib/AltosSiteMap.java
+++ b/altosuilib/AltosSiteMap.java
@@ -50,7 +50,7 @@ class MapPoint {
}
}
-public class AltosSiteMap extends JComponent implements AltosFlightDisplay, MouseMotionListener, MouseListener {
+public class AltosSiteMap extends JComponent implements AltosFlightDisplay, MouseMotionListener, MouseListener, HierarchyBoundsListener {
// preferred vertical step in a tile in naut. miles
// will actually choose a step size between x and 2x, where this
// is 1.5x
@@ -213,11 +213,15 @@ public class AltosSiteMap extends JComponent implements AltosFlightDisplay, Mous
tile.set_status(AltosSiteMapCache.loading);
int status = AltosSiteMapCache.fetch_map(pngfile, pngurl);
if (status == AltosSiteMapCache.success) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- tile.load_map(pngfile);
- }
- });
+ if (SwingUtilities.isEventDispatchThread())
+ tile.load_map(pngfile);
+ else {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ tile.load_map(pngfile);
+ }
+ });
+ }
} else {
tile.set_status(status);
System.out.printf("# Failed to fetch file %s (status %d)\n", pngfile, status);
@@ -298,7 +302,11 @@ public class AltosSiteMap extends JComponent implements AltosFlightDisplay, Mous
Thread thread = new Thread() {
public void run() {
init_map(offset, load_mode_cached|load_mode_uncached);
- finishTileLater(tile, offset);
+ SwingUtilities.invokeLater( new Runnable() {
+ public void run() {
+ addTileAt(tile, offset);
+ }
+ } );
}
};
thread.start();
@@ -315,8 +323,6 @@ public class AltosSiteMap extends JComponent implements AltosFlightDisplay, Mous
}
public void setBaseLocation(double lat, double lng) {
- for (AltosSiteMapTile tile : mapTiles.values())
- tile.clearMap();
this.lat = lat;
this.lon = lng;
base_location_set = true;
@@ -328,6 +334,8 @@ public class AltosSiteMap extends JComponent implements AltosFlightDisplay, Mous
private void initMaps(double lat, double lng) {
setBaseLocation(lat, lng);
+ for (AltosSiteMapTile tile : mapTiles.values())
+ tile.clearMap();
Thread thread = new Thread() {
public void run() {
for (Point k : mapTiles.keySet())
@@ -379,7 +387,7 @@ public class AltosSiteMap extends JComponent implements AltosFlightDisplay, Mous
JLabel zoom_label;
public void set_zoom_label() {
- zoom_label.setText(String.format("- %d -", zoom - default_zoom));
+ zoom_label.setText(String.format("Zoom %d", zoom - default_zoom));
}
public void set_zoom(int zoom) {
@@ -524,15 +532,6 @@ public class AltosSiteMap extends JComponent implements AltosFlightDisplay, Mous
mapTiles.put(offset, tile);
return tile;
}
- private void finishTileLater(final AltosSiteMapTile tile,
- final Point offset)
- {
- SwingUtilities.invokeLater( new Runnable() {
- public void run() {
- addTileAt(tile, offset);
- }
- } );
- }
private void ensureTilesAround(Point base_offset) {
for (int x = -radius; x <= radius; x++) {
@@ -629,6 +628,14 @@ public class AltosSiteMap extends JComponent implements AltosFlightDisplay, Mous
}
}
+ static void debug_component(Component who, String where) {
+// Rectangle r = who.getBounds();
+// int x = r.x / px_size;
+// int y = r.y / px_size;
+//
+// System.out.printf ("%3d, %3d: %s\n", x, y, where);
+ }
+
LatLng latlng(MouseEvent e) {
if (!base_location_set)
return null;
@@ -672,6 +679,24 @@ public class AltosSiteMap extends JComponent implements AltosFlightDisplay, Mous
public void mouseReleased(MouseEvent e) {
}
+ public void set_cache_size() {
+ Rectangle r = comp.getVisibleRect();
+
+ int width_tiles = (r.width + 2*px_size) / px_size;
+ int height_tiles = (r.height + 2*px_size) / px_size;
+ int tiles = width_tiles * height_tiles;
+ AltosSiteMapCache.set_cache_size(tiles);
+ }
+
+ /* HierarchyBoundsListener methods */
+ public void ancestorMoved(HierarchyEvent e) {
+ set_cache_size();
+ }
+
+ public void ancestorResized(HierarchyEvent e) {
+ set_cache_size();
+ }
+
JScrollPane pane = new JScrollPane();
public AltosSiteMap(int in_radius) {
@@ -681,6 +706,7 @@ public class AltosSiteMap extends JComponent implements AltosFlightDisplay, Mous
comp.addMouseMotionListener(this);
comp.addMouseListener(this);
+ comp.addHierarchyBoundsListener(this);
GrabNDrag scroller = new GrabNDrag(comp);