package pipe.actions.gui;
import pipe.controllers.PetriNetController;
import pipe.controllers.application.PipeApplicationController;
import javax.swing.undo.UndoManager;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
/**
* Action used to perform an undo whilst in edit more
*/
@SuppressWarnings("serial")
public class UndoAction extends GuiAction {
/**
* Main PIPE application controller
*/
private final PipeApplicationController applicationController;
/**
* Redo action
*/
private RedoAction redoAction;
/**
*
* Constructor
* @param applicationController main PIPE application controller
*/
public UndoAction(PipeApplicationController applicationController) {
super("Undo", "Undo (Ctrl-Z)", KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
this.applicationController = applicationController;
}
/**
* Register a redo action to this undo actions
*
* @param redoAction redo action
*/
public void registerRedoAction(RedoAction redoAction) {
this.redoAction = redoAction;
}
/**
* Perform an undo and enable the redo action if it has been set
* @param actionEvent event
*/
@Override
public void actionPerformed(ActionEvent actionEvent) {
PetriNetController controller = applicationController.getActivePetriNetController();
UndoManager manager = controller.getUndoManager();
manager.undo();
this.setEnabled(manager.canUndo());
if (redoAction != null) {
redoAction.setEnabled(manager.canRedo());
}
}
}