diff options
| author | Paul Buetow <paul@buetow.org> | 2008-05-24 21:06:15 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-05-24 21:06:15 +0000 |
| commit | 222d028fac58233a451e2de875353252a3dc9f63 (patch) | |
| tree | 292394f179db68464d9554b71a7ec05368867e33 | |
| parent | 61e38d3236ead0b32f8fa1a78901e9d0c75c91ea (diff) | |
PRocesses now get removed properly.
Removed all VSSimulation* classes.
| -rw-r--r-- | sources/core/VSProcess.java | 33 | ||||
| -rw-r--r-- | sources/core/VSTaskManager.java | 23 | ||||
| -rw-r--r-- | sources/core/time/VSVectorTime.java | 7 | ||||
| -rw-r--r-- | sources/prefs/VSDefaultPrefs.java | 1 | ||||
| -rw-r--r-- | sources/prefs/editors/VSSimulatorEditor.java (renamed from sources/prefs/editors/VSSimulationEditor.java) | 10 | ||||
| -rw-r--r-- | sources/simulator/VSLogging.java | 4 | ||||
| -rw-r--r-- | sources/simulator/VSMain.java | 2 | ||||
| -rw-r--r-- | sources/simulator/VSSimulator.java (renamed from sources/simulator/VSSimulation.java) | 35 | ||||
| -rw-r--r-- | sources/simulator/VSSimulatorCanvas.java (renamed from sources/simulator/VSSimulationCanvas.java) | 138 | ||||
| -rw-r--r-- | sources/simulator/VSSimulatorFrame.java | 38 |
10 files changed, 221 insertions, 70 deletions
diff --git a/sources/core/VSProcess.java b/sources/core/VSProcess.java index e5e8c9d..5612d89 100644 --- a/sources/core/VSProcess.java +++ b/sources/core/VSProcess.java @@ -22,7 +22,7 @@ public class VSProcess extends VSPrefs { private VSLogging logging; private VSPrefs prefs; private VSRandom random; - private VSSimulationCanvas simulationCanvas; + private VSSimulatorCanvas simulationCanvas; private VSTask randomCrashTask; private VSVectorTime vectorTime; private boolean hasCrashed; @@ -33,7 +33,8 @@ public class VSProcess extends VSPrefs { private boolean timeModified; private double clockOffset; private float clockVariance; - private int processID; + private int processID; // Represents the PID of a process + private int processNum; // Represents the array index of the process, for internal usage private long globalTime; private long lamportTime; private long localTime; @@ -84,8 +85,9 @@ public class VSProcess extends VSPrefs { private static final String DEFAULT_STRING_VALUE_KEYS[] = { }; - public VSProcess(VSPrefs prefs, VSSimulationCanvas simulationCanvas, VSLogging logging) { + public VSProcess(VSPrefs prefs, int processNum, VSSimulatorCanvas simulationCanvas, VSLogging logging) { this.protocolsToReset = new ArrayList<VSProtocol>(); + this.processNum = processNum; this.prefs = prefs; this.simulationCanvas = simulationCanvas; this.logging = logging; @@ -257,6 +259,10 @@ public class VSProcess extends VSPrefs { return processID; } + public synchronized int getProcessNum() { + return processNum; + } + public synchronized void setProcessID(int processID) { this.processID = processID; } @@ -418,7 +424,7 @@ public class VSProcess extends VSPrefs { } public synchronized void increaseVectorTime() { - vectorTime.set(processID-1, new Long(vectorTime.get(processID-1).longValue()+1)); + vectorTime.set(processNum, new Long(vectorTime.get(processNum).longValue()+1)); vectorTime.setGlobalTime(globalTime); vectorTimeHistory.add(vectorTime.getCopy()); } @@ -427,7 +433,7 @@ public class VSProcess extends VSPrefs { final int size = vectorTime.size(); for (int i = 0; i < size; ++i) { - if (i == processID-1) + if (i == processNum) vectorTime.set(i, new Long(vectorTime.get(i).longValue()+1)); else if (vectorTimeUpdate.get(i) > vectorTime.get(i)) vectorTime.set(i, vectorTimeUpdate.get(i)); @@ -518,7 +524,7 @@ public class VSProcess extends VSPrefs { return process.getProcessID() == processID; } - public VSSimulationCanvas getSimulationCanvas() { + public VSSimulatorCanvas getSimulationCanvas() { return simulationCanvas; } @@ -530,6 +536,21 @@ public class VSProcess extends VSPrefs { processCounter = 0; } + public void removeProcessAtIndex(int index) { + if (index < processNum) + --processNum; + + vectorTime.remove(index); + for (VSVectorTime vectorTime : vectorTimeHistory) + vectorTime.remove(index); + } + + public void addedAProcess() { + vectorTime.add(new Long(0)); + for (VSVectorTime vectorTime : vectorTimeHistory) + vectorTime.add(new Long(0)); + } + public VSProtocol getProtocolObject(String protocolClassname) { VSProtocol protocol = null; diff --git a/sources/core/VSTaskManager.java b/sources/core/VSTaskManager.java index 66913fc..6b419cf 100644 --- a/sources/core/VSTaskManager.java +++ b/sources/core/VSTaskManager.java @@ -216,6 +216,29 @@ public class VSTaskManager { return false; } + public synchronized void removeTasksOf(VSProcess process) { + ArrayList<VSTask> removeThose = new ArrayList<VSTask>(); + for (VSTask task : fullfilledProgrammedTasks) + if (task.isProcess(process)) + removeThose.add(task); + for (VSTask task : removeThose) + fullfilledProgrammedTasks.remove(task); + + removeThose.clear(); + for (VSTask task : globalTasks) + if (task.isProcess(process)) + removeThose.add(task); + for (VSTask task : removeThose) + globalTasks.remove(task); + + removeThose.clear(); + for (VSTask task : tasks) + if (task.isProcess(process)) + removeThose.add(task); + for (VSTask task : removeThose) + tasks.remove(task); + } + public synchronized VSPriorityQueue<VSTask> getLocalTasks() { VSPriorityQueue<VSTask> processTasks = new VSPriorityQueue<VSTask>(); diff --git a/sources/core/time/VSVectorTime.java b/sources/core/time/VSVectorTime.java index 55a9b49..7d0f371 100644 --- a/sources/core/time/VSVectorTime.java +++ b/sources/core/time/VSVectorTime.java @@ -49,4 +49,11 @@ public class VSVectorTime extends ArrayList<Long> implements VSTime { return buffer.toString(); } + + public Long get(int index) { + if (index >= super.size()) + return new Long(0); + + return super.get(index); + } } diff --git a/sources/prefs/VSDefaultPrefs.java b/sources/prefs/VSDefaultPrefs.java index 25e3ef9..3446184 100644 --- a/sources/prefs/VSDefaultPrefs.java +++ b/sources/prefs/VSDefaultPrefs.java @@ -88,6 +88,7 @@ public class VSDefaultPrefs extends VSPrefs { initString("lang.prefs.protocols", "Protokolleinstellungen"); initString("lang.prefs.simulation", "Simulationseinstellungen"); initString("lang.process", "Prozess"); + initString("lang.process.add.new", "Neuen Prozess hinzufügen"); initString("lang.process.crash", "Prozess abstürzen"); initString("lang.process.remove", "Prozess entfernen"); initString("lang.process.edit", "Prozess editieren"); diff --git a/sources/prefs/editors/VSSimulationEditor.java b/sources/prefs/editors/VSSimulatorEditor.java index 4637ec9..0ea2332 100644 --- a/sources/prefs/editors/VSSimulationEditor.java +++ b/sources/prefs/editors/VSSimulatorEditor.java @@ -12,13 +12,13 @@ import simulator.*; import utils.*; import prefs.*; -public class VSSimulationEditor extends VSBetterEditor { +public class VSSimulatorEditor extends VSBetterEditor { private VSSimulatorFrame simulatorFrame; - private VSSimulation simulation; + private VSSimulator simulation; public static boolean TAKEOVER_BUTTON; private boolean dontStartNewSimulation; - public VSSimulationEditor(VSPrefs prefs, VSSimulatorFrame simulatorFrame, VSSimulation simulation) { + public VSSimulatorEditor(VSPrefs prefs, VSSimulatorFrame simulatorFrame, VSSimulator simulation) { super(prefs, prefs, prefs.getString("lang.name") + " - " + prefs.getString("lang.prefs")); this.dontStartNewSimulation = true;//simulation != null; @@ -26,7 +26,7 @@ public class VSSimulationEditor extends VSBetterEditor { this.simulation = simulation; } - public VSSimulationEditor(VSPrefs prefs, VSSimulatorFrame simulatorFrame) { + public VSSimulatorEditor(VSPrefs prefs, VSSimulatorFrame simulatorFrame) { super(prefs, prefs, prefs.getString("lang.name") + " - " + prefs.getString("lang.prefs")); this.simulatorFrame = simulatorFrame; @@ -66,7 +66,7 @@ public class VSSimulationEditor extends VSBetterEditor { simulation.fireExpertModeChanged(); } if (!dontStartNewSimulation) - simulatorFrame.addSimulation(new VSSimulation(prefsToEdit, simulatorFrame)); + simulatorFrame.addSimulation(new VSSimulator(prefsToEdit, simulatorFrame)); else if (simulation != null) simulation.updateFromPrefs(); diff --git a/sources/simulator/VSLogging.java b/sources/simulator/VSLogging.java index 9ab9cec..c303bec 100644 --- a/sources/simulator/VSLogging.java +++ b/sources/simulator/VSLogging.java @@ -11,7 +11,7 @@ public class VSLogging { private String filterText; private ArrayList<StringBuffer> pauseLines; private ArrayList<StringBuffer> loggingLines; - private VSSimulationCanvas simulationCanvas; + private VSSimulatorCanvas simulationCanvas; private boolean isFiltered; private boolean isPaused; private Pattern filterPattern; @@ -26,7 +26,7 @@ public class VSLogging { filterText = ""; } - public void setSimulationCanvas(VSSimulationCanvas simulationCanvas) { + public void setSimulationCanvas(VSSimulatorCanvas simulationCanvas) { this.simulationCanvas = simulationCanvas; } diff --git a/sources/simulator/VSMain.java b/sources/simulator/VSMain.java index 926f450..7e6639e 100644 --- a/sources/simulator/VSMain.java +++ b/sources/simulator/VSMain.java @@ -19,7 +19,7 @@ public class VSMain { private void init(VSPrefs prefs, Component relativeTo) { VSSimulatorFrame simulatorFrame = new VSSimulatorFrame(prefs, relativeTo); - new VSEditorFrame(prefs, relativeTo, new VSSimulationEditor(prefs, simulatorFrame)); + new VSEditorFrame(prefs, relativeTo, new VSSimulatorEditor(prefs, simulatorFrame)); } public static void main(String[] args) { diff --git a/sources/simulator/VSSimulation.java b/sources/simulator/VSSimulator.java index 17400cb..097d198 100644 --- a/sources/simulator/VSSimulation.java +++ b/sources/simulator/VSSimulator.java @@ -17,7 +17,7 @@ import prefs.editors.*; import protocols.*; import utils.*; -public class VSSimulation extends JPanel { +public class VSSimulator extends JPanel { private ArrayList<String> globalTextFields; private ArrayList<String> localTextFields; private ArrayList<VSCreateTask> createTasks; @@ -44,7 +44,7 @@ public class VSSimulation extends JPanel { private VSLogging logging; private VSMenuItemStates menuItemStates; private VSPrefs prefs; - private VSSimulationCanvas simulationCanvas; + private VSSimulatorCanvas simulationCanvas; private VSSimulatorFrame simulatorFrame; private VSTaskManager taskManager; private VSTaskManagerTableModel taskManagerGlobalModel; @@ -100,7 +100,7 @@ public class VSSimulation extends JPanel { } } - public VSSimulation(VSPrefs prefs, VSSimulatorFrame simulatorFrame) { + public VSSimulator(VSPrefs prefs, VSSimulatorFrame simulatorFrame) { this.prefs = prefs; this.simulatorFrame = simulatorFrame; this.logging = new VSLogging(); @@ -141,7 +141,7 @@ public class VSSimulation extends JPanel { splitPaneH = new JSplitPane(); splitPaneV = new JSplitPane(); - simulationCanvas = new VSSimulationCanvas(prefs, this, logging); + simulationCanvas = new VSSimulatorCanvas(prefs, this, logging); taskManager = simulationCanvas.getTaskManager(); logging.setSimulationCanvas(simulationCanvas); @@ -863,11 +863,11 @@ public class VSSimulation extends JPanel { return simulationNum; } - public VSSimulation.VSMenuItemStates getMenuItemStates() { + public VSSimulator.VSMenuItemStates getMenuItemStates() { return menuItemStates; } - public VSSimulationCanvas getSimulationCanvas() { + public VSSimulatorCanvas getSimulationCanvas() { return simulationCanvas; } @@ -881,12 +881,35 @@ public class VSSimulation extends JPanel { } public void removeProcessAtIndex(int index) { + if (lastSelectedProcessNum >= index) + --lastSelectedProcessNum; + if (lastSelectedProcessNum < 0) + lastSelectedProcessNum = 0; + + globalTextFields.remove(index); + localTextFields.remove(index); + globalPIDComboBox.removeItemAt(index); localPIDComboBox.removeItemAt(index); + processesComboBox.removeItemAt(index); simulatorFrame.updateEditMenu(); } + public void addProcessAtIndex(int index) { + int processID = simulationCanvas.getProcess(index).getProcessID(); + String processString = prefs.getString("lang.process"); + + localTextFields.add(index, "0000"); + globalTextFields.add(index, "0000"); + + localPIDComboBox.insertItemAt("PID: " + processID, index); + globalPIDComboBox.insertItemAt("PID: " + processID, index); + + processesComboBox.insertItemAt(processString + " " + processID, index); + simulatorFrame.updateEditMenu(); + } + public void fireExpertModeChanged() { boolean expertMode = prefs.getBoolean("sim.mode.expert"); diff --git a/sources/simulator/VSSimulationCanvas.java b/sources/simulator/VSSimulatorCanvas.java index 8444785..6e24270 100644 --- a/sources/simulator/VSSimulationCanvas.java +++ b/sources/simulator/VSSimulatorCanvas.java @@ -16,9 +16,9 @@ import prefs.*; import prefs.editors.*; import utils.*; -public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionListener, MouseListener, HierarchyBoundsListener { +public class VSSimulatorCanvas extends Canvas implements Runnable, MouseMotionListener, MouseListener, HierarchyBoundsListener { private VSProcess highlightedProcess; - private VSSimulation simulation; + private VSSimulator simulation; private VSPrefs prefs; private VSLogging logging; private volatile int numProcesses; @@ -65,7 +65,9 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL private Color messageArrivedColor; private Color messageSendingColor; private Color messageLostColor; + private Color backgroundColor; + private long messageLineCounter; private class VSMessageLine { private VSProcess receiverProcess; private Color color; @@ -85,8 +87,10 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL private double y; private long outageTime; private long z; + private long messageLineNum; + private VSTask task; - public VSMessageLine(VSProcess receiverProcess, long sendTime, long recvTime, long outageTime, int senderNum , int receiverNum) { + public VSMessageLine(VSProcess receiverProcess, long sendTime, long recvTime, long outageTime, int senderNum , int receiverNum, VSTask task) { this.receiverProcess = receiverProcess; this.sendTime = sendTime; this.recvTime = recvTime; @@ -95,6 +99,8 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL this.receiverNum = receiverNum; this.isArrived = false; this.isLost = false; + this.messageLineNum = ++messageLineCounter; + this.task = task; if (senderNum > receiverNum) { //offset1 = 1; @@ -106,7 +112,7 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL /* Needed if the message gets lost after 0ms */ this.x = getTimeXPosition(sendTime); - this.y = getProcessYPosition(senderNum) + offset1; + this.y = getProcessYPosition(senderNum+1) + offset1; recalcOnChange(); paint(); @@ -114,9 +120,9 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL public void recalcOnChange() { x1 = getTimeXPosition(sendTime); - y1 = getProcessYPosition(senderNum) + offset1; + y1 = getProcessYPosition(senderNum+1) + offset1; x2 = getTimeXPosition(recvTime); - y2 = getProcessYPosition(receiverNum) + offset2; + y2 = getProcessYPosition(receiverNum+1) + offset2; if (isLost) { x = getTimeXPosition(z); @@ -154,9 +160,36 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL g.drawLine((int) x1, (int) y1, (int) x, (int) y); } } + + public boolean removeProcessAtIndex(int index) { + if (index == receiverNum || index == senderNum) + return true; + + if (index < receiverNum) + --receiverNum; + + if (index < senderNum) + --senderNum; + + recalcOnChange(); + + return false; + } + + public long getMessageLineNum() { + return messageLineNum; + } + + public boolean equals(VSMessageLine line) { + return messageLineNum == line.getMessageLineNum(); + } + + public VSTask getTask() { + return task; + } } - public VSSimulationCanvas(VSPrefs prefs, VSSimulation simulation, VSLogging logging) { + public VSSimulatorCanvas(VSPrefs prefs, VSSimulator simulation, VSLogging logging) { this.prefs = prefs; this.simulation = simulation; this.logging = logging; @@ -169,7 +202,7 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL VSProcess.resetProcessCounter(); for (int i = 0; i < numProcesses; ++i) - addProcess(); + processes.add(createProcess(i)); addMouseListener(this); addMouseMotionListener(this); @@ -199,6 +232,7 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL messageArrivedColor = prefs.getColor("col.message.arrived"); messageSendingColor = prefs.getColor("col.message.sending"); messageLostColor = prefs.getColor("col.message.lost"); + backgroundColor = prefs.getColor("col.background"); paintSize = simulation.getPaintSize(); xPaintSize = simulation.getWidth() - (3 * XOFFSET + simulation.getSplitSize()); @@ -235,21 +269,13 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL if (strategy != null) { synchronized (strategy) { g = (Graphics2D) strategy.getDrawGraphics(); - g.setColor(Color.WHITE); + g.setColor(backgroundColor); if (isAntiAliased) g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } } } - public VSProcess addProcess() { - VSProcess process = new VSProcess(prefs, this, logging); - processes.add(process); - logging.logg(prefs.getString("lang.process.new") + "; " + process); - - return process; - } - private void updateSimulation(final long globalTime, final long lastGlobalTime) { if (isPaused || isFinished) return; @@ -285,7 +311,7 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL if (strategy != null) { g = (Graphics2D) strategy.getDrawGraphics(); - g.setColor(Color.WHITE); + g.setColor(backgroundColor); } } @@ -311,7 +337,7 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL line.draw(g, globalTime); } - g.setColor(Color.WHITE); + g.setColor(backgroundColor); strategy.show(); } @@ -696,8 +722,8 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL synchronized (messageLines) { messageLines.add( new VSMessageLine(receiverProcess, sendingProcess.getGlobalTime(), - deliverTime, outageTime, sendingProcess.getProcessID(), - receiverProcess.getProcessID())); + deliverTime, outageTime, sendingProcess.getProcessNum(), + receiverProcess.getProcessNum(), task)); } } } @@ -707,9 +733,6 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL public void mouseClicked(MouseEvent me) { final VSProcess process = getProcessAtYPos(me.getY()); - if (process == null) - return; - if (SwingUtilities.isRightMouseButton(me)) { ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent ae) { @@ -719,16 +742,17 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL } else if (actionCommand.equals(prefs.getString("lang.process.crash"))) { VSEvent event = new ProcessCrashEvent(); - //event.init(process); taskManager.addTask(new VSTask(process.getGlobalTime(), process, event, VSTask.GLOBAL)); } else if (actionCommand.equals(prefs.getString("lang.process.recover"))) { VSEvent event = new ProcessRecoverEvent(); - //event.init(process); taskManager.addTask(new VSTask(process.getGlobalTime(), process, event, VSTask.GLOBAL)); } else if (actionCommand.equals(prefs.getString("lang.process.remove"))) { removeProcess(process); + + } else if (actionCommand.equals(prefs.getString("lang.process.add.new"))) { + addProcess(); } } }; @@ -736,29 +760,40 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL JPopupMenu popup = new JPopupMenu(); JMenuItem item = new JMenuItem(prefs.getString("lang.process.edit")); - item.addActionListener(actionListener); + if (process == null) + item.setEnabled(false); + else + item.addActionListener(actionListener); popup.add(item); item = new JMenuItem(prefs.getString("lang.process.crash")); - if (process.isCrashed() || isPaused || time == 0 || isFinished) + if (process == null || process.isCrashed() || isPaused || time == 0 || isFinished) item.setEnabled(false); else item.addActionListener(actionListener); popup.add(item); item = new JMenuItem(prefs.getString("lang.process.recover")); - if (!process.isCrashed() || isPaused || time == 0 || isFinished) + if (process == null || !process.isCrashed() || isPaused || time == 0 || isFinished) item.setEnabled(false); else item.addActionListener(actionListener); popup.add(item); item = new JMenuItem(prefs.getString("lang.process.remove")); - item.addActionListener(actionListener); + if (process == null) + item.setEnabled(false); + else + item.addActionListener(actionListener); popup.add(item); popup.addSeparator(); + item = new JMenuItem(prefs.getString("lang.process.add.new")); + item.addActionListener(actionListener); + popup.add(item); + + popup.show(me.getComponent(), me.getX(), me.getY()); } else { @@ -860,16 +895,55 @@ public class VSSimulationCanvas extends Canvas implements Runnable, MouseMotionL recalcOnChange(); } - public void removeProcess(VSProcess process) { + private void removeProcess(VSProcess process) { if (numProcesses == 1) { simulation.getSimulatorFrame().removeSimulation(simulation); } else { int index = processes.indexOf(process); processes.remove(index); + synchronized (processes) { + for (VSProcess p : processes) { + p.removeProcessAtIndex(index); + } + } numProcesses = processes.size(); - recalcOnChange(); simulation.removeProcessAtIndex(index); + recalcOnChange(); + + ArrayList<VSMessageLine> removeThose = new ArrayList<VSMessageLine>(); + synchronized (messageLines) { + for (VSMessageLine line : messageLines) + if (line.removeProcessAtIndex(index)) + removeThose.add(line); + for (VSMessageLine line : removeThose) { + VSTask deliverTask = line.getTask(); + if (deliverTask != null) + taskManager.removeTask(deliverTask); + messageLines.remove(line); + } + } + + taskManager.removeTasksOf(process); } } + + private VSProcess createProcess(int processNum) { + VSProcess process = new VSProcess(prefs, processNum, this, logging); + logging.logg(prefs.getString("lang.process.new") + "; " + process); + return process; + } + + private void addProcess() { + numProcesses = processes.size() + 1; + VSProcess newProcess = createProcess(processes.size()); + processes.add(newProcess); + synchronized (processes) { + for (VSProcess process : processes) + if (!process.equals(newProcess)) + process.addedAProcess(); + } + recalcOnChange(); + simulation.addProcessAtIndex(processes.size()-1); + } } diff --git a/sources/simulator/VSSimulatorFrame.java b/sources/simulator/VSSimulatorFrame.java index c4abdb3..e4e0d18 100644 --- a/sources/simulator/VSSimulatorFrame.java +++ b/sources/simulator/VSSimulatorFrame.java @@ -30,15 +30,15 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { private JMenu menuSimulation; private JToolBar toolBar; private VSPrefs prefs; - private Vector<VSSimulation> simulations; - private VSSimulation currentSimulation; + private Vector<VSSimulator> simulations; + private VSSimulator currentSimulation; private JTabbedPane tabbedPane; //private JSlider speedSlider; public VSSimulatorFrame(VSPrefs prefs, Component relativeTo) { super(prefs.getString("lang.name"), relativeTo); this.prefs = prefs; - this.simulations = new Vector<VSSimulation>(); + this.simulations = new Vector<VSSimulator>(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); @@ -172,7 +172,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { tabbedPane.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent ce) { JTabbedPane pane = (JTabbedPane) ce.getSource(); - currentSimulation = (VSSimulation) pane.getSelectedComponent(); + currentSimulation = (VSSimulator) pane.getSelectedComponent(); currentSimulation.getSimulationCanvas().paint(); updateEditMenu(); updateSimulationMenu(); @@ -192,13 +192,14 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { globalPrefsItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { VSPrefs simulationPrefs = currentSimulation.getPrefs(); - VSSimulationEditor.TAKEOVER_BUTTON = true; - VSSimulationEditor simulationEditor = new VSSimulationEditor( + VSSimulatorEditor.TAKEOVER_BUTTON = true; + VSSimulatorEditor simulationEditor = new VSSimulatorEditor( simulationPrefs, VSSimulatorFrame.this, currentSimulation); new VSEditorFrame(prefs, VSSimulatorFrame.this, simulationEditor); } }); menuEdit.add(globalPrefsItem); + menuEdit.addSeparator(); if (currentSimulation == null) return; @@ -211,8 +212,9 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { for (VSProcess process : arr) { int processID = process.getProcessID(); JMenuItem processItem = new JMenuItem(processString + " " + processID); - processItem.setAccelerator(KeyStroke.getKeyStroke(0x31+processID, - ActionEvent.ALT_MASK)); + if (processNum < 10) + processItem.setAccelerator(KeyStroke.getKeyStroke(0x31+processNum, + ActionEvent.ALT_MASK)); final int finalProcessNum = processNum++; processItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { @@ -225,7 +227,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { /* updateSimulationMenu can be called from concurrent threads */ public synchronized void updateSimulationMenu() { - VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); + VSSimulator.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); pauseItem.setEnabled(menuItemState.getPause()); replayItem.setEnabled(menuItemState.getReplay()); @@ -240,7 +242,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { public void dispose() { synchronized (simulations) { - for (VSSimulation simulation : simulations) + for (VSSimulator simulation : simulations) simulation.getSimulationCanvas().stopThread(); } super.dispose(); @@ -260,7 +262,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { } else if (sourceText.equals(prefs.getString("lang.simulation.new"))) { VSPrefs newPrefs = VSDefaultPrefs.init(); - new VSEditorFrame(newPrefs, this, new VSSimulationEditor(newPrefs, this)); + new VSEditorFrame(newPrefs, this, new VSSimulatorEditor(newPrefs, this)); } else if (sourceText.equals(prefs.getString("lang.window.new"))) { new VSMain(VSDefaultPrefs.init(), this); @@ -275,7 +277,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { System.exit(0); } else if (sourceText.equals(prefs.getString("lang.start"))) { - VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); + VSSimulator.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); menuItemState.setStart(false); menuItemState.setPause(true); menuItemState.setReset(false); @@ -284,7 +286,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { updateSimulationMenu(); } else if (sourceText.equals(prefs.getString("lang.pause"))) { - VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); + VSSimulator.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); menuItemState.setStart(true); menuItemState.setPause(false); menuItemState.setReset(true); @@ -293,7 +295,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { updateSimulationMenu(); } else if (sourceText.equals(prefs.getString("lang.reset"))) { - VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); + VSSimulator.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); menuItemState.setStart(true); menuItemState.setPause(false); menuItemState.setReset(false); @@ -302,7 +304,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { updateSimulationMenu(); } else if (sourceText.equals(prefs.getString("lang.replay"))) { - VSSimulation.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); + VSSimulator.VSMenuItemStates menuItemState = currentSimulation.getMenuItemStates(); menuItemState.setStart(false); menuItemState.setPause(true); menuItemState.setReset(false); @@ -313,7 +315,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { } } - public void addSimulation(VSSimulation simulation) { + public void addSimulation(VSSimulator simulation) { simulation.setLayout(new GridLayout(1, 1, 3, 3)); simulation.setMinimumSize(new Dimension(0, 0)); simulation.setMaximumSize(new Dimension(0, 0)); @@ -330,7 +332,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { } } - public void removeSimulation(VSSimulation simulationToRemove) { + public void removeSimulation(VSSimulator simulationToRemove) { if (simulations.size() == 1) { dispose(); @@ -345,7 +347,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { removeSimulation(currentSimulation); } - public VSSimulation getCurrentSimulation() { + public VSSimulator getCurrentSimulation() { return currentSimulation; } |
