Ticket #7563: 7563.patch

File 7563.patch, 6.4 KB (added by simon04, 13 years ago)
  • src/org/openstreetmap/josm/Main.java

    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;  
    6060import org.openstreetmap.josm.gui.MainMenu;
    6161import org.openstreetmap.josm.gui.MapFrame;
    6262import org.openstreetmap.josm.gui.MapView;
     63import org.openstreetmap.josm.gui.NavigatableComponent;
    6364import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
    6465import org.openstreetmap.josm.gui.io.SaveLayersDialog;
    6566import org.openstreetmap.josm.gui.layer.Layer;
    abstract public class Main {  
    219220     */
    220221    public final void removeLayer(final Layer layer) {
    221222        if (map != null) {
     223            if (layer instanceof NavigatableComponent.ZoomChangeListener) {
     224                MapView.removeZoomChangeListener((NavigatableComponent.ZoomChangeListener) layer);
     225            }
    222226            map.mapView.removeLayer(layer);
    223227            if (map != null && map.mapView.getAllLayers().isEmpty()) {
    224228                setMapFrame(null);
  • src/org/openstreetmap/josm/gui/layer/WMSLayer.java

    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;  
    1919import java.io.ObjectInputStream;
    2020import java.io.ObjectOutputStream;
    2121import java.util.ArrayList;
     22import java.util.Collection;
    2223import java.util.Collections;
    2324import java.util.HashSet;
    2425import java.util.Iterator;
    import org.openstreetmap.josm.data.preferences.IntegerProperty;  
    5960import org.openstreetmap.josm.data.projection.Projection;
    6061import org.openstreetmap.josm.gui.MapView;
    6162import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
     63import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener;
    6264import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
    6365import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
    6466import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    import org.openstreetmap.josm.io.imagery.HTMLGrabber;  
    6769import org.openstreetmap.josm.io.imagery.WMSGrabber;
    6870import org.openstreetmap.josm.io.imagery.WMSRequest;
    6971import org.openstreetmap.josm.tools.ImageProvider;
     72import org.openstreetmap.josm.tools.Utils;
    7073
    7174
    7275/**
    7376 * This is a layer that grabs the current screen from an WMS server. The data
    7477 * fetched this way is tiled and managed to the disc to reduce server load.
    7578 */
    76 public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceChangedListener {
     79public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceChangedListener, ZoomChangeListener {
    7780
    7881    public static class PrecacheTask {
    7982        private final ProgressMonitor progressMonitor;
    public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC  
    107110    public static final IntegerProperty PROP_OVERLAP_NORTH = new IntegerProperty("imagery.wms.overlapNorth", 4);
    108111
    109112    public int messageNum = 5; //limit for messages per layer
    110     protected String resolution;
     113    protected double resolution;
     114    protected String resolutionText;
    111115    protected int imageSize = 500;
    112116    protected int dax = 10;
    113117    protected int day = 10;
    public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC  
    176180        if(this.info.getPixelPerDegree() == 0.0) {
    177181            this.info.setPixelPerDegree(getPPD());
    178182        }
    179         resolution = mv.getDist100PixelText();
     183        resolution = mv.getDist100Pixel();
     184        resolutionText = mv.getDist100PixelText();
    180185
    181186        attribution.initialize(this.info);
    182187
    public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC  
    184189            startGrabberThreads();
    185190        }
    186191
    187 
     192        MapView.addZoomChangeListener(this);
    188193        Main.pref.addPreferenceChangeListener(this);
    189194
    190195        SwingUtilities.invokeLater(new Runnable() {
    public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC  
    293298
    294299    @Override public String getToolTipText() {
    295300        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);
    297302        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);
    299304    }
    300305
    301306    private int modulo (int a, int b) {
    public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC  
    667672        }
    668673    }
    669674
    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            }
    673682        }
     683    }
    674684
    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);
    683693            }
    684694        }
     695    }
     696
     697    public static class ChangeResolutionAction extends AbstractAction implements LayerAction {
     698        public ChangeResolutionAction() {
     699            super(tr("Change resolution"));
     700        }
    685701
    686702        @Override
    687703        public void actionPerformed(ActionEvent ev) {