package com.isti.traceview.transformations.ppm;
import java.awt.Dialog;
import java.awt.Dimension;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
class AngleInputDialog extends JDialog implements PropertyChangeListener {
private static final long serialVersionUID = 1L;
private JOptionPane optionPane;
private JTextField textField;
private double angle = Double.POSITIVE_INFINITY;
private double curValue = Double.POSITIVE_INFINITY;
public double getAngle() {
return angle;
}
AngleInputDialog(Dialog f, double value) {
super(f, "Angle Input Dialog", true);
curValue = value;
JPanel panel = new JPanel();
textField = new JTextField();
textField.setPreferredSize(new Dimension(70, 22));
textField.setText(new Double(value).toString());
panel.add(new JLabel("Enter angle:"));
panel.add(textField);
optionPane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
setContentPane(optionPane);
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
optionPane.addPropertyChangeListener(this);
pack();
setLocationRelativeTo(f);
setVisible(true);
}
@Override
public void propertyChange(PropertyChangeEvent e) {
String prop = e.getPropertyName();
if (isVisible() && (e.getSource() == optionPane) && (prop.equals(JOptionPane.VALUE_PROPERTY))) {
Object value = optionPane.getValue();
optionPane.setValue(JOptionPane.UNINITIALIZED_VALUE);
// If you were going to check something
// before closing the window, you'd do
// it here.
if (value.equals(JOptionPane.OK_OPTION)) {
try {
angle = Double.parseDouble(textField.getText());
setVisible(false);
dispose();
} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(this, "Enter double value", "Parsing error",
JOptionPane.ERROR_MESSAGE);
setVisible(true);
}
} else {
angle = curValue; // if cancel, then keep angle the same
setVisible(false);
dispose();
}
}
}
}