diff options
| author | Paul Buetow <paul@buetow.org> | 2008-05-22 15:14:34 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-05-22 15:14:34 +0000 |
| commit | f7b023c5cff7dae854a015889bd217f3b84f6e07 (patch) | |
| tree | 7e8767e18803da4928afad0f50760ba1efd2524d | |
| parent | 4de5343c60cc165cdf30121e0ed9eca96ac91a22 (diff) | |
Expert mode changable.
| -rw-r--r-- | ROADMAP | 2 | ||||
| -rw-r--r-- | sources/prefs/VSDefaultPrefs.java | 1 | ||||
| -rw-r--r-- | sources/prefs/editors/VSEditor.java | 28 | ||||
| -rw-r--r-- | sources/prefs/editors/VSSimulationEditor.java | 22 | ||||
| -rw-r--r-- | sources/simulator/VSSimulation.java | 293 | ||||
| -rw-r--r-- | sources/simulator/VSSimulatorFrame.java | 12 |
6 files changed, 228 insertions, 130 deletions
@@ -1,7 +1,7 @@ TODO: Slow-Motion -Bug: Ausfallwkeit geht nicht?!?!?! (Nur beim 1. mal tut das) +Einfacher vs. erweiterter Modus Prozesse hinzufuegen/loeschen koennen Neuen Protokolleditor bauen "Himmelobjekt" diff --git a/sources/prefs/VSDefaultPrefs.java b/sources/prefs/VSDefaultPrefs.java index de5583c..a06f985 100644 --- a/sources/prefs/VSDefaultPrefs.java +++ b/sources/prefs/VSDefaultPrefs.java @@ -206,6 +206,7 @@ public class VSDefaultPrefs extends VSPrefs { public void fillDefaultBooleans() { //initBoolean("message.broadcast", false, "Nachrichten sind immer Broadcasts"); + initBoolean("sim.mode.expert", false, "Expertenmodus aktivieren"); initBoolean("sim.message.own.recv", false, "Eigene Nachrichten empfangen"); } } diff --git a/sources/prefs/editors/VSEditor.java b/sources/prefs/editors/VSEditor.java index 0d00bab..d8e3222 100644 --- a/sources/prefs/editors/VSEditor.java +++ b/sources/prefs/editors/VSEditor.java @@ -35,6 +35,7 @@ public abstract class VSEditor implements ActionListener { public static final int SIMULATION_PREFERENCES = 1; private VSFrame frame; protected VSEditorTable editTable; + private boolean expertModeChanged; public VSEditor(VSPrefs prefs, VSPrefs prefsToEdit) { init(prefs, prefsToEdit); @@ -91,10 +92,16 @@ public abstract class VSEditor implements ActionListener { private ArrayList<String> filterKeys(Set<String> set) { ArrayList<String> filtered = new ArrayList<String>(); - - for (String elem : set) - if (!elem.startsWith("lang.") && !elem.startsWith("keyevent")) - filtered.add(elem); + boolean expertMode = prefs.getBoolean("sim.mode.expert"); + + for (String elem : set) { + if (!elem.startsWith("lang.") && !elem.startsWith("keyevent")) { + if (expertMode) + filtered.add(elem); + else if (!elem.startsWith("col.") && (!elem.startsWith("div."))) + filtered.add(elem); + } + } return filtered; } @@ -394,6 +401,8 @@ public abstract class VSEditor implements ActionListener { } protected void savePrefs() { + boolean expertMode = prefs.getBoolean("sim.mode.expert"); + int i = 0; for (String key : integerKeys) { JComboBox valComboBox = integerFields.get(key); @@ -438,6 +447,17 @@ public abstract class VSEditor implements ActionListener { JTextField valField = stringFields.get(key); prefsToEdit.setString(key, valField.getText()); } + + expertModeChanged = expertMode != prefs.getBoolean("sim.mode.expert"); + } + + public boolean expertModeChanged() { + boolean ret = expertModeChanged; + + if (expertModeChanged) + expertModeChanged = false; + + return ret; } public void actionPerformed(ActionEvent e) { diff --git a/sources/prefs/editors/VSSimulationEditor.java b/sources/prefs/editors/VSSimulationEditor.java index 8d3a010..f0106fd 100644 --- a/sources/prefs/editors/VSSimulationEditor.java +++ b/sources/prefs/editors/VSSimulationEditor.java @@ -14,7 +14,18 @@ import prefs.*; public class VSSimulationEditor extends VSBetterEditor { private VSSimulatorFrame simulatorFrame; + private VSSimulation simulation; public static boolean TAKEOVER_BUTTON; + private boolean dontStartNewSimulation; + + public VSSimulationEditor(VSPrefs prefs, VSSimulatorFrame simulatorFrame, VSSimulation simulation) { + super(prefs, prefs, prefs.getString("lang.name") + + " - " + prefs.getString("lang.prefs")); + this.dontStartNewSimulation = true;//simulation != null; + this.simulatorFrame = simulatorFrame; + this.simulation = simulation; + getInfoArea().setText(prefs.getString("lang.prefs.info!")); + } public VSSimulationEditor(VSPrefs prefs, VSSimulatorFrame simulatorFrame) { super(prefs, prefs, prefs.getString("lang.name") @@ -39,11 +50,18 @@ public class VSSimulationEditor extends VSBetterEditor { if (actionCommand.equals(prefs.getString("lang.takeover"))) { savePrefs(); - simulatorFrame.getCurrentSimulation().updateFromPrefs(); + if (expertModeChanged()) { + simulation.fireExpertModeChanged(); + } + simulation.updateFromPrefs(); } else if (actionCommand.equals(prefs.getString("lang.ok"))) { savePrefs(); - simulatorFrame.addSimulation(new VSSimulation(prefsToEdit, simulatorFrame)); + if (expertModeChanged()) { + simulation.fireExpertModeChanged(); + } + if (!dontStartNewSimulation) + simulatorFrame.addSimulation(new VSSimulation(prefsToEdit, simulatorFrame)); } else { super.actionPerformed(e); diff --git a/sources/simulator/VSSimulation.java b/sources/simulator/VSSimulation.java index 06ca0d9..3af712c 100644 --- a/sources/simulator/VSSimulation.java +++ b/sources/simulator/VSSimulation.java @@ -18,35 +18,41 @@ import protocols.*; import utils.*; public class VSSimulation extends JPanel { - private static int simulationCounter; - private static int simulationNum; - private VSSimulatorFrame simulatorFrame; - private JTextField filterTextField; + private ArrayList<String> globalTextFields; + private ArrayList<String> localTextFields; + private ArrayList<VSCreateTask> createTasks; private JCheckBox filterActiveCheckBox; private JCheckBox lamportActiveCheckBox; + private JTextArea loggingArea; private JCheckBox vectorTimeActiveCheckBox; - private JComboBox processesComboBox; - private JComboBox localPIDComboBox; private JComboBox globalPIDComboBox; - private int lastSelectedProcessNum; - private ArrayList<String> localTextFields; - private ArrayList<String> globalTextFields; - private JTextField localTextField; - private JTextField globalTextField; - private ArrayList<VSCreateTask> createTasks; + private JComboBox localPIDComboBox; + private JComboBox processesComboBox; + private JPanel localAddPanel; + private JPanel globalAddPanel; + private JPanel localPanel; + private JPanel loggingPanel; + private JPanel toolsPanel; + private JSplitPane splitPane1; private JSplitPane splitPaneH; private JSplitPane splitPaneV; - private JSplitPane splitPane1; + private JTabbedPane tabbedPane; + private JTextField filterTextField; + private JTextField globalTextField; + private JTextField localTextField; private Thread thread; private VSLogging logging; + private VSMenuItemStates menuItemStates; private VSPrefs prefs; private VSSimulationCanvas simulationCanvas; - private boolean hasStarted = false; - private VSTaskManagerTableModel taskManagerLocalModel; - private VSTaskManagerTableModel taskManagerGlobalModel; + private VSSimulatorFrame simulatorFrame; private VSTaskManager taskManager; - private VSMenuItemStates menuItemStates; - private JTabbedPane tabbedPane; + private VSTaskManagerTableModel taskManagerGlobalModel; + private VSTaskManagerTableModel taskManagerLocalModel; + private boolean hasStarted = false; + private int lastSelectedProcessNum; + private static int simulationCounter; + private static int simulationNum; public class VSMenuItemStates { private volatile boolean pause; @@ -123,10 +129,9 @@ public class VSSimulation extends JPanel { } private void fillContentPane() { - JTextArea loggingArea = logging.getLoggingArea(); + loggingArea = logging.getLoggingArea(); splitPaneH = new JSplitPane(); - splitPaneV = new JSplitPane(); simulationCanvas = new VSSimulationCanvas(prefs, this, logging); @@ -139,13 +144,10 @@ public class VSSimulation extends JPanel { canvasPanel.setMinimumSize(new Dimension(0, 0)); canvasPanel.setMaximumSize(new Dimension(0, 0)); - JScrollPane textScrollPane = new JScrollPane(loggingArea); - JPanel toolsPanel = createToolsPanel(); - - JPanel loggingPane = new JPanel(new BorderLayout()); - loggingPane.add(textScrollPane, BorderLayout.CENTER); - loggingPane.add(toolsPanel, BorderLayout.SOUTH); - loggingPane.setPreferredSize(new Dimension(200, 1)); + loggingPanel = new JPanel(new BorderLayout()); + loggingPanel.add(new JScrollPane(loggingArea), BorderLayout.CENTER); + loggingPanel.add(createToolsPanel(), BorderLayout.SOUTH); + loggingPanel.setPreferredSize(new Dimension(200, 1)); splitPaneH.setOrientation(JSplitPane.HORIZONTAL_SPLIT); splitPaneH.setLeftComponent(createProcessPane()); @@ -155,7 +157,7 @@ public class VSSimulation extends JPanel { splitPaneV.setOrientation(JSplitPane.VERTICAL_SPLIT); splitPaneV.setTopComponent(splitPaneH); - splitPaneV.setBottomComponent(loggingPane); + splitPaneV.setBottomComponent(loggingPanel); //splitPaneV.setOneTouchExpandable(true); splitPaneV.setContinuousLayout(true); @@ -164,45 +166,48 @@ public class VSSimulation extends JPanel { private JPanel createToolsPanel() { JPanel toolsPanel = new JPanel(); + boolean expertMode = prefs.getBoolean("sim.mode.expert"); toolsPanel.setLayout(new BoxLayout(toolsPanel, BoxLayout.X_AXIS)); - lamportActiveCheckBox = new JCheckBox(prefs.getString("lang.time.lamport")); - lamportActiveCheckBox.setSelected(false); - lamportActiveCheckBox.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent ce) { - AbstractButton abstractButton = (AbstractButton) ce.getSource(); - ButtonModel buttonModel = abstractButton.getModel(); - simulationCanvas.showLamport(buttonModel.isSelected()); - if (buttonModel.isSelected()) - vectorTimeActiveCheckBox.setSelected(false); - } - }); - toolsPanel.add(lamportActiveCheckBox); - - vectorTimeActiveCheckBox = new JCheckBox(prefs.getString("lang.time.vector")); - vectorTimeActiveCheckBox.setSelected(false); - vectorTimeActiveCheckBox.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent ce) { - AbstractButton abstractButton = (AbstractButton) ce.getSource(); - ButtonModel buttonModel = abstractButton.getModel(); - simulationCanvas.showVectorTime(buttonModel.isSelected()); - if (buttonModel.isSelected()) - lamportActiveCheckBox.setSelected(false); - } - }); - toolsPanel.add(vectorTimeActiveCheckBox); - - JCheckBox antiAliasing = new JCheckBox(prefs.getString("lang.antialiasing")); - antiAliasing.setSelected(false); - antiAliasing.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent ce) { - AbstractButton abstractButton = (AbstractButton) ce.getSource(); - ButtonModel buttonModel = abstractButton.getModel(); - simulationCanvas.isAntiAliased(buttonModel.isSelected()); - } - }); - toolsPanel.add(antiAliasing); + if (expertMode) { + lamportActiveCheckBox = new JCheckBox(prefs.getString("lang.time.lamport")); + lamportActiveCheckBox.setSelected(false); + lamportActiveCheckBox.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent ce) { + AbstractButton abstractButton = (AbstractButton) ce.getSource(); + ButtonModel buttonModel = abstractButton.getModel(); + simulationCanvas.showLamport(buttonModel.isSelected()); + if (buttonModel.isSelected()) + vectorTimeActiveCheckBox.setSelected(false); + } + }); + toolsPanel.add(lamportActiveCheckBox); + + vectorTimeActiveCheckBox = new JCheckBox(prefs.getString("lang.time.vector")); + vectorTimeActiveCheckBox.setSelected(false); + vectorTimeActiveCheckBox.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent ce) { + AbstractButton abstractButton = (AbstractButton) ce.getSource(); + ButtonModel buttonModel = abstractButton.getModel(); + simulationCanvas.showVectorTime(buttonModel.isSelected()); + if (buttonModel.isSelected()) + lamportActiveCheckBox.setSelected(false); + } + }); + toolsPanel.add(vectorTimeActiveCheckBox); + + JCheckBox antiAliasing = new JCheckBox(prefs.getString("lang.antialiasing")); + antiAliasing.setSelected(false); + antiAliasing.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent ce) { + AbstractButton abstractButton = (AbstractButton) ce.getSource(); + ButtonModel buttonModel = abstractButton.getModel(); + simulationCanvas.isAntiAliased(buttonModel.isSelected()); + } + }); + toolsPanel.add(antiAliasing); + } JCheckBox loggingActiveCheckBox = new JCheckBox(prefs.getString("lang.logging.active")); loggingActiveCheckBox.setSelected(true); @@ -215,51 +220,54 @@ public class VSSimulation extends JPanel { }); toolsPanel.add(loggingActiveCheckBox); - filterActiveCheckBox = new JCheckBox(prefs.getString("lang.filter")); - filterActiveCheckBox.setSelected(false); - filterActiveCheckBox.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent ce) { - AbstractButton abstractButton = (AbstractButton) ce.getSource(); - ButtonModel buttonModel = abstractButton.getModel(); - logging.isFiltered(buttonModel.isSelected()); - if (buttonModel.isSelected()) - logging.setFilterText(filterTextField.getText()); - } - }); - toolsPanel.add(filterActiveCheckBox); - - filterTextField = new JTextField(); - filterTextField.getDocument().addDocumentListener(new DocumentListener() { - public void insertUpdate(DocumentEvent de) { - logging.setFilterText(filterTextField.getText()); - } + if (expertMode) { + filterActiveCheckBox = new JCheckBox(prefs.getString("lang.filter")); + filterActiveCheckBox.setSelected(false); + filterActiveCheckBox.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent ce) { + AbstractButton abstractButton = (AbstractButton) ce.getSource(); + ButtonModel buttonModel = abstractButton.getModel(); + logging.isFiltered(buttonModel.isSelected()); + if (buttonModel.isSelected()) + logging.setFilterText(filterTextField.getText()); + } + }); + toolsPanel.add(filterActiveCheckBox); - public void removeUpdate(DocumentEvent de) { - logging.setFilterText(filterTextField.getText()); - } + filterTextField = new JTextField(); + filterTextField.getDocument().addDocumentListener(new DocumentListener() { + public void insertUpdate(DocumentEvent de) { + logging.setFilterText(filterTextField.getText()); + } - public void changedUpdate(DocumentEvent de) { - logging.setFilterText(filterTextField.getText()); - } - }); - toolsPanel.add(filterTextField); + public void removeUpdate(DocumentEvent de) { + logging.setFilterText(filterTextField.getText()); + } - JButton clearButton = new JButton(prefs.getString("lang.logging.clear")); - clearButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - String actionCommand = ae.getActionCommand(); - if (actionCommand.equals(prefs.getString("lang.logging.clear"))) { - logging.clear(); + public void changedUpdate(DocumentEvent de) { + logging.setFilterText(filterTextField.getText()); } - } - }); - toolsPanel.add(clearButton); + }); + toolsPanel.add(filterTextField); + + JButton clearButton = new JButton(prefs.getString("lang.logging.clear")); + clearButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ae) { + String actionCommand = ae.getActionCommand(); + if (actionCommand.equals(prefs.getString("lang.logging.clear"))) { + logging.clear(); + } + } + }); + toolsPanel.add(clearButton); + } return toolsPanel; } private JPanel createProcessPane() { JPanel editPanel = new JPanel(new GridBagLayout()); + boolean expertMode = prefs.getBoolean("sim.mode.expert"); editPanel.setLayout(new BoxLayout(editPanel, BoxLayout.Y_AXIS)); processesComboBox = new JComboBox(); @@ -282,23 +290,21 @@ public class VSSimulation extends JPanel { globalPIDComboBox.addItem(prefs.getString("lang.all")); tabbedPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.WRAP_TAB_LAYOUT); - tabbedPane.addChangeListener(new ChangeListener() { - public void stateChanged(ChangeEvent ce) { - JTabbedPane pane = (JTabbedPane) ce.getSource(); - //currentSimulation = (VSSimulation) pane.getSelectedComponent(); - } - }); - //editPanel.add(tabbedPane, BorderLayout.CENTER); - - JPanel localPanel = createTaskLabel(VSTaskManagerTableModel.LOCAL); + localPanel = createTaskLabel(VSTaskManagerTableModel.LOCAL); JPanel globalPanel = createTaskLabel(VSTaskManagerTableModel.GLOBAL); splitPane1 = new JSplitPane(); splitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT); + //splitPane1.setTopComponent(localPanel); splitPane1.setTopComponent(localPanel); splitPane1.setBottomComponent(globalPanel); splitPane1.setOneTouchExpandable(true); - tabbedPane.addTab(prefs.getString("lang.events"), splitPane1); + + if (expertMode) + tabbedPane.addTab(prefs.getString("lang.events"), splitPane1); + + else + tabbedPane.addTab(prefs.getString("lang.events"), localPanel); processesComboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { @@ -334,11 +340,13 @@ public class VSSimulation extends JPanel { }); tabbedPane.add(prefs.getString("lang.variables"), null); - tabbedPane.add(prefs.getString("lang.variables.global"), null); + //tabbedPane.add(prefs.getString("lang.variables.global"), null); + /* VSSimulationEditor.TAKEOVER_BUTTON = true; VSSimulationEditor editor = new VSSimulationEditor(prefs, simulatorFrame); tabbedPane.setComponentAt(2, editor.getContentPane()); + */ editPanel.add(processesComboBox); editPanel.add(tabbedPane); @@ -366,7 +374,10 @@ public class VSSimulation extends JPanel { JScrollPane scrollPane = new JScrollPane(createTaskTable(localTasks)); panel.add(scrollPane); - initAddPanel(panel, localTasks); + if (localTasks) + localAddPanel = initAddPanel(panel, localTasks); + else + globalAddPanel = initAddPanel(panel, localTasks); return panel; } @@ -586,9 +597,10 @@ public class VSSimulation extends JPanel { return table; } - private void initAddPanel(JPanel panel, final boolean localTasks) { - JPanel panel1 = new JPanel(); - panel1.setLayout(new BoxLayout(panel1, BoxLayout.X_AXIS)); + private JPanel initAddPanel(JPanel panel, final boolean localTasks) { + JPanel addPanel = new JPanel(); + addPanel.setLayout(new BoxLayout(addPanel, BoxLayout.X_AXIS)); + boolean expertMode = prefs.getBoolean("sim.mode.expert"); final JTextField textField = new JTextField(); if (localTasks) @@ -598,14 +610,16 @@ public class VSSimulation extends JPanel { textField.setText("0000"); textField.setBackground(Color.WHITE); - panel1.add(textField); + addPanel.add(textField); - panel1.add(new JLabel(" ms ")); + addPanel.add(new JLabel(" ms ")); - if (localTasks) - panel1.add(localPIDComboBox); - else - panel1.add(globalPIDComboBox); + if (localTasks) { + if (expertMode) + addPanel.add(localPIDComboBox); + } else { + addPanel.add(globalPIDComboBox); + } final JComboBox comboBox = new JComboBox(); JButton takeoverButton = new JButton(prefs.getString("lang.takeover")); @@ -680,7 +694,7 @@ public class VSSimulation extends JPanel { } }); - panel1.add(takeoverButton); + addPanel.add(takeoverButton); boolean flag = createTasks == null; if (flag) createTasks = new ArrayList<VSCreateTask>(); @@ -779,7 +793,9 @@ public class VSSimulation extends JPanel { } panel.add(comboBox); - panel.add(panel1); + panel.add(addPanel); + + return addPanel; } public int getSplitSize() { @@ -865,4 +881,37 @@ public class VSSimulation extends JPanel { simulationCanvas.setBackground(prefs.getColor("col.background")); simulationCanvas.updateFromPrefs(); } + + public void fireExpertModeChanged() { + boolean expertMode = prefs.getBoolean("sim.mode.expert"); + + /* Update the Task Manager GUI */ + int selectedIndex = tabbedPane.getSelectedIndex(); + + if (expertMode) { + tabbedPane.remove(localPanel); + tabbedPane.insertTab(prefs.getString("lang.events"), null, splitPane1, null, 0); + splitPane1.setTopComponent(localPanel); + splitPane1.setDividerLocation((int) (getPaintSize()/2) - 20); + + /* addPanel */ + localAddPanel.add(localPIDComboBox, 1); + + } else { + tabbedPane.remove(splitPane1); + tabbedPane.insertTab(prefs.getString("lang.events"), null, localPanel, null, 0); + + /* addPanel */ + localAddPanel.remove(1); + } + + tabbedPane.setSelectedIndex(selectedIndex); + + + + /* Update the tools panel */ + loggingPanel.remove(1); + loggingPanel.add(createToolsPanel(), BorderLayout.SOUTH); + updateUI(); + } } diff --git a/sources/simulator/VSSimulatorFrame.java b/sources/simulator/VSSimulatorFrame.java index f0a0fea..ee6f189 100644 --- a/sources/simulator/VSSimulatorFrame.java +++ b/sources/simulator/VSSimulatorFrame.java @@ -140,7 +140,7 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { private Container createContentPane() { Container pane = getContentPane(); - tabbedPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT); + tabbedPane = new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT); tabbedPane.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent ce) { JTabbedPane pane = (JTabbedPane) ce.getSource(); @@ -158,6 +158,16 @@ public class VSSimulatorFrame extends VSFrame implements ActionListener { private void updateEditMenu() { menuEdit.removeAll(); + JMenuItem globalPrefsItem = new JMenuItem(prefs.getString("lang.prefs")); + globalPrefsItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ae) { + new VSEditorFrame(prefs, VSSimulatorFrame.this, + new VSSimulationEditor(prefs, VSSimulatorFrame.this, + currentSimulation)); + } + }); + menuEdit.add(globalPrefsItem); + if (currentSimulation == null) return; |
