Add file chooser.

This commit is contained in:
Bill Kuker 2012-07-01 17:39:17 +00:00 committed by U-WINDOWS-C28163E\Administrator
parent f466729fe0
commit 3a9b843c9a

View File

@ -1,23 +1,27 @@
package net.sf.openrocket.gui.configdialog; package net.sf.openrocket.gui.configdialog;
import java.awt.Color;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.File;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.EventListener; import java.net.MalformedURLException;
import java.net.URL;
import java.util.EventObject; import java.util.EventObject;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JCheckBox; import javax.swing.JCheckBox;
import javax.swing.JColorChooser; import javax.swing.JColorChooser;
import javax.swing.JComboBox; import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JSeparator; import javax.swing.JSeparator;
import javax.swing.JSpinner; import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.appearance.Appearance;
import net.sf.openrocket.appearance.AppearanceBuilder; import net.sf.openrocket.appearance.AppearanceBuilder;
import net.sf.openrocket.appearance.Decal.EdgeMode; import net.sf.openrocket.appearance.Decal.EdgeMode;
import net.sf.openrocket.gui.SpinnerEditor; import net.sf.openrocket.gui.SpinnerEditor;
@ -28,15 +32,13 @@ import net.sf.openrocket.gui.adaptors.IntegerModel;
import net.sf.openrocket.gui.components.BasicSlider; import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.ColorIcon; import net.sf.openrocket.gui.components.ColorIcon;
import net.sf.openrocket.gui.components.StyledLabel; import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.gui.components.StyledLabel.Style; import net.sf.openrocket.gui.components.StyledLabel.Style;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.gui.util.ColorConversion; import net.sf.openrocket.gui.util.ColorConversion;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.startup.Application; import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.unit.UnitGroup;
import java.awt.Color;
import net.sf.openrocket.util.LineStyle;
import net.sf.openrocket.util.StateChangeListener; import net.sf.openrocket.util.StateChangeListener;
public class AppearancePanel extends JPanel { public class AppearancePanel extends JPanel {
@ -44,6 +46,8 @@ public class AppearancePanel extends JPanel {
private AppearanceBuilder ab; private AppearanceBuilder ab;
private static File lastImageDir = null;
private class ColorActionListener implements ActionListener { private class ColorActionListener implements ActionListener {
private final String valueName; private final String valueName;
private final Object o; private final Object o;
@ -90,6 +94,9 @@ public class AppearancePanel extends JPanel {
final JButton ambientColorButton = new JButton(new ColorIcon(ab.getAmbient())); final JButton ambientColorButton = new JButton(new ColorIcon(ab.getAmbient()));
final JButton specularColorButton = new JButton(new ColorIcon(ab.getSpecular())); final JButton specularColorButton = new JButton(new ColorIcon(ab.getSpecular()));
final JTextField uriTextField = new JTextField(ab.getImage() != null ? ab.getImage().toString() : "");
uriTextField.setEditable(false);
ab.addChangeListener(new StateChangeListener() { ab.addChangeListener(new StateChangeListener() {
@Override @Override
public void stateChanged(EventObject e) { public void stateChanged(EventObject e) {
@ -98,6 +105,7 @@ public class AppearancePanel extends JPanel {
ambientColorButton.setIcon(new ColorIcon(ab.getAmbient())); ambientColorButton.setIcon(new ColorIcon(ab.getAmbient()));
specularColorButton.setIcon(new ColorIcon(ab.getSpecular())); specularColorButton.setIcon(new ColorIcon(ab.getSpecular()));
c.setAppearance(ab.getAppearance()); c.setAppearance(ab.getAppearance());
uriTextField.setText(ab.getImage() != null ? ab.getImage().toString() : "");
} }
}); });
@ -113,109 +121,172 @@ public class AppearancePanel extends JPanel {
ambientColorButton.addActionListener(new ColorActionListener(ab, "Ambient")); ambientColorButton.addActionListener(new ColorActionListener(ab, "Ambient"));
specularColorButton.addActionListener(new ColorActionListener(ab, "Specular")); specularColorButton.addActionListener(new ColorActionListener(ab, "Specular"));
add(new StyledLabel("Figure Style", Style.BOLD)); BooleanModel mDefault = new BooleanModel(false);
add(new JCheckBox(), "split 2");
add(new JLabel("Use default"));
add(new JButton("Set Default"), "span 2, align right, wrap");
add(new JLabel("Figure Color:")); {// Style Header Row
add(figureColorButton); add(new StyledLabel("Figure Style", Style.BOLD));
add(new JCheckBox(), "split 2");
add(new JLabel("Use default"));
add(new JButton("Set Default"), "span 2, align right, wrap");
}
add(new JLabel("Line Style:")); {// Figure Color
add(new JLabel("[Default Style [v]]"), "wrap"); add(new JLabel("Figure Color:"));
add(figureColorButton);
}
{// Line Style
add(new JLabel("Line Style:"));
add(new JLabel("[Default Style [v]]"), "wrap");
}
add(new JSeparator(SwingConstants.HORIZONTAL), "span, wrap, growx"); add(new JSeparator(SwingConstants.HORIZONTAL), "span, wrap, growx");
BooleanModel mDefault = new BooleanModel(false); {// Texture Header Row
add(new StyledLabel("Appearance", Style.BOLD));
add(new JCheckBox(mDefault), "split 2");
add(new JLabel("Use default"));
JButton setMDefault = new JButton("Set Default");
mDefault.addEnableComponent(setMDefault, false);
add(setMDefault, "span 2, align right, wrap");
}
add(new StyledLabel("Appearance", Style.BOLD)); {// Texture File
add(new JCheckBox(mDefault), "split 2"); JButton choose;
add(new JLabel("Use default")); add(new JLabel("Texture:"));
JButton setMDefault = new JButton("Set Default"); JPanel p = new JPanel(new MigLayout("fill, ins 0", "[grow][]"));
mDefault.addEnableComponent(setMDefault, false); p.add(uriTextField, "grow");
add(setMDefault, "span 2, align right, wrap"); p.add(choose = new JButton("Choose"));
mDefault.addEnableComponent(uriTextField, false);
mDefault.addEnableComponent(choose, false);
add(p, "span 3, growx, wrap");
choose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
URL u = ab.getImage();
File current = lastImageDir;
if (u != null && u.getProtocol().equals("file")) {
try {
current = new File(u.toURI()).getParentFile();
} catch (Exception e1) {
e1.printStackTrace();
}
}
lastImageDir = current;
add(new JLabel("Texture:")); JFileChooser fc = new JFileChooser(current);
add(new JLabel("[Filename]")); if (fc.showOpenDialog(AppearancePanel.this) == JFileChooser.APPROVE_OPTION) {
try {
ab.setImage(fc.getSelectedFile().toURI().toURL());
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
add(new JLabel("Scale:")); }
});
}
add(new JLabel("x:"), "split 4"); { // Diffuse
JSpinner scaleU = new JSpinner(new DoubleModel(ab, "ScaleU").getSpinnerModel()); add(new JLabel("Diffuse Color:"));
scaleU.setEditor(new SpinnerEditor(scaleU)); mDefault.addEnableComponent(diffuseColorButton, false);
mDefault.addEnableComponent(scaleU, false); add(diffuseColorButton);
add(scaleU, "w 40"); }
add(new JLabel("y:")); { // Scale
JSpinner scaleV = new JSpinner(new DoubleModel(ab, "ScaleV").getSpinnerModel()); add(new JLabel("Scale:"));
scaleV.setEditor(new SpinnerEditor(scaleV));
mDefault.addEnableComponent(scaleV, false);
add(scaleV, "wrap, w 40");
add(new JLabel("Diffuse Color:")); add(new JLabel("x:"), "split 4");
mDefault.addEnableComponent(diffuseColorButton, false); JSpinner scaleU = new JSpinner(new DoubleModel(ab, "ScaleU").getSpinnerModel());
add(diffuseColorButton); scaleU.setEditor(new SpinnerEditor(scaleU));
mDefault.addEnableComponent(scaleU, false);
add(scaleU, "w 40");
add(new JLabel("Offset:")); add(new JLabel("y:"));
JSpinner scaleV = new JSpinner(new DoubleModel(ab, "ScaleV").getSpinnerModel());
scaleV.setEditor(new SpinnerEditor(scaleV));
mDefault.addEnableComponent(scaleV, false);
add(scaleV, "wrap, w 40");
}
add(new JLabel("x:"), "split 4"); { // Ambient
JSpinner offsetU = new JSpinner(new DoubleModel(ab, "OffsetU").getSpinnerModel()); add(new JLabel("Ambient Color:"));
offsetU.setEditor(new SpinnerEditor(offsetU)); mDefault.addEnableComponent(ambientColorButton, false);
mDefault.addEnableComponent(offsetU, false); add(ambientColorButton);
add(offsetU, "w 40"); }
add(new JLabel("y:")); { // Offset
JSpinner offsetV = new JSpinner(new DoubleModel(ab, "OffsetV").getSpinnerModel()); add(new JLabel("Offset:"));
offsetV.setEditor(new SpinnerEditor(offsetV));
mDefault.addEnableComponent(offsetV, false);
add(offsetV, "wrap, w 40");
add(new JLabel("Ambient Color:")); add(new JLabel("x:"), "split 4");
mDefault.addEnableComponent(ambientColorButton, false); JSpinner offsetU = new JSpinner(new DoubleModel(ab, "OffsetU").getSpinnerModel());
add(ambientColorButton); offsetU.setEditor(new SpinnerEditor(offsetU));
mDefault.addEnableComponent(offsetU, false);
add(offsetU, "w 40");
add(new JLabel("Center:")); add(new JLabel("y:"));
JSpinner offsetV = new JSpinner(new DoubleModel(ab, "OffsetV").getSpinnerModel());
offsetV.setEditor(new SpinnerEditor(offsetV));
mDefault.addEnableComponent(offsetV, false);
add(offsetV, "wrap, w 40");
}
add(new JLabel("x:"), "split 4"); { // Specular
JSpinner centerU = new JSpinner(new DoubleModel(ab, "CenterU").getSpinnerModel()); add(new JLabel("Specular Color:"));
centerU.setEditor(new SpinnerEditor(centerU)); mDefault.addEnableComponent(specularColorButton, false);
mDefault.addEnableComponent(centerU, false); add(specularColorButton);
add(centerU, "w 40"); }
add(new JLabel("y:")); { // Center
JSpinner centerV = new JSpinner(new DoubleModel(ab, "CenterV").getSpinnerModel()); add(new JLabel("Center:"));
centerV.setEditor(new SpinnerEditor(centerV));
mDefault.addEnableComponent(centerV, false);
add(centerV, "wrap, w 40");
add(new JLabel("Specular Color:")); add(new JLabel("x:"), "split 4");
mDefault.addEnableComponent(specularColorButton, false); JSpinner centerU = new JSpinner(new DoubleModel(ab, "CenterU").getSpinnerModel());
add(specularColorButton); centerU.setEditor(new SpinnerEditor(centerU));
mDefault.addEnableComponent(centerU, false);
add(centerU, "w 40");
add(new JLabel("Rotation:")); add(new JLabel("y:"));
DoubleModel rotationModel = new DoubleModel(ab, "Rotation", UnitGroup.UNITS_ANGLE); JSpinner centerV = new JSpinner(new DoubleModel(ab, "CenterV").getSpinnerModel());
JSpinner rotation = new JSpinner(rotationModel.getSpinnerModel()); centerV.setEditor(new SpinnerEditor(centerV));
rotation.setEditor(new SpinnerEditor(rotation)); mDefault.addEnableComponent(centerV, false);
mDefault.addEnableComponent(rotation, false); add(centerV, "wrap, w 40");
add(rotation, "split 3, w 50"); }
add(new UnitSelector(rotationModel));
BasicSlider bs = new BasicSlider(rotationModel.getSliderModel(-Math.PI, Math.PI));
mDefault.addEnableComponent(bs, false);
add(bs, "w 100, wrap");
add(new JLabel("Shine:")); { // Shine
IntegerModel shineModel = new IntegerModel(ab, "Shininess", 0, 128); add(new JLabel("Shine:"));
JSpinner shine = new JSpinner(shineModel.getSpinnerModel()); IntegerModel shineModel = new IntegerModel(ab, "Shininess", 0, 128);
mDefault.addEnableComponent(shine, false); JSpinner shine = new JSpinner(shineModel.getSpinnerModel());
add(shine, "w 40"); mDefault.addEnableComponent(shine, false);
add(shine, "w 50");
}
add(new JLabel("Repeat:")); { // Rotation
EdgeMode[] list = new EdgeMode[EdgeMode.values().length + 1]; add(new JLabel("Rotation:"));
System.arraycopy(EdgeMode.values(), 0, list, 1, EdgeMode.values().length); DoubleModel rotationModel = new DoubleModel(ab, "Rotation", UnitGroup.UNITS_ANGLE);
JComboBox combo = new JComboBox(new EnumModel<EdgeMode>(ab, "EdgeMode", list)); JSpinner rotation = new JSpinner(rotationModel.getSpinnerModel());
mDefault.addEnableComponent(combo, false); rotation.setEditor(new SpinnerEditor(rotation));
add(combo); mDefault.addEnableComponent(rotation, false);
add(rotation, "split 3, w 50");
add(new UnitSelector(rotationModel));
BasicSlider bs = new BasicSlider(rotationModel.getSliderModel(-Math.PI, Math.PI));
mDefault.addEnableComponent(bs, false);
add(bs, "w 100, wrap");
}
{// Placeholder
add(new JLabel(""), "span 2");
}
{ // Repeat
add(new JLabel("Repeat:"));
EdgeMode[] list = new EdgeMode[EdgeMode.values().length + 1];
System.arraycopy(EdgeMode.values(), 0, list, 1, EdgeMode.values().length);
JComboBox combo = new JComboBox(new EnumModel<EdgeMode>(ab, "EdgeMode", list));
mDefault.addEnableComponent(combo, false);
add(combo);
}
} }