/* This file is part of the source code for 3D-XplorMath-J, Version 1.0 (January 2008).
* Copyright (c) 2008 The 3D-XplorMath Consortium (http://3d-xplormath.org).
* This source code is released under a BSD License, which allows redistribution
* in source and binary form, with or without modification, provided copyright
* and license information are included, and with no warranty or guarantee of
* any kind. For details, see http://3d-xplormath.org/j/source/BSDLicense.txt
*/
package vmm3d.core;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
* A dialog box where the user can set the ranges of x and y values that
* will be visible. (The range can be expanded vertically or horizontally
* to preserve the aspect ratio.) The dialog box shows four input
* boxes where the user can input the desired xmin, xmax, ymin, and
* ymax.
*/
public class SetXYWindowDialog extends SettingsDialog {
private RealParam xmin, xmax, ymin, ymax;
private ParameterInput xminInput, xmaxInput, yminInput, ymaxInput;
private View view;
/**
* Show the dialog, and set the View whose limits will be controlled by
* this dialog.
*/
public static void showDialog(View view) {
(new SetXYWindowDialog(view)).setVisible(true);
}
protected SetXYWindowDialog(View view) {
super(view.getDisplay(), I18n.tr("vmm3d.core.dialogtitle.SetXYWindowDialog"), true, true);
this.view = view;
Transform transform = view.getTransform();
xmin = new RealParam("vmm3d.core.dialogtitle.SetXYWindowDialog.xmin", transform.getXminRequested());
xmax = new RealParam("vmm3d.core.dialogtitle.SetXYWindowDialog.xmax", transform.getXmaxRequested());
ymin = new RealParam("vmm3d.core.dialogtitle.SetXYWindowDialog.ymin", transform.getYminRequested());
ymax = new RealParam("vmm3d.core.dialogtitle.SetXYWindowDialog.ymax", transform.getYmaxRequested());
xminInput = new ParameterInput(xmin);
xmaxInput = new ParameterInput(xmax);
yminInput = new ParameterInput(ymin);
ymaxInput = new ParameterInput(ymax);
xminInput.setColumns(7);
xmaxInput.setColumns(7);
yminInput.setColumns(7);
ymaxInput.setColumns(7);
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new GridLayout(2,4,5,5));
inputPanel.add(new JLabel(xmin.getTitle() + ": ",JLabel.RIGHT));
inputPanel.add(xminInput);
inputPanel.add(new JLabel(xmax.getTitle() + ": ",JLabel.RIGHT));
inputPanel.add(xmaxInput);
inputPanel.add(new JLabel(ymin.getTitle() + ": ",JLabel.RIGHT));
inputPanel.add(yminInput);
inputPanel.add(new JLabel(ymax.getTitle() + ": ",JLabel.RIGHT));
inputPanel.add(ymaxInput);
addInputPanel(inputPanel);
addInfoLabel(I18n.tr("vmm3d.core.SetXYWindowDialog.info"));
}
protected boolean doOK() {
String error;
error= xminInput.checkContents();
if (error != null) {
JOptionPane.showMessageDialog(this,error,I18n.tr("vmm3d.core.SettingsDialog.errorTitle"),JOptionPane.ERROR_MESSAGE);
xminInput.selectAll();
xminInput.requestFocus();
return false;
}
error= xmaxInput.checkContents();
if (error != null) {
JOptionPane.showMessageDialog(this,error,I18n.tr("vmm3d.core.SettingsDialog.errorTitle"),JOptionPane.ERROR_MESSAGE);
xmaxInput.selectAll();
xmaxInput.requestFocus();
return false;
}
error= yminInput.checkContents();
if (error != null) {
JOptionPane.showMessageDialog(this,error,I18n.tr("vmm3d.core.SettingsDialog.errorTitle"),JOptionPane.ERROR_MESSAGE);
yminInput.selectAll();
yminInput.requestFocus();
return false;
}
error= ymaxInput.checkContents();
if (error != null) {
JOptionPane.showMessageDialog(this,error,I18n.tr("vmm3d.core.SettingsDialog.errorTitle"),JOptionPane.ERROR_MESSAGE);
ymaxInput.selectAll();
ymaxInput.requestFocus();
return false;
}
xminInput.setValueFromContents();
xmaxInput.setValueFromContents();
yminInput.setValueFromContents();
ymaxInput.setValueFromContents();
if (xmin.getValue() >= xmax.getValue()) {
JOptionPane.showMessageDialog(this,I18n.tr("vmm3d.core.SetXYWindowDialog.XmaxLessThanXminError"),
I18n.tr("vmm3d.core.SettingsDialog.errorTitle"),JOptionPane.ERROR_MESSAGE);
xminInput.selectAll();
xminInput.requestFocus();
return false;
}
if (ymin.getValue() >= ymax.getValue()) {
JOptionPane.showMessageDialog(this,I18n.tr("vmm3d.core.SetXYWindowDialog.YmaxLessThanYminError"),
I18n.tr("vmm3d.core.SettingsDialog.errorTitle"),JOptionPane.ERROR_MESSAGE);
yminInput.selectAll();
yminInput.requestFocus();
return false;
}
view.getTransform().setLimits(xmin.getValue(), xmax.getValue(), ymin.getValue(), ymax.getValue());
return true;
}
/**
* This will be called when the user clicks the Defaults button. Gets the default window
* from the Exhibit, and uses that to set the values in the xmin, xmax, ymin, and ymax
* input boxes.
*/
protected void doDefaults() {
double[] defaultWindow = view.getExhibit().getDefaultWindow();
xminInput.setText("" + defaultWindow[0]);
xmaxInput.setText("" + defaultWindow[1]);
yminInput.setText("" + defaultWindow[2]);
ymaxInput.setText("" + defaultWindow[3]);
}
}
Ads help maintain this website.