This repository has been archived on 2025-11-27. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AUTS_OLD/UTS_Core/Undo/CommandManager.vb

78 lines
1.9 KiB
VB.net
Raw Normal View History

2024-03-11 16:32:52 +08:00
Namespace Undo
Public Class CommandManager
Protected Property UndoCommands As New Stack(Of ICommand)
Protected Property RedoCommands As New Stack(Of ICommand)
''' <summary>
''' 运行命令,并将命令添加至撤销堆栈
''' </summary>
''' <param name="command"></param>
Public Sub RunCommand(command As ICommand)
command.Execute()
AddUndoCommand(command)
End Sub
''' <summary>
''' 将命令添加至撤销堆栈
''' </summary>
Public Sub AddUndoCommand(command As ICommand)
UndoCommands.Push(command)
If RedoCommands.Count > 0 Then
ClearRedoCommands()
End If
End Sub
''' <summary>
''' 清空撤销命令堆栈
''' </summary>
Public Sub ClearUndoCommands()
UndoCommands.Clear()
End Sub
''' <summary>
''' 清空重做命令堆栈
''' </summary>
Public Sub ClearRedoCommands()
RedoCommands.Clear()
End Sub
''' <summary>
''' 清空撤销与重做命令堆栈
''' </summary>
Public Sub ClearCommands()
ClearUndoCommands()
ClearRedoCommands()
End Sub
''' <summary>
''' 执行撤销命令
''' </summary>
Public Sub Undo()
If UndoCommands.Count <= 0 Then Return
Dim command As ICommand = UndoCommands.Pop()
command.Undo()
RedoCommands.Push(command)
End Sub
''' <summary>
''' 执行重做命令
''' </summary>
Public Sub Redo()
If RedoCommands.Count <= 0 Then Return
Dim command As ICommand = RedoCommands.Pop()
command.Redo()
UndoCommands.Push(command)
'MemberwiseClone()‘浅拷贝
End Sub
End Class
End Namespace