Browse Source

Changed simulator to remember the view whenever possible

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@466 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Mark Kattenbelt 19 years ago
parent
commit
708f090ea5
  1. 105
      prism/src/userinterface/simulator/GUISimulator.java
  2. 5
      prism/src/userinterface/simulator/GUIViewDialog.form
  3. 3
      prism/src/userinterface/simulator/GUIViewDialog.java

105
prism/src/userinterface/simulator/GUISimulator.java

@ -73,6 +73,7 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect
private boolean displayStyleFast; private boolean displayStyleFast;
private boolean displayPathLoops; private boolean displayPathLoops;
private SimulationView view;
//Actions //Actions
private Action backtrackToHere, removeToHere, newPath, resetPath, exportPath, configureView; private Action backtrackToHere, removeToHere, newPath, resetPath, exportPath, configureView;
@ -84,7 +85,7 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect
this.gui = gui; this.gui = gui;
this.engine = gui.getPrism().getSimulator(); this.engine = gui.getPrism().getSimulator();
SimulationView view = new SimulationView();
view = new SimulationView();
pathTableModel = new PathTableModel(view); pathTableModel = new PathTableModel(view);
updateTableModel = new UpdateTableModel(); updateTableModel = new UpdateTableModel();
@ -277,6 +278,7 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect
engineBuilt = false; engineBuilt = false;
} }
pathActive = false; pathActive = false;
pathTableModel.restartPathTable(); pathTableModel.restartPathTable();
updateTableModel.restartUpdatesTable(); updateTableModel.restartUpdatesTable();
@ -358,14 +360,14 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect
Values defaultInitialState = new Values(); Values defaultInitialState = new Values();
defaultInitialState.addValues(parsedModel.getInitialValues()); defaultInitialState.addValues(parsedModel.getInitialValues());
// if required, we prompt the user for an initial state
if(isAskForInitialState())
{
boolean modelChanged = false;
// we will pass in lastInitialState to the dialog // we will pass in lastInitialState to the dialog
// but first make sure it is ok, i.e. // but first make sure it is ok, i.e.
// (a) it is non-null // (a) it is non-null
if(lastInitialState == null) { if(lastInitialState == null) {
lastInitialState = defaultInitialState; lastInitialState = defaultInitialState;
modelChanged = true;
} }
// (b) var names/types are correct // (b) var names/types are correct
else else
@ -400,19 +402,23 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect
if(!match) // if there's a problem, just use the default if(!match) // if there's a problem, just use the default
{ {
lastInitialState = defaultInitialState; lastInitialState = defaultInitialState;
modelChanged = true;
} }
} }
// if required, we prompt the user for an initial state
if(isAskForInitialState())
{
initialState = GUIInitialStatePicker.defineInitalValuesWithDialog(getGUI(), lastInitialState, parsedModel); initialState = GUIInitialStatePicker.defineInitalValuesWithDialog(getGUI(), lastInitialState, parsedModel);
// if user clicked cancel from dialog... // if user clicked cancel from dialog...
if (initialState == null) { if (initialState == null) {
return; return;
} }
} }
// if we don't need to ask the user at all, just use the default
else else
{ {
initialState = defaultInitialState;
initialState = lastInitialState;
} }
displayPathLoops = true; displayPathLoops = true;
@ -427,7 +433,9 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect
definedConstantsLabel.setText((uCon.getDefinedConstantsString().length() == 0) ? "None" : uCon.getDefinedConstantsString()); definedConstantsLabel.setText((uCon.getDefinedConstantsString().length() == 0) ? "None" : uCon.getDefinedConstantsString());
doEnables(); doEnables();
pathTableModel.restartPathTable(); pathTableModel.restartPathTable();
updateTableModel.restartUpdatesTable(); updateTableModel.restartUpdatesTable();
pathTable.getSelectionModel().setSelectionInterval(pathTable.getRowCount()-1, pathTable.getRowCount()-1); pathTable.getSelectionModel().setSelectionInterval(pathTable.getRowCount()-1, pathTable.getRowCount()-1);
@ -2621,6 +2629,85 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect
} }
public void refreshToDefaultView() public void refreshToDefaultView()
{
// First see if we can get away with using current settings...
boolean canUseCurrentView = true;
if (!pathActive)
canUseCurrentView = false;
else
{
// Time-wise we have a problem.
if (parsedModel.getType() != ModulesFile.STOCHASTIC && (showTime || showCumulativeTime))
canUseCurrentView = false;
try
{
// Make a set of all variable names.
TreeSet<String> allVarNames = new TreeSet<String>();
for (Object var : visibleVariables)
allVarNames.add(((Variable)var).getName());
for (Object var : hiddenVariables)
allVarNames.add(((Variable)var).getName());
for (int i = 0; i < engine.getNumVariables(); i++)
{
if (allVarNames.contains(engine.getVariableName(i)))
allVarNames.remove(engine.getVariableName(i));
else
// Cannot use current view if a variable is not there.
canUseCurrentView = false;
}
// Cannot use current view if we have too many variables.
if (allVarNames.size() > 0)
canUseCurrentView = false;
// Make a list of all reward structures
ArrayList<RewardStructure> allrew = new ArrayList<RewardStructure>();
for (Object rew : rewards)
{
allrew.add((RewardStructure)rew);
}
for (int r = 0; r < parsedModel.getNumRewardStructs(); r++)
{
parser.RewardStruct rewardStruct = parsedModel.getRewardStruct(r);
String rewardName = rewardStruct.getName();
boolean hasStates = parsedModel.getRewardStruct(r).getNumStateItems() != 0;
boolean hasTrans = parsedModel.getRewardStruct(r).getNumTransItems() != 0;
boolean foundReward = false;
for (Object rewobj : rewards)
{
RewardStructure rew = (RewardStructure)rewobj;
if (rew.isStateEmpty() == !hasStates && rew.isTransitionEmpty() == !hasTrans && (rew.getName() == null && rewardName.equals("") || rew.getName().equals(rewardName)))
{
allrew.remove(rew);
foundReward = true;
}
}
if (!foundReward)
canUseCurrentView = false;
}
if (allrew.size() > 0)
canUseCurrentView = false;
}
catch (SimulatorException e)
{
canUseCurrentView = false;
}
}
if (!canUseCurrentView)
{ {
visibleVariables.clear(); visibleVariables.clear();
hiddenVariables.clear(); hiddenVariables.clear();
@ -2667,9 +2754,15 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect
if (!rewardStructure.isTransitionEmpty()) if (!rewardStructure.isTransitionEmpty())
visibleRewardColumns.add(new RewardStructureColumn(rewardStructure, RewardStructureColumn.TRANSITION_REWARD)); visibleRewardColumns.add(new RewardStructureColumn(rewardStructure, RewardStructureColumn.TRANSITION_REWARD));
} }
System.out.println("REFRESHED VIEW " + visibleVariables.size());
} }
catch (SimulatorException e) {} catch (SimulatorException e) {}
} }
}
else
System.out.println("REUSED VIEW");
this.setChanged(); this.setChanged();
this.notifyObservers(); this.notifyObservers();

5
prism/src/userinterface/simulator/GUIViewDialog.form

@ -571,9 +571,6 @@
</Border> </Border>
</Property> </Property>
</Properties> </Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value="Time properties"/>
</AccessibilityProperties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents> <SubComponents>
@ -600,7 +597,7 @@
<SubComponents> <SubComponents>
<Component class="javax.swing.JCheckBox" name="showTimeCheckBox"> <Component class="javax.swing.JCheckBox" name="showTimeCheckBox">
<Properties> <Properties>
<Property name="text" type="java.lang.String" value="Show the time spend in states"/>
<Property name="text" type="java.lang.String" value="Show the time spent in states"/>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo"> <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
<EmptyBorder bottom="0" left="0" right="0" top="0"/> <EmptyBorder bottom="0" left="0" right="0" top="0"/>

3
prism/src/userinterface/simulator/GUIViewDialog.java

@ -537,7 +537,7 @@ public class GUIViewDialog extends JDialog implements KeyListener
topInnerTimePanel.setLayout(new java.awt.GridLayout(2, 1, 5, 5)); topInnerTimePanel.setLayout(new java.awt.GridLayout(2, 1, 5, 5));
topInnerTimePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5)); topInnerTimePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
showTimeCheckBox.setText("Show the time spend in states");
showTimeCheckBox.setText("Show the time spent in states");
showTimeCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); showTimeCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
showTimeCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0)); showTimeCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0));
topInnerTimePanel.add(showTimeCheckBox); topInnerTimePanel.add(showTimeCheckBox);
@ -551,7 +551,6 @@ public class GUIViewDialog extends JDialog implements KeyListener
innerTimePanel.add(topInnerTimePanel, java.awt.BorderLayout.NORTH); innerTimePanel.add(topInnerTimePanel, java.awt.BorderLayout.NORTH);
boxPanel.add(innerTimePanel); boxPanel.add(innerTimePanel);
innerTimePanel.getAccessibleContext().setAccessibleName("Time properties");
pathStylePanel.setLayout(new java.awt.BorderLayout()); pathStylePanel.setLayout(new java.awt.BorderLayout());

Loading…
Cancel
Save