Changeset 5233 in josm for trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java
- Timestamp:
- 2012-05-12T15:39:13+02:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java
r4982 r5233 7 7 import java.awt.event.ActionEvent; 8 8 import java.awt.event.KeyEvent; 9 import java.util.Collection; 10 import java.util.Collections; 9 11 import java.util.List; 10 12 … … 12 14 import org.openstreetmap.josm.gui.dialogs.LayerListDialog; 13 15 import org.openstreetmap.josm.gui.layer.Layer; 16 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 17 import org.openstreetmap.josm.gui.util.GuiHelper; 18 import org.openstreetmap.josm.tools.ImageProvider; 14 19 import org.openstreetmap.josm.tools.Shortcut; 15 20 … … 25 30 } 26 31 27 p ublic void merge(List<Layer> sourceLayers) {28 Layer targetLayer = askTargetLayer(sourceLayers);32 protected void doMerge(List<Layer> targetLayers, final Collection<Layer> sourceLayers) { 33 final Layer targetLayer = askTargetLayer(targetLayers); 29 34 if (targetLayer == null) 30 35 return; 31 for (Layer l: sourceLayers) { 32 if (l != targetLayer) { 33 targetLayer.mergeFrom(l); 34 Main.map.mapView.removeLayer(l); 36 Main.worker.submit(new Runnable() { 37 @Override 38 public void run() { 39 boolean layerMerged = false; 40 for (Layer sourceLayer: sourceLayers) { 41 if (sourceLayer != null && sourceLayer != targetLayer) { 42 if (sourceLayer instanceof OsmDataLayer && targetLayer instanceof OsmDataLayer 43 && ((OsmDataLayer)sourceLayer).isUploadDiscouraged() != ((OsmDataLayer)targetLayer).isUploadDiscouraged()) { 44 if (warnMergingUploadDiscouragedLayers(sourceLayer, targetLayer)) { 45 break; 46 } 47 } 48 targetLayer.mergeFrom(sourceLayer); 49 Main.map.mapView.removeLayer(sourceLayer); 50 layerMerged = true; 51 } 52 } 53 if (layerMerged) { 54 Main.map.mapView.setActiveLayer(targetLayer); 55 } 35 56 } 36 } 37 Main.map.mapView.setActiveLayer(targetLayer); 57 }); 58 } 59 60 public void merge(List<Layer> sourceLayers) { 61 doMerge(sourceLayers, sourceLayers); 38 62 } 39 63 40 public void merge( finalLayer sourceLayer) {64 public void merge(Layer sourceLayer) { 41 65 if (sourceLayer == null) 42 66 return; … … 46 70 return; 47 71 } 48 final Layer targetLayer = askTargetLayer(targetLayers); 49 if (targetLayer == null) 50 return; 51 Main.worker.submit(new Runnable() { 52 @Override 53 public void run() { 54 targetLayer.mergeFrom(sourceLayer); 55 Main.map.mapView.removeLayer(sourceLayer); 56 Main.map.mapView.setActiveLayer(targetLayer); 57 } 58 }); 72 doMerge(targetLayers, Collections.singleton(sourceLayer)); 59 73 } 60 74 … … 74 88 setEnabled(!LayerListDialog.getInstance().getModel().getPossibleMergeTargets(getEditLayer()).isEmpty()); 75 89 } 90 91 /** 92 * returns true if the user wants to cancel, false if they want to continue 93 */ 94 public static final boolean warnMergingUploadDiscouragedLayers(Layer sourceLayer, Layer targetLayer) { 95 return GuiHelper.warnUser(tr("Merging layers with different upload policies"), 96 "<html>" + 97 tr("You are about to merge data between layers ''{0}'' and ''{1}''.<br /><br />"+ 98 "These layers have different upload policies and should not been merged as it.<br />"+ 99 "Merging them will result to enforce the stricter policy (upload discouraged) to ''{1}''.<br /><br />"+ 100 "<b>This is not the recommended way of merging such data</b>.<br />"+ 101 "You should instead check and merge each object, one by one, by using ''<i>Merge selection</i>''.<br /><br />"+ 102 "Are you sure you want to continue?", sourceLayer.getName(), targetLayer.getName(), targetLayer.getName())+ 103 "</html>", 104 ImageProvider.get("dialogs", "mergedown"), tr("Ignore this hint and merge anyway")); 105 } 76 106 }
Note:
See TracChangeset
for help on using the changeset viewer.