Ignore:
Timestamp:
2017-03-25T17:33:06+01:00 (7 years ago)
Author:
Don-vip
Message:

fix #13922 - zoom only once when downloading several data types

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java

    r11746 r11774  
    7171        }
    7272
     73        /**
     74         * Returns the {@code LayerManager} at the origin of this event.
     75         * @return the {@code LayerManager} at the origin of this event
     76         */
    7377        public LayerManager getSource() {
    7478            return source;
     
    8286    public static class LayerAddEvent extends LayerManagerEvent {
    8387        private final Layer addedLayer;
    84 
    85         LayerAddEvent(LayerManager source, Layer addedLayer) {
     88        private final boolean requiresZoom;
     89
     90        LayerAddEvent(LayerManager source, Layer addedLayer, boolean requiresZoom) {
    8691            super(source);
    8792            this.addedLayer = addedLayer;
     93            this.requiresZoom = requiresZoom;
    8894        }
    8995
     
    94100        public Layer getAddedLayer() {
    95101            return addedLayer;
     102        }
     103
     104        /**
     105         * Determines if an initial zoom is required.
     106         * @return {@code true} if a zoom is required when this layer is added
     107         * @since 11774
     108         */
     109        public final boolean isZoomRequired() {
     110            return requiresZoom;
    96111        }
    97112
     
    182197
    183198    /**
     199     * Add a layer. The layer will be added at a given position and the mapview zoomed at its projection bounds.
     200     * @param layer The layer to add
     201     */
     202    public void addLayer(final Layer layer) {
     203        addLayer(layer, true);
     204    }
     205
     206    /**
    184207     * Add a layer. The layer will be added at a given position.
    185208     * @param layer The layer to add
    186      */
    187     public void addLayer(final Layer layer) {
     209     * @param initialZoom whether if the mapview must be zoomed at layer projection bounds
     210     */
     211    public void addLayer(final Layer layer, final boolean initialZoom) {
    188212        // we force this on to the EDT Thread to make events fire from there.
    189213        // The synchronization lock needs to be held by the EDT.
    190         GuiHelper.runInEDTAndWaitWithException(() -> realAddLayer(layer));
    191     }
    192 
    193     protected synchronized void realAddLayer(Layer layer) {
     214        GuiHelper.runInEDTAndWaitWithException(() -> realAddLayer(layer, initialZoom));
     215    }
     216
     217    protected synchronized void realAddLayer(Layer layer, boolean initialZoom) {
    194218        if (containsLayer(layer)) {
    195219            throw new IllegalArgumentException("Cannot add a layer twice: " + layer);
     
    199223        checkPosition(position);
    200224        insertLayerAt(layer, position);
    201         fireLayerAdded(layer);
     225        fireLayerAdded(layer, initialZoom);
    202226        if (Main.map != null) {
    203227            layer.hookUpMapView(); // needs to be after fireLayerAdded
     
    366390        if (fireAdd) {
    367391            for (Layer l : getLayers()) {
    368                 listener.layerAdded(new LayerAddEvent(this, l));
     392                listener.layerAdded(new LayerAddEvent(this, l, true));
    369393            }
    370394        }
     
    399423    }
    400424
    401     private void fireLayerAdded(Layer layer) {
     425    private void fireLayerAdded(Layer layer, boolean initialZoom) {
    402426        GuiHelper.assertCallFromEdt();
    403         LayerAddEvent e = new LayerAddEvent(this, layer);
     427        LayerAddEvent e = new LayerAddEvent(this, layer, initialZoom);
    404428        for (LayerChangeListener l : layerChangeListeners) {
    405429            try {
Note: See TracChangeset for help on using the changeset viewer.