/*
* Open Source Physics software is free software as described near the bottom of this code file.
*
* For additional information and documentation on Open Source Physics please see:
* <http://www.opensourcephysics.org/>
*/
package org.opensourcephysics.display.dialogs;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.text.DecimalFormat;
import java.util.Iterator;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import org.opensourcephysics.display.DisplayRes;
import org.opensourcephysics.display.Drawable;
import org.opensourcephysics.display.DrawingPanel;
public class DrawingPanelInspector extends JDialog {
static DrawingPanelInspector inspector;
DrawingPanel drawingPanel;
DecimalFormat format = new DecimalFormat("0.00000E00"); //$NON-NLS-1$
JPanel panel1 = new JPanel();
BorderLayout borderLayout1 = new BorderLayout();
JTabbedPane jTabbedPane1 = new JTabbedPane();
JPanel scalePanel = new JPanel();
JPanel contentPanel = new JPanel();
BorderLayout borderLayout3 = new BorderLayout();
JTextPane contentTextPane = new JTextPane();
JTextField ymaxField = new JTextField();
JPanel yminmaxpanel = new JPanel();
JTextField yminField = new JTextField();
JLabel jLabel4 = new JLabel();
JLabel jLabel3 = new JLabel();
JPanel jPanel3 = new JPanel();
JCheckBox zoomenableBox = new JCheckBox();
JCheckBox autoscaleyBox = new JCheckBox();
JCheckBox autoscalexBox = new JCheckBox();
JTextField xmaxField = new JTextField();
JTextField xminField = new JTextField();
JLabel jLabel5 = new JLabel();
JLabel jLabel6 = new JLabel();
JPanel xminmaxpanel = new JPanel();
JPanel jPanel1 = new JPanel();
JButton applyButton = new JButton();
JButton cancelButton = new JButton();
JButton okButton = new JButton();
JPanel jPanel4 = new JPanel();
JButton measureButton = new JButton();
JButton snapButton = new JButton();
BoxLayout scaleLayout = new javax.swing.BoxLayout(scalePanel, javax.swing.BoxLayout.Y_AXIS);
/**
* Constructor DrawingPanelInspector
* @param frame
* @param title
* @param modal
*/
public DrawingPanelInspector(Frame frame, String title, boolean modal) {
super(frame, title, modal);
try {
jbInit();
pack();
} catch(Exception ex) {
ex.printStackTrace();
}
setVisible(true);
}
/**
* Constructor DrawingPanelInspector
* @param dp
*/
public DrawingPanelInspector(DrawingPanel dp) {
this(null, DisplayRes.getString("DrawingPanelInspector.Title"), false); //$NON-NLS-1$
drawingPanel = dp;
getValues();
getContent();
}
/**
* Constructor DrawingPanelInspector
*/
public DrawingPanelInspector() {
this(null, "", false); //$NON-NLS-1$
}
void getValues() {
xminField.setText(""+format.format((float) drawingPanel.getXMin())); //$NON-NLS-1$
xmaxField.setText(""+format.format((float) drawingPanel.getXMax())); //$NON-NLS-1$
yminField.setText(""+format.format((float) drawingPanel.getYMin())); //$NON-NLS-1$
ymaxField.setText(""+format.format((float) drawingPanel.getYMax())); //$NON-NLS-1$
zoomenableBox.setSelected(drawingPanel.isZoom());
autoscalexBox.setSelected(drawingPanel.isAutoscaleX());
autoscaleyBox.setSelected(drawingPanel.isAutoscaleY());
}
void getContent() {
Iterator<Drawable> it = drawingPanel.getDrawables().iterator();
StringBuffer buffer = new StringBuffer();
while(it.hasNext()) {
Object obj = it.next();
buffer.append(obj.toString());
buffer.append('\n');
}
contentTextPane.setText(buffer.toString());
}
void applyValues() {
double newXMin = drawingPanel.getXMin();
try {
newXMin = Double.parseDouble(xminField.getText());
} catch(Exception ex) {
// empty
} // keep the current value if there is an exception
double newXMax = drawingPanel.getXMax();
try {
newXMax = Double.parseDouble(xmaxField.getText());
} catch(Exception ex) {
// empty
} // keep the current value if there is an exception
double newYMin = drawingPanel.getYMin();
try {
newYMin = Double.parseDouble(yminField.getText());
} catch(Exception ex) {
// empty
} // keep the current value if there is an exception
double newYMax = drawingPanel.getYMax();
try {
newYMax = Double.parseDouble(ymaxField.getText());
} catch(Exception ex) {
// empty
} // keep the current value if there is an exception
drawingPanel.setAutoscaleX(autoscalexBox.isSelected());
drawingPanel.setAutoscaleY(autoscaleyBox.isSelected());
drawingPanel.setZoom(zoomenableBox.isSelected());
// setting min/max also sets autoscale to false
if(!drawingPanel.isAutoscaleX()&&!drawingPanel.isAutoscaleY()) {
drawingPanel.setPreferredMinMax(newXMin, newXMax, newYMin, newYMax);
} else if(!drawingPanel.isAutoscaleX()) {
drawingPanel.setPreferredMinMaxX(newXMin, newXMax);
} else if(!drawingPanel.isAutoscaleY()) {
drawingPanel.setPreferredMinMaxY(newYMin, newYMax);
}
drawingPanel.scale();
getValues();
drawingPanel.repaint();
}
void applyButton_actionPerformed(ActionEvent e) {
applyValues();
}
void measureButton_actionPerformed(ActionEvent e) {
drawingPanel.measure();
getValues();
drawingPanel.repaint();
}
void snapButton_actionPerformed(ActionEvent e) {
drawingPanel.snapshot();
}
void cancelButton_actionPerformed(ActionEvent e) {
setVisible(false);
}
void okButton_actionPerformed(ActionEvent e) {
applyValues();
setVisible(false);
}
void jbInit() throws Exception {
panel1.setLayout(borderLayout1);
scalePanel.setToolTipText(DisplayRes.getString("DrawingPanelInspector.ScalePanel.Tooltip")); //$NON-NLS-1$
scalePanel.setLayout(scaleLayout);
contentPanel.setLayout(borderLayout3);
contentTextPane.setText("JTextPane1"); //$NON-NLS-1$
ymaxField.setPreferredSize(new Dimension(100, 21));
ymaxField.setText("0"); //$NON-NLS-1$
yminField.setPreferredSize(new Dimension(100, 21));
yminField.setText("0"); //$NON-NLS-1$
jLabel4.setText(" ymax ="); //$NON-NLS-1$
jLabel3.setText("ymin ="); //$NON-NLS-1$
zoomenableBox.setText(DisplayRes.getString("DrawingPanelInspector.EnableZoomBox.Text")); //$NON-NLS-1$
autoscaleyBox.setText(DisplayRes.getString("DrawingPanelInspector.AutoscaleYBox.Text")); //$NON-NLS-1$
autoscalexBox.setText(DisplayRes.getString("DrawingPanelInspector.AutoscaleXBox.Text")); //$NON-NLS-1$
xmaxField.setText("0"); //$NON-NLS-1$
xmaxField.setPreferredSize(new Dimension(100, 21));
xminField.setText("0"); //$NON-NLS-1$
xminField.setPreferredSize(new Dimension(100, 21));
jLabel5.setText(" xmax ="); //$NON-NLS-1$
jLabel6.setText("xmin ="); //$NON-NLS-1$
xminmaxpanel.setToolTipText(DisplayRes.getString("DrawingPanelInspector.ScalePanel.Tooltip")); //$NON-NLS-1$
applyButton.setText(DisplayRes.getString("DrawingPanelInspector.ApplyButton.Text")); //$NON-NLS-1$
applyButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
applyButton_actionPerformed(e);
}
});
cancelButton.setText(DisplayRes.getString("GUIUtils.Cancel")); //$NON-NLS-1$
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
cancelButton_actionPerformed(e);
}
});
okButton.setText(DisplayRes.getString("GUIUtils.Ok")); //$NON-NLS-1$
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
okButton_actionPerformed(e);
}
});
measureButton.setFont(new java.awt.Font("Dialog", 0, 10)); //$NON-NLS-1$
measureButton.setText(DisplayRes.getString("DrawingPanelInspector.MeasureButton.Text")); //$NON-NLS-1$
measureButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
measureButton_actionPerformed(e);
}
});
snapButton.setFont(new java.awt.Font("Dialog", 0, 10)); //$NON-NLS-1$
snapButton.setText(DisplayRes.getString("DrawingPanelInspector.SnapshotButton.Text")); //$NON-NLS-1$
snapButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
snapButton_actionPerformed(e);
}
});
getContentPane().add(panel1);
panel1.add(jTabbedPane1, BorderLayout.CENTER);
jPanel3.add(zoomenableBox, null);
jPanel3.add(autoscalexBox, null);
jPanel3.add(autoscaleyBox, null);
xminmaxpanel.add(jLabel6, null);
xminmaxpanel.add(xminField, null);
xminmaxpanel.add(jLabel5, null);
xminmaxpanel.add(xmaxField, null);
scalePanel.add(xminmaxpanel, null);
scalePanel.add(yminmaxpanel, null);
yminmaxpanel.add(jLabel3, null);
yminmaxpanel.add(yminField, null);
yminmaxpanel.add(jLabel4, null);
yminmaxpanel.add(ymaxField, null);
scalePanel.add(jPanel4, null);
jPanel4.add(measureButton, null);
jPanel4.add(snapButton, null);
scalePanel.add(jPanel3, null);
jTabbedPane1.add(scalePanel, "scale"); //$NON-NLS-1$
jTabbedPane1.add(contentPanel, "content"); //$NON-NLS-1$
contentPanel.add(contentTextPane, BorderLayout.CENTER);
scalePanel.add(jPanel1, null);
jPanel1.add(okButton, null);
jPanel1.add(cancelButton, null);
jPanel1.add(applyButton, null);
}
public static DrawingPanelInspector getInspector(DrawingPanel dp) {
if(DrawingPanelInspector.inspector==null) {
inspector = new DrawingPanelInspector(dp);
} else {
DrawingPanelInspector.inspector.drawingPanel = dp;
DrawingPanelInspector.inspector.getValues();
DrawingPanelInspector.inspector.getContent();
DrawingPanelInspector.inspector.setVisible(true);
}
return inspector;
}
public static void hideInspector() {
if(DrawingPanelInspector.inspector!=null) {
inspector.setVisible(false);
}
}
public static void updateValues(DrawingPanel dp) {
if((DrawingPanelInspector.inspector==null)||(DrawingPanelInspector.inspector.drawingPanel!=dp)||!DrawingPanelInspector.inspector.isShowing()) {
return;
}
DrawingPanelInspector.inspector.drawingPanel.scale();
DrawingPanelInspector.inspector.getValues();
}
}
/*
* Open Source Physics software is free software; you can redistribute
* it and/or modify it under the terms of the GNU General Public License (GPL) as
* published by the Free Software Foundation; either version 2 of the License,
* or(at your option) any later version.
* Code that uses any portion of the code in the org.opensourcephysics package
* or any subpackage (subdirectory) of this package must must also be be released
* under the GNU GPL license.
*
* This software 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 this; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307 USA
* or view the license online at http://www.gnu.org/copyleft/gpl.html
*
* Copyright (c) 2007 The Open Source Physics project
* http://www.opensourcephysics.org
*/