Changeset 32528 in osm for applications/editors/josm/plugins/imagery_offset_db/src/iodb/ImageryOffsetWatcher.java
- Timestamp:
- 2016-07-02T03:55:03+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/imagery_offset_db/src/iodb/ImageryOffsetWatcher.java
r32462 r32528 1 // License: WTFPL. For details, see LICENSE file. 1 2 package iodb; 2 3 … … 32 33 * @license WTFPL 33 34 */ 34 public class ImageryOffsetWatcher implements ZoomChangeListener, LayerChangeListener, ActiveLayerChangeListener, Destroyable { 35 public final class ImageryOffsetWatcher implements ZoomChangeListener, LayerChangeListener, ActiveLayerChangeListener, Destroyable { 35 36 private static final double THRESHOLD = 1e-8; 36 37 private static ImageryOffsetWatcher instance; … … 71 72 */ 72 73 public static ImageryOffsetWatcher getInstance() { 73 if (instance == null) {74 if (instance == null) { 74 75 instance = new ImageryOffsetWatcher(); 75 76 } … … 80 81 * Register an offset state listener. 81 82 */ 82 public void register( OffsetStateListener listener) {83 public void register(OffsetStateListener listener) { 83 84 listeners.add(listener); 84 85 listener.offsetStateChanged(offsetGood); … … 88 89 * Unregister an offset state listener. 89 90 */ 90 public void unregister( OffsetStateListener listener) {91 public void unregister(OffsetStateListener listener) { 91 92 listeners.remove(listener); 92 93 } … … 95 96 * Change stored offset state, notify listeners if needed. 96 97 */ 97 private void setOffsetGood( boolean good) {98 if (good != offsetGood) {99 for (OffsetStateListener listener : listeners)98 private void setOffsetGood(boolean good) { 99 if (good != offsetGood) { 100 for (OffsetStateListener listener : listeners) { 100 101 listener.offsetStateChanged(good); 102 } 101 103 } 102 104 offsetGood = good; … … 107 109 */ 108 110 private synchronized void checkOffset() { 109 if (maxDistance <= 0) {111 if (maxDistance <= 0) { 110 112 setOffsetGood(true); 111 113 return; 112 114 } 113 115 ImageryLayer layer = ImageryOffsetTools.getTopImageryLayer(); 114 if (layer == null) {116 if (layer == null) { 115 117 setOffsetGood(true); 116 118 return; … … 119 121 Integer hash = layer.hashCode(); 120 122 ImageryLayerData data = layers.get(hash); 121 if (data == null) {123 if (data == null) { 122 124 // create entry for this layer and mark as needing alignment 123 125 data = new ImageryLayerData(); … … 125 127 data.lastDy = layer.getDy(); 126 128 boolean r = false; 127 if (Math.abs(data.lastDx) + Math.abs(data.lastDy) > THRESHOLD) {129 if (Math.abs(data.lastDx) + Math.abs(data.lastDy) > THRESHOLD) { 128 130 data.lastChecked = center; 129 131 r = true; … … 133 135 } else { 134 136 // now, we have a returning layer. 135 if (Math.abs(data.lastDx - layer.getDx()) + Math.abs(data.lastDy - layer.getDy()) > THRESHOLD) {137 if (Math.abs(data.lastDx - layer.getDx()) + Math.abs(data.lastDy - layer.getDy()) > THRESHOLD) { 136 138 // offset has changed, record the current position 137 139 data.lastDx = layer.getDx(); … … 153 155 public void markGood() { 154 156 ImageryLayer layer = ImageryOffsetTools.getTopImageryLayer(); 155 if (layer != null) {157 if (layer != null) { 156 158 LatLon center = ImageryOffsetTools.getMapCenter(); 157 159 Integer hash = layer.hashCode(); 158 160 ImageryLayerData data = layers.get(hash); 159 if (data == null) {161 if (data == null) { 160 162 // create entry for this layer and mark as good 161 163 data = new ImageryLayerData(); … … 216 218 * projections: nobody uses them anyway. 217 219 */ 218 private void storeLayerOffset( ImageryLayer layer) {220 private void storeLayerOffset(ImageryLayer layer) { 219 221 String id = ImageryOffsetTools.getImageryID(layer); 220 if (!Main.pref.getBoolean("iodb.remember.offsets", true) || id == null)222 if (!Main.pref.getBoolean("iodb.remember.offsets", true) || id == null) 221 223 return; 222 224 Collection<String> offsets = new LinkedList<>(Main.pref.getCollection("iodb.stored.offsets")); 223 for (Iterator<String> iter = offsets.iterator(); iter.hasNext();) {225 for (Iterator<String> iter = offsets.iterator(); iter.hasNext();) { 224 226 String[] offset = iter.next().split(":"); 225 if (offset.length == 5 && offset[0].equals(id))227 if (offset.length == 5 && offset[0].equals(id)) 226 228 iter.remove(); 227 229 } … … 234 236 * Loads the current imagery layer offset from preferences. 235 237 */ 236 private void loadLayerOffset( ImageryLayer layer) {238 private void loadLayerOffset(ImageryLayer layer) { 237 239 String id = ImageryOffsetTools.getImageryID(layer); 238 if (!Main.pref.getBoolean("iodb.remember.offsets", true) || id == null)240 if (!Main.pref.getBoolean("iodb.remember.offsets", true) || id == null) 239 241 return; 240 242 Collection<String> offsets = Main.pref.getCollection("iodb.stored.offsets"); 241 for (String offset : offsets) {243 for (String offset : offsets) { 242 244 String[] parts = offset.split(":"); 243 if (parts.length == 5 && parts[0].equals(id)) {245 if (parts.length == 5 && parts[0].equals(id)) { 244 246 double[] dparts = new double[4]; 245 247 try { 246 for (int i = 0; i < 4; i++)248 for (int i = 0; i < 4; i++) { 247 249 dparts[i] = Double.parseDouble(parts[i+1]); 248 } catch( Exception e ) { 250 } 251 } catch (Exception e) { 249 252 continue; 250 253 } 251 254 LatLon lastPos = new LatLon(dparts[0], dparts[1]); 252 if (lastPos.greatCircleDistance(ImageryOffsetTools.getMapCenter()) < Math.max(maxDistance, 3.0) * 1000) {255 if (lastPos.greatCircleDistance(ImageryOffsetTools.getMapCenter()) < Math.max(maxDistance, 3.0) * 1000) { 253 256 // apply offset 254 257 layer.setOffset(dparts[2], dparts[3]); … … 277 280 */ 278 281 public interface OffsetStateListener { 279 void offsetStateChanged( boolean isOffsetGood);282 void offsetStateChanged(boolean isOffsetGood); 280 283 } 281 284 }
Note:
See TracChangeset
for help on using the changeset viewer.
