text: package pipe.actions.gui;
  
  import pipe.controllers.GUIAnimator;
  import pipe.controllers.PetriNetController;
  import pipe.controllers.application.PipeApplicationController;
  
  import java.awt.event.ActionEvent;
  
  /**
   * This action is responsible for firing multiple random enabled
   * transitions when animation mode is on
   */
  @SuppressWarnings("serial")
  public class MultiRandomAnimateAction extends AnimateAction {
      /**
       * Step backward action, used to set its availability when a step forward has been performed.
       */
      private final GuiAction stepBackwardAction;
  
      /**
       * Main PIPE application controller
       */
      private final PipeApplicationController applicationController;
  
      /**
       * Constructor
       * @param name image name
       * @param tooltip tooltip message
       * @param keystroke shortcut keystroke
       * @param stepBackwardAction step backward action
       * @param applicationController main PIPE application controller
       */
      public MultiRandomAnimateAction(String name, String tooltip, String keystroke, GuiAction stepBackwardAction,
                                      PipeApplicationController applicationController) {
          super(name, tooltip, keystroke);
          this.stepBackwardAction = stepBackwardAction;
          this.applicationController = applicationController;
      }
  
  
      /**
       * Fires the specified number of enabled transitions
       * @param event event 
       */
      @Override
      public void actionPerformed(ActionEvent event) {
          PetriNetController petriNetController = applicationController.getActivePetriNetController();
          GUIAnimator animator = petriNetController.getAnimator();
          if (animator.getNumberSequences() > 0) {
              // stop animation
              animator.setNumberSequences(0);
              setSelected(false);
          } else {
              stepBackwardAction.setEnabled(true);
              setSelected(true);
              animator.startRandomFiring();
          }
      }
  }
  