1 package net.sf.openrocket.gui.dialogs;
3 import java.awt.Dialog;
4 import java.awt.Window;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
8 import javax.swing.JButton;
9 import javax.swing.JCheckBox;
10 import javax.swing.JComboBox;
11 import javax.swing.JDialog;
12 import javax.swing.JLabel;
13 import javax.swing.JPanel;
14 import javax.swing.JSpinner;
15 import javax.swing.JTextField;
17 import net.miginfocom.swing.MigLayout;
18 import net.sf.openrocket.gui.adaptors.DoubleModel;
19 import net.sf.openrocket.gui.components.StyledLabel;
20 import net.sf.openrocket.gui.components.UnitSelector;
21 import net.sf.openrocket.gui.util.GUIUtil;
22 import net.sf.openrocket.l10n.Translator;
23 import net.sf.openrocket.material.Material;
24 import net.sf.openrocket.startup.Application;
26 public class CustomMaterialDialog extends JDialog {
28 private final Material originalMaterial;
30 private boolean okClicked = false;
31 private JComboBox typeBox;
32 private JTextField nameField;
33 private DoubleModel density;
34 private JSpinner densitySpinner;
35 private UnitSelector densityUnit;
36 private JCheckBox addBox;
37 private static final Translator trans = Application.getTranslator();
39 public CustomMaterialDialog(Window parent, Material material, boolean saveOption,
41 this(parent, material, saveOption, title, null);
45 public CustomMaterialDialog(Window parent, Material material, boolean saveOption,
46 String title, String note) {
48 super(parent, trans.get("custmatdlg.title.Custommaterial"), Dialog.ModalityType.APPLICATION_MODAL);
50 this.originalMaterial = material;
52 JPanel panel = new JPanel(new MigLayout("fill, gap rel unrel"));
57 panel.add(new JLabel("<html><b>" + title + ":"),
58 "gapleft para, span, wrap" + (note == null ? " para":""));
61 panel.add(new StyledLabel(note, -1), "span, wrap para");
66 panel.add(new JLabel(trans.get("custmatdlg.lbl.Materialname")));
67 nameField = new JTextField(15);
68 if (material != null) {
69 nameField.setText(material.getName());
71 panel.add(nameField, "span, growx, wrap");
74 // Material type (if not known)
75 panel.add(new JLabel(trans.get("custmatdlg.lbl.Materialtype")));
76 if (material == null) {
77 typeBox = new JComboBox(Material.Type.values());
78 typeBox.setSelectedItem(Material.Type.BULK);
79 typeBox.setEditable(false);
80 typeBox.addActionListener(new ActionListener() {
82 public void actionPerformed(ActionEvent e) {
86 panel.add(typeBox, "span, growx, wrap");
88 panel.add(new JLabel(material.getType().toString()), "span, growx, wrap");
93 panel.add(new JLabel(trans.get("custmatdlg.lbl.Materialdensity")));
94 densitySpinner = new JSpinner();
95 panel.add(densitySpinner, "w 70lp");
96 densityUnit = new UnitSelector((DoubleModel)null);
97 panel.add(densityUnit, "w 30lp");
98 panel.add(new JPanel(), "growx, wrap");
104 //// Add material to database
105 addBox = new JCheckBox(trans.get("custmatdlg.checkbox.Addmaterial"));
106 panel.add(addBox,"span, wrap");
110 JButton okButton = new JButton(trans.get("dlg.but.ok"));
112 okButton.addActionListener(new ActionListener() {
114 public void actionPerformed(ActionEvent e) {
116 CustomMaterialDialog.this.setVisible(false);
119 panel.add(okButton,"span, split, tag ok");
122 JButton closeButton = new JButton(trans.get("dlg.but.cancel"));
123 closeButton.addActionListener(new ActionListener() {
125 public void actionPerformed(ActionEvent e) {
127 CustomMaterialDialog.this.setVisible(false);
130 panel.add(closeButton,"tag cancel");
132 this.setContentPane(panel);
134 this.setLocationByPlatform(true);
135 GUIUtil.setDisposableDialogOptions(this, okButton);
139 public boolean getOkClicked() {
144 public boolean isAddSelected() {
145 return addBox.isSelected();
149 public Material getMaterial() {
154 if (typeBox != null) {
155 type = (Material.Type) typeBox.getSelectedItem();
157 type = originalMaterial.getType();
160 name = nameField.getText().trim();
162 density = this.density.getValue();
164 return Material.newMaterial(type, name, density, true);
168 private void updateDensityModel() {
169 if (originalMaterial != null) {
170 if (density == null) {
171 density = new DoubleModel(originalMaterial.getDensity(),
172 originalMaterial.getType().getUnitGroup(), 0);
173 densitySpinner.setModel(density.getSpinnerModel());
174 densityUnit.setModel(density);
177 Material.Type type = (Material.Type) typeBox.getSelectedItem();
178 density = new DoubleModel(0, type.getUnitGroup(), 0);
179 densitySpinner.setModel(density.getSpinnerModel());
180 densityUnit.setModel(density);