Changeset 1750 in josm for trunk/src/org/openstreetmap/josm/gui/MapView.java
- Timestamp:
- 2009-07-08T21:50:32+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/MapView.java
r1722 r1750 9 9 import java.awt.Graphics2D; 10 10 import java.awt.Point; 11 import java.awt.event.ComponentAdapter; 12 import java.awt.event.ComponentEvent; 11 13 import java.awt.event.MouseEvent; 12 14 import java.awt.event.MouseMotionListener; 13 import java.awt.event.ComponentAdapter;14 import java.awt.event.ComponentEvent;15 15 import java.awt.image.BufferedImage; 16 16 import java.util.ArrayList; 17 import java.util.Enumeration;18 17 import java.util.Collection; 19 18 import java.util.Collections; 19 import java.util.Enumeration; 20 20 import java.util.LinkedList; 21 21 … … 27 27 import org.openstreetmap.josm.actions.AutoScaleAction; 28 28 import org.openstreetmap.josm.actions.JosmAction; 29 import org.openstreetmap.josm.actions.MoveAction; 29 30 import org.openstreetmap.josm.actions.mapmode.MapMode; 30 import org.openstreetmap.josm.actions.MoveAction;31 import org.openstreetmap.josm.data.Bounds;32 31 import org.openstreetmap.josm.data.ProjectionBounds; 33 32 import org.openstreetmap.josm.data.SelectionChangedListener; 34 import org.openstreetmap.josm.data.coor.EastNorth;35 import org.openstreetmap.josm.data.coor.LatLon;36 33 import org.openstreetmap.josm.data.osm.DataSet; 37 34 import org.openstreetmap.josm.data.osm.DataSource; 38 35 import org.openstreetmap.josm.data.osm.OsmPrimitive; 39 36 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor; 40 import org.openstreetmap.josm.data.projection.Projection;41 37 import org.openstreetmap.josm.gui.layer.Layer; 42 38 import org.openstreetmap.josm.gui.layer.MapViewPaintable; … … 61 57 public class MapView extends NavigatableComponent { 62 58 59 63 60 /** 64 61 * A list of all layers currently loaded. … … 69 66 */ 70 67 public PlayHeadMarker playHeadMarker = null; 71 /** 72 * Direct link to the edit layer (if any) in the layers list. 73 */ 74 public OsmDataLayer editLayer; 68 75 69 /** 76 70 * The layer from the layers list that is currently active. … … 100 94 scaler.setLocation(10,30); 101 95 102 if (!zoomToEditLayerBoundingBox()) 96 if (!zoomToEditLayerBoundingBox()) { 103 97 new AutoScaleAction("data").actionPerformed(null); 98 } 104 99 105 100 new MapMover(MapView.this, Main.contentPane); … … 152 147 public void addLayer(Layer layer) { 153 148 if (layer instanceof OsmDataLayer) { 154 editLayer = (OsmDataLayer)layer;149 OsmDataLayer editLayer = (OsmDataLayer)layer; 155 150 Main.ds = editLayer.data; 156 151 editLayer.listenerModified.add(new ModifiedChangedListener(){ 157 152 public void modifiedChanged(boolean value, OsmDataLayer source) { 158 153 JOptionPane.getFrameForComponent(Main.parent).setTitle((value?"*":"") 159 +tr("Java OpenStreetMap Editor"));154 +tr("Java OpenStreetMap Editor")); 160 155 } 161 156 }); 162 157 } 163 if (layer instanceof MarkerLayer && playHeadMarker == null) 158 if (layer instanceof MarkerLayer && playHeadMarker == null) { 164 159 playHeadMarker = PlayHeadMarker.create(); 160 } 165 161 int pos = layers.size(); 166 while(pos > 0 && layers.get(pos-1).background) 162 while(pos > 0 && layers.get(pos-1).background) { 167 163 --pos; 164 } 168 165 layers.add(pos, layer); 169 166 170 for (Layer.LayerChangeListener l : Layer.listeners) 167 for (Layer.LayerChangeListener l : Layer.listeners) { 171 168 l.layerAdded(layer); 169 } 172 170 if (layer instanceof OsmDataLayer || activeLayer == null) { 173 171 // autoselect the new layer 174 172 Layer old = activeLayer; 175 173 setActiveLayer(layer); 176 for (Layer.LayerChangeListener l : Layer.listeners) 174 for (Layer.LayerChangeListener l : Layer.listeners) { 177 175 l.activeLayerChange(old, layer); 176 } 178 177 } 179 178 AudioPlayer.reset(); … … 182 181 183 182 @Override 184 protected DataSet getData() 185 { 183 protected DataSet getData() { 186 184 if(activeLayer != null && activeLayer instanceof OsmDataLayer) 187 185 return ((OsmDataLayer)activeLayer).data; … … 189 187 } 190 188 191 public Boolean isDrawableLayer() 192 { 189 /** 190 * Replies true if the active layer is drawable. 191 * 192 * @return true if the active layer is drawable, false otherwise 193 */ 194 public boolean isActiveLayerDrawable() { 193 195 return activeLayer != null && activeLayer instanceof OsmDataLayer; 194 196 } 195 197 196 public Boolean isVisibleDrawableLayer() { 197 return isDrawableLayer() && activeLayer.visible; 198 /** 199 * Replies true if the active layer is visible. 200 * 201 * @return true if the active layer is visible, false otherwise 202 */ 203 public boolean isActiveLayerVisible() { 204 return isActiveLayerDrawable() && activeLayer.visible; 198 205 } 199 206 … … 204 211 public void removeLayer(Layer layer) { 205 212 if (layers.remove(layer)) { 206 for (Layer.LayerChangeListener l : Layer.listeners) 213 for (Layer.LayerChangeListener l : Layer.listeners) { 207 214 l.layerRemoved(layer); 208 } 209 if (layer == editLayer) { 210 editLayer = null; 211 Main.ds.setSelected(); 215 } 216 } 217 if (layer == activeLayer) { 218 if (layer instanceof OsmDataLayer) { 219 Main.ds.setSelected(); 220 } 212 221 } 213 222 layer.destroy(); … … 215 224 } 216 225 217 private Boolean virtualnodes = false; 218 public void enableVirtualNodes(Boolean state) 219 { 220 if(virtualnodes != state) 221 { 222 virtualnodes = state; 226 private boolean virtualNodesEnabled = false; 227 public void setVirtualNodesEnabled(boolean enabled) { 228 if(virtualNodesEnabled != enabled) { 229 virtualNodesEnabled = enabled; 223 230 repaint(); 224 231 } 225 232 } 226 public Boolean useVirtualNodes() 227 { 228 return virtualnodes; 233 public boolean isVirtualNodesEnabled() { 234 return virtualNodesEnabled; 229 235 } 230 236 … … 241 247 return; // already in place. 242 248 layers.remove(curLayerPos); 243 if (pos >= layers.size()) 249 if (pos >= layers.size()) { 244 250 layers.add(layer); 245 else251 } else { 246 252 layers.add(pos, layer); 253 } 247 254 AudioPlayer.reset(); 248 255 } … … 266 273 // just re-use it. 267 274 if (null == offscreenBuffer || offscreenBuffer.getWidth() != getWidth() 268 || offscreenBuffer.getHeight() != getHeight()) 275 || offscreenBuffer.getHeight() != getHeight()) { 269 276 offscreenBuffer = new BufferedImage(getWidth(), getHeight(), 270 277 BufferedImage.TYPE_INT_ARGB); 278 } 271 279 272 280 Graphics2D tempG = offscreenBuffer.createGraphics(); … … 276 284 for (int i = layers.size()-1; i >= 0; --i) { 277 285 Layer l = layers.get(i); 278 if (l.visible/* && l != getActiveLayer()*/) 286 if (l.visible/* && l != getActiveLayer()*/) { 279 287 l.paint(tempG, this); 288 } 280 289 } 281 290 … … 296 305 int x2 = Math.max(min.x, max.x); 297 306 int y2 = Math.max(min.y, max.y); 298 if (x1 > 0 || y1 > 0 || x2 < getWidth() || y2 < getHeight()) 307 if (x1 > 0 || y1 > 0 || x2 < getWidth() || y2 < getHeight()) { 299 308 tempG.drawRect(x1, y1, x2-x1+1, y2-y1+1); 300 301 if (playHeadMarker != null) 309 } 310 311 if (playHeadMarker != null) { 302 312 playHeadMarker.paint(tempG, this); 313 } 303 314 304 315 g.drawImage(offscreenBuffer, 0, 0, null); … … 310 321 */ 311 322 public void recalculateCenterScale(BoundingXYVisitor box) { 312 if(box == null) 323 if(box == null) { 313 324 box = new BoundingXYVisitor(); 314 if(box.getBounds() == null) 325 } 326 if(box.getBounds() == null) { 315 327 box.visit(getProjection().getWorldBounds()); 316 if(!box.hasExtend()) 317 box.enlargeBoundingBox(); 328 } 329 if(!box.hasExtend()) { 330 box.enlargeBoundingBox(); 331 } 318 332 319 333 zoomTo(box.getBounds()); … … 321 335 322 336 /** 323 * @return An unmodifi cable listof all layers337 * @return An unmodifiable collection of all layers 324 338 */ 325 339 public Collection<Layer> getAllLayers() { … … 328 342 329 343 /** 330 * Set the active selection to the given value and raise an layerchange event. 344 * Sets the active layer to <code>layer</code>. If <code>layer</code> is an instance 345 * of {@see OsmDataLayer} also sets {@see #editLayer} to <code>layer</code>. 346 * 347 * @param layer the layer to be activate; must be one of the layers in the list of layers 348 * @exception IllegalArgumentException thrown if layer is not in the lis of layers 331 349 */ 332 350 public void setActiveLayer(Layer layer) { 333 351 if (!layers.contains(layer)) 334 throw new IllegalArgumentException( "Layer must be in layerlist");352 throw new IllegalArgumentException(tr("Layer {0} must be in list of layers", layer.toString())); 335 353 if (layer instanceof OsmDataLayer) { 336 editLayer = (OsmDataLayer)layer;354 OsmDataLayer editLayer = (OsmDataLayer)layer; 337 355 Main.ds = editLayer.data; 338 } 339 else 356 } else { 340 357 Main.ds.setSelected(); 358 } 341 359 DataSet.fireSelectionChanged(Main.ds.getSelected()); 342 360 Layer old = activeLayer; 343 361 activeLayer = layer; 344 362 if (old != layer) { 345 for (Layer.LayerChangeListener l : Layer.listeners) 363 for (Layer.LayerChangeListener l : Layer.listeners) { 346 364 l.activeLayerChange(old, layer); 365 } 347 366 } 348 367 … … 360 379 361 380 /** 362 * @return The current active layer 381 * Replies the currently active layer 382 * 383 * @return the currently active layer (may be null) 363 384 */ 364 385 public Layer getActiveLayer() { 365 386 return activeLayer; 387 } 388 389 /** 390 * Replies the current edit layer, if any 391 * 392 * @return the current edit layer. May be null. 393 */ 394 public OsmDataLayer getEditLayer() { 395 if (activeLayer instanceof OsmDataLayer) 396 return (OsmDataLayer)activeLayer; 397 return null; 398 } 399 400 /** 401 * replies true if the list of layers managed by this map view contain layer 402 * 403 * @param layer the layer 404 * @return true if the list of layers managed by this map view contain layer 405 */ 406 public boolean hasLayer(Layer layer) { 407 return layers.contains(layer); 366 408 } 367 409 … … 377 419 // workaround for #1461 (zoom to download bounding box instead of all data) 378 420 // In case we already have an existing data layer ... 379 Collection<DataSource> dataSources = Main.main. editLayer().data.dataSources;421 Collection<DataSource> dataSources = Main.main.createOrGetEditLayer().data.dataSources; 380 422 // ... with bounding box[es] of data loaded from OSM or a file... 381 423 BoundingXYVisitor bbox = new BoundingXYVisitor();
Note:
See TracChangeset
for help on using the changeset viewer.