diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java
index 70d7749..adf9d46 100644
a
|
b
|
import org.openstreetmap.josm.gui.GettingStarted;
|
60 | 60 | import org.openstreetmap.josm.gui.MainMenu; |
61 | 61 | import org.openstreetmap.josm.gui.MapFrame; |
62 | 62 | import org.openstreetmap.josm.gui.MapView; |
| 63 | import org.openstreetmap.josm.gui.NavigatableComponent; |
63 | 64 | import org.openstreetmap.josm.gui.dialogs.LayerListDialog; |
64 | 65 | import org.openstreetmap.josm.gui.io.SaveLayersDialog; |
65 | 66 | import org.openstreetmap.josm.gui.layer.Layer; |
… |
… |
abstract public class Main {
|
219 | 220 | */ |
220 | 221 | public final void removeLayer(final Layer layer) { |
221 | 222 | if (map != null) { |
| 223 | if (layer instanceof NavigatableComponent.ZoomChangeListener) { |
| 224 | MapView.removeZoomChangeListener((NavigatableComponent.ZoomChangeListener) layer); |
| 225 | } |
222 | 226 | map.mapView.removeLayer(layer); |
223 | 227 | if (map != null && map.mapView.getAllLayers().isEmpty()) { |
224 | 228 | setMapFrame(null); |
diff --git a/src/org/openstreetmap/josm/gui/layer/WMSLayer.java b/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
index 3b7175b..97e183e 100644
a
|
b
|
import java.io.FileOutputStream;
|
19 | 19 | import java.io.ObjectInputStream; |
20 | 20 | import java.io.ObjectOutputStream; |
21 | 21 | import java.util.ArrayList; |
| 22 | import java.util.Collection; |
22 | 23 | import java.util.Collections; |
23 | 24 | import java.util.HashSet; |
24 | 25 | import java.util.Iterator; |
… |
… |
import org.openstreetmap.josm.data.preferences.IntegerProperty;
|
59 | 60 | import org.openstreetmap.josm.data.projection.Projection; |
60 | 61 | import org.openstreetmap.josm.gui.MapView; |
61 | 62 | import org.openstreetmap.josm.gui.MapView.LayerChangeListener; |
| 63 | import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener; |
62 | 64 | import org.openstreetmap.josm.gui.dialogs.LayerListDialog; |
63 | 65 | import org.openstreetmap.josm.gui.dialogs.LayerListPopup; |
64 | 66 | import org.openstreetmap.josm.gui.progress.ProgressMonitor; |
… |
… |
import org.openstreetmap.josm.io.imagery.HTMLGrabber;
|
67 | 69 | import org.openstreetmap.josm.io.imagery.WMSGrabber; |
68 | 70 | import org.openstreetmap.josm.io.imagery.WMSRequest; |
69 | 71 | import org.openstreetmap.josm.tools.ImageProvider; |
| 72 | import org.openstreetmap.josm.tools.Utils; |
70 | 73 | |
71 | 74 | |
72 | 75 | /** |
73 | 76 | * This is a layer that grabs the current screen from an WMS server. The data |
74 | 77 | * fetched this way is tiled and managed to the disc to reduce server load. |
75 | 78 | */ |
76 | | public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceChangedListener { |
| 79 | public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceChangedListener, ZoomChangeListener { |
77 | 80 | |
78 | 81 | public static class PrecacheTask { |
79 | 82 | private final ProgressMonitor progressMonitor; |
… |
… |
public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC
|
107 | 110 | public static final IntegerProperty PROP_OVERLAP_NORTH = new IntegerProperty("imagery.wms.overlapNorth", 4); |
108 | 111 | |
109 | 112 | public int messageNum = 5; //limit for messages per layer |
110 | | protected String resolution; |
| 113 | protected double resolution; |
| 114 | protected String resolutionText; |
111 | 115 | protected int imageSize = 500; |
112 | 116 | protected int dax = 10; |
113 | 117 | protected int day = 10; |
… |
… |
public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC
|
176 | 180 | if(this.info.getPixelPerDegree() == 0.0) { |
177 | 181 | this.info.setPixelPerDegree(getPPD()); |
178 | 182 | } |
179 | | resolution = mv.getDist100PixelText(); |
| 183 | resolution = mv.getDist100Pixel(); |
| 184 | resolutionText = mv.getDist100PixelText(); |
180 | 185 | |
181 | 186 | attribution.initialize(this.info); |
182 | 187 | |
… |
… |
public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC
|
184 | 189 | startGrabberThreads(); |
185 | 190 | } |
186 | 191 | |
187 | | |
| 192 | MapView.addZoomChangeListener(this); |
188 | 193 | Main.pref.addPreferenceChangeListener(this); |
189 | 194 | |
190 | 195 | SwingUtilities.invokeLater(new Runnable() { |
… |
… |
public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC
|
293 | 298 | |
294 | 299 | @Override public String getToolTipText() { |
295 | 300 | if(autoDownloadEnabled) |
296 | | return tr("WMS layer ({0}), automatically downloading in zoom {1}", getName(), resolution); |
| 301 | return tr("WMS layer ({0}), automatically downloading in zoom {1}", getName(), resolutionText); |
297 | 302 | else |
298 | | return tr("WMS layer ({0}), downloading in zoom {1}", getName(), resolution); |
| 303 | return tr("WMS layer ({0}), downloading in zoom {1}", getName(), resolutionText); |
299 | 304 | } |
300 | 305 | |
301 | 306 | private int modulo (int a, int b) { |
… |
… |
public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC
|
667 | 672 | } |
668 | 673 | } |
669 | 674 | |
670 | | public static class ChangeResolutionAction extends AbstractAction implements LayerAction { |
671 | | public ChangeResolutionAction() { |
672 | | super(tr("Change resolution")); |
| 675 | @Override |
| 676 | public void zoomChanged() { |
| 677 | for (WMSLayer l : Utils.filteredCollection(LayerListDialog.getInstance().getModel().getLayers(), WMSLayer.class)) { |
| 678 | double q = l.mv.getDist100Pixel() / l.resolution; |
| 679 | if (q > 3 || q < 1. / 3) { |
| 680 | changeResolution(l); |
| 681 | } |
673 | 682 | } |
| 683 | } |
674 | 684 | |
675 | | private void changeResolution(WMSLayer layer) { |
676 | | layer.resolution = layer.mv.getDist100PixelText(); |
677 | | layer.info.setPixelPerDegree(layer.getPPD()); |
678 | | layer.settingsChanged = true; |
679 | | for(int x = 0; x<layer.dax; ++x) { |
680 | | for(int y = 0; y<layer.day; ++y) { |
681 | | layer.images[x][y].changePosition(-1, -1); |
682 | | } |
| 685 | private static void changeResolution(WMSLayer layer) { |
| 686 | layer.resolution = layer.mv.getDist100Pixel(); |
| 687 | layer.resolutionText = layer.mv.getDist100PixelText(); |
| 688 | layer.info.setPixelPerDegree(layer.getPPD()); |
| 689 | layer.settingsChanged = true; |
| 690 | for (int x = 0; x < layer.dax; ++x) { |
| 691 | for (int y = 0; y < layer.day; ++y) { |
| 692 | layer.images[x][y].changePosition(-1, -1); |
683 | 693 | } |
684 | 694 | } |
| 695 | } |
| 696 | |
| 697 | public static class ChangeResolutionAction extends AbstractAction implements LayerAction { |
| 698 | public ChangeResolutionAction() { |
| 699 | super(tr("Change resolution")); |
| 700 | } |
685 | 701 | |
686 | 702 | @Override |
687 | 703 | public void actionPerformed(ActionEvent ev) { |