package tmcsim.cadsimulator.viewer; import java.awt.AWTEvent; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowEvent; import java.io.IOException; import java.util.Observable; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JTabbedPane; import javax.swing.KeyStroke; import tmcsim.cadsimulator.managers.TrafficModelManager; import tmcsim.cadsimulator.viewer.actions.ExitAction; import tmcsim.cadsimulator.viewer.model.CADMediaStatus; import tmcsim.cadsimulator.viewer.model.CADSimulatorStatus; import tmcsim.interfaces.CADViewer; import tmcsim.common.RevisionNumber; /** * This class provides a GUI to view current status information for the CAD * Server. * * @see SimulationStatusPanel * @see MediaStatusPanel * @author Matthew Cechini * @version $Revision: 1.3 $ $Date: 2006/06/06 20:46:41 $ */ @SuppressWarnings("serial") public class CADServerViewer extends JFrame implements CADViewer { private JTabbedPane cadSimTabbedPane; private JMenuBar menubar; private JMenu fileMenu; private JMenuItem exitMenuItem; /** * Panel to display simulation information. */ private SimulationStatusPanel simulationPanel; /** * Panel to display media control information. */ private MediaStatusPanel mediaPanel; /** * Panel to display configuration files. */ private ConfigStatusTab configPanel; /* * Panel to display Traffic Model Event Queue */ private TrafficModelViewPanel trafficPanel; /* * Name of propertes file for this run of CAD Server. */ private String propertiesFile; /** * Constructor. */ public CADServerViewer(String propertiesFile) { super(); this.propertiesFile = propertiesFile; setTitle("CAD Server " + RevisionNumber.getAppVersion()); initComponents(); } /** * Method calls the processEvent() method with a WINDOW_CLOSING WindowEvent * to start the application closing process. */ public void closeViewer() { processEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING)); } /** * Overloads the processEvent method. If the AWTEvent is a WINDOW_CLOSING * event, prompt the user to confirm the action. If confirmed, close the * application. */ protected void processEvent(AWTEvent evt) { if (evt.getID() == WindowEvent.WINDOW_CLOSING) { // int option = JOptionPane.showConfirmDialog(null, // "Closing the CAD Simulator will stop the current " // + "simulation. Do you wish to continue exiting?", // "Confirm Exit", // JOptionPane.YES_NO_OPTION); // // if (option != JOptionPane.NO_OPTION) // { System.exit(0); // } } } /** * Initialize GUI Components */ private void initComponents() { simulationPanel = new SimulationStatusPanel(); mediaPanel = new MediaStatusPanel(); configPanel = new ConfigStatusTab(propertiesFile); trafficPanel = new TrafficModelViewPanel(); cadSimTabbedPane = new JTabbedPane(); cadSimTabbedPane.addTab("Status", simulationPanel); cadSimTabbedPane.addTab("Media", mediaPanel); cadSimTabbedPane.addTab("Config", configPanel); cadSimTabbedPane.addTab("Traffic", trafficPanel); add(cadSimTabbedPane); menubar = new JMenuBar(); fileMenu = new JMenu("File"); fileMenu.setMnemonic(KeyEvent.VK_F); menubar.add(fileMenu); exitMenuItem = new JMenuItem(new ExitAction(this)); exitMenuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_X, ActionEvent.ALT_MASK)); fileMenu.add(exitMenuItem); javax.swing.JMenu helpMenu = new javax.swing.JMenu("Help"); menubar.add(helpMenu); setJMenuBar(menubar); setPreferredSize(new Dimension(500, 575)); pack(); setResizable(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void update(Observable obs, Object obj) { if (obs instanceof CADSimulatorStatus) { simulationPanel.refresh(obs); } if (obs instanceof CADMediaStatus) { mediaPanel.refresh(obs); } if (obs instanceof TrafficModelManager) { trafficPanel.update(obs, obj); } } }