You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
264 lines
6.1 KiB
264 lines
6.1 KiB
//==============================================================================
|
|
//
|
|
// Copyright (c) 2002-
|
|
// Authors:
|
|
// * Andrew Hinton <ug60axh@cs.bham.ac.uk> (University of Birmingham)
|
|
// * Dave Parker <david.parker@comlab.ox.ac.uk> (University of Oxford, formerly University of Birmingham)
|
|
//
|
|
//------------------------------------------------------------------------------
|
|
//
|
|
// This file is part of PRISM.
|
|
//
|
|
// PRISM is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// PRISM is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with PRISM; if not, write to the Free Software Foundation,
|
|
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
//
|
|
//==============================================================================
|
|
|
|
package userinterface.properties;
|
|
|
|
import java.util.*;
|
|
import java.awt.*;
|
|
import javax.swing.*;
|
|
import javax.swing.table.*;
|
|
|
|
import parser.ast.*;
|
|
import prism.*;
|
|
|
|
public class GUIExperimentTable extends JTable
|
|
{
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
private ExperimentTableModel expModel;
|
|
private GUIMultiProperties guiProps;
|
|
|
|
/** Creates a new instance of GUIExperimentPanel */
|
|
public GUIExperimentTable(GUIMultiProperties guiProps)
|
|
{
|
|
super();
|
|
this.guiProps = guiProps;
|
|
initComponents();
|
|
TableColumn col = getColumnModel().getColumn(2);
|
|
col.setCellRenderer(new ProgressBarRenderer());
|
|
}
|
|
|
|
/** Override set font to update row heights at same time */
|
|
public void setFont(Font font)
|
|
{
|
|
super.setFont(font);
|
|
setRowHeight(getFontMetrics(font).getHeight() + 4);
|
|
}
|
|
|
|
//UPDATE METHODS
|
|
|
|
public void deleteSelected()
|
|
{
|
|
while(getSelectedRowCount() > 0)
|
|
{
|
|
int row = this.getSelectedRow();
|
|
removeExperiment(row);
|
|
}
|
|
}
|
|
|
|
public int newExperiment(PropertiesFile propFile, UndefinedConstants cons, boolean useSimulation)//propFile only contains 1 con
|
|
{
|
|
GUIExperiment ge = new GUIExperiment(this, guiProps, propFile, cons, useSimulation);
|
|
return expModel.addExperiment(ge);
|
|
}
|
|
|
|
public void removeExperiment(int i)
|
|
{
|
|
expModel.removeExperiment(i);
|
|
}
|
|
|
|
public void startExperiment(int i)
|
|
{
|
|
expModel.getExperiment(i).startExperiment();
|
|
}
|
|
|
|
public void progressChanged()
|
|
{
|
|
repaint();
|
|
}
|
|
|
|
public void stop()
|
|
{
|
|
expModel.stop();
|
|
}
|
|
|
|
//ACCESS METHODS
|
|
|
|
public int getNumExperiments()
|
|
{
|
|
return expModel.getNumExperiments();
|
|
}
|
|
|
|
public GUIExperiment getExperiment(int i)
|
|
{
|
|
return expModel.getExperiment(i);
|
|
}
|
|
|
|
private void initComponents()
|
|
{
|
|
expModel = new ExperimentTableModel();
|
|
setModel(expModel);
|
|
}
|
|
|
|
class ExperimentTableModel extends AbstractTableModel
|
|
{
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
ArrayList<GUIExperiment> experiments;
|
|
|
|
public ExperimentTableModel()
|
|
{
|
|
experiments = new ArrayList<GUIExperiment>();
|
|
}
|
|
|
|
public String getColumnName(int index)
|
|
{
|
|
switch(index)
|
|
{
|
|
case 0: return "Property";
|
|
case 1: return "Defined Constants";
|
|
case 2: return "Progress";
|
|
case 3: return "Status";
|
|
case 4: return "Method";
|
|
default: return "";
|
|
}
|
|
}
|
|
|
|
public int getColumnCount()
|
|
{
|
|
return 5;
|
|
}
|
|
|
|
public int getRowCount()
|
|
{
|
|
return experiments.size();
|
|
}
|
|
|
|
public Object getValueAt(int rowIndex, int columnIndex)
|
|
{
|
|
GUIExperiment ge = getExperiment(rowIndex);
|
|
switch(columnIndex)
|
|
{
|
|
case 0: return ge.getPropertyString();
|
|
case 1: return ge.getDefinedConstantsString();
|
|
case 2:
|
|
{
|
|
JProgressBar b = new JProgressBar();
|
|
// default case
|
|
if (ge.getTotalIterations() > 0)
|
|
{
|
|
b.setMaximum(ge.getTotalIterations());
|
|
b.setValue(ge.getCurrentIterations());
|
|
b.setStringPainted(true);
|
|
b.setBackground(Color.white);
|
|
int percent = (int)((double)ge.getCurrentIterations()/(double)ge.getTotalIterations()*100.0);
|
|
b.setString(""+ge.getCurrentIterations()+"/"+ge.getTotalIterations()+" ("+percent+"%)");
|
|
}
|
|
// special case where there are 0 iterations
|
|
else
|
|
{
|
|
b.setMaximum(1);
|
|
b.setValue(1);
|
|
b.setStringPainted(true);
|
|
b.setBackground(Color.white);
|
|
b.setString("0/0 (100%)");
|
|
}
|
|
return b;
|
|
}
|
|
case 3:
|
|
{
|
|
if (!ge.isFinished()) return "Running";
|
|
else return (ge.getCurrentIterations() < ge.getTotalIterations()) ? "Stopped" : "Done";
|
|
}
|
|
case 4:
|
|
{
|
|
if(ge.isUseSimulation()) return "Simulation";
|
|
else return "Verification";
|
|
}
|
|
default: return "";
|
|
}
|
|
}
|
|
|
|
public GUIExperiment getExperiment(int i)
|
|
{
|
|
return experiments.get(i);
|
|
}
|
|
|
|
public int getNumExperiments()
|
|
{
|
|
return experiments.size();
|
|
}
|
|
|
|
public int addExperiment(GUIExperiment e)
|
|
{
|
|
experiments.add(e);
|
|
int i = experiments.size()-1;
|
|
fireTableRowsInserted(i, i);
|
|
scrollRectToVisible(getCellRect(i, 0, true));
|
|
return experiments.indexOf(e);
|
|
}
|
|
|
|
public void removeExperiment(int i)
|
|
{
|
|
GUIExperiment ge = getExperiment(i);
|
|
ge.clear();
|
|
experiments.remove(i);
|
|
fireTableRowsDeleted(i,i);
|
|
}
|
|
|
|
public void stop()
|
|
{
|
|
for(int i = 0; i < getNumExperiments(); i++)
|
|
{
|
|
getExperiment(i).stop();
|
|
}
|
|
}
|
|
|
|
public Class getColumnClass(int i)
|
|
{
|
|
switch(i)
|
|
{
|
|
case 0:
|
|
case 1: return String.class;
|
|
case 2: return JProgressBar.class;
|
|
case 3: return String.class;
|
|
default: return Object.class;
|
|
}
|
|
}
|
|
}
|
|
|
|
class ProgressBarRenderer implements TableCellRenderer
|
|
{
|
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
|
|
{
|
|
if(value instanceof JProgressBar)
|
|
{
|
|
JProgressBar b = new JProgressBar();
|
|
if(isSelected)
|
|
{
|
|
b.setBackground(getSelectionBackground());
|
|
}
|
|
else
|
|
{
|
|
b.setBackground(getBackground());
|
|
}
|
|
return (JProgressBar)value;
|
|
}
|
|
else return new JPanel();
|
|
}
|
|
}
|
|
}
|