Fix direction of command undo/redo

Signed-off-by: Taylor Smock <taylor.smock@kaart.com>
pull/1/head
Taylor Smock 2019-10-30 13:45:06 -06:00
rodzic 1b6d07c6d1
commit 6ddc12ce9d
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 625F6A74A3E4311A
2 zmienionych plików z 15 dodań i 17 usunięć

Wyświetl plik

@ -15,7 +15,6 @@ import org.openstreetmap.josm.data.osm.Way;
import org.openstreetmap.josm.gui.MainApplication; import org.openstreetmap.josm.gui.MainApplication;
import org.openstreetmap.josm.plugins.mapwithai.MapWithAIPlugin; import org.openstreetmap.josm.plugins.mapwithai.MapWithAIPlugin;
import org.openstreetmap.josm.plugins.mapwithai.commands.MergeDuplicateWays; import org.openstreetmap.josm.plugins.mapwithai.commands.MergeDuplicateWays;
import org.openstreetmap.josm.tools.Logging;
import org.openstreetmap.josm.tools.Shortcut; import org.openstreetmap.josm.tools.Shortcut;
/** /**
@ -38,21 +37,16 @@ public class MergeDuplicateWaysAction extends JosmAction {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
final List<Way> ways = new ArrayList<>(MainApplication.getLayerManager().getActiveDataSet().getSelectedWays()); final List<Way> ways = new ArrayList<>(MainApplication.getLayerManager().getActiveDataSet().getSelectedWays());
Command command = null; Command command = null;
int i = 0; if (ways.size() == 2) {
do { command = new MergeDuplicateWays(ways.get(0), ways.get(1));
if (ways.size() == 2) { } else if (ways.size() == 1) {
command = new MergeDuplicateWays(ways.get(0), ways.get(1)); command = new MergeDuplicateWays(ways.get(0));
} else if (ways.size() == 1) { } else if (ways.isEmpty()) {
command = new MergeDuplicateWays(ways.get(0)); command = new MergeDuplicateWays(MainApplication.getLayerManager().getActiveDataSet());
} else if (ways.isEmpty()) { }
command = new MergeDuplicateWays(MainApplication.getLayerManager().getActiveDataSet()); if (command != null) {
} UndoRedoHandler.getInstance().add(command);
if (command != null) { }
UndoRedoHandler.getInstance().add(command);
i++;
Logging.error(Integer.toString(i));
}
} while (command != null && i < 10);
} }
} }

Wyświetl plik

@ -17,6 +17,7 @@ import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.openstreetmap.josm.command.ChangeCommand; import org.openstreetmap.josm.command.ChangeCommand;
import org.openstreetmap.josm.command.ChangePropertyCommand;
import org.openstreetmap.josm.command.Command; import org.openstreetmap.josm.command.Command;
import org.openstreetmap.josm.command.DeleteCommand; import org.openstreetmap.josm.command.DeleteCommand;
import org.openstreetmap.josm.command.SequenceCommand; import org.openstreetmap.josm.command.SequenceCommand;
@ -85,7 +86,9 @@ public class MergeDuplicateWays extends Command {
@Override @Override
public void undoCommand() { public void undoCommand() {
for (final Command tCommand : commands) { List<Command> reversedCommands = new ArrayList<>(commands);
Collections.reverse(reversedCommands);
for (final Command tCommand : reversedCommands) {
tCommand.undoCommand(); tCommand.undoCommand();
} }
} }
@ -209,6 +212,7 @@ public class MergeDuplicateWays extends Command {
if (newWay.getNodesCount() > 0) { if (newWay.getNodesCount() > 0) {
commands.add(new DeleteCommand(way2)); commands.add(new DeleteCommand(way2));
commands.add(new ChangeCommand(way1, newWay)); commands.add(new ChangeCommand(way1, newWay));
commands.add(new ChangePropertyCommand(way1.getDataSet(), Collections.singleton(newWay), way2.getKeys()));
} }
if (commands.contains(null)) { if (commands.contains(null)) {
commands = commands.stream().filter(Objects::nonNull).collect(Collectors.toList()); commands = commands.stream().filter(Objects::nonNull).collect(Collectors.toList());