- Timestamp:
- 2023-11-07T14:21:38+01:00 (12 months ago)
- Location:
- trunk/src/org/openstreetmap/josm/gui
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/layer/DeleteLayerAction.java
r18837 r18895 6 6 import java.awt.Component; 7 7 import java.awt.event.ActionEvent; 8 import java.util.HashMap;9 8 import java.util.List; 10 import java.util.Map;11 9 12 10 import javax.swing.AbstractAction; … … 48 46 if (!SaveLayersDialog.saveUnsavedModifications(selectedLayers, SaveLayersDialog.Reason.DELETE)) 49 47 return; 50 final Map<Integer, Layer> layerMap = model.selectedIndices().filter(i -> model.getLayer(i) != null)51 .collect(HashMap::new, (map, value) -> map.put(value, model.getLayer(value)), HashMap::putAll);52 48 for (Layer l: selectedLayers) { 53 49 if (model.getLayerManager().containsLayer(l)) { … … 55 51 // this is why we need to check if every layer is still in the list of selected layers. 56 52 model.getLayerManager().removeLayer(l); 57 }58 }59 // Set the next active layer to the next visible layer60 if (layerMap.size() == 1) {61 final int selected = Math.min(layerMap.keySet().iterator().next(), model.getRowCount() - 1);62 int currentLayerIndex = selected;63 Layer layer = model.getLayer(currentLayerIndex);64 // If the user has the last layer selected, we need to wrap around.65 boolean reversed = false;66 while (layer != null && !layer.isVisible() && currentLayerIndex < model.getRowCount() && currentLayerIndex >= 0) {67 if (reversed) {68 currentLayerIndex--;69 } else {70 currentLayerIndex++;71 }72 if (currentLayerIndex == model.getRowCount()) {73 reversed = true;74 currentLayerIndex = selected;75 }76 layer = model.getLayer(currentLayerIndex);77 }78 if (layer != null) {79 model.getLayerManager().setActiveLayer(layer);80 // Reset the selection81 model.getSelectionModel().setSelectionInterval(selected, selected);82 53 } 83 54 } -
trunk/src/org/openstreetmap/josm/gui/layer/Layer.java
r17626 r18895 36 36 /** 37 37 * A layer encapsulates the gui component of one dataset and its representation. 38 * 38 * <p> 39 39 * Some layers may display data directly imported from OSM server. Other only 40 40 * display background images. Some can be edited, some not. Some are static and 41 41 * other changes dynamically (auto-updated). 42 * 42 * <p> 43 43 * Layers can be visible or not. Most actions the user can do applies only on 44 44 * selected layers. The available actions depend on the selected layers too. 45 * 45 * <p> 46 46 * All layers are managed by the MapView. They are displayed in a list to the 47 47 * right of the screen. … … 175 175 /** 176 176 * Initialization code, that depends on Main.map.mapView. 177 * 177 * <p> 178 178 * It is always called in the event dispatching thread. 179 179 * Note that Main.map is null as long as no layer has been added, so do 180 180 * not execute code in the constructor, that assumes Main.map.mapView is 181 181 * not null. 182 * 182 * <p> 183 183 * If you need to execute code when this layer is added to the map view, use 184 184 * {@link #attachToMapView(org.openstreetmap.josm.gui.layer.MapViewPaintable.MapViewEvent)} … … 270 270 * menu component than JMenuItem or when it supports multiple layers. Actions that support multiple layers should also 271 271 * have correct equals implementation. 272 * 272 * <p> 273 273 * Use {@link SeparatorLayerAction#INSTANCE} instead of new JSeparator 274 274 * @return menu actions for this layer … … 278 278 /** 279 279 * Called, when the layer is removed from the mapview and is going to be destroyed. 280 * 281 * This is because the Layer constructor can not add itself safely aslistener280 * <p> 281 * This is because the Layer constructor cannot add itself safely as a listener 282 282 * to the layerlist dialog, because there may be no such dialog yet (loaded 283 283 * via command line parameter). … … 303 303 /** 304 304 * Sets the associated file for this layer. 305 * 305 * <p> 306 306 * The associated file might be the one that the user opened. 307 307 * @param file The file, may be <code>null</code> … … 354 354 355 355 /** 356 * Replies true if this layer was renamed by user357 * 358 * @return true if this layer was renamed by user356 * Replies true if user renamed this layer 357 * 358 * @return true if user renamed this layer 359 359 */ 360 360 public boolean isRenamed() { … … 484 484 485 485 /** 486 * fires a property change for the property {@link #FILTER_STATE_PROP}.486 * Fires a property change for the property {@link #FILTER_STATE_PROP}. 487 487 */ 488 488 protected void fireFilterStateChanged() { … … 491 491 492 492 /** 493 * allows to check whether a projection is supported or not493 * Allows to check whether a projection is supported or not. 494 494 * @param proj projection 495 *496 495 * @return True if projection is supported for this layer 497 496 */ … … 610 609 611 610 /** 612 * Replies the savable state of this layer (i.e if it can be saved through a "File->Save" dialog).611 * Replies the savable state of this layer (i.e., if it can be saved through a "File->Save" dialog). 613 612 * @return true if this layer can be saved to a file 614 613 * @since 5459 … … 628 627 629 628 /** 630 * Creates a new "Save" dialog for this layer and makes it visible.<br> 631 * When the user has chosen a file, checks the file extension, and confirms overwrite if needed. 629 * Creates a new "Save" dialog for this layer and makes it visible. 630 * <p> 631 * When the user has chosen a file, checks the file extension, and confirms overwriting if needed. 632 632 * @return The output {@code File} 633 633 * @see SaveActionBase#createAndOpenSaveFileChooser … … 675 675 @Override 676 676 public String toString() { 677 return getClass().getSimpleName() + " [name=" + name + ", associatedFile=" + associatedFile + ']';677 return getClass().getSimpleName() + " [name=" + name + ", associatedFile=" + associatedFile + ", visible=" + visible + ']'; 678 678 } 679 679 } -
trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
r18801 r18895 7 7 import java.util.ArrayList; 8 8 import java.util.Collection; 9 import java.util.Collections; 9 10 import java.util.List; 10 11 import java.util.ListIterator; … … 358 359 359 360 /** 360 * Determines the next active data layer according to the following 361 * rules: 362 * <ul> 363 * <li>if there is at least one {@link OsmDataLayer} the first one 364 * becomes active</li> 365 * <li>otherwise, the top most layer of any type becomes active</li> 366 * </ul> 361 * Determines the next active data layer. 362 * <p> 363 * The layer becomes active, which has the next highest index (closer to bottom) relative to {@code except} parameter 364 * in the following order: 365 * <ol> 366 * <li>{@link OsmDataLayer} and visible, or if there is none</li> 367 * <li>{@link OsmDataLayer} and hidden, or if there is none</li> 368 * <li>any type</li> 369 * </ol> 367 370 * 368 371 * @param except A layer to ignore. … … 371 374 private Layer suggestNextActiveLayer(Layer except) { 372 375 List<Layer> layersList = new ArrayList<>(getLayers()); 373 layersList.remove(except); 374 // First look for data layer 375 for (Layer layer : layersList) { 376 377 // construct a new list with decreasing priority 378 int indexOfExcept = layersList.indexOf(except); 379 List<Layer> remainingLayers = new ArrayList<>(layersList.subList(indexOfExcept, layersList.size())); 380 List<Layer> previousLayers = new ArrayList<>(layersList.subList(0, indexOfExcept)); 381 Collections.reverse(previousLayers); 382 remainingLayers.addAll(previousLayers); 383 remainingLayers.remove(except); 384 385 // First look for visible data layer 386 for (Layer layer : remainingLayers) { 387 if (layer instanceof OsmDataLayer && layer.isVisible()) { 388 return layer; 389 } 390 } 391 392 // Then any data layer 393 for (Layer layer : remainingLayers) { 376 394 if (layer instanceof OsmDataLayer) { 377 395 return layer; … … 380 398 381 399 // Then any layer 382 if (!layersList.isEmpty()) 383 return layersList.get(0); 400 for (Layer layer : layersList) { 401 if (layer != except) { 402 return layer; 403 } 404 } 384 405 385 406 // and then give up
Note:
See TracChangeset
for help on using the changeset viewer.