summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-24 21:06:15 +0000
committerPaul Buetow <paul@buetow.org>2008-05-24 21:06:15 +0000
commit222d028fac58233a451e2de875353252a3dc9f63 (patch)
tree292394f179db68464d9554b71a7ec05368867e33
parent61e38d3236ead0b32f8fa1a78901e9d0c75c91ea (diff)
PRocesses now get removed properly.
Removed all VSSimulation* classes.
-rw-r--r--sources/core/VSProcess.java33
-rw-r--r--sources/core/VSTaskManager.java23
-rw-r--r--sources/core/time/VSVectorTime.java7
-rw-r--r--sources/prefs/VSDefaultPrefs.java1
-rw-r--r--sources/prefs/editors/VSSimulatorEditor.java (renamed from sources/prefs/editors/VSSimulationEditor.java)10
-rw-r--r--sources/simulator/VSLogging.java4
-rw-r--r--sources/simulator/VSMain.java2
-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.java38
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;
}