diff options
| -rw-r--r-- | sources/prefs/editors/VSSimulationEditor.java | 13 | ||||
| -rw-r--r-- | sources/simulator/VSMain.java | 3 | ||||
| -rw-r--r-- | sources/simulator/VSSimulation.java | 264 | ||||
| -rw-r--r-- | sources/simulator/VSSimulationPanel.java | 67 | ||||
| -rw-r--r-- | sources/simulator/VSSimulatorFrame.java | 263 |
5 files changed, 375 insertions, 235 deletions
diff --git a/sources/prefs/editors/VSSimulationEditor.java b/sources/prefs/editors/VSSimulationEditor.java index 0aa6256..99b53bf 100644 --- a/sources/prefs/editors/VSSimulationEditor.java +++ b/sources/prefs/editors/VSSimulationEditor.java @@ -13,13 +13,15 @@ import utils.*; import prefs.VSPrefs; public class VSSimulationEditor extends VSEditorFrame { - private boolean startNewVSSimulation; + private boolean startNewSimulation; + private VSSimulatorFrame simulatorFrame; public VSSimulationEditor(VSPrefs prefs, Component relativeTo) { super(prefs, relativeTo, prefs, prefs.getString("name") + " - " + prefs.getString("lang.prefs")); + this.simulatorFrame = (VSSimulatorFrame) relativeTo; - startNewVSSimulation = true; + startNewSimulation = true; init(); } @@ -29,7 +31,7 @@ public class VSSimulationEditor extends VSEditorFrame { + (prefsCategory == ALL_PREFERENCES ? ".ext" : "")), prefsCategory); - startNewVSSimulation = false; + startNewSimulation = false; init(); } @@ -46,8 +48,9 @@ public class VSSimulationEditor extends VSEditorFrame { frame.dispose(); - if (startNewVSSimulation) - new VSSimulation(prefs, getFrame()); + if (startNewSimulation) + simulatorFrame.addSimulation( + new VSSimulation(prefs, simulatorFrame)); } else { super.actionPerformed(e); diff --git a/sources/simulator/VSMain.java b/sources/simulator/VSMain.java index 4398226..53560f4 100644 --- a/sources/simulator/VSMain.java +++ b/sources/simulator/VSMain.java @@ -18,7 +18,8 @@ public class VSMain { } private void init(VSPrefs prefs, Component relativeTo) { - new VSSimulationEditor(prefs, relativeTo); + VSSimulatorFrame simulatorFrame = new VSSimulatorFrame(prefs, relativeTo); + new VSSimulationEditor(prefs, simulatorFrame); } public static void main(String[] args) { diff --git a/sources/simulator/VSSimulation.java b/sources/simulator/VSSimulation.java index 8b4515b..6bdcc97 100644 --- a/sources/simulator/VSSimulation.java +++ b/sources/simulator/VSSimulation.java @@ -15,7 +15,10 @@ import prefs.*; import protocols.*; import utils.*; -public class VSSimulation extends VSFrame implements ActionListener { +public class VSSimulation extends JPanel { + private static int simulationCounter; + private static int simulationNum; + private VSSimulatorFrame simulatorFrame; private JTextField filterTextField; private JCheckBox filterActiveCheckBox; private JCheckBox lamportActiveCheckBox; @@ -29,10 +32,6 @@ public class VSSimulation extends VSFrame implements ActionListener { private JTextField localTextField; private JTextField globalTextField; private ArrayList<VSCreateTask> createTasks; - private JMenuItem pauseItem; - private JMenuItem replayItem; - private JMenuItem resetItem; - private JMenuItem startItem; private JSplitPane splitPaneH; private JSplitPane splitPaneV; private Thread thread; @@ -43,26 +42,66 @@ public class VSSimulation extends VSFrame implements ActionListener { private VSTaskManagerTableModel taskManagerLocalModel; private VSTaskManagerTableModel taskManagerGlobalModel; private VSTaskManager taskManager; + private VSMenuItemStates menuItemStates; + + public class VSMenuItemStates { + private boolean pause; + private boolean replay; + private boolean reset; + private boolean start; + + public VSMenuItemStates(boolean pause, boolean replay, boolean reset, boolean start) { + this.pause = pause; + this.replay = replay; + this.reset = reset; + this.start = start; + } - public VSSimulation (VSPrefs prefs, Component relativeTo) { - super(prefs.getString("name"), relativeTo); - this.prefs = prefs; - this.logging = new VSLogging(); + public void setPause(boolean pause) { + this.pause = pause; + } + + public void setReplay(boolean replay) { + this.replay = replay; + } - setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + public void setReset(boolean pause) { + this.reset = reset; + } - setSize(prefs.getInteger("window.xsize")+100, - prefs.getInteger("window.ysize")); - setContentPane(createContentPane()); - setJMenuBar(createJMenuBar()); - setVisible(true); + public void setStart(boolean start) { + this.start = start; + } - thread = new Thread(simulationPanel); - thread.start(); - logging.logg(prefs.getString("lang.simulation.new")); + public boolean getPause() { + return pause; + } + public boolean getReplay() { + return replay; + } + + public boolean getReset() { + return reset; + } + + public boolean getStart() { + return start; + } + } + + public VSSimulation(VSPrefs prefs, VSSimulatorFrame simulatorFrame) { + this.prefs = prefs; + this.simulatorFrame = simulatorFrame; + this.logging = new VSLogging(); + this.simulationNum = ++simulationCounter; + this.menuItemStates = new VSMenuItemStates(false, false, false, true); this.localTextFields = new ArrayList<String>(); this.globalTextFields = new ArrayList<String>(); + + logging.logg(prefs.getString("lang.simulation.new")); + fillContentPane(); + int numProcesses = simulationPanel.getNumProcesses(); for (int i = 0; i <= numProcesses; ++i) { @@ -71,113 +110,12 @@ public class VSSimulation extends VSFrame implements ActionListener { } processesComboBox.setSelectedIndex(numProcesses); - } - 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 */ - JMenu menuEdit = new JMenu( - prefs.getString("lang.edit")); - menuEdit.setMnemonic(prefs.getInteger("keyevent.edit")); - int numProcesses = simulationPanel.getNumProcesses(); - final String processString = prefs.getString("lang.process"); - 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 processNum = i; - processItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - simulationPanel.editProcess(processNum); - } - }); - menuEdit.add(processItem); - } - - /* 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); - - JMenuBar mainMenuBar = new JMenuBar(); - mainMenuBar.add(menuFile); - mainMenuBar.add(menuEdit); - mainMenuBar.add(menuSimulation); - - return mainMenuBar; + thread = new Thread(simulationPanel); + thread.start(); } - private Container createContentPane() { + private void fillContentPane() { JTextArea loggingArea = logging.getLoggingArea(); splitPaneH = new JSplitPane(); @@ -221,11 +159,7 @@ public class VSSimulation extends VSFrame implements ActionListener { //splitPaneV.setOneTouchExpandable(true); splitPaneV.setContinuousLayout(true); - Container contentPane = getContentPane(); - contentPane.add(splitPaneV, BorderLayout.CENTER); - - - return contentPane; + this.add(splitPaneV, BorderLayout.CENTER); } private JPanel createToolsPanel() { @@ -827,57 +761,6 @@ public class VSSimulation extends VSFrame implements ActionListener { return splitPaneV.getDividerLocation(); } - public void dispose() { - simulationPanel.finalize(); - 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 VSMain(VSDefaultPrefs.init(), VSSimulation.this); - - } else if (source.getText().equals(prefs.getString("lang.about"))) { - new VSAbout(prefs, VSSimulation.this); - - } else if (source.getText().equals(prefs.getString("lang.quit"))) { - System.exit(0); - - } else if (source.getText().equals(prefs.getString("lang.start"))) { - startItem.setEnabled(false); - pauseItem.setEnabled(true); - resetItem.setEnabled(false); - replayItem.setEnabled(true); - simulationPanel.play(); - - } else if (source.getText().equals(prefs.getString("lang.pause"))) { - startItem.setEnabled(true); - pauseItem.setEnabled(false); - resetItem.setEnabled(true); - replayItem.setEnabled(true); - simulationPanel.pause(); - - } else if (source.getText().equals(prefs.getString("lang.reset"))) { - startItem.setEnabled(true); - pauseItem.setEnabled(false); - resetItem.setEnabled(false); - replayItem.setEnabled(false); - simulationPanel.reset(); - - } else if (source.getText().equals(prefs.getString("lang.replay"))) { - startItem.setEnabled(false); - pauseItem.setEnabled(true); - resetItem.setEnabled(false); - replayItem.setEnabled(true); - simulationPanel.reset(); - simulationPanel.play(); - } - } - private int getSelectedProcessNum() { try { String string = (String) processesComboBox.getSelectedItem(); @@ -917,9 +800,26 @@ public class VSSimulation extends VSFrame implements ActionListener { } public void finish() { - startItem.setEnabled(false); - pauseItem.setEnabled(false); - resetItem.setEnabled(true); - replayItem.setEnabled(true); + menuItemStates.setStart(false); + menuItemStates.setPause(false); + menuItemStates.setReset(true); + menuItemStates.setReplay(true); + simulatorFrame.updateSimulationMenu(); + } + + public int getSimulationNum() { + return simulationNum; + } + + public VSSimulation.VSMenuItemStates getMenuItemStates() { + return menuItemStates; + } + + public VSSimulationPanel getSimulationPanel() { + return simulationPanel; + } + + public VSFrame getSimulatorFrame() { + return simulatorFrame; } } diff --git a/sources/simulator/VSSimulationPanel.java b/sources/simulator/VSSimulationPanel.java index ec5acbc..d501f22 100644 --- a/sources/simulator/VSSimulationPanel.java +++ b/sources/simulator/VSSimulationPanel.java @@ -25,7 +25,7 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi private int threadSleep; private long untilTime; private volatile boolean isPaused = true; - private volatile boolean isFinalized = false; + private volatile boolean isThreadStopped = false; private volatile boolean isFinished = false; private volatile boolean isResetted = false; private volatile boolean isAntiAliased = false; @@ -239,7 +239,6 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi if (strategy != null) { synchronized (strategy) { - //setPreferredSize(new Dimension(simulation.getWidth()-simulation.getSplitSize(),(int)paintSize-20)); g = (Graphics2D) strategy.getDrawGraphics(); g.setColor(Color.WHITE); if (isAntiAliased) @@ -273,33 +272,6 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi if (strategy != null) { g = (Graphics2D) strategy.getDrawGraphics(); g.setColor(Color.WHITE); - - - // Determine if antialiasing is enabled - //RenderingHints rhints = g2d.getRenderingHints(); - //boolean antialiasOn = rhints.containsValue(RenderingHints.VALUE_ANTIALIAS_ON); - - // Enable antialiasing for shapes - /* - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - */ - // Disable antialiasing for shapes - //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - // RenderingHints.VALUE_ANTIALIAS_OFF); - - // Draw shapes...; see e586 Drawing Simple Shapes - - // Enable antialiasing for text - /* - g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - */ - // Draw text...; see e591 Drawing Simple Text - - // Disable antialiasing for text -// g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, -// RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); } } @@ -311,6 +283,7 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); isAntiAliasedChanged = false; } + g.fillRect(0, 0, getWidth(), getHeight()); final long globalTime = time; @@ -524,7 +497,7 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi //play(); while (true) { - while (!isFinalized && (isPaused || isFinished || isResetted)) { + while (!isThreadStopped && (isPaused || isFinished || isResetted)) { try { Thread.sleep(100); paint(); @@ -533,10 +506,10 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi } } - if (isFinalized) + if (isThreadStopped) break; /* Exit the thread */ - while (!isPaused && !isFinalized) { + while (!isPaused && !isThreadStopped) { try { Thread.sleep(threadSleep); } catch (Exception e) { @@ -640,31 +613,31 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi } } - public void finalize() { - isFinalized = true; + public void stopThread() { + isThreadStopped = true; } - public boolean isFinalized() { - return isFinalized; + public boolean isThreadStopped() { + return isThreadStopped; } public void showLamport(boolean showLamport) { this.showLamport = showLamport; - if (isPaused) - paint(); + if (isPaused) + paint(); } public void showVectorTime(boolean showVectorTime) { this.showVectorTime = showVectorTime; - if (isPaused) - paint(); + if (isPaused) + paint(); } public void isAntiAliased(boolean isAntiAliased) { this.isAntiAliased = isAntiAliased; this.isAntiAliasedChanged = true; - if (isPaused) - paint(); + if (isPaused) + paint(); } public void sendMessage(VSMessage message) { @@ -766,7 +739,7 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi public void editProcess(VSProcess process) { if (process != null) { process.updatePrefs(); - new VSProcessEditor(prefs, simulation, process); + new VSProcessEditor(prefs, simulation.getSimulatorFrame(), process); } } @@ -798,8 +771,8 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi highlightedProcess = null; } - if (isPaused) - paint(); + if (isPaused) + paint(); return; } @@ -815,8 +788,8 @@ public class VSSimulationPanel extends Canvas implements Runnable, MouseMotionLi p.highlightOn(); } - if (isPaused) - paint(); + if (isPaused) + paint(); } public void ancestorMoved(HierarchyEvent e) { } 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); + } +} |
