Ignore:
Timestamp:
2014-12-17T01:49:45+01:00 (9 years ago)
Author:
bastiK
Message:

fixed #10860 - set initial viewport correctly when mapview is opened

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
2 edited

Legend:

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

    r7575 r7816  
    3737
    3838import org.openstreetmap.josm.Main;
    39 import org.openstreetmap.josm.actions.AutoScaleAction;
    4039import org.openstreetmap.josm.actions.mapmode.MapMode;
    4140import org.openstreetmap.josm.data.Bounds;
    4241import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
    4342import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
    44 import org.openstreetmap.josm.data.DataSource;
    4543import org.openstreetmap.josm.data.SelectionChangedListener;
    4644import org.openstreetmap.josm.data.ViewportData;
     
    233231     */
    234232    public MapView(final JPanel contentPane, final ViewportData viewportData) {
     233        initialViewport = viewportData;
    235234        Main.pref.addPreferenceChangeListener(this);
    236235        final boolean unregisterTab = Shortcut.findShortcut(KeyEvent.VK_TAB, 0)!=null;
     
    250249
    251250                mapMover = new MapMover(MapView.this, contentPane);
    252                 if (viewportData != null) {
    253                     zoomTo(viewportData.getCenter(), viewportData.getScale());
    254                 } else {
    255                     OsmDataLayer layer = getEditLayer();
    256                     if (layer != null) {
    257                         if (!zoomToDataSetBoundingBox(layer.data)) {
    258                             // no bounding box defined
    259                             AutoScaleAction.autoScale("data");
    260                         }
    261                     } else {
    262                         AutoScaleAction.autoScale("layer");
    263                     }
    264                 }
    265251            }
    266252        });
     
    542528     */
    543529    @Override public void paint(Graphics g) {
     530        if (initialViewport != null) {
     531            if (initialViewport.getBounds() != null) {
     532                BoundingXYVisitor box = new BoundingXYVisitor();
     533                box.visit(initialViewport.getBounds());
     534                recalculateCenterScale(box);
     535            } else {
     536                zoomTo(initialViewport.getCenter(), initialViewport.getScale(), true);
     537            }
     538            initialViewport = null;
     539        }
    544540        if (BugReportExceptionHandler.exceptionHandlingInProgress())
    545541            return;
     
    868864    }
    869865
    870     /**
    871      * Tries to zoom to the download boundingbox[es] of the current edit layer
    872      * (aka {@link OsmDataLayer}). If the edit layer has multiple download bounding
    873      * boxes it zooms to a large virtual bounding box containing all smaller ones.
    874      *
    875      * @return <code>true</code> if a zoom operation has been performed
    876      */
    877     public boolean zoomToDataSetBoundingBox(DataSet ds) {
    878         // In case we already have an existing data layer ...
    879         OsmDataLayer layer= getEditLayer();
    880         if (layer == null)
    881             return false;
    882         Collection<DataSource> dataSources = ds.dataSources;
    883         // ... with bounding box[es] of data loaded from OSM or a file...
    884         BoundingXYVisitor bbox = new BoundingXYVisitor();
    885         for (DataSource source : dataSources) {
    886             bbox.visit(source.bounds);
    887         }
    888         if (bbox.hasExtend()) {
    889             // ... we zoom to it's bounding box
    890             recalculateCenterScale(bbox);
    891             return true;
    892         }
    893         return false;
    894     }
    895 
    896866    public boolean addTemporaryLayer(MapViewPaintable mvp) {
    897867        if (temporaryLayers.contains(mvp)) return false;
  • trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java

    r7448 r7816  
    3232import org.openstreetmap.josm.data.ProjectionBounds;
    3333import org.openstreetmap.josm.data.SystemOfMeasurement;
     34import org.openstreetmap.josm.data.ViewportData;
    3435import org.openstreetmap.josm.data.coor.CachedLatLon;
    3536import org.openstreetmap.josm.data.coor.EastNorth;
     
    182183    private Polygon paintPoly = null;
    183184
     185    protected ViewportData initialViewport;
     186
    184187    /**
    185188     * Constructs a new {@code NavigatableComponent}.
     
    406409
    407410    /**
    408      * Zoom to the given coordinate.
     411     * Zoom to the given coordinate and scale.
     412     *
    409413     * @param newCenter The center x-value (easting) to zoom to.
    410414     * @param newScale The scale to use.
    411415     */
    412416    public void zoomTo(EastNorth newCenter, double newScale) {
     417        zoomTo(newCenter, newScale, false);
     418    }
     419
     420    /**
     421     * Zoom to the given coordinate and scale.
     422     *
     423     * @param newCenter The center x-value (easting) to zoom to.
     424     * @param newScale The scale to use.
     425     * @param initial true if this call initializes the viewport.
     426     */
     427    public void zoomTo(EastNorth newCenter, double newScale, boolean initial) {
    413428        Bounds b = getProjection().getWorldBoundsLatLon();
    414429        LatLon cl = Projections.inverseProject(newCenter);
     
    446461
    447462        if (!newCenter.equals(center) || (scale != newScale)) {
    448             pushZoomUndo(center, scale);
    449             zoomNoUndoTo(newCenter, newScale);
     463            if (!initial) {
     464                pushZoomUndo(center, scale);
     465            }
     466            zoomNoUndoTo(newCenter, newScale, initial);
    450467        }
    451468    }
     
    453470    /**
    454471     * Zoom to the given coordinate without adding to the zoom undo buffer.
     472     *
    455473     * @param newCenter The center x-value (easting) to zoom to.
    456474     * @param newScale The scale to use.
    457      */
    458     private void zoomNoUndoTo(EastNorth newCenter, double newScale) {
     475     * @param initial true if this call initializes the viewport.
     476     */
     477    private void zoomNoUndoTo(EastNorth newCenter, double newScale, boolean intial) {
    459478        if (!newCenter.equals(center)) {
    460479            EastNorth oldCenter = center;
    461480            center = newCenter;
    462             firePropertyChange(PROPNAME_CENTER, oldCenter, newCenter);
     481            if (!intial) {
     482                firePropertyChange(PROPNAME_CENTER, oldCenter, newCenter);
     483            }
    463484        }
    464485        if (scale != newScale) {
    465486            double oldScale = scale;
    466487            scale = newScale;
    467             firePropertyChange(PROPNAME_SCALE, oldScale, newScale);
    468         }
    469 
    470         repaint();
    471         fireZoomChanged();
     488            if (!intial) {
     489                firePropertyChange(PROPNAME_SCALE, oldScale, newScale);
     490            }
     491        }
     492
     493        if (!intial) {
     494            repaint();
     495            fireZoomChanged();
     496        }
    472497    }
    473498
     
    595620            ZoomData zoom = zoomUndoBuffer.pop();
    596621            zoomRedoBuffer.push(new ZoomData(center, scale));
    597             zoomNoUndoTo(zoom.getCenterEastNorth(), zoom.getScale());
     622            zoomNoUndoTo(zoom.getCenterEastNorth(), zoom.getScale(), false);
    598623        }
    599624    }
     
    603628            ZoomData zoom = zoomRedoBuffer.pop();
    604629            zoomUndoBuffer.push(new ZoomData(center, scale));
    605             zoomNoUndoTo(zoom.getCenterEastNorth(), zoom.getScale());
     630            zoomNoUndoTo(zoom.getCenterEastNorth(), zoom.getScale(), false);
    606631        }
    607632    }
Note: See TracChangeset for help on using the changeset viewer.