package pipe.actions.gui;
import pipe.controllers.GUIAnimator;
import pipe.controllers.PetriNetController;
import pipe.controllers.application.PipeApplicationController;
import java.awt.event.ActionEvent;
/**
* Steps forward in the animation sequence, i.e. redoes the last transition fired when clicked
*/
@SuppressWarnings("serial")
public class StepForwardAction extends AnimateAction {
/**
* Main PIPE application controller
*/
private final PipeApplicationController applicationController;
/**
* Step backward action
*/
private StepBackwardAction stepBackwardAction;
/**
*
* @param name icon name
* @param tooltip tooltip message
* @param keystroke keyboard shortcut
* @param applicationController main PIPE application controller
*/
public StepForwardAction(String name, String tooltip, String keystroke,
PipeApplicationController applicationController) {
super(name, tooltip, keystroke);
this.applicationController = applicationController;
}
/**
* Register a step back action. When a redo is performed this action will be enabled
* @param stepBackwardAction action
*/
public void registerStepBack(StepBackwardAction stepBackwardAction) {
this.stepBackwardAction = stepBackwardAction;
}
/**
* Performs an redo and enables the step back action if it is set
* @param event event
*/
@Override
public void actionPerformed(ActionEvent event) {
PetriNetController petriNetController = applicationController.getActivePetriNetController();
GUIAnimator animator = petriNetController.getAnimator();
animator.stepForward();
this.setEnabled(animator.isStepForwardAllowed());
if (stepBackwardAction != null) {
stepBackwardAction.setEnabled(animator.isStepBackAllowed());
}
}
}