View Javadoc

    1   /*
    2    * Created on 8-okt-2003
    3    */
    4   package nl.tudelft.simulation.dsol.gui.actions;
    5
    6   import java.awt.event.ActionEvent;
    7   import java.awt.event.InputEvent;
    8   import java.rmi.RemoteException;
    9
    10  import javax.swing.Action;
    11  import javax.swing.ImageIcon;
    12  import javax.swing.JOptionPane;
    13  import javax.swing.KeyStroke;
    14
    15  import nl.tudelft.simulation.dsol.formalisms.devs.SimEvent;
    16  import nl.tudelft.simulation.dsol.formalisms.devs.SimEventInterface;
    17  import nl.tudelft.simulation.dsol.gui.DSOLApplicationInterface;
    18  import nl.tudelft.simulation.dsol.simulators.DEVSSimulatorInterface;
    19  import nl.tudelft.simulation.logger.Logger;
    20
    21  /***
    22   * The SmoothWorker <br>
    23   * (c) copyright 2002-2005 <a href="http://www.simulation.tudelft.nl">Delft
    24   * University of Technology </a>, the Netherlands. <br>
    25   * See for project information <a
    26   * href="http://www.simulation.tudelft.nl">www.simulation.tudelft.nl </a> <br>
    27   * License of use: <a href="http://www.gnu.org/copyleft/lesser.html">Lesser
    28   * General Public License (LGPL) </a>, no warranty.
    29   *
    30   * @version $Revision$ $Date$
    31   * @author <a href="mailto:nlang@fbk.eur.nl">Niels Lang </a>, <a
    32   *         href="http://www.tbm.tudelft.nl/webstaf/peterja">Peter Jacobs </a>
    33   */
    34  public class PauseAction extends SimulatorAction
    35  {
    36  	/***
    37  	 * The pauseAction schedules a pause
    38  	 *
    39  	 * @param application the application
    40  	 */
    41  	public PauseAction(final DSOLApplicationInterface application)
    42  	{
    43  		super("Pause Simulator At...", application);
    44  		this.putValue(Action.MNEMONIC_KEY, new Integer('s'));
    45  		this.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke('P',
    46  				InputEvent.ALT_DOWN_MASK));
    47  		this.putValue(Action.SMALL_ICON, new ImageIcon(this.getClass()
    48  				.getResource("/toolbarButtonGraphics/media/Pause16.gif")));
    49  	}
    50
    51  	/***
    52  	 * notifyPaused
    53  	 */
    54  	protected void notifyStopped()
    55  	{
    56  		try
    57  		{
    58  			this.simulator.stop();
    59  			JOptionPane
    60  					.showMessageDialog(null, "Pausing simulation @ "
    61  							+ this.simulator.getSimulatorTime()
    62  							+ " on user's request.");
    63  		} catch (Exception exception)
    64  		{
    65  			Logger.warning(this, "notifyStopped", exception);
    66  		}
    67  	}
    68
    69  	/***
    70  	 * @see java.awt.event.ActionListener
    71  	 *      #actionPerformed(java.awt.event.ActionEvent)
    72  	 */
    73  	public void actionPerformed(final ActionEvent evt)
    74  	{
    75  		String result = JOptionPane.showInputDialog("Enter desired pause-time");
    76  		if (result != null)
    77  		{
    78  			try
    79  			{
    80  				double value = Double.parseDouble(result);
    81  				if (value > this.simulator.getSimulatorTime()
    82  						|| (new Double(this.simulator.getSimulatorTime())
    83  								.isNaN() && value >= 0.0))
    84  				{
    85  					((DEVSSimulatorInterface) this.simulator)
    86  							.scheduleEvent(new SimEvent(value,
    87  									SimEventInterface.MIN_PRIORITY, this, this,
    88  									"notifyStopped", null));
    89  					JOptionPane.showMessageDialog(null,
    90  							"Succesfully scheduled pause @ " + value);
    91  				} else
    92  				{
    93  					throw new Exception();
    94  				}
    95  			} catch (Exception exception)
    96  			{
    97  				try
    98  				{
    99  					JOptionPane.showMessageDialog(null, "Invalid input: "
    100 							+ result
    101 							+ ". Value should be numerical and larger than "
    102 							+ "simulator time:"
    103 							+ this.simulator.getSimulatorTime());
    104 				} catch (RemoteException remoteException)
    105 				{
    106 					Logger.warning(this, "actionPerformed", remoteException);
    107 				}
    108 			}
    109 		}
    110 	}
    111 }