@Override public void run() { UndoRedo.Manager urm = getUndoRedo(); // Compare whether the savepoint edit is still the edit-to-be-undone boolean unmodify = false; if (urm instanceof UndoRedoManager) { // If not on savepoint then do not mark as unmodified if (((UndoRedoManager)urm).isAtSavepoint()) { unmodify = true; } } else { unmodify = true; } if (unmodify) { callNotifyUnmodified(); } } });
@Override public boolean addEdit(UndoableEdit anEdit) { if (undoRedoManager.isAtSavepoint()) { // Check whether save actions can be merged with last edit. The check is done here // since at this time trimEdits() was called already so this is truly a last edit. undoRedoManager.mergeSaveActionsToLastEdit(this); // Prohibit adding to existing edit at savepoint since undo to savepoint could no longer be done // when merging with another edit. // Since addEdit() will fail the anEdit.replaceEdit() will be attempted; but it will not succeed too // (see impl) so anEdit will be added as a fresh edit to end of UM.edits. // However undoRedoManager.savepointEdit must be set by undoRedoManager.addEdit() (not here) // since UM.edits may be empty in which case WUE.addEdit() is not called. return false; } // anEdit is already wrapped for possible regular addition WrapUndoEdit wrapEdit = (WrapUndoEdit) anEdit; boolean added = delegate.addEdit(wrapEdit.delegate); return added; }
@Override public boolean replaceEdit(UndoableEdit anEdit) { if (undoRedoManager.isAtSavepoint()) { // Prohibit replacing at savepoint return false; } WrapUndoEdit wrapEdit = (WrapUndoEdit) anEdit; boolean replaced = delegate.replaceEdit(wrapEdit.delegate); undoRedoManager.checkLogOp("WrapUndoEdit.replaceEdit=" + replaced, anEdit); if (replaced) { undoRedoManager.checkReplaceSavepointEdit(wrapEdit, this); } return replaced; }
if (LOG.isLoggable(Level.FINE)) { int editsSize = (edits != null) ? edits.size() : 0; LOG.fine("discardAllEdits(): savepoint=" + isAtSavepoint() + // NOI18N ", editsSize=" + editsSize + "\n"); // NOI18N
void afterRedoCheck(WrapUndoEdit edit) { if (isAtSavepoint()) { // Redoing edit right before savepoint. checkLogOp("afterRedoCheck-atSavepoint", edit); // NOI18N // saveActionsEdit already processed by checkSavepointBeforeUndo() beforeSavepoint = false; savepointEdit = edit; } else if (savepointEdit == edit) { // Redone to savepoint if (onSaveTasksEdit != null) { checkLogOp(" saveActionsEdit.redo()", onSaveTasksEdit); // NOI18N onSaveTasksEdit.redo(); } checkLogOp("afterRedoCheck-becomesSavepoint", edit); // NOI18N assert (beforeSavepoint) : "Expected to be before savepoint"; // NOI18N markSavepointAndUnmodified(); } }
void afterUndoCheck(WrapUndoEdit edit) { if (isAtSavepoint()) { // Undoing edit right before savepoint. checkLogOp("afterUndoCheck-atSavepoint", edit); // NOI18N // saveActionsEdit already processed by checkSavepointBeforeUndo() beforeSavepoint = true; savepointEdit = edit; } else if (savepointEdit == edit) { // Undone to savepoint if (onSaveTasksEdit != null) { checkLogOp(" saveActionsEdit.redo()", onSaveTasksEdit); // NOI18N onSaveTasksEdit.redo(); } checkLogOp("afterUndoCheck-becomesSavepoint-markUnmodified", edit); // NOI18N assert (!beforeSavepoint) : "Expected to be behind savepoint"; // NOI18N markSavepointAndUnmodified(); } }
@Override public void undo() throws CannotUndoException { undoRedoManager.checkLogOp("WrapUndoEdit.undo", this); boolean savepoint = undoRedoManager.isAtSavepoint(); if (savepoint) { undoRedoManager.beforeUndoAtSavepoint(this); } boolean done = false; try { delegate.undo(); done = true; // This will only happen if delegate.undo() does not throw CannotUndoException undoRedoManager.afterUndoCheck(this); } finally { if (!done && savepoint) { undoRedoManager.delegateUndoFailedAtSavepoint(this); } } }
@Override public void redo() throws CannotRedoException { undoRedoManager.checkLogOp("WrapUndoEdit.redo", this); boolean savepoint = undoRedoManager.isAtSavepoint(); if (savepoint) { undoRedoManager.beforeRedoAtSavepoint(this); } boolean done = false; try { delegate.redo(); done = true; // This will only happen if delegate.redo() does not throw CannotRedoException undoRedoManager.afterRedoCheck(this); } finally { if (!done && savepoint) { undoRedoManager.delegateRedoFailedAtSavepoint(this); } } }
if (isAtSavepoint()) { checkLogOp("addEdit-atSavepoint", wrapEdit); // NOI18N beforeSavepoint = false;