Ticket #12964: patch-fix-12964.patch

File patch-fix-12964.patch, 5.5 KB (added by michael2402, 10 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 22c867e..d69856a 100644
    a b import javax.swing.JPanel;  
    4949import javax.swing.JTextArea;
    5050import javax.swing.KeyStroke;
    5151import javax.swing.LookAndFeel;
     52import javax.swing.SwingUtilities;
    5253import javax.swing.UIManager;
    5354import javax.swing.UnsupportedLookAndFeelException;
    5455
    import org.openstreetmap.josm.gui.help.HelpUtil;  
    8788import org.openstreetmap.josm.gui.io.SaveLayersDialog;
    8889import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer;
    8990import org.openstreetmap.josm.gui.layer.Layer;
     91import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
     92import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
     93import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
     94import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
    9095import org.openstreetmap.josm.gui.layer.MainLayerManager;
    9196import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    9297import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
    public abstract class Main {  
    534539     * @param layer The layer to remove
    535540     */
    536541    public final synchronized void removeLayer(final Layer layer) {
    537         if (map != null) {
    538             getLayerManager().removeLayer(layer);
    539             if (isDisplayingMapView() && getLayerManager().getLayers().isEmpty()) {
    540                 setMapFrame(null);
    541             }
    542         }
     542        getLayerManager().removeLayer(layer);
    543543    }
    544544
    545545    private static volatile InitStatusListener initListener;
    public abstract class Main {  
    572572        isOpenjdk = System.getProperty("java.vm.name").toUpperCase(Locale.ENGLISH).indexOf("OPENJDK") != -1;
    573573        fileWatcher.start();
    574574
     575        // Temporary - move to separate class later
     576        getLayerManager().addLayerChangeListener(new LayerChangeListener() {
     577            @Override
     578            public void layerRemoving(LayerRemoveEvent e) {
     579                // last layer is removed.
     580                if (isDisplayingMapView() && getLayerManager().getLayers().size() <= 1) {
     581                    SwingUtilities.invokeLater(new Runnable() {
     582                        @Override
     583                        public void run() {
     584                            setMapFrame(null);
     585                        }
     586                    });
     587                }
     588            }
     589
     590            @Override
     591            public void layerOrderChanged(LayerOrderChangeEvent e) {
     592                // ignored
     593            }
     594
     595            @Override
     596            public void layerAdded(LayerAddEvent e) {
     597                boolean noMap = map == null;
     598                if (noMap) {
     599                    createMapFrame(e.getAddedLayer(), null);
     600                }
     601                e.getAddedLayer().hookUpMapView();
     602                if (noMap) {
     603                    Main.map.setVisible(true);
     604                }
     605                Main.map.mapView.scheduleZoomTo(new ViewportData(e.getAddedLayer().getViewProjectionBounds()));
     606            }
     607        });
     608
    575609        new InitializationTask(tr("Executing platform startup hook")) {
    576610            @Override
    577611            public void initialize() {
    public abstract class Main {  
    767801     * @see #addLayer(Layer, ViewportData)
    768802     */
    769803    public final void addLayer(final Layer layer) {
    770         addLayer(layer, layer.getViewProjectionBounds());
     804        addLayer(layer, (ViewportData) null);
    771805    }
    772806
    773807    /**
    public abstract class Main {  
    793827     * isn't changed
    794828     */
    795829    public final synchronized void addLayer(final Layer layer, ViewportData viewport) {
    796         boolean noMap = map == null;
    797         if (noMap) {
    798             createMapFrame(layer, viewport);
    799         }
    800         layer.hookUpMapView();
    801830        getLayerManager().addLayer(layer);
    802         if (noMap) {
    803             Main.map.setVisible(true);
    804         } else if (viewport != null) {
    805             Main.map.mapView.zoomTo(viewport);
     831        if (viewport != null) {
     832            Main.map.mapView.scheduleZoomTo(viewport);
    806833        }
    807834    }
    808835
  • src/org/openstreetmap/josm/gui/MapView.java

    diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
    index ea5f1ba..65646e2 100644
    a b LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {  
    488488     */
    489489    public MapView(MainLayerManager layerManager, final JPanel contentPane, final ViewportData viewportData) {
    490490        this.layerManager = layerManager;
    491         initialViewport = viewportData;
     491        if (viewportData != null) {
     492            initialViewport = viewportData;
     493        } else if (layerManager.getActiveLayer() != null) {
     494            initialViewport = new ViewportData(layerManager.getActiveLayer().getViewProjectionBounds());
     495        }
    492496        layerManager.addLayerChangeListener(this);
    493497        layerManager.addActiveLayerChangeListener(this);
    494498        Main.pref.addPreferenceChangeListener(this);
    LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {  
    12901294    public final MainLayerManager getLayerManager() {
    12911295        return layerManager;
    12921296    }
     1297
     1298    /**
     1299     * Temporary until zooming is fixed.
     1300     * @param viewport The new viewport to use on next draw.
     1301     * @since xxx
     1302     */
     1303    public void scheduleZoomTo(ViewportData viewport) {
     1304        initialViewport = viewport;
     1305    }
    12931306}