//============================================================================== // // Copyright (c) 2002- // Authors: // * Mark Kattenbelt (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.simulator; import javax.swing.*; import java.awt.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import userinterface.*; public class GUITimeDialog extends JDialog { private static final long serialVersionUID = 1L; //ATTRIBUTES private double time; private boolean cancelled; private static double lastTime = 1.0d; // 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.JLabel inputLabel; private javax.swing.JButton okayButton; private javax.swing.JTextField timeInputField; private javax.swing.JPanel timeInputPanel; private javax.swing.JPanel topPanel; private javax.swing.JLabel warningLabel; // End of variables declaration//GEN-END:variables /** Creates new form GUIConstantsPicker */ private GUITimeDialog(GUIPrism parent, GUISimulator simulator) { super(parent, "Provide a time", true); //initialise initComponents(); this.getRootPane().setDefaultButton(okayButton); this.time = lastTime; this.cancelled = false; this.timeInputField.setText("" + time); this.warningLabel.setIcon(GUIPrism.getIconFromImage("smallError.png")); this.warningLabel.setVisible(false); this.timeInputField.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { try { Double.parseDouble(timeInputField.getText()); GUITimeDialog.this.warningLabel.setVisible(false); GUITimeDialog.this.okayButton.setEnabled(true); } catch (NumberFormatException nfe) { GUITimeDialog.this.warningLabel.setVisible(true); GUITimeDialog.this.okayButton.setEnabled(false); } } public void removeUpdate(DocumentEvent e) { changedUpdate(e); } public void insertUpdate(DocumentEvent e) { changedUpdate(e); } }); super.setBounds(new Rectangle(550, 300)); setResizable(true); setLocationRelativeTo(getParent()); // centre 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() { allPanel = new javax.swing.JPanel(); bottomPanel = new javax.swing.JPanel(); warningLabel = new javax.swing.JLabel(); buttonPanel = new javax.swing.JPanel(); okayButton = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); topPanel = new javax.swing.JPanel(); timeInputPanel = new javax.swing.JPanel(); inputLabel = new javax.swing.JLabel(); timeInputField = new javax.swing.JTextField(); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); allPanel.setLayout(new java.awt.BorderLayout()); allPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5)); bottomPanel.setLayout(new java.awt.BorderLayout()); warningLabel.setText("Please enter a valid positive double"); warningLabel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 5, 0, 0)); bottomPanel.add(warningLabel, java.awt.BorderLayout.CENTER); 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); allPanel.add(bottomPanel, java.awt.BorderLayout.SOUTH); topPanel.setLayout(new java.awt.BorderLayout()); topPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Time spent in state")); timeInputPanel.setLayout(new java.awt.GridLayout(1, 2, 5, 5)); timeInputPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5)); inputLabel.setText("Provide a time:"); timeInputPanel.add(inputLabel); timeInputField.setText("1.0"); timeInputPanel.add(timeInputField); topPanel.add(timeInputPanel, java.awt.BorderLayout.NORTH); allPanel.add(topPanel, java.awt.BorderLayout.CENTER); getContentPane().add(allPanel, java.awt.BorderLayout.CENTER); }// //GEN-END:initComponents private void okayButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_okayButtonActionPerformed {//GEN-HEADEREND:event_okayButtonActionPerformed try { time = Double.parseDouble(timeInputField.getText()); } catch (NumberFormatException nfe) { // Shouldn't happen. cancelled = true; } dispose(); }//GEN-LAST:event_okayButtonActionPerformed private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cancelButtonActionPerformed {//GEN-HEADEREND:event_cancelButtonActionPerformed cancelled = true; 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 boolean isCancelled() { return cancelled; } public double getTime() { return time; } /** Returns a time, or -1 for cancel. */ public static double askTime(GUIPrism prism, GUISimulator simulator) { GUITimeDialog dialog = new GUITimeDialog(prism, simulator); if (dialog.isCancelled()) { return -1; } else { GUITimeDialog.lastTime = dialog.time; return dialog.time; } } }