Ticket #1461: ZoomToBoundingBoxInsteadOfData_patch.3.txt

File ZoomToBoundingBoxInsteadOfData_patch.3.txt, 2.5 KB (added by Andre68, 16 years ago)

This modified patch works with rev. 1013 and has correct indentation

Line 
1Index: src/org/openstreetmap/josm/gui/MapView.java
2===================================================================
3--- src/org/openstreetmap/josm/gui/MapView.java (Revision 1013)
4+++ src/org/openstreetmap/josm/gui/MapView.java (Arbeitskopie)
5@@ -31,6 +31,7 @@
6 import org.openstreetmap.josm.data.coor.EastNorth;
7 import org.openstreetmap.josm.data.coor.LatLon;
8 import org.openstreetmap.josm.data.osm.DataSet;
9+import org.openstreetmap.josm.data.osm.DataSource;
10 import org.openstreetmap.josm.data.osm.OsmPrimitive;
11 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
12 import org.openstreetmap.josm.data.projection.Projection;
13@@ -103,7 +104,8 @@
14 @Override public void componentResized(ComponentEvent e) {
15 removeComponentListener(this);
16
17- new AutoScaleAction("data").actionPerformed(null);
18+ if (!zoomToEditLayerBoundingBox())
19+ new AutoScaleAction("data").actionPerformed(null);
20
21 new MapMover(MapView.this, Main.contentPane);
22 Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, java.awt.event.InputEvent.SHIFT_MASK), "UP");
23@@ -403,6 +405,35 @@
24 if (oldScale != scale)
25 firePropertyChange("scale", oldScale, scale);
26 }
27+
28+ /**
29+ * Tries to zoom to the download boundingbox[es] of the current edit layer
30+ * (aka {@link OsmDataLayer}). If the edit layer has multiple download bounding
31+ * boxes it zooms to a large virtual bounding box containing all smaller ones.
32+ * This implementation can be used for resolving ticket #1461.
33+ *
34+ * @return <code>true</code> if a zoom operation has been performed
35+ * @author Jan Peter Stotz
36+ */
37+ public boolean zoomToEditLayerBoundingBox() {
38+ // workaround for #1461 (zoom to download bounding box instead of all data)
39+ // In case we already have an existing data layer ...
40+ Collection<DataSource> dataSources = Main.main.editLayer().data.dataSources;
41+ // ... with bounding box[es] of data loaded from OSM or a file...
42+ BoundingXYVisitor bbox = new BoundingXYVisitor();
43+ for (DataSource ds : dataSources) {
44+ if (ds.bounds != null) {
45+ bbox.visit(Main.proj.latlon2eastNorth(ds.bounds.max));
46+ bbox.visit(Main.proj.latlon2eastNorth(ds.bounds.min));
47+ }
48+ if (bbox.max != null && bbox.min != null && !bbox.max.equals(bbox.min)) {
49+ // ... we zoom to it's bounding box
50+ recalculateCenterScale(bbox);
51+ return true;
52+ }
53+ }
54+ return false;
55+ }
56
57 public boolean addTemporaryLayer(MapViewPaintable mvp) {
58 if (temporaryLayers.contains(mvp)) return false;