1 | Index: src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java
|
---|
2 | ===================================================================
|
---|
3 | --- src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java (revision 16489)
|
---|
4 | +++ src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java (working copy)
|
---|
5 | @@ -2,8 +2,15 @@
|
---|
6 |
|
---|
7 | import static org.openstreetmap.josm.tools.I18n.tr;
|
---|
8 |
|
---|
9 | +import java.awt.GridBagLayout;
|
---|
10 | +import java.awt.geom.Area;
|
---|
11 | import java.util.*;
|
---|
12 |
|
---|
13 | +import javax.swing.JLabel;
|
---|
14 | +import javax.swing.JOptionPane;
|
---|
15 | +import javax.swing.JPanel;
|
---|
16 | +
|
---|
17 | +import org.openstreetmap.josm.Main;
|
---|
18 | import org.openstreetmap.josm.actions.MergeNodesAction;
|
---|
19 | import org.openstreetmap.josm.command.*;
|
---|
20 | import org.openstreetmap.josm.data.coor.LatLon;
|
---|
21 | @@ -12,6 +19,7 @@
|
---|
22 | import org.openstreetmap.josm.plugins.validator.Test;
|
---|
23 | import org.openstreetmap.josm.plugins.validator.TestError;
|
---|
24 | import org.openstreetmap.josm.plugins.validator.util.Bag;
|
---|
25 | +import org.openstreetmap.josm.tools.DontShowAgainInfo;
|
---|
26 | /**
|
---|
27 | * Tests if there are duplicate nodes
|
---|
28 | *
|
---|
29 | @@ -89,7 +97,8 @@
|
---|
30 | if (target == null)
|
---|
31 | target = nodes.iterator().next();
|
---|
32 |
|
---|
33 | - MergeNodesAction.mergeNodes(nodes, target);
|
---|
34 | + if(checkAndConfirmOutlyingDeletes(nodes))
|
---|
35 | + MergeNodesAction.mergeNodes(nodes, target);
|
---|
36 |
|
---|
37 | return null; // undoRedo handling done in mergeNodes
|
---|
38 | }
|
---|
39 | @@ -99,4 +108,33 @@
|
---|
40 | {
|
---|
41 | return (testError.getTester() instanceof DuplicateNode);
|
---|
42 | }
|
---|
43 | +
|
---|
44 | + /**
|
---|
45 | + * Check whether user is about to delete data outside of the download area.
|
---|
46 | + * Request confirmation if he is.
|
---|
47 | + */
|
---|
48 | + private static boolean checkAndConfirmOutlyingDeletes(LinkedList<Node> del) {
|
---|
49 | + Area a = Main.ds.getDataSourceArea();
|
---|
50 | + if (a != null) {
|
---|
51 | + for (OsmPrimitive osm : del) {
|
---|
52 | + if (osm instanceof Node && osm.id != 0) {
|
---|
53 | + Node n = (Node) osm;
|
---|
54 | + if (!a.contains(n.getCoor())) {
|
---|
55 | + JPanel msg = new JPanel(new GridBagLayout());
|
---|
56 | + msg.add(new JLabel(
|
---|
57 | + "<html>" +
|
---|
58 | + // leave message in one tr() as there is a grammatical connection.
|
---|
59 | + tr("You are about to delete nodes outside of the area you have downloaded." +
|
---|
60 | + "<br>" +
|
---|
61 | + "This can cause problems because other objects (that you don't see) might use them." +
|
---|
62 | + "<br>" +
|
---|
63 | + "Do you really want to delete?") + "</html>"));
|
---|
64 | + return DontShowAgainInfo.show("delete_outside_nodes", msg, false, JOptionPane.YES_NO_OPTION, JOptionPane.YES_OPTION);
|
---|
65 | + }
|
---|
66 | +
|
---|
67 | + }
|
---|
68 | + }
|
---|
69 | + }
|
---|
70 | + return true;
|
---|
71 | + }
|
---|
72 | }
|
---|