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) { |