Ticket #19138: 19138.patch

File 19138.patch, 2.4 KB (added by GerdP, 6 years ago)
  • src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java

     
    2222import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2323import org.openstreetmap.josm.data.osm.Relation;
    2424import org.openstreetmap.josm.data.osm.WaySegment;
     25import org.openstreetmap.josm.gui.ExtendedDialog;
    2526import org.openstreetmap.josm.gui.MainApplication;
    2627import org.openstreetmap.josm.gui.MapFrame;
    2728import org.openstreetmap.josm.gui.MapView;
     
    150151        }
    151152
    152153        updateKeyModifiers(e);
    153 
    154154        Command c;
    155155        if (ctrl) {
    156156            c = DeleteCommand.deleteWithReferences(lm.getEditDataSet().getSelected());
     
    160160        // if c is null, an error occurred or the user aborted. Don't do anything in that case.
    161161        if (c != null) {
    162162            UndoRedoHandler.getInstance().add(c);
     163            if (changesHiddenWay(c)) {
     164                final ConfirmDeleteDialog ed = new ConfirmDeleteDialog();
     165                ed.setContent(tr("Are you sure that you want to delete elements with attached ways that are hidden by filters?"));
     166                ed.toggleEnable("deletedHiddenElements");
     167                if (ed.showDialog().getValue() != 1) {
     168                    UndoRedoHandler.getInstance().undo(1);
     169                    return;
     170                }
     171            }
     172
    163173            //FIXME: This should not be required, DeleteCommand should update the selection, otherwise undo/redo won't work.
    164174            lm.getEditDataSet().setSelected();
    165175        }
     
    425435        // We don't have a mouse event, so we pass the old mouse event but the new modifiers.
    426436        giveUserFeedback(oldEvent, modifiers);
    427437    }
     438
     439    private boolean changesHiddenWay(Command c) {
     440        return c.getParticipatingPrimitives().stream().anyMatch(OsmPrimitive::isDisabledAndHidden);
     441    }
     442
     443    static class ConfirmDeleteDialog extends ExtendedDialog {
     444        ConfirmDeleteDialog() {
     445            super(MainApplication.getMainFrame(),
     446                    tr("Delete elements"),
     447                    tr("Delete them"), tr("Undo delete"));
     448            setButtonIcons("dialogs/delete", "cancel");
     449            setCancelButton(2);
     450        }
     451    }
     452
    428453}