Changeset 5519 in josm
- Timestamp:
- 2012-09-30T17:36:39+02:00 (13 years ago)
- Location:
- trunk/src/org/openstreetmap/josm
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/Main.java
r5514 r5519 628 628 } 629 629 630 /** 631 * Asks user to perform "save layer" operations (save .osm on disk and/or upload osm data to server) for all {@link OsmDataLayer} before JOSM exits. 632 * @return {@code true} if there was nothing to save, or if the user wants to proceed to save operations. {@code false} if the user cancels. 633 * @since 2025 634 */ 630 635 public static boolean saveUnsavedModifications() { 631 if (map == null) return true; 632 SaveLayersDialog dialog = new SaveLayersDialog(Main.parent); 636 if (map == null || map.mapView == null) return true; 637 return saveUnsavedModifications(map.mapView.getLayersOfType(OsmDataLayer.class), true); 638 } 639 640 /** 641 * Asks user to perform "save layer" operations (save .osm on disk and/or upload osm data to server) before osm layers deletion. 642 * 643 * @param selectedLayers The layers to check. Only instances of {@link OsmDataLayer} are considered. 644 * @param exit {@code true} if JOSM is exiting, {@code false} otherwise. 645 * @return {@code true} if there was nothing to save, or if the user wants to proceed to save operations. {@code false} if the user cancels. 646 * @since 5519 647 */ 648 public static boolean saveUnsavedModifications(List<? extends Layer> selectedLayers, boolean exit) { 649 SaveLayersDialog dialog = new SaveLayersDialog(parent); 633 650 List<OsmDataLayer> layersWithUnmodifiedChanges = new ArrayList<OsmDataLayer>(); 634 for (OsmDataLayer l: Main.map.mapView.getLayersOfType(OsmDataLayer.class)) { 635 if ((l.requiresSaveToFile() || l.requiresUploadToServer()) && l.data.isModified()) { 636 layersWithUnmodifiedChanges.add(l); 637 } 638 } 639 dialog.prepareForSavingAndUpdatingLayersBeforeExit(); 651 for (Layer l: selectedLayers) { 652 if (!(l instanceof OsmDataLayer)) { 653 continue; 654 } 655 OsmDataLayer odl = (OsmDataLayer)l; 656 if ((odl.requiresSaveToFile() || (odl.requiresUploadToServer() && !odl.isUploadDiscouraged())) && odl.data.isModified()) { 657 layersWithUnmodifiedChanges.add(odl); 658 } 659 } 660 if (exit) { 661 dialog.prepareForSavingAndUpdatingLayersBeforeExit(); 662 } else { 663 dialog.prepareForSavingAndUpdatingLayersBeforeDelete(); 664 } 640 665 if (!layersWithUnmodifiedChanges.isEmpty()) { 641 666 dialog.getModel().populate(layersWithUnmodifiedChanges); -
trunk/src/org/openstreetmap/josm/gui/MapView.java
r5472 r5519 69 69 * @author imi 70 70 */ 71 public class MapView extends NavigatableComponent implements PropertyChangeListener, PreferenceChangedListener { 71 public class MapView extends NavigatableComponent implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.LayerStateChangeListener { 72 72 73 73 /** … … 312 312 } 313 313 fireLayerAdded(layer); 314 boolean callSetActiveLayer = layer instanceof OsmDataLayer || activeLayer == null; 314 boolean isOsmDataLayer = layer instanceof OsmDataLayer; 315 if (isOsmDataLayer) { 316 ((OsmDataLayer)layer).addLayerStateChangeListener(this); 317 } 318 boolean callSetActiveLayer = isOsmDataLayer || activeLayer == null; 315 319 if (callSetActiveLayer) { 316 320 // autoselect the new layer … … 393 397 if (layer == activeLayer) { 394 398 setActiveLayer(determineNextActiveLayer(layersList), false); 399 } 400 401 if (layer instanceof OsmDataLayer) { 402 ((OsmDataLayer)layer).removeLayerPropertyChangeListener(this); 395 403 } 396 404 … … 863 871 864 872 protected void refreshTitle() { 865 boolean dirty = editLayer != null && (editLayer.requiresSaveToFile() || editLayer.requiresUploadToServer()); 873 boolean dirty = editLayer != null && (editLayer.requiresSaveToFile() || (editLayer.requiresUploadToServer() && !editLayer.isUploadDiscouraged())); 866 874 if (dirty) { 867 875 JOptionPane.getFrameForComponent(Main.parent).setTitle("* " + tr("Java OpenStreetMap Editor")); … … 893 901 } 894 902 903 @Override 904 public void uploadDiscouragedChanged(OsmDataLayer layer, boolean newValue) { 905 if (layer == getEditLayer()) { 906 refreshTitle(); 907 } 908 } 895 909 } -
trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
r5449 r5519 389 389 } 390 390 391 protected boolean enforceUploadOrSaveModifiedData(List<Layer> selectedLayers) {392 SaveLayersDialog dialog = new SaveLayersDialog(Main.parent);393 List<OsmDataLayer> layersWithUnmodifiedChanges = new ArrayList<OsmDataLayer>();394 for (Layer l: selectedLayers) {395 if (! (l instanceof OsmDataLayer)) {396 continue;397 }398 OsmDataLayer odl = (OsmDataLayer)l;399 if ((odl.requiresSaveToFile() || odl.requiresUploadToServer()) && odl.data.isModified()) {400 layersWithUnmodifiedChanges.add(odl);401 }402 }403 dialog.prepareForSavingAndUpdatingLayersBeforeDelete();404 if (!layersWithUnmodifiedChanges.isEmpty()) {405 dialog.getModel().populate(layersWithUnmodifiedChanges);406 dialog.setVisible(true);407 switch(dialog.getUserAction()) {408 case CANCEL: return false;409 case PROCEED: return true;410 default: return false;411 }412 }413 return true;414 }415 416 391 @Override 417 392 public void actionPerformed(ActionEvent e) { … … 419 394 if (selectedLayers.isEmpty()) 420 395 return; 421 if (! enforceUploadOrSaveModifiedData(selectedLayers))396 if (!Main.saveUnsavedModifications(selectedLayers, false)) 422 397 return; 423 for(Layer l: selectedLayers) { 398 for (Layer l: selectedLayers) { 424 399 Main.main.removeLayer(l); 425 400 } -
trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
r5459 r5519 28 28 import java.util.List; 29 29 import java.util.Map; 30 import java.util.concurrent.CopyOnWriteArrayList; 30 31 31 32 import javax.swing.AbstractAction; … … 165 166 void commandChanged(int queueSize, int redoSize); 166 167 } 168 169 /** 170 * Listener called when a state of this layer has changed. 171 */ 172 public interface LayerStateChangeListener { 173 /** 174 * Notifies that the "upload discouraged" (upload=no) state has changed. 175 * @param layer The layer that has been modified 176 * @param newValue The new value of the state 177 */ 178 void uploadDiscouragedChanged(OsmDataLayer layer, boolean newValue); 179 } 180 181 private final CopyOnWriteArrayList<LayerStateChangeListener> layerStateChangeListeners = new CopyOnWriteArrayList<LayerStateChangeListener>(); 182 183 /** 184 * Adds a layer state change listener 185 * 186 * @param listener the listener. Ignored if null or already registered. 187 * @since 5519 188 */ 189 public void addLayerStateChangeListener(LayerStateChangeListener listener) { 190 if (listener != null) { 191 layerStateChangeListeners.addIfAbsent(listener); 192 } 193 } 194 195 /** 196 * Removes a layer property change listener 197 * 198 * @param listener the listener. Ignored if null or already registered. 199 * @since 5519 200 */ 201 public void removeLayerPropertyChangeListener(LayerStateChangeListener listener) { 202 layerStateChangeListeners.remove(listener); 203 } 167 204 168 205 /** … … 742 779 743 780 public final void setUploadDiscouraged(boolean uploadDiscouraged) { 744 data.setUploadDiscouraged(uploadDiscouraged); 781 if (uploadDiscouraged ^ isUploadDiscouraged()) { 782 data.setUploadDiscouraged(uploadDiscouraged); 783 for (LayerStateChangeListener l : layerStateChangeListeners) { 784 l.uploadDiscouragedChanged(this, uploadDiscouraged); 785 } 786 } 745 787 } 746 788
Note:
See TracChangeset
for help on using the changeset viewer.