/** * Remove the layer from the mapview. If the layer was in the list before, an LayerChange event is * fired. * * @param layer The layer to remove */ public void removeLayer(Layer layer) { layerLock.writeLock().lock(); layerLock.readLock().lock(); EnumSet<LayerListenerType> listenersToFire = EnumSet.noneOf(LayerListenerType.class); Layer oldActiveLayer = activeLayer; OsmDataLayer oldEditLayer = editLayer; try { try { List<Layer> layersList = new ArrayList<>(layers); if (!layersList.remove(layer)) return; listenersToFire = setEditLayer(layersList); if (layer == activeLayer) { listenersToFire.addAll(setActiveLayer(determineNextActiveLayer(layersList), false)); } if (layer instanceof OsmDataLayer) { ((OsmDataLayer) layer).removeLayerPropertyChangeListener(this); } layers.remove(layer); Main.removeProjectionChangeListener(layer); } finally { layerLock.writeLock().unlock(); } onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire); fireLayerRemoved(layer); layer.removePropertyChangeListener(this); layer.destroy(); AudioPlayer.reset(); } finally { layerLock.readLock().unlock(); } repaint(); }