mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.5 KiB
52 lines
1.5 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using System.Diagnostics; |
|
|
|
namespace ICSharpCode.AvalonEdit.Document |
|
{ |
|
/// <summary> |
|
/// Describes a change to a TextDocument. |
|
/// </summary> |
|
sealed class DocumentChangeOperation : IUndoableOperationWithContext |
|
{ |
|
TextDocument document; |
|
DocumentChangeEventArgs change; |
|
|
|
public DocumentChangeOperation(TextDocument document, DocumentChangeEventArgs change) |
|
{ |
|
this.document = document; |
|
this.change = change; |
|
} |
|
|
|
public void Undo(UndoStack stack) |
|
{ |
|
Debug.Assert(stack.state == UndoStack.StatePlayback); |
|
stack.RegisterAffectedDocument(document); |
|
stack.state = UndoStack.StatePlaybackModifyDocument; |
|
this.Undo(); |
|
stack.state = UndoStack.StatePlayback; |
|
} |
|
|
|
public void Redo(UndoStack stack) |
|
{ |
|
Debug.Assert(stack.state == UndoStack.StatePlayback); |
|
stack.RegisterAffectedDocument(document); |
|
stack.state = UndoStack.StatePlaybackModifyDocument; |
|
this.Redo(); |
|
stack.state = UndoStack.StatePlayback; |
|
} |
|
|
|
public void Undo() |
|
{ |
|
OffsetChangeMap map = change.OffsetChangeMapOrNull; |
|
document.Replace(change.Offset, change.InsertionLength, change.RemovedText, map != null ? map.Invert() : null); |
|
} |
|
|
|
public void Redo() |
|
{ |
|
document.Replace(change.Offset, change.RemovalLength, change.InsertedText, change.OffsetChangeMapOrNull); |
|
} |
|
} |
|
}
|
|
|