mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
45 lines
834 B
TypeScript
45 lines
834 B
TypeScript
import type { Command } from "@/lib/commands";
|
|||
|
|
|
||
|
|
export class CommandManager {
|
||
|
|
private history: Command[] = [];
|
||
|
|
private redoStack: Command[] = [];
|
||
|
|
|
||
|
|
execute({ command }: { command: Command }): Command {
|
||
|
|
command.execute();
|
||
|
|
this.history.push(command);
|
||
|
|
this.redoStack = [];
|
||
|
|
return command;
|
||
|
|
}
|
||
|
|
|
||
|
|
undo(): void {
|
||
|
|
if (this.history.length === 0) return;
|
||
|
|
const command = this.history.pop();
|
||
|
|
command?.undo();
|
||
|
|
if (command) {
|
||
|
|
this.redoStack.push(command);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
redo(): void {
|
||
|
|
if (this.redoStack.length === 0) return;
|
||
|
|
const command = this.redoStack.pop();
|
||
|
|
command?.redo();
|
||
|
|
if (command) {
|
||
|
|
this.history.push(command);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
canUndo(): boolean {
|
||
|
|
return this.history.length > 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
canRedo(): boolean {
|
||
|
|
return this.redoStack.length > 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
clear(): void {
|
||
|
|
this.history = [];
|
||
|
|
this.redoStack = [];
|
||
|
|
}
|
||
|
|
}
|