Ticket #553: CombineWayAction.patch

File CombineWayAction.patch, 1.7 KB (added by Andy Street, 18 years ago)

Patch to reuse an existing id where possible

  • src/org/openstreetmap/josm/actions/CombineWayAction.java

     
    149149                        }
    150150                }
    151151
    152                 Way newWay = new Way(selectedWays.get(0));
     152                // Find the most appropriate way to modify.
     153
     154                // Eventually this might want to be the way with the longest
     155                // history or the longest selected way but for now just attempt
     156                // to reuse an existing id.
     157                Way modifyWay = selectedWays.peek();
     158                for (Way w : selectedWays) {
     159                        modifyWay = w;
     160                        if (w.id != 0) break;
     161                }
     162                Way newWay = new Way(modifyWay);
     163
    153164                newWay.nodes.clear();
    154165                newWay.nodes.addAll(nodeList);
    155166
     
    177188                }
    178189
    179190                LinkedList<Command> cmds = new LinkedList<Command>();
    180                 cmds.add(new DeleteCommand(selectedWays.subList(1, selectedWays.size())));
    181                 cmds.add(new ChangeCommand(selectedWays.peek(), newWay));
     191                LinkedList<Way> deletedWays = new LinkedList<Way>(selectedWays);
     192                deletedWays.remove(modifyWay);
     193                cmds.add(new DeleteCommand(deletedWays));
     194                cmds.add(new ChangeCommand(modifyWay, newWay));
    182195
    183196                // modify all relations containing the now-deleted ways
    184197                for (Relation r : relationsUsingWays) {
     
    195208                                }
    196209                        }
    197210                        for (String role : rolesToReAdd) {
    198                                 newRel.members.add(new RelationMember(role, selectedWays.peek()));
     211                                newRel.members.add(new RelationMember(role, modifyWay));
    199212                        }
    200213                        cmds.add(new ChangeCommand(r, newRel));
    201214                }
    202215                Main.main.undoRedo.add(new SequenceCommand(tr("Combine {0} ways", selectedWays.size()), cmds));
    203                 Main.ds.setSelected(selectedWays.peek());
     216                Main.ds.setSelected(modifyWay);
    204217        }
    205218
    206219        /**