43 lines
1.1 KiB
C#
43 lines
1.1 KiB
C#
using System.Collections.Generic;
|
|
|
|
namespace Ichni.Editor.Commands
|
|
{
|
|
/// <summary>
|
|
/// 复合命令(命令宏)。用于将多个子指令打包成一次操作,常用于控制台多行指令或者范围选择后的群组修改。
|
|
/// </summary>
|
|
public class CommandGroup : ICommand
|
|
{
|
|
private List<ICommand> commands = new List<ICommand>();
|
|
|
|
public void Add(ICommand cmd)
|
|
{
|
|
commands.Add(cmd);
|
|
}
|
|
|
|
public void Execute()
|
|
{
|
|
foreach (var cmd in commands) cmd.Execute();
|
|
}
|
|
|
|
public void Undo()
|
|
{
|
|
// 撤销必须严格倒序,防止依赖性问题(如先生成再修改,撤回时需先改回去再抹除生成)
|
|
for (int i = commands.Count - 1; i >= 0; i--)
|
|
{
|
|
commands[i].Undo();
|
|
}
|
|
}
|
|
|
|
public void Redo()
|
|
{
|
|
foreach (var cmd in commands) cmd.Redo();
|
|
}
|
|
|
|
public bool TryMerge(ICommand other)
|
|
{
|
|
// 复合指令目前暂不介入针对数值连贯修改的归并推演逻辑
|
|
return false;
|
|
}
|
|
}
|
|
}
|