### Eclipse Workspace Patch 1.0
#P josm
Index: src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapView.java (revision 996)
+++ src/org/openstreetmap/josm/gui/MapView.java (working copy)
@@ -8,12 +8,11 @@
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
-import java.awt.Transparency;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseMotionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Collection;
@@ -28,11 +27,11 @@
import org.openstreetmap.josm.actions.AutoScaleAction;
import org.openstreetmap.josm.actions.MoveAction;
import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.Preferences;
import org.openstreetmap.josm.data.SelectionChangedListener;
import org.openstreetmap.josm.data.coor.EastNorth;
import org.openstreetmap.josm.data.coor.LatLon;
import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.DataSource;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
import org.openstreetmap.josm.data.projection.Projection;
@@ -105,7 +104,8 @@
@Override public void componentResized(ComponentEvent e) {
removeComponentListener(this);
- new AutoScaleAction("data").actionPerformed(null);
+ if (!zoomToEditLayerBoundingBox())
+ new AutoScaleAction("data").actionPerformed(null);
new MapMover(MapView.this, Main.contentPane);
Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, java.awt.event.InputEvent.SHIFT_MASK), "UP");
@@ -405,6 +405,35 @@
if (oldScale != scale)
firePropertyChange("scale", oldScale, scale);
}
+
+ /**
+ * Tries to zoom to the download boundingbox[es] of the current edit layer
+ * (aka {@link OsmDataLayer}). If the edit layer has multiple download bounding
+ * boxes it zooms to a large virtual bounding box containing all smaller ones.
+ * This implementation can be used for resolving ticket #1461.
+ *
+ * @return true
if a zoom operation has been performed
+ * @author Jan Peter Stotz
+ */
+ public boolean zoomToEditLayerBoundingBox() {
+ // workaround for #1461 (zoom to download bounding box instead of all data)
+ // In case we already have an existing data layer ...
+ Collection dataSources = Main.main.editLayer().data.dataSources;
+ // ... with bounding box[es] of data loaded from OSM or a file...
+ BoundingXYVisitor bbox = new BoundingXYVisitor();
+ for (DataSource ds : dataSources) {
+ if (ds.bounds != null) {
+ bbox.visit(Main.proj.latlon2eastNorth(ds.bounds.max));
+ bbox.visit(Main.proj.latlon2eastNorth(ds.bounds.min));
+ }
+ if (bbox.max != null && bbox.min != null && !bbox.max.equals(bbox.min)) {
+ // ... we zoom to it's bounding box
+ recalculateCenterScale(bbox);
+ return true;
+ }
+ }
+ return false;
+ }
public boolean addTemporaryLayer(MapViewPaintable mvp) {
if (temporaryLayers.contains(mvp)) return false;