Changeset 1814 in josm for trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
- Timestamp:
- 2009-07-19T19:04:49+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
r1677 r1814 55 55 public MergeNodesAction() { 56 56 super(tr("Merge Nodes"), "mergenodes", tr("Merge nodes into the oldest one."), 57 Shortcut.registerShortcut("tools:mergenodes", tr("Tool: {0}", tr("Merge Nodes")), KeyEvent.VK_M, Shortcut.GROUP_EDIT), true);57 Shortcut.registerShortcut("tools:mergenodes", tr("Tool: {0}", tr("Merge Nodes")), KeyEvent.VK_M, Shortcut.GROUP_EDIT), true); 58 58 DataSet.selListeners.add(this); 59 59 } 60 60 61 61 public void actionPerformed(ActionEvent event) { 62 Collection<OsmPrimitive> selection = Main.ds.getSelected();62 Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected(); 63 63 LinkedList<Node> selectedNodes = new LinkedList<Node>(); 64 64 … … 67 67 // anyway as long as we have at least two nodes 68 68 for (OsmPrimitive osm : selection) 69 if (osm instanceof Node) 69 if (osm instanceof Node) { 70 70 selectedNodes.add((Node)osm); 71 } 71 72 72 73 if (selectedNodes.size() < 2) { … … 93 94 } 94 95 } 95 if (useNode == null) 96 if (useNode == null) { 96 97 useNode = selectedNodes.iterator().next(); 98 } 97 99 98 100 mergeNodes(selectedNodes, useNode); … … 102 104 * really do the merging - returns the node that is left 103 105 */ 104 public staticNode mergeNodes(LinkedList<Node> allNodes, Node dest) {106 public Node mergeNodes(LinkedList<Node> allNodes, Node dest) { 105 107 Node newNode = new Node(dest); 106 108 … … 118 120 new HashMap<Pair<Relation,String>, HashSet<Node>>(); 119 121 HashSet<Relation> relationsUsingNodes = new HashSet<Relation>(); 120 for (Relation r : Main.ds.relations) { 121 if (r.deleted || r.incomplete) continue; 122 for (Relation r : getCurrentDataSet().relations) { 123 if (r.deleted || r.incomplete) { 124 continue; 125 } 122 126 for (RelationMember rm : r.members) { 123 127 if (rm.member instanceof Node) { … … 148 152 tr("Merge nodes with different memberships?"), 149 153 tr("The selected nodes have differing relation memberships. " 150 + "Do you still want to merge them?"), 151 new String[] {tr("Merge Anyway"), tr("Cancel")}, 152 new String[] {"mergenodes.png", "cancel.png"}).getValue(); 153 if (option == 1) break; 154 + "Do you still want to merge them?"), 155 new String[] {tr("Merge Anyway"), tr("Cancel")}, 156 new String[] {"mergenodes.png", "cancel.png"}).getValue(); 157 if (option == 1) { 158 break; 159 } 154 160 return null; 155 161 } … … 160 166 for (Node n : allNodes) { 161 167 for (Entry<String,String> e : n.entrySet()) { 162 if (!props.containsKey(e.getKey())) 168 if (!props.containsKey(e.getKey())) { 163 169 props.put(e.getKey(), new TreeSet<String>()); 170 } 164 171 props.get(e.getKey()).add(e.getValue()); 165 172 } … … 187 194 if (!components.isEmpty()) { 188 195 int answer = new ExtendedDialog(Main.parent, 189 tr("Enter values for all conflicts."),190 p,191 new String[] {tr("Solve Conflicts"), tr("Cancel")},192 new String[] {"dialogs/conflict.png", "cancel.png"}).getValue();196 tr("Enter values for all conflicts."), 197 p, 198 new String[] {tr("Solve Conflicts"), tr("Cancel")}, 199 new String[] {"dialogs/conflict.png", "cancel.png"}).getValue(); 193 200 if (answer != 1) 194 201 return null; 195 for (Entry<String, JComboBox> e : components.entrySet()) 202 for (Entry<String, JComboBox> e : components.entrySet()) { 196 203 newNode.put(e.getKey(), e.getValue().getEditor().getItem().toString()); 204 } 197 205 } 198 206 … … 202 210 Collection<OsmPrimitive> del = new HashSet<OsmPrimitive>(); 203 211 204 for (Way w : Main.ds.ways) { 205 if (w.deleted || w.incomplete || w.nodes.size() < 1) continue; 212 for (Way w : getCurrentDataSet().ways) { 213 if (w.deleted || w.incomplete || w.nodes.size() < 1) { 214 continue; 215 } 206 216 boolean modify = false; 207 217 for (Node sn : allNodes) { 208 if (sn == dest) continue; 218 if (sn == dest) { 219 continue; 220 } 209 221 if (w.nodes.contains(sn)) { 210 222 modify = true; 211 223 } 212 224 } 213 if (!modify) continue; 225 if (!modify) { 226 continue; 227 } 214 228 // OK - this way contains one or more nodes to change 215 229 ArrayList<Node> nn = new ArrayList<Node>(); … … 227 241 if (nn.size() < 2) { 228 242 CollectBackReferencesVisitor backRefs = 229 new CollectBackReferencesVisitor( Main.ds, false);243 new CollectBackReferencesVisitor(getCurrentDataSet(), false); 230 244 w.visit(backRefs); 231 245 if (!backRefs.data.isEmpty()) { 232 246 JOptionPane.showMessageDialog(Main.parent, 233 tr("Cannot merge nodes: " +247 tr("Cannot merge nodes: " + 234 248 "Would have to delete a way that is still used.")); 235 249 return null; … … 247 261 del.addAll(allNodes); 248 262 del.remove(dest); 249 if (!del.isEmpty()) cmds.add(new DeleteCommand(del)); 263 if (!del.isEmpty()) { 264 cmds.add(new DeleteCommand(del)); 265 } 250 266 251 267 // modify all relations containing the now-deleted nodes … … 270 286 271 287 Main.main.undoRedo.add(new SequenceCommand(tr("Merge {0} nodes", allNodes.size()), cmds)); 272 Main.ds.setSelected(dest);288 getCurrentDataSet().setSelected(dest); 273 289 274 290 return dest;
Note:
See TracChangeset
for help on using the changeset viewer.