55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
import { Command } from "./Command";
|
||
|
||
/**
|
||
* 工具切换命令
|
||
* 用于切换编辑器的工具模式(如绘画、选择、橡皮擦等)
|
||
*/
|
||
export class ToolCommand extends Command {
|
||
/**
|
||
* 创建一个工具切换命令
|
||
* @param {Object} options 配置选项
|
||
* @param {Object} options.toolManager 工具管理器实例
|
||
* @param {String} options.tool 要设置的工具名称
|
||
* @param {String} options.previousTool 先前的工具名称(可选,如果不提供会在执行时记录)
|
||
* @param {Boolean} options.saveState 是否保存画布状态(默认为false)
|
||
*/
|
||
constructor(options) {
|
||
super({
|
||
...options,
|
||
name: `切换工具: ${options.tool}`,
|
||
description: `将工具切换为 ${options.tool}`,
|
||
});
|
||
|
||
this.toolManager = options.toolManager;
|
||
this.tool = options.tool;
|
||
this.previousTool = options.previousTool || null;
|
||
}
|
||
|
||
/**
|
||
* 执行工具切换
|
||
* @returns {String} 设置的工具名称
|
||
*/
|
||
execute() {
|
||
if (!this.toolManager) return null;
|
||
|
||
// 记录当前工具(用于撤销)
|
||
if (!this.previousTool) {
|
||
this.previousTool = this.toolManager.getCurrentTool();
|
||
}
|
||
|
||
// 切换工具
|
||
return this.toolManager.setTool(this.tool);
|
||
}
|
||
|
||
/**
|
||
* 撤销工具切换
|
||
* @returns {String} 恢复的工具名称
|
||
*/
|
||
undo() {
|
||
if (!this.toolManager || !this.previousTool) return null;
|
||
|
||
// 恢复到先前工具
|
||
return this.toolManager.setTool(this.previousTool);
|
||
}
|
||
}
|