Ticket #20363: 20363.patch
| File 20363.patch, 8.5 KB (added by , 5 years ago) |
|---|
-
src/org/openstreetmap/josm/data/IQuadBucketType.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.data; 3 4 import org.openstreetmap.josm.data.osm.BBox; 5 import org.openstreetmap.josm.data.osm.QuadBuckets; 6 7 /** 8 * The minimum necessary interface to use {@link QuadBuckets}. 9 * @author Taylor Smock 10 * @since xxx 11 */ 12 public interface IQuadBucketType { 13 /** 14 * Fetches the bounding box of the primitive. 15 * @return Bounding box of the object 16 */ 17 BBox getBBox(); 18 } -
src/org/openstreetmap/josm/data/ImageData.java
11 11 12 12 import org.openstreetmap.josm.data.coor.LatLon; 13 13 import org.openstreetmap.josm.data.gpx.GpxImageEntry; 14 import org.openstreetmap.josm.data.osm.QuadBuckets; 14 15 import org.openstreetmap.josm.gui.layer.geoimage.ImageEntry; 15 16 import org.openstreetmap.josm.tools.ListenerList; 16 17 … … 41 42 private final List<Integer> selectedImagesIndex = new ArrayList<>(); 42 43 43 44 private final ListenerList<ImageDataUpdateListener> listeners = ListenerList.create(); 45 QuadBuckets<ImageEntry> geoImages = new QuadBuckets<>(); 44 46 45 47 /** 46 48 * Construct a new image container without images … … 60 62 } else { 61 63 this.data = new ArrayList<>(); 62 64 } 65 this.geoImages.addAll(data); 63 66 selectedImagesIndex.add(-1); 64 67 } 65 68 … … 85 88 */ 86 89 public void mergeFrom(ImageData otherData) { 87 90 data.addAll(otherData.getImages()); 91 this.geoImages.addAll(otherData.getImages()); 88 92 Collections.sort(data); 89 93 90 94 final ImageEntry selected = otherData.getSelectedImage(); … … 153 157 } 154 158 155 159 /** 160 * Search for images in a bounds 161 * @param bounds The bounds to search 162 * @return images in the bounds 163 */ 164 public Collection<ImageEntry> searchImages(Bounds bounds) { 165 return this.geoImages.search(bounds.toBBox()); 166 } 167 168 /** 156 169 * Select the next image of the sequence 157 170 */ 158 171 public void selectNextImage() { … … 265 278 } 266 279 for (ImageEntry img: getSelectedImages()) { 267 280 data.remove(img); 281 this.geoImages.remove(img); 268 282 } 269 283 if (selectedImagesIndex.get(0) >= data.size()) { 270 284 setSelectedImageIndex(data.size() - 1); … … 290 304 */ 291 305 public void removeImage(ImageEntry img) { 292 306 data.remove(img); 307 this.geoImages.remove(img); 293 308 notifyImageUpdate(); 294 309 } 295 310 … … 300 315 */ 301 316 public void updateImagePosition(ImageEntry img, LatLon newPos) { 302 317 img.setPos(newPos); 318 this.geoImages.remove(img); 319 this.geoImages.add(img); 303 320 afterImageUpdated(img); 304 321 } 305 322 -
src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java
8 8 import java.util.Objects; 9 9 import java.util.function.Consumer; 10 10 11 import org.openstreetmap.josm.data.IQuadBucketType; 11 12 import org.openstreetmap.josm.data.coor.CachedLatLon; 12 13 import org.openstreetmap.josm.data.coor.LatLon; 14 import org.openstreetmap.josm.data.osm.BBox; 13 15 import org.openstreetmap.josm.tools.ExifReader; 14 16 import org.openstreetmap.josm.tools.JosmRuntimeException; 15 17 import org.openstreetmap.josm.tools.Logging; … … 28 30 * Stores info about each image 29 31 * @since 14205 (extracted from gui.layer.geoimage.ImageEntry) 30 32 */ 31 public class GpxImageEntry implements Comparable<GpxImageEntry> {33 public class GpxImageEntry implements Comparable<GpxImageEntry>, IQuadBucketType { 32 34 private File file; 33 35 private Integer exifOrientation; 34 36 private LatLon exifCoor; … … 539 541 isNewGpsData = true; 540 542 } 541 543 544 @Override 545 public BBox getBBox() { 546 // new BBox(LatLon) is null safe. 547 return new BBox(this.getExifCoor()); 548 } 549 542 550 /** 543 551 * Remove the flag that indicates new GPS data. 544 552 * The flag is cleared by a new GPS data consumer. -
src/org/openstreetmap/josm/data/osm/IPrimitive.java
5 5 import java.util.List; 6 6 import java.util.Map; 7 7 8 import org.openstreetmap.josm.data.IQuadBucketType; 8 9 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor; 9 10 import org.openstreetmap.josm.tools.LanguageInfo; 10 11 … … 12 13 * IPrimitive captures the common functions of {@link OsmPrimitive} and {@link PrimitiveData}. 13 14 * @since 4098 14 15 */ 15 public interface IPrimitive extends Tagged, PrimitiveId, Stylable, Comparable<IPrimitive> {16 public interface IPrimitive extends IQuadBucketType, Tagged, PrimitiveId, Stylable, Comparable<IPrimitive> { 16 17 17 18 /** 18 19 * Replies <code>true</code> if the object has been modified since it was loaded from … … 445 446 * @return Bounding box of the object 446 447 * @since 13764 447 448 */ 449 @Override 448 450 BBox getBBox(); 449 451 450 452 /** -
src/org/openstreetmap/josm/data/osm/QuadBuckets.java
10 10 import java.util.NoSuchElementException; 11 11 import java.util.stream.IntStream; 12 12 13 import org.openstreetmap.josm.data.IQuadBucketType; 13 14 import org.openstreetmap.josm.data.coor.LatLon; 14 15 import org.openstreetmap.josm.data.coor.QuadTiling; 15 16 import org.openstreetmap.josm.tools.Logging; … … 19 20 * be removed and re-added. 20 21 * 21 22 * This class is (no longer) thread safe. 22 * @param <T> type of primitives23 * @since 2165 23 * @param <T> type of object extending {@link IQuadBucketType}. 24 * @since 2165 ({@link IPrimitive} only), xxx for {@link IQuadBucketType} 24 25 */ 25 public class QuadBuckets<T extends I Primitive> implements Collection<T> {26 public class QuadBuckets<T extends IQuadBucketType> implements Collection<T> { 26 27 private static final boolean CONSISTENCY_TESTING = false; 27 28 private static final byte NW_INDEX = 1; 28 29 private static final byte NE_INDEX = 3; … … 35 36 36 37 private static final int MAX_OBJECTS_PER_NODE = 48; 37 38 38 static class QBLevel<T extends I Primitive> extends BBox {39 static class QBLevel<T extends IQuadBucketType> extends BBox { 39 40 private final byte level; 40 41 private final byte index; 41 42 private final long quad; -
src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
37 37 38 38 import org.openstreetmap.josm.actions.AutoScaleAction; 39 39 import org.openstreetmap.josm.actions.RenameLayerAction; 40 import org.openstreetmap.josm.actions.mapmode.SelectLassoAction;41 40 import org.openstreetmap.josm.actions.mapmode.MapMode; 42 41 import org.openstreetmap.josm.actions.mapmode.SelectAction; 42 import org.openstreetmap.josm.actions.mapmode.SelectLassoAction; 43 43 import org.openstreetmap.josm.data.Bounds; 44 44 import org.openstreetmap.josm.data.Data; 45 45 import org.openstreetmap.josm.data.ImageData; … … 561 561 tempG.fillRect(0, 0, width, height); 562 562 tempG.setComposite(saveComp); 563 563 564 for (ImageEntry e : data. getImages()) {564 for (ImageEntry e : data.searchImages(bounds)) { 565 565 paintImage(e, mv, clip, tempG); 566 566 } 567 567 for (ImageEntry img: this.data.getSelectedImages()) { … … 572 572 } 573 573 g.drawImage(offscreenBuffer, 0, 0, null); 574 574 } else { 575 for (ImageEntry e : data. getImages()) {575 for (ImageEntry e : data.searchImages(bounds)) { 576 576 if (e.getPos() == null) { 577 577 continue; 578 578 }
