altoslib: Pass all map loader params to set_load_params
[fw/altos] / altoslib / AltosMap.java
index 762054a33f158fcefb0698a00091359b97c6e5bd..85f95eef9cfdf3af49cae55224b6d1b165dd9ae5 100644 (file)
@@ -150,8 +150,10 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
        }
 
        public void set_transform() {
-               transform = new AltosMapTransform(width(), height(), zoom, centre);
-               repaint();
+               if (centre != null) {
+                       transform = new AltosMapTransform(width(), height(), zoom, centre);
+                       repaint();
+               }
        }
 
        private void set_zoom_label() {
@@ -246,7 +248,9 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
 
        public void add_mark(double lat, double lon, int state) {
                synchronized(marks) {
-                       marks.add(map_interface.new_mark(lat, lon, state));
+                       AltosMapMark mark = map_interface.new_mark(lat, lon, state);
+                       if (mark != null)
+                               marks.add(mark);
                }
                repaint();
        }
@@ -285,6 +289,7 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
                        tiles.remove(point);
 
                cache.set_cache_size((width() / AltosMap.px_size + 2) * (height() / AltosMap.px_size + 2));
+
                for (int y = (int) upper_left.y; y <= lower_right.y; y += AltosMap.px_size) {
                        for (int x = (int) upper_left.x; x <= lower_right.x; x += AltosMap.px_size) {
                                AltosPointInt point = new AltosPointInt(x, y);
@@ -300,11 +305,15 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
                }
        }
 
-       public void set_load_params(double lat, double lon, int radius, AltosMapTileListener listener) {
+       public void set_load_params(int new_zoom, int new_type, double lat, double lon, int radius, AltosMapTileListener listener) {
+               if (AltosMap.min_zoom <= new_zoom && new_zoom <= AltosMap.max_zoom)
+                       zoom = new_zoom;
+               maptype = new_type;
                load_centre = new AltosLatLon(lat, lon);
                load_radius = radius;
                load_listener = listener;
                centre(lat, lon);
+               tiles.clear();
                make_tiles();
                for (AltosMapTile tile : tiles.values()) {
                        tile.add_store_listener(this);
@@ -319,7 +328,8 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
        }
 
        public void paint() {
-               make_tiles();
+               if (centre != null)
+                       make_tiles();
 
                for (AltosMapTile tile : tiles.values())
                        tile.paint(transform);
@@ -411,6 +421,5 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
                line = map_interface.new_line();
                path = map_interface.new_path();
                set_zoom_label();
-               centre(0, 0);
        }
 }