package pipe.actions.gui; import pipe.controllers.GUIAnimator; import pipe.controllers.PetriNetController; import pipe.controllers.application.PipeApplicationController; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * This action is responsible for toggling the petri net in and out of animation mode */ public class ToggleAnimateAction extends AnimateAction { private final PipeApplicationModel applicationModel; private final PipeApplicationController applicationController; /** * Noop action to be used for toggling in and out of animation * Removes any spurious creates happening in animation mode */ private final ActionListener noopAction; public ToggleAnimateAction(String name, String tooltip, String keystroke, PipeApplicationModel applicationModel, PipeApplicationController applicationController) { super(name, tooltip, keystroke); this.applicationModel = applicationModel; this.applicationController = applicationController; noopAction = new NoopAction(applicationModel); } @Override public void actionPerformed(ActionEvent event) { PetriNetController petriNetController = applicationController.getActivePetriNetController(); boolean animated = petriNetController.toggleAnimation(); applicationModel.setInAnimationMode(animated); noopAction.actionPerformed(null); GUIAnimator animator = petriNetController.getAnimator(); if (animated) { animator.startAnimation(); } else { animator.finish(); } } }