diff --git a/prism/src/userinterface/simulator/GUIViewDialog.form b/prism/src/userinterface/simulator/GUIViewDialog.form new file mode 100644 index 00000000..ded3826b --- /dev/null +++ b/prism/src/userinterface/simulator/GUIViewDialog.form @@ -0,0 +1,326 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/prism/src/userinterface/simulator/GUIViewDialog.java b/prism/src/userinterface/simulator/GUIViewDialog.java new file mode 100644 index 00000000..c2ff9ec4 --- /dev/null +++ b/prism/src/userinterface/simulator/GUIViewDialog.java @@ -0,0 +1,457 @@ +//============================================================================== +// +// Copyright (c) 2006, Mark Kattenbelt +// +// 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.simulator; + +import parser.*; +import prism.*; + +import javax.swing.*; +import java.awt.*; +import javax.swing.border.*; +import javax.swing.table.*; +import java.util.*; +import java.awt.event.*; +import userinterface.*; +import simulator.*; + +public class GUIViewDialog extends JDialog implements KeyListener +{ + //ATTRIBUTES + private boolean cancelled = true; + private boolean askOption; + + private Action okAction; + private Action cancelAction; + + private GUIPrism gui; + private GUISimulator.PathTableModel pathTableModel; + + private ModulesFile mf; + private SimulatorEngine engine; + + private VariableListModel visibleListModel; + private VariableListModel hiddenListModel; + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel allPanel; + private javax.swing.JPanel bottomPanel; + private javax.swing.JPanel buttonPanel; + private javax.swing.JButton cancelButton; + private javax.swing.JPanel centerColumn; + private javax.swing.JPanel centerPanel; + private javax.swing.JLabel hiddenLabel; + private javax.swing.JList hiddenList; + private javax.swing.JScrollPane hiddenScrollList; + private javax.swing.JPanel leftColumn; + private javax.swing.JPanel leftPanel; + private javax.swing.JButton makeHiddenButton; + private javax.swing.JButton makeVisibleButton; + private javax.swing.JButton okayButton; + private javax.swing.JCheckBox optionCheckBox; + private javax.swing.JPanel rightColumn; + private javax.swing.JPanel rightPanel; + private javax.swing.JButton selectAllHidden; + private javax.swing.JButton selectAllVisibleButton; + private javax.swing.JTabbedPane tabPane; + private javax.swing.JPanel variablePanel; + private javax.swing.JLabel visibleLabel; + private javax.swing.JList visibleList; + private javax.swing.JScrollPane visibleScrollList; + // End of variables declaration//GEN-END:variables + + /** Creates new form GUIConstantsPicker */ + public GUIViewDialog(GUIPrism parent, GUISimulator.PathTableModel pathTableModel, ModulesFile mf) + { + super(parent, "Configure View for Simulation", true); + + this.gui = parent; + this.mf = mf; + this.pathTableModel = pathTableModel; + this.engine = pathTableModel.getEngine(); + + //initialise + initComponents(); + + this.tabPane.add("Variable Visibility", variablePanel); + + this.getRootPane().setDefaultButton(okayButton); + + super.setBounds(new Rectangle(550, 300)); + setResizable(true); + setLocationRelativeTo(getParent()); // centre + + this.askOption = ((GUIPrism)this.getParent()).getPrism().getSettings().getBoolean(PrismSettings.SIMULATOR_NEW_PATH_ASK_VIEW); + optionCheckBox.setSelected(this.askOption); + + visibleListModel = new VariableListModel(pathTableModel.getVisibleVariables()); + hiddenListModel = new VariableListModel(pathTableModel.getHiddenVariables()); + + visibleList.setModel(visibleListModel); + hiddenList.setModel(hiddenListModel); + + this.setVisible(true); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + visibleLabel = new javax.swing.JLabel(); + hiddenLabel = new javax.swing.JLabel(); + allPanel = new javax.swing.JPanel(); + bottomPanel = new javax.swing.JPanel(); + buttonPanel = new javax.swing.JPanel(); + okayButton = new javax.swing.JButton(); + cancelButton = new javax.swing.JButton(); + optionCheckBox = new javax.swing.JCheckBox(); + tabPane = new javax.swing.JTabbedPane(); + variablePanel = new javax.swing.JPanel(); + leftColumn = new javax.swing.JPanel(); + leftPanel = new javax.swing.JPanel(); + visibleScrollList = new javax.swing.JScrollPane(); + visibleList = new javax.swing.JList(); + selectAllVisibleButton = new javax.swing.JButton(); + centerColumn = new javax.swing.JPanel(); + centerPanel = new javax.swing.JPanel(); + makeVisibleButton = new javax.swing.JButton(); + makeHiddenButton = new javax.swing.JButton(); + rightColumn = new javax.swing.JPanel(); + rightPanel = new javax.swing.JPanel(); + hiddenScrollList = new javax.swing.JScrollPane(); + hiddenList = new javax.swing.JList(); + selectAllHidden = new javax.swing.JButton(); + + visibleLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + visibleLabel.setText("Visible Variables"); + hiddenLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + hiddenLabel.setText("Hidden Variables"); + + addWindowListener(new java.awt.event.WindowAdapter() { + public void windowClosing(java.awt.event.WindowEvent evt) { + closeDialog(evt); + } + }); + + allPanel.setLayout(new java.awt.BorderLayout()); + + allPanel.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(5, 5, 5, 5))); + bottomPanel.setLayout(new java.awt.BorderLayout()); + + buttonPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT)); + + okayButton.setText("Okay"); + okayButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + okayButtonActionPerformed(evt); + } + }); + + buttonPanel.add(okayButton); + + cancelButton.setText("Cancel"); + cancelButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cancelButtonActionPerformed(evt); + } + }); + + buttonPanel.add(cancelButton); + + bottomPanel.add(buttonPanel, java.awt.BorderLayout.EAST); + + optionCheckBox.setLabel("Always prompt for view configuration on path creation"); + bottomPanel.add(optionCheckBox, java.awt.BorderLayout.WEST); + optionCheckBox.getAccessibleContext().setAccessibleName("optionCheckBox"); + + allPanel.add(bottomPanel, java.awt.BorderLayout.SOUTH); + + getContentPane().add(allPanel, java.awt.BorderLayout.SOUTH); + + tabPane.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(5, 5, 5, 5))); + variablePanel.setLayout(new java.awt.GridBagLayout()); + + variablePanel.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(5, 5, 5, 5))); + leftColumn.setLayout(new java.awt.BorderLayout()); + + leftColumn.setBorder(new javax.swing.border.TitledBorder("Visible Variables")); + leftPanel.setLayout(new java.awt.BorderLayout(0, 5)); + + leftPanel.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(5, 5, 5, 5))); + visibleScrollList.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + visibleScrollList.setViewportView(visibleList); + + leftPanel.add(visibleScrollList, java.awt.BorderLayout.CENTER); + + selectAllVisibleButton.setText("Select All"); + selectAllVisibleButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + selectAllVisibleButtonActionPerformed(evt); + } + }); + + leftPanel.add(selectAllVisibleButton, java.awt.BorderLayout.SOUTH); + + leftColumn.add(leftPanel, java.awt.BorderLayout.CENTER); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.weighty = 1.0; + variablePanel.add(leftColumn, gridBagConstraints); + + centerColumn.setLayout(new java.awt.BorderLayout()); + + centerPanel.setLayout(new java.awt.GridBagLayout()); + + makeVisibleButton.setText("<<"); + makeVisibleButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + makeVisibleButtonActionPerformed(evt); + } + }); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.ipadx = 5; + gridBagConstraints.ipady = 5; + gridBagConstraints.insets = new java.awt.Insets(3, 10, 3, 10); + centerPanel.add(makeVisibleButton, gridBagConstraints); + + makeHiddenButton.setText(">>"); + makeHiddenButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + makeHiddenButtonActionPerformed(evt); + } + }); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.ipadx = 5; + gridBagConstraints.ipady = 5; + gridBagConstraints.insets = new java.awt.Insets(3, 10, 3, 10); + centerPanel.add(makeHiddenButton, gridBagConstraints); + + centerColumn.add(centerPanel, java.awt.BorderLayout.CENTER); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; + gridBagConstraints.weighty = 1.0; + variablePanel.add(centerColumn, gridBagConstraints); + + rightColumn.setLayout(new java.awt.BorderLayout()); + + rightColumn.setBorder(new javax.swing.border.TitledBorder("Hidden Variables")); + rightPanel.setLayout(new java.awt.BorderLayout(0, 5)); + + rightPanel.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(5, 5, 5, 5))); + hiddenScrollList.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + hiddenScrollList.setViewportView(hiddenList); + + rightPanel.add(hiddenScrollList, java.awt.BorderLayout.CENTER); + + selectAllHidden.setText("Select All"); + selectAllHidden.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + selectAllHiddenActionPerformed(evt); + } + }); + + rightPanel.add(selectAllHidden, java.awt.BorderLayout.SOUTH); + + rightColumn.add(rightPanel, java.awt.BorderLayout.CENTER); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 3; + gridBagConstraints.gridy = 0; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 0.5; + gridBagConstraints.weighty = 1.0; + variablePanel.add(rightColumn, gridBagConstraints); + + tabPane.addTab("Variable Visibility", variablePanel); + + getContentPane().add(tabPane, java.awt.BorderLayout.CENTER); + + } + // //GEN-END:initComponents + + private void selectAllVisibleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllVisibleButtonActionPerformed +// TODO add your handling code here: + + int[] indices = new int[visibleListModel.getSize()]; + for (int i = 0; i < indices.length; i++) + indices[i] = i; + + visibleList.setSelectedIndices(indices); + }//GEN-LAST:event_selectAllVisibleButtonActionPerformed + + private void selectAllHiddenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllHiddenActionPerformed +// TODO add your handling code here: + int[] indices = new int[hiddenListModel.getSize()]; + for (int i = 0; i < indices.length; i++) + indices[i] = i; + + hiddenList.setSelectedIndices(indices); + + }//GEN-LAST:event_selectAllHiddenActionPerformed + + private void makeVisibleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_makeVisibleButtonActionPerformed +// TODO add your handling code here: + int[] indices = hiddenList.getSelectedIndices(); + + for (int i = indices.length - 1; i >= 0; i--) + { + GUISimulator.Variable var = (GUISimulator.Variable)hiddenListModel.get(indices[i]); + + hiddenListModel.removeVariable(var); + visibleListModel.addVariable(var); + } + }//GEN-LAST:event_makeVisibleButtonActionPerformed + + private void makeHiddenButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_makeHiddenButtonActionPerformed +// TODO add your handling code here: + int[] indices = visibleList.getSelectedIndices(); + + for (int i = indices.length - 1; i >= 0; i--) + { + GUISimulator.Variable var = (GUISimulator.Variable)visibleListModel.get(indices[i]); + + visibleListModel.removeVariable(var); + hiddenListModel.addVariable(var); + } + }//GEN-LAST:event_makeHiddenButtonActionPerformed + + + + public static double log(double base, double x) + { + return Math.log(x) / Math.log(base); + } + + + private void okayButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_okayButtonActionPerformed + {//GEN-HEADEREND:event_okayButtonActionPerformed + + if (optionCheckBox.isSelected() != this.askOption) + { + this.askOption = !this.askOption; + + try + { + ((GUIPrism)this.getParent()).getPrism().getSettings().set(PrismSettings.SIMULATOR_NEW_PATH_ASK_VIEW, this.askOption); + } + catch (PrismException e) {} + } + + pathTableModel.setVisibility(visibleListModel.getVariables(), hiddenListModel.getVariables()); + dispose(); + }//GEN-LAST:event_okayButtonActionPerformed + + private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cancelButtonActionPerformed + {//GEN-HEADEREND:event_cancelButtonActionPerformed + dispose(); + }//GEN-LAST:event_cancelButtonActionPerformed + + /** Closes the dialog */ + private void closeDialog(java.awt.event.WindowEvent evt)//GEN-FIRST:event_closeDialog + { + setVisible(false); + dispose(); + }//GEN-LAST:event_closeDialog + + public void keyPressed(KeyEvent e) + { + } + + public void keyReleased(KeyEvent e) + { + + } + + public void keyTyped(KeyEvent e) + { + + } + + + class VariableListModel extends DefaultListModel + { + public VariableListModel(ArrayList variables) + { + super(); + for (int i = 0; i < variables.size(); i++) + { + super.add(i, ((GUISimulator.Variable)variables.get(i))); + + } + } + + public void removeVariable(GUISimulator.Variable variable) + { + for (int i = 0; i < super.getSize(); i++) + { + GUISimulator.Variable var = (GUISimulator.Variable)super.getElementAt(i); + if (var.equals(variable)) + { + super.remove(i); + } + } + } + + public void addVariable(GUISimulator.Variable variable) + { + int i = 0; + + while (i < super.getSize() && ((GUISimulator.Variable)super.getElementAt(i)).getIndex() < variable.getIndex()) + { + i++; + } + + super.add(i, variable); + } + + public ArrayList getVariables() + { + ArrayList list = new ArrayList(); + for (int i = 0; i < super.getSize(); i++) + { + list.add(super.getElementAt(i)); + } + + return list; + } + } +} + +