summaryrefslogtreecommitdiff
path: root/sources/simulator/VSSimulatorFrame.java
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-20 19:49:31 +0000
committerPaul Buetow <paul@buetow.org>2008-05-20 19:49:31 +0000
commit263d8a4f43ed2d319a88bd11e05112daf8133aa2 (patch)
tree0b5a4ead041e48c1712908be3ad44e3b60084097 /sources/simulator/VSSimulatorFrame.java
parentf9019a464024215fa166c435304db6b90391dd81 (diff)
New Tabs can be created. but not yet deleted.
Diffstat (limited to 'sources/simulator/VSSimulatorFrame.java')
-rw-r--r--sources/simulator/VSSimulatorFrame.java263
1 files changed, 263 insertions, 0 deletions
diff --git a/sources/simulator/VSSimulatorFrame.java b/sources/simulator/VSSimulatorFrame.java
new file mode 100644
index 0000000..1b13c68
--- /dev/null
+++ b/sources/simulator/VSSimulatorFrame.java
@@ -0,0 +1,263 @@
+package simulator;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.border.*;
+import javax.swing.event.*;
+import javax.swing.table.*;
+
+import core.*;
+import events.*;
+import events.implementations.*;
+import prefs.*;
+import prefs.editors.*;
+import protocols.*;
+import utils.*;
+
+public class VSSimulatorFrame extends VSFrame implements ActionListener {
+ private JMenuItem pauseItem;
+ private JMenuItem replayItem;
+ private JMenuItem resetItem;
+ private JMenuItem startItem;
+ private JMenu menuEdit;
+ private VSPrefs prefs;
+ private ArrayList<VSSimulation> simulations;
+ private VSSimulation currentSimulation;
+ private JTabbedPane tabbedPane;
+
+ public VSSimulatorFrame(VSPrefs prefs, Component relativeTo) {
+ super(prefs.getString("name"), relativeTo);
+ this.prefs = prefs;
+ this.simulations = new ArrayList<VSSimulation>();
+
+ setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+
+ setSize(prefs.getInteger("window.xsize")+100,
+ prefs.getInteger("window.ysize"));
+ setJMenuBar(createJMenuBar());
+ setContentPane(createContentPane());
+ setVisible(true);
+ }
+
+ private JMenuBar createJMenuBar() {
+ /* File menu */
+ JMenu menuFile = new JMenu(prefs.getString("lang.file"));
+ menuFile.setMnemonic(prefs.getInteger("keyevent.file"));
+ JMenuItem menuItem;
+
+ menuItem = new JMenuItem(prefs.getString("lang.new"));
+ menuItem.setAccelerator(KeyStroke.getKeyStroke(
+ prefs.getInteger("keyevent.new"),
+ ActionEvent.ALT_MASK));
+ menuItem.addActionListener(this);
+ menuFile.add(menuItem);
+
+ menuItem = new JMenuItem(
+ prefs.getString("lang.close"));
+ menuItem.setAccelerator(KeyStroke.getKeyStroke(
+ prefs.getInteger("keyevent.close"),
+ ActionEvent.ALT_MASK));
+ menuItem.addActionListener(this);
+ menuFile.add(menuItem);
+
+ menuFile.addSeparator();
+
+ menuItem = new JMenuItem(prefs.getString("lang.about"));
+ menuItem.setAccelerator(KeyStroke.getKeyStroke(
+ prefs.getInteger("keyevent.about"),
+ ActionEvent.ALT_MASK));
+ menuItem.addActionListener(this);
+ menuFile.add(menuItem);
+
+ menuItem = new JMenuItem(prefs.getString("lang.quit"));
+ menuItem.setAccelerator(KeyStroke.getKeyStroke(
+ prefs.getInteger("keyevent.quit"),
+ ActionEvent.ALT_MASK));
+ menuItem.addActionListener(this);
+ menuFile.add(menuItem);
+
+ /* Edit menu */
+ menuEdit = new JMenu(
+ prefs.getString("lang.edit"));
+ menuEdit.setMnemonic(prefs.getInteger("keyevent.edit"));
+ updateEditMenu();
+
+ /* Simulation menu */
+ JMenu menuSimulation = new JMenu(
+ prefs.getString("lang.simulation"));
+ menuSimulation.setMnemonic(prefs.getInteger("keyevent.simulation"));
+
+ startItem = new JMenuItem(
+ prefs.getString("lang.start"));
+ startItem.setAccelerator(KeyStroke.getKeyStroke(
+ prefs.getInteger("keyevent.start"),
+ ActionEvent.ALT_MASK));
+ startItem.addActionListener(this);
+ menuSimulation.add(startItem);
+
+ pauseItem = new JMenuItem(
+ prefs.getString("lang.pause"));
+ pauseItem.setAccelerator(KeyStroke.getKeyStroke(
+ prefs.getInteger("keyevent.pause"),
+ ActionEvent.ALT_MASK));
+ pauseItem.addActionListener(this);
+ menuSimulation.add(pauseItem);
+ pauseItem.setEnabled(false);
+
+ resetItem = new JMenuItem(
+ prefs.getString("lang.reset"));
+ resetItem.setAccelerator(KeyStroke.getKeyStroke(
+ prefs.getInteger("keyevent.reset"),
+ ActionEvent.ALT_MASK));
+ resetItem.addActionListener(this);
+ resetItem.setEnabled(false);
+ menuSimulation.add(resetItem);
+
+ replayItem = new JMenuItem(
+ prefs.getString("lang.replay"));
+ replayItem.setAccelerator(KeyStroke.getKeyStroke(
+ prefs.getInteger("keyevent.replay"),
+ ActionEvent.ALT_MASK));
+ replayItem.addActionListener(this);
+ replayItem.setEnabled(false);
+ menuSimulation.add(replayItem);
+ updateSimulationMenu();
+
+ JMenuBar mainMenuBar = new JMenuBar();
+ mainMenuBar.add(menuFile);
+ mainMenuBar.add(menuEdit);
+ mainMenuBar.add(menuSimulation);
+
+ return mainMenuBar;
+ }
+
+ private Container createContentPane() {
+ Container pane = getContentPane();
+
+ tabbedPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
+ tabbedPane.addChangeListener(new ChangeListener() {
+ public void stateChanged(ChangeEvent ce) {
+ JTabbedPane pane = (JTabbedPane) ce.getSource();
+ currentSimulation = (VSSimulation) pane.getSelectedComponent();
+ currentSimulation.getSimulationPanel().paint();
+ updateEditMenu();
+ updateSimulationMenu();
+ }
+ });
+ pane.add(tabbedPane, BorderLayout.CENTER);
+
+ return pane;
+ }
+
+ private void updateEditMenu() {
+ menuEdit.removeAll();
+
+ if (currentSimulation == null)
+ return;
+
+ final String processString = prefs.getString("lang.process");
+ final int numProcesses = currentSimulation.getSimulationPanel().getNumProcesses();
+
+ for (int i = 0; i < numProcesses; ++i) {
+ JMenuItem processItem = new JMenuItem(processString + " " + (i+1));
+ processItem.setAccelerator(KeyStroke.getKeyStroke(0x31+i,
+ ActionEvent.ALT_MASK));
+ final int finalProcessNum = i;
+ processItem.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent ae) {
+ currentSimulation.getSimulationPanel().editProcess(finalProcessNum);
+ }
+ });
+ menuEdit.add(processItem);
+ }
+ }
+
+ public void updateSimulationMenu() {
+ if (currentSimulation == null) {
+ pauseItem.setEnabled(false);
+ replayItem.setEnabled(false);
+ resetItem.setEnabled(false);
+ startItem.setEnabled(false);
+
+ } else {
+ VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates();
+ pauseItem.setEnabled(menuItemState.getPause());
+ replayItem.setEnabled(menuItemState.getReplay());
+ resetItem.setEnabled(menuItemState.getReset());
+ startItem.setEnabled(menuItemState.getStart());
+ }
+ }
+
+ public void dispose() {
+ for (VSSimulation simulation : simulations)
+ simulation.getSimulationPanel().stopThread();
+ super.dispose();
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ JMenuItem source = (JMenuItem) e.getSource();
+
+ if (source.getText().equals(prefs.getString("lang.close"))) {
+ dispose();
+
+ } else if (source.getText().equals(prefs.getString("lang.new"))) {
+ new VSSimulationEditor(VSDefaultPrefs.init(), this);
+
+ } else if (source.getText().equals(prefs.getString("lang.about"))) {
+ new VSAbout(prefs, this);
+
+ } else if (source.getText().equals(prefs.getString("lang.quit"))) {
+ System.exit(0);
+
+ } else if (source.getText().equals(prefs.getString("lang.start"))) {
+ VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates();
+ menuItemState.setStart(false);
+ menuItemState.setPause(true);
+ menuItemState.setReset(false);
+ menuItemState.setReplay(true);
+ currentSimulation.getSimulationPanel().play();
+ updateSimulationMenu();
+
+ } else if (source.getText().equals(prefs.getString("lang.pause"))) {
+ VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates();
+ menuItemState.setStart(true);
+ menuItemState.setPause(false);
+ menuItemState.setReset(true);
+ menuItemState.setReplay(true);
+ currentSimulation.getSimulationPanel().pause();
+ updateSimulationMenu();
+
+ } else if (source.getText().equals(prefs.getString("lang.reset"))) {
+ VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates();
+ menuItemState.setStart(true);
+ menuItemState.setPause(false);
+ menuItemState.setReset(false);
+ menuItemState.setReplay(false);
+ currentSimulation.getSimulationPanel().reset();
+ updateSimulationMenu();
+
+ } else if (source.getText().equals(prefs.getString("lang.replay"))) {
+ VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates();
+ menuItemState.setStart(false);
+ menuItemState.setPause(true);
+ menuItemState.setReset(false);
+ menuItemState.setReplay(true);
+ currentSimulation.getSimulationPanel().reset();
+ currentSimulation.getSimulationPanel().play();
+ updateSimulationMenu();
+ }
+ }
+
+ public void addSimulation(VSSimulation simulation) {
+ simulation.setLayout(new GridLayout(1, 1, 3, 3));
+ simulation.setMinimumSize(new Dimension(0, 0));
+ simulation.setMaximumSize(new Dimension(0, 0));
+
+ simulations.add(simulation);
+
+ tabbedPane.addTab(prefs.getString("lang.simulation")
+ + " " + simulation.getSimulationNum(), simulation);
+ }
+}