X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Fgui%2Fpreset%2FPresetEditorDialog.java;h=9d1b220cc3d9779cd0e8b7be850f6c074baafc64;hb=4095cb0dd61a75b7b6b0bd811f8e803af5b27919;hp=00c2c6f5cf769e13c7cfde5e230aed1ab1033e30;hpb=cf815c7b3259caf9266c2d379a00a8eb1b770388;p=debian%2Fopenrocket diff --git a/core/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java b/core/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java index 00c2c6f5..9d1b220c 100644 --- a/core/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java +++ b/core/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java @@ -1,42 +1,5 @@ package net.sf.openrocket.gui.preset; -import net.miginfocom.swing.MigLayout; -import net.sf.openrocket.gui.SpinnerEditor; -import net.sf.openrocket.gui.adaptors.DoubleModel; -import net.sf.openrocket.gui.components.UnitSelector; -import net.sf.openrocket.l10n.Translator; -import net.sf.openrocket.logging.LogHelper; -import net.sf.openrocket.material.Material; -import net.sf.openrocket.motor.Manufacturer; -import net.sf.openrocket.preset.ComponentPreset; -import net.sf.openrocket.preset.ComponentPresetFactory; -import net.sf.openrocket.preset.InvalidComponentPresetException; -import net.sf.openrocket.preset.TypedKey; -import net.sf.openrocket.preset.TypedPropertyMap; -import net.sf.openrocket.preset.loader.MaterialHolder; -import net.sf.openrocket.rocketcomponent.Transition; -import net.sf.openrocket.startup.Application; -import net.sf.openrocket.unit.UnitGroup; - -import javax.imageio.ImageIO; -import javax.swing.ComboBoxModel; -import javax.swing.DefaultComboBoxModel; -import javax.swing.ImageIcon; -import javax.swing.InputVerifier; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JSpinner; -import javax.swing.JTextField; -import javax.swing.border.EmptyBorder; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.text.JTextComponent; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Dimension; @@ -61,2168 +24,2194 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class PresetEditorDialog extends JDialog implements ItemListener { - - private static Translator trans = Application.getTranslator(); - - private static LogHelper log = Application.getLogger(); - - private static final String NON_NEGATIVE_INTEGER_FIELD = "(\\d){0,10}"; - - /** - * Input of non-negative decimals. - */ - final PresetInputVerifier NON_NEGATIVE_INTEGER = new PresetInputVerifier(Pattern.compile(NON_NEGATIVE_INTEGER_FIELD)); - - private final JPanel contentPanel = new JPanel(); - private DeselectableComboBox typeCombo; - private JTextField mfgTextField; - private MaterialChooser materialChooser; - private MaterialHolder holder = null; - - private JTextField ncPartNoTextField; - private JTextField ncDescTextField; - private DoubleModel ncLength; - private JCheckBox ncFilledCB; - private JComboBox ncShapeCB; - private DoubleModel ncAftDia; - private DoubleModel ncAftShoulderDia; - private DoubleModel ncAftShoulderLen; - private DoubleModel ncMass; - private ImageIcon ncImage; - private JButton ncImageBtn; - - private JTextField trPartNoTextField; - private JTextField trDescTextField; - private DoubleModel trLength; - private DoubleModel trAftDia; - private DoubleModel trAftShoulderDia; - private DoubleModel trAftShoulderLen; - private DoubleModel trForeDia; - private DoubleModel trForeShoulderDia; - private DoubleModel trForeShoulderLen; - private DoubleModel trMass; - private ImageIcon trImage; - private JCheckBox trFilledCB; - private JComboBox trShapeCB; - private JButton trImageBtn; - - private JTextField btPartNoTextField; - private JTextField btDescTextField; - private DoubleModel btMass; - private DoubleModel btInnerDia; - private DoubleModel btOuterDia; - private DoubleModel btLength; - private ImageIcon btImage; - private JButton btImageBtn; - - private JTextField tcPartNoTextField; - private JTextField tcDescTextField; - private DoubleModel tcMass; - private DoubleModel tcInnerDia; - private DoubleModel tcOuterDia; - private DoubleModel tcLength; - private ImageIcon tcImage; - private JButton tcImageBtn; - - private JTextField bhPartNoTextField; - private JTextField bhDescTextField; - private DoubleModel bhOuterDia; - private DoubleModel bhLength; - private DoubleModel bhMass; - private ImageIcon bhImage; - private JButton bhImageBtn; - - private JTextField crPartNoTextField; - private JTextField crDescTextField; - private DoubleModel crOuterDia; - private DoubleModel crInnerDia; - private DoubleModel crThickness; - private DoubleModel crMass; - private ImageIcon crImage; - private JButton crImageBtn; - - private JTextField ebPartNoTextField; - private JTextField ebDescTextField; - private DoubleModel ebOuterDia; - private DoubleModel ebInnerDia; - private DoubleModel ebThickness; - private DoubleModel ebMass; - private ImageIcon ebImage; - private JButton ebImageBtn; - - private JTextField llPartNoTextField; - private JTextField llDescTextField; - private DoubleModel llOuterDia; - private DoubleModel llInnerDia; - private DoubleModel llLength; - private DoubleModel llMass; - private ImageIcon llImage; - private JButton llImageBtn; - - private JTextField stPartNoTextField; - private JTextField stDescTextField; - private DoubleModel stThickness; - private DoubleModel stWidth; - private DoubleModel stLength; - private DoubleModel stMass; - private ImageIcon stImage; - private JButton stImageBtn; - - private JTextField pcPartNoTextField; - private JTextField pcDescTextField; - private JTextField pcSides; - private JTextField pcLineCount; - private DoubleModel pcDiameter; - private DoubleModel pcLineLength; - private MaterialChooser pcLineMaterialChooser; - private DoubleModel pcMass; - private ImageIcon pcImage; - private JButton pcImageBtn; - - private final JFileChooser imageChooser = createImageChooser(); - - private JPanel componentOverlayPanel; - - private PresetResultListener resultListener; - - private static Map componentMap = new HashMap(); - - private static final String NOSE_CONE_KEY = "NoseCone.NoseCone"; - private static final String BODY_TUBE_KEY = "BodyTube.BodyTube"; - private static final String TUBE_COUPLER_KEY = "TubeCoupler.TubeCoupler"; - private static final String TRANSITION_KEY = "Transition.Transition"; - private static final String CR_KEY = "ComponentIcons.Centeringring"; - private static final String BULKHEAD_KEY = "Bulkhead.Bulkhead"; - private static final String EB_KEY = "ComponentIcons.Engineblock"; - private static final String LAUNCH_LUG_KEY = "ComponentIcons.Launchlug"; - private static final String STREAMER_KEY = "ComponentIcons.Streamer"; - private static final String PARACHUTE_KEY = "ComponentIcons.Parachute"; - - - static { - componentMap.put(trans.get(NOSE_CONE_KEY), "NOSECONE"); - componentMap.put(trans.get(BODY_TUBE_KEY), "BODYTUBE"); - componentMap.put(trans.get(TUBE_COUPLER_KEY), "TUBECOUPLER"); - componentMap.put(trans.get(TRANSITION_KEY), "TRANSITION"); - componentMap.put(trans.get(CR_KEY), "CENTERINGRING"); - componentMap.put(trans.get(BULKHEAD_KEY), "BULKHEAD"); - componentMap.put(trans.get(EB_KEY), "ENGINEBLOCK"); - componentMap.put(trans.get(LAUNCH_LUG_KEY), "LAUNCHLUG"); - componentMap.put(trans.get(PARACHUTE_KEY), "PARACHUTE"); - componentMap.put(trans.get(STREAMER_KEY), "STREAMER"); - } - - /** - * Create the dialog. - * - * @param theCallback the listener that gets the results of editing the presets - */ - public PresetEditorDialog(PresetResultListener theCallback) { - this(theCallback, null, null); - } - - /** - * Create the dialog. - * - * @param theCallback the listener that gets the results of editing the presets - * @param toEdit the ComponentPreset to be edited; or null if a new one is being added - * @param matHolder the set of materials; if null then use system materials - */ - public PresetEditorDialog(PresetResultListener theCallback, ComponentPreset toEdit, MaterialHolder matHolder) { - resultListener = theCallback; - getContentPane().setMinimumSize(new Dimension(200, 200)); - setBounds(100, 100, 825, 610); - getContentPane().setLayout(new BorderLayout()); - contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); - getContentPane().add(contentPanel, BorderLayout.CENTER); - contentPanel.setLayout(new MigLayout("", "[][grow][94.00,grow][232.0,grow][130.00][grow]", "[][][20.00,grow][grow]")); - JLabel lblManufacturer = new JLabel("Manufacturer:"); - contentPanel.add(lblManufacturer, "cell 2 0,alignx left,aligny center"); - - mfgTextField = new JTextField(); - contentPanel.add(mfgTextField, "cell 3 0,growx"); - mfgTextField.setColumns(10); - - JLabel typeLabel = new JLabel("Type:"); - contentPanel.add(typeLabel, "cell 2 1,alignx left,aligny center"); - - componentOverlayPanel = new JPanel(); - contentPanel.add(componentOverlayPanel, "cell 1 3 5 2,grow"); - componentOverlayPanel.setLayout(new CardLayout(0, 0)); - - typeCombo = new DeselectableComboBox(); - typeCombo.addItemListener(this); - typeCombo.setModel(new DefaultComboBoxModel()); - setItems(typeCombo, toEdit); - contentPanel.add(typeCombo, "cell 3 1,growx"); - - JLabel bhMaterialLabel = new JLabel("Material:"); - contentPanel.add(bhMaterialLabel, "cell 2 2, alignx left"); - - materialChooser = new MaterialChooser(new MaterialModel(this, Material.Type.BULK)); - - contentPanel.add(materialChooser, "cell 3 2,growx"); - - { - JPanel ncPanel = new JPanel(); - componentOverlayPanel.add(ncPanel, "NOSECONE"); - ncPanel.setLayout(new MigLayout("", "[61px][159.00,grow][45.00][109.00,grow][189.00,grow][grow]", "[16px][][][][][]")); - JLabel ncPartNoLabel = new JLabel("Part No:"); - ncPanel.add(ncPartNoLabel, "cell 0 0,alignx left,aligny center"); - - ncPartNoTextField = new JTextField(); - ncPanel.add(ncPartNoTextField, "cell 1 0,growx"); - ncPartNoTextField.setColumns(10); - - JLabel ncDescLabel = new JLabel("Description:"); - ncPanel.add(ncDescLabel, "cell 3 0,alignx left,aligny center"); - - ncDescTextField = new JTextField(); - ncPanel.add(ncDescTextField, "cell 4 0,growx"); - ncDescTextField.setColumns(10); - - ncFilledCB = new JCheckBox("Filled"); - ncPanel.add(ncFilledCB, "cell 1 1"); - - JLabel ncMaterialLabel = new JLabel(trans.get("RocketCompCfg.lbl.Componentmaterial")); - ncPanel.add(ncMaterialLabel, "cell 0 1,alignx left"); - - JLabel ncMassLabel = new JLabel(trans.get("RocketCompCfg.lbl.Componentmass")); - ncPanel.add(ncMassLabel, "cell 3 1,alignx left"); - - ncMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - JSpinner spin = new JSpinner(ncMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - ncPanel.add(spin, "cell 4 1, growx"); - ncPanel.add(new UnitSelector(ncMass), "growx"); - - JLabel ncShapeLabel = new JLabel(trans.get("NoseConeCfg.lbl.Noseconeshape")); - ncPanel.add(ncShapeLabel, "cell 0 2,alignx left"); - - ncShapeCB = new JComboBox(); - ncShapeCB.setModel(new DefaultComboBoxModel(new String[]{Transition.Shape.OGIVE.getName(), Transition.Shape.CONICAL.getName(), Transition.Shape.PARABOLIC.getName(), Transition.Shape.ELLIPSOID.getName(), Transition.Shape.HAACK.getName()})); - ncPanel.add(ncShapeCB, "cell 1 2,growx"); - - JLabel ncLengthLabel = new JLabel(trans.get("NoseConeCfg.lbl.Noseconelength")); - ncPanel.add(ncLengthLabel, "cell 3 2,alignx left"); - - ncLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(ncLength.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - ncPanel.add(spin, "cell 4 2, growx"); - ncPanel.add(new UnitSelector(ncLength), "growx"); - - JLabel ncAftDiaLabel = new JLabel("Aft Dia.:"); - ncPanel.add(ncAftDiaLabel, "cell 0 3,alignx left"); - - ncAftDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(ncAftDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - ncPanel.add(spin, "cell 1 3, growx"); - ncPanel.add(new UnitSelector(ncAftDia), "growx"); - - JLabel ncAftShoulderLenLabel = new JLabel("Aft Shoulder Len:"); - ncPanel.add(ncAftShoulderLenLabel, "cell 0 4,alignx left"); - - ncAftShoulderLen = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(ncAftShoulderLen.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - ncPanel.add(spin, "cell 1 4, growx"); - ncPanel.add(new UnitSelector(ncAftShoulderLen), "growx"); - - JLabel ncAftShoulderDiaLabel = new JLabel("Aft Shoulder Dia.:"); - ncPanel.add(ncAftShoulderDiaLabel, "cell 0 5,alignx left, aligny top, pad 7 0 0 0"); - - ncAftShoulderDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(ncAftShoulderDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - ncPanel.add(spin, "cell 1 5, growx, aligny top"); - ncPanel.add(new UnitSelector(ncAftShoulderDia), "growx, aligny top, pad 7 0 0 0"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - ncPanel.add(panel, "cell 4 3, span 1 3"); - panel.setLayout(null); - ncImageBtn = new JButton("No Image"); - ncImageBtn.setMaximumSize(new Dimension(75, 75)); - ncImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(ncImageBtn); - ncImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - ncImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - ncImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - ncImageBtn.setIcon(ncImage); - } - } - }); - - } - { - JPanel trPanel = new JPanel(); - componentOverlayPanel.add(trPanel, "TRANSITION"); - trPanel.setLayout(new MigLayout("", "[61px][159.00,grow][45.00][109.00,grow][189.00,grow][grow]", "[16px][][][][][]")); - - JLabel trPartNoLabel = new JLabel("Part No:"); - trPanel.add(trPartNoLabel, "cell 0 0,alignx left"); - - trPartNoTextField = new JTextField(); - trPanel.add(trPartNoTextField, "cell 1 0,growx"); - trPartNoTextField.setColumns(10); - - JLabel trDescLabel = new JLabel("Description:"); - trPanel.add(trDescLabel, "cell 3 0,alignx left"); - - trDescTextField = new JTextField(); - trPanel.add(trDescTextField, "cell 4 0,growx"); - trDescTextField.setColumns(10); - - trFilledCB = new JCheckBox("Filled"); - trPanel.add(trFilledCB, "cell 1 1"); - - JLabel trMassLabel = new JLabel("Mass:"); - trPanel.add(trMassLabel, "cell 3 1,alignx left"); - - trMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - JSpinner spin = new JSpinner(trMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - trPanel.add(spin, "cell 4 1, growx"); - trPanel.add(new UnitSelector(trMass), "growx"); - - JLabel trShapeLabel = new JLabel("Shape:"); - trPanel.add(trShapeLabel, "cell 0 2,alignx left"); - - trShapeCB = new JComboBox(); - trShapeCB.setModel(new DefaultComboBoxModel(new String[]{Transition.Shape.OGIVE.getName(), Transition.Shape.CONICAL.getName(), Transition.Shape.PARABOLIC.getName(), Transition.Shape.ELLIPSOID.getName(), Transition.Shape.HAACK.getName()})); - trPanel.add(trShapeCB, "cell 1 2,growx"); - - JLabel trLengthLabel = new JLabel("Length:"); - trPanel.add(trLengthLabel, "cell 3 2,alignx left"); - - trLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(trLength.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - trPanel.add(spin, "cell 4 2, growx"); - trPanel.add(new UnitSelector(trLength), "growx"); - - JLabel trAftDiaLabel = new JLabel("Aft Dia.:"); - trPanel.add(trAftDiaLabel, "cell 0 3,alignx left"); - - trAftDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(trAftDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - trPanel.add(spin, "cell 1 3, growx"); - trPanel.add(new UnitSelector(trAftDia), "growx"); - - JLabel trForeDiaLabel = new JLabel("Fore Dia.:"); - trPanel.add(trForeDiaLabel, "cell 3 3,alignx left"); - - trForeDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(trForeDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - trPanel.add(spin, "cell 4 3, growx"); - trPanel.add(new UnitSelector(trForeDia), "growx"); - - JLabel trAftShouldDiaLabel = new JLabel("Aft Shoulder Dia.:"); - trPanel.add(trAftShouldDiaLabel, "cell 0 4,alignx left"); - - trAftShoulderDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(trAftShoulderDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - trPanel.add(spin, "cell 1 4, growx"); - trPanel.add(new UnitSelector(trAftShoulderDia), "growx"); - - JLabel trForeShouldDiaLabel = new JLabel("Fore Shoulder Dia.:"); - trPanel.add(trForeShouldDiaLabel, "cell 3 4,alignx left"); - - trForeShoulderDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(trForeShoulderDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - trPanel.add(spin, "cell 4 4, growx"); - trPanel.add(new UnitSelector(trForeShoulderDia), "growx"); - - JLabel trAftShoulderLenLabel = new JLabel("Aft Shoulder Len.:"); - trPanel.add(trAftShoulderLenLabel, "cell 0 5,alignx left"); - - trAftShoulderLen = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(trAftShoulderLen.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - trPanel.add(spin, "cell 1 5, growx"); - trPanel.add(new UnitSelector(trAftShoulderLen), "growx"); - - JLabel lblForeShoulderLen = new JLabel("Fore Shoulder Len.:"); - trPanel.add(lblForeShoulderLen, "cell 3 5,alignx left"); - - trForeShoulderLen = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); - spin = new JSpinner(trForeShoulderLen.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - trPanel.add(spin, "cell 4 5, growx"); - trPanel.add(new UnitSelector(trForeShoulderLen), "growx"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - trPanel.add(panel, "cell 4 6"); - panel.setLayout(null); - trImageBtn = new JButton("No Image"); - trImageBtn.setMaximumSize(new Dimension(75, 75)); - trImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(trImageBtn); - trImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - trImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - trImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - trImageBtn.setIcon(trImage); - } - } - }); - - } - { - JPanel btPanel = new JPanel(); - componentOverlayPanel.add(btPanel, "BODYTUBE"); - btPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); - JLabel btPartNoLabel = new JLabel("Part No:"); - btPanel.add(btPartNoLabel, "cell 0 0,alignx left"); - - btPartNoTextField = new JTextField(); - btPanel.add(btPartNoTextField, "cell 1 0,growx"); - btPartNoTextField.setColumns(10); - - JLabel btDescLabel = new JLabel("Description:"); - btPanel.add(btDescLabel, "cell 3 0,alignx left"); - - btDescTextField = new JTextField(); - btPanel.add(btDescTextField, "cell 4 0,growx"); - btDescTextField.setColumns(10); - - JLabel btLengthLabel = new JLabel("Length:"); - btPanel.add(btLengthLabel, "cell 0 1,alignx left"); - - btLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - JSpinner spin = new JSpinner(btLength.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - btPanel.add(spin, "cell 1 1, growx"); - btPanel.add(new UnitSelector(btLength), "growx"); - - JLabel btMassLabel = new JLabel("Mass:"); - btPanel.add(btMassLabel, "cell 3 1,alignx left"); - - btMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - spin = new JSpinner(btMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - btPanel.add(spin, "cell 4 1, growx"); - btPanel.add(new UnitSelector(btMass), "growx"); - - JLabel btInnerDiaLabel = new JLabel("Inner Dia.:"); - btPanel.add(btInnerDiaLabel, "cell 0 2,alignx left"); - - btInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(btInnerDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - btPanel.add(spin, "cell 1 2, growx"); - btPanel.add(new UnitSelector(btInnerDia), "growx"); - - JLabel btOuterDiaLabel = new JLabel("Outer Dia.:"); - btPanel.add(btOuterDiaLabel, "cell 3 2,alignx left"); - - btOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(btOuterDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - btPanel.add(spin, "cell 4 2, growx"); - btPanel.add(new UnitSelector(btOuterDia), "growx"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - btPanel.add(panel, "cell 4 3"); - panel.setLayout(null); - btImageBtn = new JButton("No Image"); - btImageBtn.setMaximumSize(new Dimension(75, 75)); - btImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(btImageBtn); - btImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - btImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - btImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - btImageBtn.setIcon(btImage); - } - } - }); - - } - { - JPanel tcPanel = new JPanel(); - componentOverlayPanel.add(tcPanel, "TUBECOUPLER"); - tcPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); - JLabel tcPartNoLabel = new JLabel("Part No:"); - tcPanel.add(tcPartNoLabel, "cell 0 0,alignx left"); - - tcPartNoTextField = new JTextField(); - tcPanel.add(tcPartNoTextField, "cell 1 0,growx"); - tcPartNoTextField.setColumns(10); - - JLabel tcDescLabel = new JLabel("Description:"); - tcPanel.add(tcDescLabel, "cell 3 0,alignx left"); - - tcDescTextField = new JTextField(); - tcPanel.add(tcDescTextField, "cell 4 0,growx"); - tcDescTextField.setColumns(10); - - JLabel tcLengthLabel = new JLabel("Length:"); - tcPanel.add(tcLengthLabel, "cell 0 1,alignx left"); - - tcLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - JSpinner spin = new JSpinner(tcLength.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - tcPanel.add(spin, "cell 1 1, growx"); - tcPanel.add(new UnitSelector(tcLength), "growx"); - - JLabel tcMassLabel = new JLabel("Mass:"); - tcPanel.add(tcMassLabel, "cell 3 1,alignx left"); - - tcMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - spin = new JSpinner(tcMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - tcPanel.add(spin, "cell 4 1, growx"); - tcPanel.add(new UnitSelector(tcMass), "growx"); - - JLabel tcInnerDiaLabel = new JLabel("Inner Dia.:"); - tcPanel.add(tcInnerDiaLabel, "cell 0 2,alignx left"); - - tcInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(tcInnerDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - tcPanel.add(spin, "cell 1 2, growx"); - tcPanel.add(new UnitSelector(tcInnerDia), "growx"); - - JLabel tcOuterDiaLabel = new JLabel("Outer Dia.:"); - tcPanel.add(tcOuterDiaLabel, "cell 3 2,alignx left"); - - tcOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(tcOuterDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - tcPanel.add(spin, "cell 4 2, growx"); - tcPanel.add(new UnitSelector(tcOuterDia), "growx"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - tcPanel.add(panel, "cell 4 3"); - panel.setLayout(null); - tcImageBtn = new JButton("No Image"); - tcImageBtn.setMaximumSize(new Dimension(75, 75)); - tcImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(tcImageBtn); - tcImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - tcImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - tcImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - tcImageBtn.setIcon(tcImage); - } - } - }); - - - } - { - JPanel bhPanel = new JPanel(); - componentOverlayPanel.add(bhPanel, "BULKHEAD"); - bhPanel.setLayout(new MigLayout("", "[][157.00,grow 79][65.00][grow]", "[][][][]")); - - JLabel bhPartNoLabel = new JLabel("Part No:"); - bhPanel.add(bhPartNoLabel, "cell 0 0,alignx left"); - - bhPartNoTextField = new JTextField(); - bhPanel.add(bhPartNoTextField, "cell 1 0,growx"); - bhPartNoTextField.setColumns(10); - - JLabel bhDescLabel = new JLabel("Description:"); - bhPanel.add(bhDescLabel, "cell 3 0,alignx left"); - - bhDescTextField = new JTextField(); - bhPanel.add(bhDescTextField, "cell 4 0,growx"); - bhDescTextField.setColumns(10); - - JLabel bhLengthLabel = new JLabel("Thickness:"); - bhPanel.add(bhLengthLabel, "cell 0 1,alignx left"); - - bhLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - JSpinner spin = new JSpinner(bhLength.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - bhPanel.add(spin, "cell 1 1, growx"); - bhPanel.add(new UnitSelector(bhLength), "growx"); - - JLabel bhMassLabel = new JLabel("Mass:"); - bhPanel.add(bhMassLabel, "cell 3 1,alignx left"); - - bhMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - spin = new JSpinner(bhMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - bhPanel.add(spin, "cell 4 1, growx"); - bhPanel.add(new UnitSelector(bhMass), "growx"); - - JLabel bhOuterDiaLabel = new JLabel("Outer Dia.:"); - bhPanel.add(bhOuterDiaLabel, "cell 0 2,alignx left, aligny top, pad 7 0 0 0"); - - bhOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(bhOuterDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - bhPanel.add(spin, "cell 1 2, growx, aligny top"); - bhPanel.add(new UnitSelector(bhOuterDia), "growx, aligny top, pad 7 0 0 0"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - bhPanel.add(panel, "cell 4 2"); - panel.setLayout(null); - bhImageBtn = new JButton("No Image"); - bhImageBtn.setMaximumSize(new Dimension(75, 75)); - bhImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(bhImageBtn); - bhImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - bhImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - bhImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - bhImageBtn.setIcon(bhImage); - } - } - }); - - } - { - JPanel crPanel = new JPanel(); - componentOverlayPanel.add(crPanel, "CENTERINGRING"); - crPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); - - JLabel crPartNoLabel = new JLabel("Part No:"); - crPanel.add(crPartNoLabel, "cell 0 0,alignx left"); - - crPartNoTextField = new JTextField(); - crPanel.add(crPartNoTextField, "cell 1 0, growx"); - crPartNoTextField.setColumns(10); - - JLabel crDescLabel = new JLabel("Description:"); - crPanel.add(crDescLabel, "cell 3 0,alignx left"); - - crDescTextField = new JTextField(); - crPanel.add(crDescTextField, "cell 4 0, growx"); - crDescTextField.setColumns(10); - - JLabel crThicknessLabel = new JLabel("Thickness:"); - crPanel.add(crThicknessLabel, "cell 0 1,alignx left"); - - crThickness = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - JSpinner spin = new JSpinner(crThickness.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - crPanel.add(spin, "cell 1 1, growx"); - crPanel.add(new UnitSelector(crThickness), "growx"); - - JLabel crMassLabel = new JLabel("Mass:"); - crPanel.add(crMassLabel, "cell 3 1,alignx left"); - - crMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - spin = new JSpinner(crMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - crPanel.add(spin, "cell 4 1, growx"); - crPanel.add(new UnitSelector(crMass), "growx"); - - JLabel crOuterDiaLabel = new JLabel("Outer Dia.:"); - crPanel.add(crOuterDiaLabel, "cell 0 2,alignx left"); - - crOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(crOuterDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - crPanel.add(spin, "cell 1 2, growx"); - crPanel.add(new UnitSelector(crOuterDia), "growx"); - - JLabel crInnerDiaLabel = new JLabel("Inner Dia.:"); - crPanel.add(crInnerDiaLabel, "cell 3 2,alignx left"); - - crInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(crInnerDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - crPanel.add(spin, "cell 4 2, growx"); - crPanel.add(new UnitSelector(crInnerDia), "growx"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - crPanel.add(panel, "cell 4 3"); - panel.setLayout(null); - crImageBtn = new JButton("No Image"); - crImageBtn.setMaximumSize(new Dimension(75, 75)); - crImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(crImageBtn); - crImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - crImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - crImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - crImageBtn.setIcon(crImage); - } - } - }); - - } - { - JPanel ebPanel = new JPanel(); - componentOverlayPanel.add(ebPanel, "ENGINEBLOCK"); - ebPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); - JLabel ebPartNoLabel = new JLabel("Part No:"); - ebPanel.add(ebPartNoLabel, "cell 0 0,alignx left"); - - ebPartNoTextField = new JTextField(); - ebPanel.add(ebPartNoTextField, "cell 1 0,growx"); - ebPartNoTextField.setColumns(10); - - JLabel ebDescLabel = new JLabel("Description:"); - ebPanel.add(ebDescLabel, "cell 3 0,alignx left"); - - ebDescTextField = new JTextField(); - ebPanel.add(ebDescTextField, "cell 4 0,growx"); - ebDescTextField.setColumns(10); - - JLabel ebThicknessLabel = new JLabel("Thickness:"); - ebPanel.add(ebThicknessLabel, "cell 0 1,alignx left"); - - ebThickness = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - JSpinner spin = new JSpinner(ebThickness.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - ebPanel.add(spin, "cell 1 1, growx"); - ebPanel.add(new UnitSelector(ebThickness), "growx"); - - JLabel ebMassLabel = new JLabel("Mass:"); - ebPanel.add(ebMassLabel, "cell 3 1,alignx left"); - - ebMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - spin = new JSpinner(ebMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - ebPanel.add(spin, "cell 4 1, growx"); - ebPanel.add(new UnitSelector(ebMass), "growx"); - - JLabel ebOuterDiaLabel = new JLabel("Outer Dia.:"); - ebPanel.add(ebOuterDiaLabel, "cell 0 2,alignx left"); - - ebOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(ebOuterDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - ebPanel.add(spin, "cell 1 2, growx"); - ebPanel.add(new UnitSelector(ebOuterDia), "growx"); - - JLabel ebInnerDiaLabel = new JLabel("Inner Dia.:"); - ebPanel.add(ebInnerDiaLabel, "cell 3 2,alignx left"); - - ebInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(ebInnerDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - ebPanel.add(spin, "cell 4 2, growx"); - ebPanel.add(new UnitSelector(ebInnerDia), "growx"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - ebPanel.add(panel, "cell 4 3"); - panel.setLayout(null); - ebImageBtn = new JButton("No Image"); - ebImageBtn.setMaximumSize(new Dimension(75, 75)); - ebImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(ebImageBtn); - ebImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - ebImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - ebImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - ebImageBtn.setIcon(ebImage); - } - } - }); - } - - { - JPanel llPanel = new JPanel(); - componentOverlayPanel.add(llPanel, "LAUNCHLUG"); - llPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); - JLabel llPartNoLabel = new JLabel("Part No:"); - llPanel.add(llPartNoLabel, "cell 0 0,alignx left"); - - llPartNoTextField = new JTextField(); - llPanel.add(llPartNoTextField, "cell 1 0,growx"); - llPartNoTextField.setColumns(10); - - JLabel llDescLabel = new JLabel("Description:"); - llPanel.add(llDescLabel, "cell 3 0,alignx left"); - - llDescTextField = new JTextField(); - llPanel.add(llDescTextField, "cell 4 0,growx"); - llDescTextField.setColumns(10); - - JLabel llLengthLabel = new JLabel("Length:"); - llPanel.add(llLengthLabel, "cell 0 1,alignx left"); - - llLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - JSpinner spin = new JSpinner(llLength.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - llPanel.add(spin, "cell 1 1, growx"); - llPanel.add(new UnitSelector(llLength), "growx"); - - JLabel llMassLabel = new JLabel("Mass:"); - llPanel.add(llMassLabel, "cell 3 1,alignx left"); - - llMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - spin = new JSpinner(llMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - llPanel.add(spin, "cell 4 1, growx"); - llPanel.add(new UnitSelector(llMass), "growx"); - - JLabel llOuterDiaLabel = new JLabel("Outer Dia.:"); - llPanel.add(llOuterDiaLabel, "cell 0 2,alignx left"); - - llOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(llOuterDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - llPanel.add(spin, "cell 1 2, growx"); - llPanel.add(new UnitSelector(llOuterDia), "growx"); - - JLabel llInnerDiaLabel = new JLabel("Inner Dia.:"); - llPanel.add(llInnerDiaLabel, "cell 3 2,alignx left"); - - llInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(llInnerDia.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - llPanel.add(spin, "cell 4 2, growx"); - llPanel.add(new UnitSelector(llInnerDia), "growx"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - llPanel.add(panel, "cell 4 3"); - panel.setLayout(null); - llImageBtn = new JButton("No Image"); - llImageBtn.setMaximumSize(new Dimension(75, 75)); - llImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(llImageBtn); - llImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - llImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - llImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - llImageBtn.setIcon(llImage); - } - } - }); - } - - { - JPanel stPanel = new JPanel(); - componentOverlayPanel.add(stPanel, "STREAMER"); - stPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); - JLabel stPartNoLabel = new JLabel("Part No:"); - stPanel.add(stPartNoLabel, "cell 0 0,alignx left"); - - stPartNoTextField = new JTextField(); - stPanel.add(stPartNoTextField, "cell 1 0,growx"); - stPartNoTextField.setColumns(10); - - JLabel stDescLabel = new JLabel("Description:"); - stPanel.add(stDescLabel, "cell 3 0,alignx left"); - - stDescTextField = new JTextField(); - stPanel.add(stDescTextField, "cell 4 0,growx"); - stDescTextField.setColumns(10); - - JLabel stLengthLabel = new JLabel("Length:"); - stPanel.add(stLengthLabel, "cell 0 1,alignx left"); - - stLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - JSpinner spin = new JSpinner(stLength.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - stPanel.add(spin, "cell 1 1, growx"); - stPanel.add(new UnitSelector(stLength), "growx"); - - JLabel stMassLabel = new JLabel("Mass:"); - stPanel.add(stMassLabel, "cell 3 1,alignx left"); - - stMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - spin = new JSpinner(stMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - stPanel.add(spin, "cell 4 1, growx"); - stPanel.add(new UnitSelector(stMass), "growx"); - - JLabel stThicknessLabel = new JLabel("Thickness:"); - stPanel.add(stThicknessLabel, "cell 0 2,alignx left"); - - stThickness = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(stThickness.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - stPanel.add(spin, "cell 1 2, growx"); - stPanel.add(new UnitSelector(stThickness), "growx"); - - JLabel stWidthLabel = new JLabel("Width:"); - stPanel.add(stWidthLabel, "cell 3 2,alignx left"); - - stWidth = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(stWidth.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - stPanel.add(spin, "cell 4 2, growx"); - stPanel.add(new UnitSelector(stWidth), "growx"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - stPanel.add(panel, "cell 4 3"); - panel.setLayout(null); - stImageBtn = new JButton("No Image"); - stImageBtn.setMaximumSize(new Dimension(75, 75)); - stImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(stImageBtn); - stImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - stImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - stImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - stImageBtn.setIcon(stImage); - } - } - }); - } - - { - JPanel pcPanel = new JPanel(); - componentOverlayPanel.add(pcPanel, "PARACHUTE"); - pcPanel.setLayout(new MigLayout("", "[][157.00,grow 79][65.00][grow][][]", "[][][][][][]")); - JLabel pcPartNoLabel = new JLabel("Part No:"); - pcPanel.add(pcPartNoLabel, "cell 0 0,alignx left"); - - pcPartNoTextField = new JTextField(); - pcPanel.add(pcPartNoTextField, "cell 1 0,growx"); - pcPartNoTextField.setColumns(10); - - JLabel pcDescLabel = new JLabel("Description:"); - pcPanel.add(pcDescLabel, "cell 3 0,alignx left"); - - pcDescTextField = new JTextField(); - pcPanel.add(pcDescTextField, "cell 4 0,growx"); - pcDescTextField.setColumns(10); - - JLabel pcSidesLabel = new JLabel("Sides:"); - pcPanel.add(pcSidesLabel, "cell 0 1,alignx left"); - - pcSides = new JTextField(); - pcPanel.add(pcSides, "cell 1 1, growx"); - pcSides.setInputVerifier(NON_NEGATIVE_INTEGER); - pcSides.setColumns(10); - - JLabel pcMassLabel = new JLabel("Mass:"); - pcPanel.add(pcMassLabel, "cell 3 1,alignx left"); - - pcMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); - JSpinner spin = new JSpinner(pcMass.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - pcPanel.add(spin, "cell 4 1, growx"); - pcPanel.add(new UnitSelector(pcMass), "growx"); - - JLabel pcDiameterLabel = new JLabel("Diameter:"); - pcPanel.add(pcDiameterLabel, "cell 0 2,alignx left"); - - pcDiameter = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(pcDiameter.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - pcPanel.add(spin, "cell 1 2, growx"); - pcPanel.add(new UnitSelector(pcDiameter)); - - JLabel pcLineLengthLabel = new JLabel("Line Length:"); - pcPanel.add(pcLineLengthLabel, "cell 3 2,alignx left"); - - pcLineLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); - spin = new JSpinner(pcLineLength.getSpinnerModel()); - spin.setEditor(new SpinnerEditor(spin)); - pcPanel.add(spin, "cell 4 2, growx"); - pcPanel.add(new UnitSelector(pcLineLength), "growx"); - - JLabel pcLineCountLabel = new JLabel("Line Count:"); - pcPanel.add(pcLineCountLabel, "cell 3 3,alignx left"); - - pcLineCount = new JTextField(); - pcLineCount.setInputVerifier(NON_NEGATIVE_INTEGER); - pcPanel.add(pcLineCount, "cell 4 3, growx"); - pcLineCount.setColumns(10); - - JLabel pcLineMaterialLabel = new JLabel("Line Material:"); - pcPanel.add(pcLineMaterialLabel, "cell 3 4,alignx left, aligny top, pad 7 0 0 0 "); - - pcLineMaterialChooser = new MaterialChooser(); - pcLineMaterialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.LINE)); - pcPanel.add(pcLineMaterialChooser, "cell 4 4, span 3 1, growx, aligny top"); - - JPanel panel = new JPanel(); - panel.setMinimumSize(new Dimension(200, 200)); - pcPanel.add(panel, "cell 1 3, span 1 3"); - panel.setLayout(null); - pcImageBtn = new JButton("No Image"); - pcImageBtn.setMaximumSize(new Dimension(75, 75)); - pcImageBtn.setMinimumSize(new Dimension(75, 75)); - panel.add(pcImageBtn); - pcImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); - - pcImageBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); - - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = imageChooser.getSelectedFile(); - pcImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); - pcImageBtn.setIcon(pcImage); - } - } - }); - } - - JPanel buttonPane = new JPanel(); - getContentPane().add(buttonPane, BorderLayout.SOUTH); - buttonPane.setLayout(new MigLayout("", "[130px][176.00px][131.00px]", "[29px]")); - JButton btnSaveAndNew = new JButton("Save and New"); - btnSaveAndNew.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent arg0) { - saveResult(); - } - }); - buttonPane.add(btnSaveAndNew, "cell 0 0,alignx left,aligny top"); - - JButton okButton = new JButton("Save and Close"); - okButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent event) { - if (saveResult()) { - dispose(); - } - } - }); - okButton.setActionCommand("OK"); - buttonPane.add(okButton, "cell 1 0,alignx left,aligny top"); - getRootPane().setDefaultButton(okButton); - - JButton cancelButton = new JButton("Close"); - cancelButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent event) { - dispose(); - } - }); - cancelButton.setActionCommand("Close"); - buttonPane.add(cancelButton, "cell 6 0,alignx right,aligny top"); - - if (toEdit != null) { - fillEditor(toEdit, matHolder); - } - holder = matHolder; - } - - /** - * When an existing preset is edited, we want to disable the other types of presets. If the user wants a different - * type of component, then they should delete this one and add a new one. - * - * @param cb the combo box component - * @param preset the preset being edited - */ - private void setItems(DeselectableComboBox cb, ComponentPreset preset) { - cb.addItem(trans.get(NOSE_CONE_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.NOSE_CONE)); - cb.addItem(trans.get(BODY_TUBE_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.BODY_TUBE)); - cb.addItem(trans.get(BULKHEAD_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.BULK_HEAD)); - cb.addItem(trans.get(CR_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.CENTERING_RING)); - cb.addItem(trans.get(EB_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.ENGINE_BLOCK)); - cb.addItem(trans.get(TRANSITION_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.TRANSITION)); - cb.addItem(trans.get(TUBE_COUPLER_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.TUBE_COUPLER)); - cb.addItem(trans.get(LAUNCH_LUG_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.LAUNCH_LUG)); - cb.addItem(trans.get(PARACHUTE_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.PARACHUTE)); - cb.addItem(trans.get(STREAMER_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.STREAMER)); - } - - /** - * Create an image chooser. Currently png and jpg are supported. - * - * @return a file chooser that looks for image files - */ - private JFileChooser createImageChooser() { - final JFileChooser chooser = new JFileChooser(); - ImagePreviewPanel preview = new ImagePreviewPanel(); - chooser.setAccessory(preview); - chooser.addPropertyChangeListener(preview); - chooser.setAcceptAllFileFilterUsed(false); - chooser.addChoosableFileFilter(new FileNameExtensionFilter("Image Files", "png", "jpg", "jpeg")); - return chooser; - } - - /** - * To support editing of an existing preset, the swing components need to be prepopulated with the field data. - * - * @param preset the preset to edit - */ - private void fillEditor(ComponentPreset preset, MaterialHolder holder) { - ComponentPreset.Type t = preset.getType(); - - mfgTextField.setText(preset.get(ComponentPreset.MANUFACTURER).getDisplayName()); - setMaterial(materialChooser, preset, holder, Material.Type.BULK, ComponentPreset.MATERIAL); - switch (t) { - case BODY_TUBE: - typeCombo.setSelectedItem(trans.get(BODY_TUBE_KEY)); - btDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - - if (preset.has(ComponentPreset.INNER_DIAMETER)) { - btInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); - btInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.LENGTH)) { - btLength.setValue(preset.get(ComponentPreset.LENGTH)); - btLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.MASS)) { - btMass.setValue(preset.get(ComponentPreset.MASS)); - btMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.OUTER_DIAMETER)) { - btOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); - btOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.IMAGE)) { - btImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - btImageBtn.setIcon(btImage); - } - btPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - break; - case BULK_HEAD: - typeCombo.setSelectedItem(trans.get(BULKHEAD_KEY)); - bhDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - if (preset.has(ComponentPreset.LENGTH)) { - bhLength.setValue(preset.get(ComponentPreset.LENGTH)); - bhLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.MASS)) { - bhMass.setValue(preset.get(ComponentPreset.MASS)); - bhMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.OUTER_DIAMETER)) { - bhOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); - bhOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.IMAGE)) { - bhImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - bhImageBtn.setIcon(bhImage); - } - bhPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - break; - case CENTERING_RING: - typeCombo.setSelectedItem(trans.get(CR_KEY)); - crDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - if (preset.has(ComponentPreset.INNER_DIAMETER)) { - crInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); - crInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.LENGTH)) { - crThickness.setValue(preset.get(ComponentPreset.LENGTH)); - crThickness.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.MASS)) { - crMass.setValue(preset.get(ComponentPreset.MASS)); - crMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.OUTER_DIAMETER)) { - crOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); - crOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.IMAGE)) { - crImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - crImageBtn.setIcon(crImage); - } - crPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - break; - case ENGINE_BLOCK: - typeCombo.setSelectedItem(trans.get(EB_KEY)); - ebDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - if (preset.has(ComponentPreset.INNER_DIAMETER)) { - ebInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); - ebInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.LENGTH)) { - ebThickness.setValue(preset.get(ComponentPreset.LENGTH)); - ebThickness.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.MASS)) { - ebMass.setValue(preset.get(ComponentPreset.MASS)); - ebMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.OUTER_DIAMETER)) { - ebOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); - ebOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.IMAGE)) { - ebImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - ebImageBtn.setIcon(ebImage); - } - ebPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - break; - case NOSE_CONE: - typeCombo.setSelectedItem(trans.get(NOSE_CONE_KEY)); - ncDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - if (preset.has(ComponentPreset.AFT_OUTER_DIAMETER)) { - ncAftDia.setValue(preset.get(ComponentPreset.AFT_OUTER_DIAMETER)); - ncAftDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.AFT_SHOULDER_DIAMETER)) { - ncAftShoulderDia.setValue(preset.get(ComponentPreset.AFT_SHOULDER_DIAMETER)); - ncAftShoulderDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.AFT_SHOULDER_LENGTH)) { - ncAftShoulderLen.setValue(preset.get(ComponentPreset.AFT_SHOULDER_LENGTH)); - ncAftShoulderLen.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.MASS)) { - ncMass.setValue(preset.get(ComponentPreset.MASS)); - ncMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.SHAPE)) { - ncShapeCB.setSelectedItem(preset.get(ComponentPreset.SHAPE).toString()); - } - if (preset.has(ComponentPreset.FILLED)) { - ncFilledCB.setSelected((preset.get(ComponentPreset.FILLED))); - } - if (preset.has(ComponentPreset.LENGTH)) { - ncLength.setValue(preset.get(ComponentPreset.LENGTH)); - ncLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.IMAGE)) { - ncImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - ncImageBtn.setIcon(ncImage); - } - ncPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - break; - case TRANSITION: - typeCombo.setSelectedItem(trans.get(TRANSITION_KEY)); - trDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - if (preset.has(ComponentPreset.AFT_OUTER_DIAMETER)) { - trAftDia.setValue(preset.get(ComponentPreset.AFT_OUTER_DIAMETER)); - trAftDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.AFT_SHOULDER_DIAMETER)) { - trAftShoulderDia.setValue(preset.get(ComponentPreset.AFT_SHOULDER_DIAMETER)); - trAftShoulderDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.AFT_SHOULDER_LENGTH)) { - trAftShoulderLen.setValue(preset.get(ComponentPreset.AFT_SHOULDER_LENGTH)); - trAftShoulderLen.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.FORE_OUTER_DIAMETER)) { - trForeDia.setValue(preset.get(ComponentPreset.FORE_OUTER_DIAMETER)); - trForeDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.FORE_SHOULDER_DIAMETER)) { - trForeShoulderDia.setValue(preset.get(ComponentPreset.FORE_SHOULDER_DIAMETER)); - trForeShoulderDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.FORE_SHOULDER_LENGTH)) { - trForeShoulderLen.setValue(preset.get(ComponentPreset.FORE_SHOULDER_LENGTH)); - trForeShoulderLen.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.MASS)) { - trMass.setValue(preset.get(ComponentPreset.MASS)); - trMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.SHAPE)) { - trShapeCB.setSelectedItem(preset.get(ComponentPreset.SHAPE).toString()); - } - if (preset.has(ComponentPreset.FILLED)) { - trFilledCB.setSelected((preset.get(ComponentPreset.FILLED))); - } - if (preset.has(ComponentPreset.LENGTH)) { - trLength.setValue(preset.get(ComponentPreset.LENGTH)); - trLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.IMAGE)) { - trImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - trImageBtn.setIcon(trImage); - } - trPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - break; - case TUBE_COUPLER: - typeCombo.setSelectedItem(trans.get(TUBE_COUPLER_KEY)); - tcDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - if (preset.has(ComponentPreset.INNER_DIAMETER)) { - tcInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); - tcInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.LENGTH)) { - tcLength.setValue(preset.get(ComponentPreset.LENGTH)); - tcLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.MASS)) { - tcMass.setValue(preset.get(ComponentPreset.MASS)); - tcMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.OUTER_DIAMETER)) { - tcOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); - tcOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - tcPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - if (preset.has(ComponentPreset.IMAGE)) { - tcImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - tcImageBtn.setIcon(tcImage); - } - break; - case LAUNCH_LUG: - typeCombo.setSelectedItem(trans.get(LAUNCH_LUG_KEY)); - llDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - if (preset.has(ComponentPreset.INNER_DIAMETER)) { - llInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); - llInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.LENGTH)) { - llLength.setValue(preset.get(ComponentPreset.LENGTH)); - llLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.MASS)) { - llMass.setValue(preset.get(ComponentPreset.MASS)); - llMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.OUTER_DIAMETER)) { - llOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); - llOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - llPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - if (preset.has(ComponentPreset.IMAGE)) { - llImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - llImageBtn.setIcon(llImage); - } - break; - case PARACHUTE: - setMaterial(materialChooser, preset, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL); - typeCombo.setSelectedItem(trans.get(PARACHUTE_KEY)); - pcDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - if (preset.has(ComponentPreset.LINE_COUNT)) { - pcLineCount.setText(preset.get(ComponentPreset.LINE_COUNT).toString()); - } - if (preset.has(ComponentPreset.SIDES)) { - pcSides.setText(preset.get(ComponentPreset.SIDES).toString()); - } - if (preset.has(ComponentPreset.MASS)) { - pcMass.setValue(preset.get(ComponentPreset.MASS)); - pcMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.DIAMETER)) { - pcDiameter.setValue(preset.get(ComponentPreset.DIAMETER)); - pcDiameter.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.LINE_LENGTH)) { - pcLineLength.setValue(preset.get(ComponentPreset.LINE_LENGTH)); - pcLineLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - pcPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - if (preset.has(ComponentPreset.IMAGE)) { - pcImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - pcImageBtn.setIcon(pcImage); - } - setMaterial(pcLineMaterialChooser, preset, holder, Material.Type.LINE, ComponentPreset.LINE_MATERIAL); -// pcLineMaterialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.LINE)); - -// pcLineMaterialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.LINE_MATERIAL)); - break; - case STREAMER: - setMaterial(materialChooser, preset, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL); - typeCombo.setSelectedItem(trans.get(STREAMER_KEY)); - stDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); - if (preset.has(ComponentPreset.LENGTH)) { - stLength.setValue(preset.get(ComponentPreset.LENGTH)); - stLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.THICKNESS)) { - stThickness.setValue(preset.get(ComponentPreset.LENGTH)); - stThickness.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.MASS)) { - stMass.setValue(preset.get(ComponentPreset.MASS)); - stMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); - } - if (preset.has(ComponentPreset.WIDTH)) { - stWidth.setValue(preset.get(ComponentPreset.WIDTH)); - stWidth.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - if (preset.has(ComponentPreset.IMAGE)) { - stImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); - stImageBtn.setIcon(stImage); - } - stPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); - break; - default: - } - } - - private void setMaterial(final JComboBox chooser, final ComponentPreset preset, final MaterialHolder holder, - final Material.Type theType, final TypedKey key) { - if (holder == null) { - chooser.setModel(new MaterialModel(PresetEditorDialog.this, theType)); - } - else { - chooser.setModel(new MaterialModel(PresetEditorDialog.this, theType, - holder.asDatabase(theType))); - } - if (preset != null) { - chooser.getModel().setSelectedItem(preset.get(key)); - } - } - - /** - * Extract the preset data from the UI fields, create a ComponentPreset instance, and notify the listener. - */ - private boolean saveResult() { - String type = (String) typeCombo.getSelectedItem(); - - ComponentPreset result = null; - - if (type.equals(trans.get(NOSE_CONE_KEY))) { - result = extractNoseCone(); - if (result != null) { - clearNoseCone(); - } - } - else if (type.equals(trans.get(TRANSITION_KEY))) { - result = extractTransition(); - if (result != null) { - clearTransition(); - } - } - else if (type.equals(trans.get(BODY_TUBE_KEY))) { - result = extractBodyTube(); - if (result != null) { - clearBodyTube(); - } - } - else if (type.equals(trans.get(TUBE_COUPLER_KEY))) { - result = extractTubeCoupler(); - if (result != null) { - clearTubeCoupler(); - } - } - else if (type.equals(trans.get(EB_KEY))) { - result = extractEngineBlock(); - if (result != null) { - clearEngineBlock(); - } - } - else if (type.equals(trans.get(CR_KEY))) { - result = extractCenteringRing(); - if (result != null) { - clearCenteringRing(); - } - } - else if (type.equals(trans.get(BULKHEAD_KEY))) { - result = extractBulkhead(); - if (result != null) { - clearBulkhead(); - } - } - else if (type.equals(trans.get(LAUNCH_LUG_KEY))) { - result = extractLaunchLug(); - if (result != null) { - clearLaunchLug(); - } - } - else if (type.equals(trans.get(PARACHUTE_KEY))) { - result = extractParachute(); - if (result != null) { - clearParachute(); - } - } - else if (type.equals(trans.get(STREAMER_KEY))) { - result = extractStreamer(); - if (result != null) { - clearStreamer(); - } - } - if (result != null) { - resultListener.notifyResult(result); - return true; - } - else { - return false; - } - } - - private ComponentPreset extractNoseCone() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.NOSE_CONE); - props.put(ComponentPreset.AFT_OUTER_DIAMETER, ncAftDia.getValue()); - props.put(ComponentPreset.AFT_SHOULDER_DIAMETER, ncAftShoulderDia.getValue()); - props.put(ComponentPreset.AFT_SHOULDER_LENGTH, ncAftShoulderLen.getValue()); - props.put(ComponentPreset.DESCRIPTION, ncDescTextField.getText()); - props.put(ComponentPreset.PARTNO, ncPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - props.put(ComponentPreset.LENGTH, ncLength.getValue()); - props.put(ComponentPreset.SHAPE, Transition.Shape.toShape((String) ncShapeCB.getSelectedItem())); - final Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - props.put(ComponentPreset.MASS, ncMass.getValue()); - props.put(ComponentPreset.FILLED, ncFilledCB.isSelected()); - if (ncImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(ncImage.getImage())); - } - - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert nose cone attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory nose cone attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearNoseCone() { - ncAftDia.setValue(0); - ncAftShoulderDia.setValue(0); - ncAftShoulderLen.setValue(0); - ncDescTextField.setText(""); - ncPartNoTextField.setText(""); - ncLength.setValue(0); - ncMass.setValue(0); - ncFilledCB.setSelected(false); - ncImage = null; - ncImageBtn.setIcon(null); - } - - private ComponentPreset extractTransition() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION); - props.put(ComponentPreset.AFT_OUTER_DIAMETER, trAftDia.getValue()); - props.put(ComponentPreset.AFT_SHOULDER_DIAMETER, trAftShoulderDia.getValue()); - props.put(ComponentPreset.AFT_SHOULDER_LENGTH, trAftShoulderLen.getValue()); - props.put(ComponentPreset.FORE_OUTER_DIAMETER, trForeDia.getValue()); - props.put(ComponentPreset.FORE_SHOULDER_DIAMETER, trForeShoulderDia.getValue()); - props.put(ComponentPreset.FORE_SHOULDER_LENGTH, trForeShoulderLen.getValue()); - props.put(ComponentPreset.DESCRIPTION, trDescTextField.getText()); - props.put(ComponentPreset.PARTNO, trPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - - props.put(ComponentPreset.LENGTH, trLength.getValue()); - props.put(ComponentPreset.SHAPE, Transition.Shape.toShape((String) trShapeCB.getSelectedItem())); - final Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - props.put(ComponentPreset.MASS, trMass.getValue()); - props.put(ComponentPreset.FILLED, trFilledCB.isSelected()); - if (trImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(trImage.getImage())); - } - - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert transition attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory transition attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearTransition() { - trAftDia.setValue(0); - trAftShoulderDia.setValue(0); - trAftShoulderLen.setValue(0); - trForeDia.setValue(0); - trForeShoulderDia.setValue(0); - trForeShoulderLen.setValue(0); - trDescTextField.setText(""); - trPartNoTextField.setText(""); - trLength.setValue(0); - trMass.setValue(0); - trFilledCB.setSelected(false); - trImage = null; - trImageBtn.setIcon(null); - } - - private ComponentPreset extractBodyTube() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.BODY_TUBE); - props.put(ComponentPreset.OUTER_DIAMETER, btOuterDia.getValue()); - props.put(ComponentPreset.INNER_DIAMETER, btInnerDia.getValue()); - props.put(ComponentPreset.DESCRIPTION, btDescTextField.getText()); - props.put(ComponentPreset.PARTNO, btPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - props.put(ComponentPreset.LENGTH, btLength.getValue()); - final Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - props.put(ComponentPreset.MASS, btMass.getValue()); - if (btImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(btImage.getImage())); - } - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert body tube attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory body tube attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearBodyTube() { - btOuterDia.setValue(0); - btInnerDia.setValue(0); - btDescTextField.setText(""); - btPartNoTextField.setText(""); - btLength.setValue(0); - btMass.setValue(0); - btImage = null; - btImageBtn.setIcon(null); - } - - public ComponentPreset extractTubeCoupler() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.TUBE_COUPLER); - props.put(ComponentPreset.OUTER_DIAMETER, tcOuterDia.getValue()); - props.put(ComponentPreset.INNER_DIAMETER, tcInnerDia.getValue()); - props.put(ComponentPreset.DESCRIPTION, tcDescTextField.getText()); - props.put(ComponentPreset.PARTNO, tcPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - props.put(ComponentPreset.LENGTH, tcLength.getValue()); - final Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - props.put(ComponentPreset.MASS, tcMass.getValue()); - if (tcImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(tcImage.getImage())); - } - - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert tube coupler attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory tube coupler attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearTubeCoupler() { - tcOuterDia.setValue(0); - tcInnerDia.setValue(0); - tcDescTextField.setText(""); - tcPartNoTextField.setText(""); - tcLength.setValue(0); - tcMass.setValue(0); - tcImage = null; - tcImageBtn.setIcon(null); - } - - private ComponentPreset extractBulkhead() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.BULK_HEAD); - props.put(ComponentPreset.OUTER_DIAMETER, bhOuterDia.getValue()); - props.put(ComponentPreset.DESCRIPTION, bhDescTextField.getText()); - props.put(ComponentPreset.PARTNO, bhPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - props.put(ComponentPreset.LENGTH, bhLength.getValue()); - final Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - props.put(ComponentPreset.MASS, bhMass.getValue()); - if (bhImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(bhImage.getImage())); - } - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert bulkhead attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory bulkhead attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearBulkhead() { - bhOuterDia.setValue(0); - bhDescTextField.setText(""); - bhPartNoTextField.setText(""); - bhLength.setValue(0); - bhMass.setValue(0); - bhImage = null; - bhImageBtn.setIcon(null); - } - - private ComponentPreset extractCenteringRing() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.CENTERING_RING); - props.put(ComponentPreset.OUTER_DIAMETER, crOuterDia.getValue()); - props.put(ComponentPreset.INNER_DIAMETER, crInnerDia.getValue()); - props.put(ComponentPreset.DESCRIPTION, crDescTextField.getText()); - props.put(ComponentPreset.PARTNO, crPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - props.put(ComponentPreset.LENGTH, crThickness.getValue()); - final Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - props.put(ComponentPreset.MASS, crMass.getValue()); - if (crImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(crImage.getImage())); - } - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert centering ring attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory centering ring attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearCenteringRing() { - crOuterDia.setValue(0); - crInnerDia.setValue(0); - crDescTextField.setText(""); - crPartNoTextField.setText(""); - crThickness.setValue(0); - crMass.setValue(0); - crImage = null; - crImageBtn.setIcon(null); - } - - public ComponentPreset extractEngineBlock() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.ENGINE_BLOCK); - props.put(ComponentPreset.OUTER_DIAMETER, ebOuterDia.getValue()); - props.put(ComponentPreset.INNER_DIAMETER, ebInnerDia.getValue()); - props.put(ComponentPreset.DESCRIPTION, ebDescTextField.getText()); - props.put(ComponentPreset.PARTNO, ebPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - props.put(ComponentPreset.LENGTH, ebThickness.getValue()); - final Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - props.put(ComponentPreset.MASS, ebMass.getValue()); - if (ebImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(ebImage.getImage())); - } - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert engine block attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory engine block attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearEngineBlock() { - ebOuterDia.setValue(0); - ebInnerDia.setValue(0); - ebDescTextField.setText(""); - ebPartNoTextField.setText(""); - ebThickness.setValue(0); - ebMass.setValue(0); - ebImage = null; - ebImageBtn.setIcon(null); - } - - public ComponentPreset extractLaunchLug() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.LAUNCH_LUG); - props.put(ComponentPreset.OUTER_DIAMETER, llOuterDia.getValue()); - props.put(ComponentPreset.INNER_DIAMETER, llInnerDia.getValue()); - props.put(ComponentPreset.DESCRIPTION, llDescTextField.getText()); - props.put(ComponentPreset.PARTNO, llPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - props.put(ComponentPreset.LENGTH, llLength.getValue()); - final Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - props.put(ComponentPreset.MASS, llMass.getValue()); - if (llImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(llImage.getImage())); - } - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert launch lug attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory launch lug attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearLaunchLug() { - llOuterDia.setValue(0); - llInnerDia.setValue(0); - llDescTextField.setText(""); - llPartNoTextField.setText(""); - llLength.setValue(0); - llMass.setValue(0); - llImage = null; - llImageBtn.setIcon(null); - } - - public ComponentPreset extractParachute() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.PARACHUTE); - props.put(ComponentPreset.DIAMETER, pcDiameter.getValue()); - props.put(ComponentPreset.DESCRIPTION, pcDescTextField.getText()); - props.put(ComponentPreset.PARTNO, pcPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - if (!pcLineCount.getText().equals("")) { - props.put(ComponentPreset.LINE_COUNT, Integer.parseInt(pcLineCount.getText())); - } - if (!pcSides.getText().equals("")) { - props.put(ComponentPreset.SIDES, Integer.parseInt(pcSides.getText())); - } - props.put(ComponentPreset.LINE_LENGTH, pcLineLength.getValue()); - Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - material = (Material) pcLineMaterialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.LINE_MATERIAL, material); - } - props.put(ComponentPreset.MASS, pcMass.getValue()); - if (pcImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(pcImage.getImage())); - } - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert parachute attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory parachute attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearParachute() { - ebOuterDia.setValue(0); - ebInnerDia.setValue(0); - ebDescTextField.setText(""); - ebPartNoTextField.setText(""); - ebThickness.setValue(0); - ebMass.setValue(0); - ebImage = null; - ebImageBtn.setIcon(null); - } - - public ComponentPreset extractStreamer() { - TypedPropertyMap props = new TypedPropertyMap(); - try { - props.put(ComponentPreset.TYPE, ComponentPreset.Type.STREAMER); - props.put(ComponentPreset.DESCRIPTION, stDescTextField.getText()); - props.put(ComponentPreset.PARTNO, stPartNoTextField.getText()); - props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); - props.put(ComponentPreset.THICKNESS, stThickness.getValue()); - props.put(ComponentPreset.LENGTH, stLength.getValue()); - props.put(ComponentPreset.WIDTH, stWidth.getValue()); - final Material material = (Material) materialChooser.getSelectedItem(); - if (material != null) { - props.put(ComponentPreset.MATERIAL, material); - } - else { - JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); - return null; - } - props.put(ComponentPreset.MASS, stMass.getValue()); - if (stImage != null) { - props.put(ComponentPreset.IMAGE, imageToByteArray(stImage.getImage())); - } - return ComponentPresetFactory.create(props); - } - catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Could not convert engine block attribute.", "Error", JOptionPane.ERROR_MESSAGE); - } - catch (InvalidComponentPresetException e) { - JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory engine block attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); - } - return null; - } - - private void clearStreamer() { - stWidth.setValue(0); - stLength.setValue(0); - stDescTextField.setText(""); - stPartNoTextField.setText(""); - stThickness.setValue(0); - stMass.setValue(0); - stImage = null; - stImageBtn.setIcon(null); - } - - public void itemStateChanged(ItemEvent evt) { - CardLayout cl = (CardLayout) (componentOverlayPanel.getLayout()); - final String item = (String) evt.getItem(); - if (materialChooser != null && evt.getStateChange() == ItemEvent.SELECTED) { - if (item.equals(trans.get(PARACHUTE_KEY)) || item.equals(trans.get(STREAMER_KEY))) { - if (!((MaterialModel) materialChooser.getModel()).getType().equals(Material.Type.SURFACE)) { - setMaterial(materialChooser, null, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL); - } - } - else { - if (!((MaterialModel) materialChooser.getModel()).getType().equals(Material.Type.BULK)) { - setMaterial(materialChooser, null, holder, Material.Type.BULK, ComponentPreset.MATERIAL); - } - } - } - cl.show(componentOverlayPanel, componentMap.get(item)); - } - - //Todo: I18N - private String craftErrorMessage(InvalidComponentPresetException e, String baseMsg) { - StringBuilder stringBuilder = new StringBuilder(); - List invalids = e.getErrors(); - stringBuilder.append(baseMsg).append("\n"); - for (int i = 0; i < invalids.size(); i++) { - String s = invalids.get(i); - stringBuilder.append(s).append("\n"); - } - - return stringBuilder.toString(); - } - - /** - * Convert an image to a byte array in png format. - * - * @param originalImage - * - * @return - */ - private byte[] imageToByteArray(Image originalImage) { - byte[] imageInByte = null; - try { - BufferedImage bi = imageToBufferedImage(originalImage); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ImageIO.write(bi, "png", baos); - baos.flush(); - imageInByte = baos.toByteArray(); - baos.close(); - } - catch (IOException e) { - log.error("Could not read image."); - } - return imageInByte; - } - - private BufferedImage imageToBufferedImage(final Image originalImage) { - BufferedImage bi = new BufferedImage(originalImage.getWidth(null), originalImage.getHeight(null), BufferedImage.TYPE_INT_RGB); - - Graphics2D g2 = bi.createGraphics(); - g2.drawImage(originalImage, 0, 0, null); - return bi; - } - - private BufferedImage byteArrayToImage(byte[] src) { - // convert byte array back to BufferedImage - InputStream in = new ByteArrayInputStream(src); - try { - return ImageIO.read(in); - } - catch (IOException e) { - log.error("Could not convert image."); - } - return null; - } - - private ImageIcon scaleImage(Image image, int targetDimension) { - int width = image.getWidth(this); - int height = image.getHeight(this); - double ratio = 1.0; - - /* - * Determine how to scale the image. Since the accessory can expand - * vertically make sure we don't go larger than 150 when scaling - * vertically. - */ - if (width >= height) { - ratio = (double) (targetDimension - 5) / width; - width = targetDimension - 5; - height = (int) (height * ratio); - } - else { - if (getHeight() > 150) { - ratio = (double) (targetDimension - 5) / height; - height = targetDimension - 5; - width = (int) (width * ratio); - } - else { - ratio = (double) getHeight() / height; - height = getHeight(); - width = (int) (width * ratio); - } - } - - return new ImageIcon(image.getScaledInstance(width, height, Image.SCALE_DEFAULT)); - } - - static class PresetInputVerifier extends InputVerifier { - - /** - * Matches user input against a regular expression. - */ - private Matcher matcher; - - PresetInputVerifier(final Pattern thePattern) { - matcher = thePattern.matcher(""); - } - - /** - * Return true only if the untrimmed user input matches the regular expression provided to the constructor. - * - * @param aComponent must be an instance of JTextComponent. - */ - public boolean verify(JComponent aComponent) { - JTextComponent textComponent = (JTextComponent) aComponent; - String text = textComponent.getText(); - matcher.reset(text); - return matcher.matches(); - } - - /** - * Always returns true, in this implementation, such that focus can always transfer to another - * component whenever the validation fails. - *

- *

If super.shouldYieldFocus returns false, then clear the text field. - * - * @param aComponent is a JTextComponent. - */ - @Override - public boolean shouldYieldFocus(JComponent aComponent) { - if (!super.shouldYieldFocus(aComponent)) { - ((JTextComponent) aComponent).setText(""); - } - return true; - } - } - - class MaterialChooser extends JComboBox { - - public MaterialChooser() { - } - public MaterialChooser(MaterialModel model) { - super(model); - } +import javax.imageio.ImageIO; +import javax.swing.ComboBoxModel; +import javax.swing.DefaultComboBoxModel; +import javax.swing.ImageIcon; +import javax.swing.InputVerifier; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JSpinner; +import javax.swing.JTextField; +import javax.swing.border.EmptyBorder; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.text.JTextComponent; - /** - * Sets the data model that the JComboBox uses to obtain the list of items. - * - * @param aModel the ComboBoxModel that provides the displayed list of items - * - * @beaninfo bound: true description: Model that the combo box uses to get data to display. - */ - @Override - public void setModel(final ComboBoxModel aModel) { - if (getModel() instanceof MaterialModel) { - MaterialModel old = (MaterialModel) getModel(); - old.removeListener(); - } - super.setModel(aModel); +import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.gui.SpinnerEditor; +import net.sf.openrocket.gui.adaptors.DoubleModel; +import net.sf.openrocket.gui.components.UnitSelector; +import net.sf.openrocket.l10n.Translator; +import net.sf.openrocket.logging.LogHelper; +import net.sf.openrocket.material.Material; +import net.sf.openrocket.motor.Manufacturer; +import net.sf.openrocket.preset.ComponentPreset; +import net.sf.openrocket.preset.ComponentPresetFactory; +import net.sf.openrocket.preset.InvalidComponentPresetException; +import net.sf.openrocket.preset.TypedKey; +import net.sf.openrocket.preset.TypedPropertyMap; +import net.sf.openrocket.preset.loader.MaterialHolder; +import net.sf.openrocket.rocketcomponent.Transition; +import net.sf.openrocket.startup.Application; +import net.sf.openrocket.unit.UnitGroup; - } - } +/** + * Preset editor for creating new preset components. + */ +public class PresetEditorDialog extends JDialog implements ItemListener { + + private static Translator trans = Application.getTranslator(); + + private static LogHelper log = Application.getLogger(); + + private static final String NON_NEGATIVE_INTEGER_FIELD = "(\\d){0,10}"; + + /** + * Input of non-negative decimals. + */ + final PresetInputVerifier NON_NEGATIVE_INTEGER = new PresetInputVerifier(Pattern.compile(NON_NEGATIVE_INTEGER_FIELD)); + + private final JPanel contentPanel = new JPanel(); + private DeselectableComboBox typeCombo; + private JTextField mfgTextField; + private MaterialChooser materialChooser; + private MaterialHolder holder = null; + + private JTextField ncPartNoTextField; + private JTextField ncDescTextField; + private DoubleModel ncLength; + private JCheckBox ncFilledCB; + private JComboBox ncShapeCB; + private DoubleModel ncAftDia; + private DoubleModel ncAftShoulderDia; + private DoubleModel ncAftShoulderLen; + private DoubleModel ncMass; + private ImageIcon ncImage; + private JButton ncImageBtn; + + private JTextField trPartNoTextField; + private JTextField trDescTextField; + private DoubleModel trLength; + private DoubleModel trAftDia; + private DoubleModel trAftShoulderDia; + private DoubleModel trAftShoulderLen; + private DoubleModel trForeDia; + private DoubleModel trForeShoulderDia; + private DoubleModel trForeShoulderLen; + private DoubleModel trMass; + private ImageIcon trImage; + private JCheckBox trFilledCB; + private JComboBox trShapeCB; + private JButton trImageBtn; + + private JTextField btPartNoTextField; + private JTextField btDescTextField; + private DoubleModel btMass; + private DoubleModel btInnerDia; + private DoubleModel btOuterDia; + private DoubleModel btLength; + private ImageIcon btImage; + private JButton btImageBtn; + + private JTextField tcPartNoTextField; + private JTextField tcDescTextField; + private DoubleModel tcMass; + private DoubleModel tcInnerDia; + private DoubleModel tcOuterDia; + private DoubleModel tcLength; + private ImageIcon tcImage; + private JButton tcImageBtn; + + private JTextField bhPartNoTextField; + private JTextField bhDescTextField; + private DoubleModel bhOuterDia; + private DoubleModel bhLength; + private DoubleModel bhMass; + private ImageIcon bhImage; + private JButton bhImageBtn; + + private JTextField crPartNoTextField; + private JTextField crDescTextField; + private DoubleModel crOuterDia; + private DoubleModel crInnerDia; + private DoubleModel crThickness; + private DoubleModel crMass; + private ImageIcon crImage; + private JButton crImageBtn; + + private JTextField ebPartNoTextField; + private JTextField ebDescTextField; + private DoubleModel ebOuterDia; + private DoubleModel ebInnerDia; + private DoubleModel ebThickness; + private DoubleModel ebMass; + private ImageIcon ebImage; + private JButton ebImageBtn; + + private JTextField llPartNoTextField; + private JTextField llDescTextField; + private DoubleModel llOuterDia; + private DoubleModel llInnerDia; + private DoubleModel llLength; + private DoubleModel llMass; + private ImageIcon llImage; + private JButton llImageBtn; + + private JTextField stPartNoTextField; + private JTextField stDescTextField; + private DoubleModel stThickness; + private DoubleModel stWidth; + private DoubleModel stLength; + private DoubleModel stMass; + private ImageIcon stImage; + private JButton stImageBtn; + + private JTextField pcPartNoTextField; + private JTextField pcDescTextField; + private JTextField pcSides; + private JTextField pcLineCount; + private DoubleModel pcDiameter; + private DoubleModel pcLineLength; + private MaterialChooser pcLineMaterialChooser; + private DoubleModel pcMass; + private ImageIcon pcImage; + private JButton pcImageBtn; + + private final JFileChooser imageChooser = createImageChooser(); + + private JPanel componentOverlayPanel; + + private PresetResultListener resultListener; + + private static Map componentMap = new HashMap(); + + private static final String NOSE_CONE_KEY = "NoseCone.NoseCone"; + private static final String BODY_TUBE_KEY = "BodyTube.BodyTube"; + private static final String TUBE_COUPLER_KEY = "TubeCoupler.TubeCoupler"; + private static final String TRANSITION_KEY = "Transition.Transition"; + private static final String CR_KEY = "ComponentIcons.Centeringring"; + private static final String BULKHEAD_KEY = "Bulkhead.Bulkhead"; + private static final String EB_KEY = "ComponentIcons.Engineblock"; + private static final String LAUNCH_LUG_KEY = "ComponentIcons.Launchlug"; + private static final String STREAMER_KEY = "ComponentIcons.Streamer"; + private static final String PARACHUTE_KEY = "ComponentIcons.Parachute"; + + + static { + componentMap.put(trans.get(NOSE_CONE_KEY), "NOSECONE"); + componentMap.put(trans.get(BODY_TUBE_KEY), "BODYTUBE"); + componentMap.put(trans.get(TUBE_COUPLER_KEY), "TUBECOUPLER"); + componentMap.put(trans.get(TRANSITION_KEY), "TRANSITION"); + componentMap.put(trans.get(CR_KEY), "CENTERINGRING"); + componentMap.put(trans.get(BULKHEAD_KEY), "BULKHEAD"); + componentMap.put(trans.get(EB_KEY), "ENGINEBLOCK"); + componentMap.put(trans.get(LAUNCH_LUG_KEY), "LAUNCHLUG"); + componentMap.put(trans.get(PARACHUTE_KEY), "PARACHUTE"); + componentMap.put(trans.get(STREAMER_KEY), "STREAMER"); + } + + /** + * Create the dialog. + * + * @param theCallback the listener that gets the results of editing the presets + */ + public PresetEditorDialog(PresetResultListener theCallback) { + this(theCallback, null, null); + } + + /** + * Create the dialog. + * + * @param theCallback the listener that gets the results of editing the presets + * @param toEdit the ComponentPreset to be edited; or null if a new one is being added + * @param matHolder the set of materials; if null then use system materials + */ + public PresetEditorDialog(PresetResultListener theCallback, ComponentPreset toEdit, MaterialHolder matHolder) { + resultListener = theCallback; + getContentPane().setMinimumSize(new Dimension(200, 200)); + setBounds(100, 100, 825, 610); + getContentPane().setLayout(new BorderLayout()); + contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); + getContentPane().add(contentPanel, BorderLayout.CENTER); + contentPanel.setLayout(new MigLayout("", "[][grow][94.00,grow][232.0,grow][130.00][grow]", "[][][20.00,grow][grow]")); + JLabel lblManufacturer = new JLabel("Manufacturer:"); + contentPanel.add(lblManufacturer, "cell 2 0,alignx left,aligny center"); + + mfgTextField = new JTextField(); + contentPanel.add(mfgTextField, "cell 3 0,growx"); + mfgTextField.setColumns(10); + + JLabel typeLabel = new JLabel("Type:"); + contentPanel.add(typeLabel, "cell 2 1,alignx left,aligny center"); + + componentOverlayPanel = new JPanel(); + contentPanel.add(componentOverlayPanel, "cell 1 3 5 2,grow"); + componentOverlayPanel.setLayout(new CardLayout(0, 0)); + + typeCombo = new DeselectableComboBox(); + typeCombo.addItemListener(this); + typeCombo.setModel(new DefaultComboBoxModel()); + setItems(typeCombo, toEdit); + contentPanel.add(typeCombo, "cell 3 1,growx"); + + JLabel bhMaterialLabel = new JLabel("Material:"); + contentPanel.add(bhMaterialLabel, "cell 2 2, alignx left"); + + materialChooser = new MaterialChooser(new MaterialModel(this, Material.Type.BULK)); + + contentPanel.add(materialChooser, "cell 3 2,growx"); + + { + JPanel ncPanel = new JPanel(); + componentOverlayPanel.add(ncPanel, "NOSECONE"); + ncPanel.setLayout(new MigLayout("", "[61px][159.00,grow][45.00][109.00,grow][189.00,grow][grow]", "[16px][][][][][]")); + JLabel ncPartNoLabel = new JLabel("Part No:"); + ncPanel.add(ncPartNoLabel, "cell 0 0,alignx left,aligny center"); + + ncPartNoTextField = new JTextField(); + ncPanel.add(ncPartNoTextField, "cell 1 0,growx"); + ncPartNoTextField.setColumns(10); + + JLabel ncDescLabel = new JLabel("Description:"); + ncPanel.add(ncDescLabel, "cell 3 0,alignx left,aligny center"); + + ncDescTextField = new JTextField(); + ncPanel.add(ncDescTextField, "cell 4 0,growx"); + ncDescTextField.setColumns(10); + + ncFilledCB = new JCheckBox("Filled"); + ncPanel.add(ncFilledCB, "cell 1 1"); + + JLabel ncMaterialLabel = new JLabel(trans.get("RocketCompCfg.lbl.Componentmaterial")); + ncPanel.add(ncMaterialLabel, "cell 0 1,alignx left"); + + JLabel ncMassLabel = new JLabel(trans.get("RocketCompCfg.lbl.Componentmass")); + ncPanel.add(ncMassLabel, "cell 3 1,alignx left"); + + ncMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + JSpinner spin = new JSpinner(ncMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + ncPanel.add(spin, "cell 4 1, growx"); + ncPanel.add(new UnitSelector(ncMass), "growx"); + + JLabel ncShapeLabel = new JLabel(trans.get("NoseConeCfg.lbl.Noseconeshape")); + ncPanel.add(ncShapeLabel, "cell 0 2,alignx left"); + + ncShapeCB = new JComboBox(); + ncShapeCB.setModel(new DefaultComboBoxModel(new String[] { Transition.Shape.OGIVE.getName(), Transition.Shape.CONICAL.getName(), Transition.Shape.PARABOLIC.getName(), + Transition.Shape.ELLIPSOID.getName(), Transition.Shape.HAACK.getName() })); + ncPanel.add(ncShapeCB, "cell 1 2,growx"); + + JLabel ncLengthLabel = new JLabel(trans.get("NoseConeCfg.lbl.Noseconelength")); + ncPanel.add(ncLengthLabel, "cell 3 2,alignx left"); + + ncLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(ncLength.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + ncPanel.add(spin, "cell 4 2, growx"); + ncPanel.add(new UnitSelector(ncLength), "growx"); + + JLabel ncAftDiaLabel = new JLabel("Aft Dia.:"); + ncPanel.add(ncAftDiaLabel, "cell 0 3,alignx left"); + + ncAftDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(ncAftDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + ncPanel.add(spin, "cell 1 3, growx"); + ncPanel.add(new UnitSelector(ncAftDia), "growx"); + + JLabel ncAftShoulderLenLabel = new JLabel("Aft Shoulder Len:"); + ncPanel.add(ncAftShoulderLenLabel, "cell 0 4,alignx left"); + + ncAftShoulderLen = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(ncAftShoulderLen.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + ncPanel.add(spin, "cell 1 4, growx"); + ncPanel.add(new UnitSelector(ncAftShoulderLen), "growx"); + + JLabel ncAftShoulderDiaLabel = new JLabel("Aft Shoulder Dia.:"); + ncPanel.add(ncAftShoulderDiaLabel, "cell 0 5,alignx left, aligny top, pad 7 0 0 0"); + + ncAftShoulderDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(ncAftShoulderDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + ncPanel.add(spin, "cell 1 5, growx, aligny top"); + ncPanel.add(new UnitSelector(ncAftShoulderDia), "growx, aligny top, pad 7 0 0 0"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + ncPanel.add(panel, "cell 4 3, span 1 3"); + panel.setLayout(null); + ncImageBtn = new JButton("No Image"); + ncImageBtn.setMaximumSize(new Dimension(75, 75)); + ncImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(ncImageBtn); + ncImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + ncImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + ncImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + ncImageBtn.setIcon(ncImage); + } + } + }); + + } + { + JPanel trPanel = new JPanel(); + componentOverlayPanel.add(trPanel, "TRANSITION"); + trPanel.setLayout(new MigLayout("", "[61px][159.00,grow][45.00][109.00,grow][189.00,grow][grow]", "[16px][][][][][]")); + + JLabel trPartNoLabel = new JLabel("Part No:"); + trPanel.add(trPartNoLabel, "cell 0 0,alignx left"); + + trPartNoTextField = new JTextField(); + trPanel.add(trPartNoTextField, "cell 1 0,growx"); + trPartNoTextField.setColumns(10); + + JLabel trDescLabel = new JLabel("Description:"); + trPanel.add(trDescLabel, "cell 3 0,alignx left"); + + trDescTextField = new JTextField(); + trPanel.add(trDescTextField, "cell 4 0,growx"); + trDescTextField.setColumns(10); + + trFilledCB = new JCheckBox("Filled"); + trPanel.add(trFilledCB, "cell 1 1"); + + JLabel trMassLabel = new JLabel("Mass:"); + trPanel.add(trMassLabel, "cell 3 1,alignx left"); + + trMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + JSpinner spin = new JSpinner(trMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + trPanel.add(spin, "cell 4 1, growx"); + trPanel.add(new UnitSelector(trMass), "growx"); + + JLabel trShapeLabel = new JLabel("Shape:"); + trPanel.add(trShapeLabel, "cell 0 2,alignx left"); + + trShapeCB = new JComboBox(); + trShapeCB.setModel(new DefaultComboBoxModel(new String[] { Transition.Shape.OGIVE.getName(), Transition.Shape.CONICAL.getName(), Transition.Shape.PARABOLIC.getName(), + Transition.Shape.ELLIPSOID.getName(), Transition.Shape.HAACK.getName() })); + trPanel.add(trShapeCB, "cell 1 2,growx"); + + JLabel trLengthLabel = new JLabel("Length:"); + trPanel.add(trLengthLabel, "cell 3 2,alignx left"); + + trLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(trLength.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + trPanel.add(spin, "cell 4 2, growx"); + trPanel.add(new UnitSelector(trLength), "growx"); + + JLabel trAftDiaLabel = new JLabel("Aft Dia.:"); + trPanel.add(trAftDiaLabel, "cell 0 3,alignx left"); + + trAftDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(trAftDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + trPanel.add(spin, "cell 1 3, growx"); + trPanel.add(new UnitSelector(trAftDia), "growx"); + + JLabel trForeDiaLabel = new JLabel("Fore Dia.:"); + trPanel.add(trForeDiaLabel, "cell 3 3,alignx left"); + + trForeDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(trForeDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + trPanel.add(spin, "cell 4 3, growx"); + trPanel.add(new UnitSelector(trForeDia), "growx"); + + JLabel trAftShouldDiaLabel = new JLabel("Aft Shoulder Dia.:"); + trPanel.add(trAftShouldDiaLabel, "cell 0 4,alignx left"); + + trAftShoulderDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(trAftShoulderDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + trPanel.add(spin, "cell 1 4, growx"); + trPanel.add(new UnitSelector(trAftShoulderDia), "growx"); + + JLabel trForeShouldDiaLabel = new JLabel("Fore Shoulder Dia.:"); + trPanel.add(trForeShouldDiaLabel, "cell 3 4,alignx left"); + + trForeShoulderDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(trForeShoulderDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + trPanel.add(spin, "cell 4 4, growx"); + trPanel.add(new UnitSelector(trForeShoulderDia), "growx"); + + JLabel trAftShoulderLenLabel = new JLabel("Aft Shoulder Len.:"); + trPanel.add(trAftShoulderLenLabel, "cell 0 5,alignx left"); + + trAftShoulderLen = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(trAftShoulderLen.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + trPanel.add(spin, "cell 1 5, growx"); + trPanel.add(new UnitSelector(trAftShoulderLen), "growx"); + + JLabel lblForeShoulderLen = new JLabel("Fore Shoulder Len.:"); + trPanel.add(lblForeShoulderLen, "cell 3 5,alignx left"); + + trForeShoulderLen = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0, 2); + spin = new JSpinner(trForeShoulderLen.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + trPanel.add(spin, "cell 4 5, growx"); + trPanel.add(new UnitSelector(trForeShoulderLen), "growx"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + trPanel.add(panel, "cell 4 6"); + panel.setLayout(null); + trImageBtn = new JButton("No Image"); + trImageBtn.setMaximumSize(new Dimension(75, 75)); + trImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(trImageBtn); + trImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + trImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + trImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + trImageBtn.setIcon(trImage); + } + } + }); + + } + { + JPanel btPanel = new JPanel(); + componentOverlayPanel.add(btPanel, "BODYTUBE"); + btPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); + JLabel btPartNoLabel = new JLabel("Part No:"); + btPanel.add(btPartNoLabel, "cell 0 0,alignx left"); + + btPartNoTextField = new JTextField(); + btPanel.add(btPartNoTextField, "cell 1 0,growx"); + btPartNoTextField.setColumns(10); + + JLabel btDescLabel = new JLabel("Description:"); + btPanel.add(btDescLabel, "cell 3 0,alignx left"); + + btDescTextField = new JTextField(); + btPanel.add(btDescTextField, "cell 4 0,growx"); + btDescTextField.setColumns(10); + + JLabel btLengthLabel = new JLabel("Length:"); + btPanel.add(btLengthLabel, "cell 0 1,alignx left"); + + btLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + JSpinner spin = new JSpinner(btLength.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + btPanel.add(spin, "cell 1 1, growx"); + btPanel.add(new UnitSelector(btLength), "growx"); + + JLabel btMassLabel = new JLabel("Mass:"); + btPanel.add(btMassLabel, "cell 3 1,alignx left"); + + btMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + spin = new JSpinner(btMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + btPanel.add(spin, "cell 4 1, growx"); + btPanel.add(new UnitSelector(btMass), "w 34lp!"); + + JLabel btInnerDiaLabel = new JLabel("Inner Dia.:"); + btPanel.add(btInnerDiaLabel, "cell 0 2,alignx left"); + + btInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(btInnerDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + btPanel.add(spin, "cell 1 2, growx"); + btPanel.add(new UnitSelector(btInnerDia), "growx"); + + JLabel btOuterDiaLabel = new JLabel("Outer Dia.:"); + btPanel.add(btOuterDiaLabel, "cell 3 2,alignx left"); + + btOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(btOuterDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + btPanel.add(spin, "cell 4 2, growx"); + btPanel.add(new UnitSelector(btOuterDia), "w 34lp!"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + btPanel.add(panel, "cell 4 3"); + panel.setLayout(null); + btImageBtn = new JButton("No Image"); + btImageBtn.setMaximumSize(new Dimension(75, 75)); + btImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(btImageBtn); + btImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + btImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + btImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + btImageBtn.setIcon(btImage); + } + } + }); + + } + { + JPanel tcPanel = new JPanel(); + componentOverlayPanel.add(tcPanel, "TUBECOUPLER"); + tcPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); + JLabel tcPartNoLabel = new JLabel("Part No:"); + tcPanel.add(tcPartNoLabel, "cell 0 0,alignx left"); + + tcPartNoTextField = new JTextField(); + tcPanel.add(tcPartNoTextField, "cell 1 0,growx"); + tcPartNoTextField.setColumns(10); + + JLabel tcDescLabel = new JLabel("Description:"); + tcPanel.add(tcDescLabel, "cell 3 0,alignx left"); + + tcDescTextField = new JTextField(); + tcPanel.add(tcDescTextField, "cell 4 0,growx"); + tcDescTextField.setColumns(10); + + JLabel tcLengthLabel = new JLabel("Length:"); + tcPanel.add(tcLengthLabel, "cell 0 1,alignx left"); + + tcLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + JSpinner spin = new JSpinner(tcLength.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + tcPanel.add(spin, "cell 1 1, growx"); + tcPanel.add(new UnitSelector(tcLength), "growx"); + + JLabel tcMassLabel = new JLabel("Mass:"); + tcPanel.add(tcMassLabel, "cell 3 1,alignx left"); + + tcMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + spin = new JSpinner(tcMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + tcPanel.add(spin, "cell 4 1, growx"); + tcPanel.add(new UnitSelector(tcMass), "w 34lp!"); + + JLabel tcInnerDiaLabel = new JLabel("Inner Dia.:"); + tcPanel.add(tcInnerDiaLabel, "cell 0 2,alignx left"); + + tcInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(tcInnerDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + tcPanel.add(spin, "cell 1 2, growx"); + tcPanel.add(new UnitSelector(tcInnerDia), "growx"); + + JLabel tcOuterDiaLabel = new JLabel("Outer Dia.:"); + tcPanel.add(tcOuterDiaLabel, "cell 3 2,alignx left"); + + tcOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(tcOuterDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + tcPanel.add(spin, "cell 4 2, growx"); + tcPanel.add(new UnitSelector(tcOuterDia), "w 34lp!"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + tcPanel.add(panel, "cell 4 3"); + panel.setLayout(null); + tcImageBtn = new JButton("No Image"); + tcImageBtn.setMaximumSize(new Dimension(75, 75)); + tcImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(tcImageBtn); + tcImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + tcImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + tcImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + tcImageBtn.setIcon(tcImage); + } + } + }); + + + } + { + JPanel bhPanel = new JPanel(); + componentOverlayPanel.add(bhPanel, "BULKHEAD"); + bhPanel.setLayout(new MigLayout("", "[][157.00,grow 79][65.00][grow]", "[][][][]")); + + JLabel bhPartNoLabel = new JLabel("Part No:"); + bhPanel.add(bhPartNoLabel, "cell 0 0,alignx left"); + + bhPartNoTextField = new JTextField(); + bhPanel.add(bhPartNoTextField, "cell 1 0,growx"); + bhPartNoTextField.setColumns(10); + + JLabel bhDescLabel = new JLabel("Description:"); + bhPanel.add(bhDescLabel, "cell 3 0,alignx left"); + + bhDescTextField = new JTextField(); + bhPanel.add(bhDescTextField, "cell 4 0,growx"); + bhDescTextField.setColumns(10); + + JLabel bhLengthLabel = new JLabel("Thickness:"); + bhPanel.add(bhLengthLabel, "cell 0 1,alignx left"); + + bhLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + JSpinner spin = new JSpinner(bhLength.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + bhPanel.add(spin, "cell 1 1, growx"); + bhPanel.add(new UnitSelector(bhLength), "w 34lp!"); + + JLabel bhMassLabel = new JLabel("Mass:"); + bhPanel.add(bhMassLabel, "cell 3 1,alignx left"); + + bhMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + spin = new JSpinner(bhMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + bhPanel.add(spin, "cell 4 1, growx"); + bhPanel.add(new UnitSelector(bhMass), "growx"); + + JLabel bhOuterDiaLabel = new JLabel("Outer Dia.:"); + bhPanel.add(bhOuterDiaLabel, "cell 0 2,alignx left, aligny top, pad 7 0 0 0"); + + bhOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(bhOuterDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + bhPanel.add(spin, "cell 1 2, growx, aligny top"); + bhPanel.add(new UnitSelector(bhOuterDia), "w 34lp!, h 27lp!, aligny top, pad 7 0 0 0"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + bhPanel.add(panel, "cell 4 2"); + panel.setLayout(null); + bhImageBtn = new JButton("No Image"); + bhImageBtn.setMaximumSize(new Dimension(75, 75)); + bhImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(bhImageBtn); + bhImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + bhImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + bhImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + bhImageBtn.setIcon(bhImage); + } + } + }); + + } + { + JPanel crPanel = new JPanel(); + componentOverlayPanel.add(crPanel, "CENTERINGRING"); + crPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); + + JLabel crPartNoLabel = new JLabel("Part No:"); + crPanel.add(crPartNoLabel, "cell 0 0,alignx left"); + + crPartNoTextField = new JTextField(); + crPanel.add(crPartNoTextField, "cell 1 0, growx"); + crPartNoTextField.setColumns(10); + + JLabel crDescLabel = new JLabel("Description:"); + crPanel.add(crDescLabel, "cell 3 0,alignx left"); + + crDescTextField = new JTextField(); + crPanel.add(crDescTextField, "cell 4 0, growx"); + crDescTextField.setColumns(10); + + JLabel crThicknessLabel = new JLabel("Thickness:"); + crPanel.add(crThicknessLabel, "cell 0 1,alignx left"); + + crThickness = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + JSpinner spin = new JSpinner(crThickness.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + crPanel.add(spin, "cell 1 1, growx"); + crPanel.add(new UnitSelector(crThickness), "growx"); + + JLabel crMassLabel = new JLabel("Mass:"); + crPanel.add(crMassLabel, "cell 3 1,alignx left"); + + crMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + spin = new JSpinner(crMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + crPanel.add(spin, "cell 4 1, growx"); + crPanel.add(new UnitSelector(crMass), "w 34lp!"); + + JLabel crOuterDiaLabel = new JLabel("Outer Dia.:"); + crPanel.add(crOuterDiaLabel, "cell 0 2,alignx left"); + + crOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(crOuterDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + crPanel.add(spin, "cell 1 2, growx"); + crPanel.add(new UnitSelector(crOuterDia), "w 34lp!"); + + JLabel crInnerDiaLabel = new JLabel("Inner Dia.:"); + crPanel.add(crInnerDiaLabel, "cell 3 2,alignx left"); + + crInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(crInnerDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + crPanel.add(spin, "cell 4 2, growx"); + crPanel.add(new UnitSelector(crInnerDia), "w 34lp!"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + crPanel.add(panel, "cell 4 3"); + panel.setLayout(null); + crImageBtn = new JButton("No Image"); + crImageBtn.setMaximumSize(new Dimension(75, 75)); + crImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(crImageBtn); + crImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + crImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + crImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + crImageBtn.setIcon(crImage); + } + } + }); + + } + { + JPanel ebPanel = new JPanel(); + componentOverlayPanel.add(ebPanel, "ENGINEBLOCK"); + ebPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); + JLabel ebPartNoLabel = new JLabel("Part No:"); + ebPanel.add(ebPartNoLabel, "cell 0 0,alignx left"); + + ebPartNoTextField = new JTextField(); + ebPanel.add(ebPartNoTextField, "cell 1 0,growx"); + ebPartNoTextField.setColumns(10); + + JLabel ebDescLabel = new JLabel("Description:"); + ebPanel.add(ebDescLabel, "cell 3 0,alignx left"); + + ebDescTextField = new JTextField(); + ebPanel.add(ebDescTextField, "cell 4 0,growx"); + ebDescTextField.setColumns(10); + + JLabel ebThicknessLabel = new JLabel("Thickness:"); + ebPanel.add(ebThicknessLabel, "cell 0 1,alignx left"); + + ebThickness = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + JSpinner spin = new JSpinner(ebThickness.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + ebPanel.add(spin, "cell 1 1, growx"); + ebPanel.add(new UnitSelector(ebThickness), "growx"); + + JLabel ebMassLabel = new JLabel("Mass:"); + ebPanel.add(ebMassLabel, "cell 3 1,alignx left"); + + ebMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + spin = new JSpinner(ebMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + ebPanel.add(spin, "cell 4 1, growx"); + ebPanel.add(new UnitSelector(ebMass), "w 34lp!"); + + JLabel ebOuterDiaLabel = new JLabel("Outer Dia.:"); + ebPanel.add(ebOuterDiaLabel, "cell 0 2,alignx left"); + + ebOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(ebOuterDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + ebPanel.add(spin, "cell 1 2, growx"); + ebPanel.add(new UnitSelector(ebOuterDia), "growx"); + + JLabel ebInnerDiaLabel = new JLabel("Inner Dia.:"); + ebPanel.add(ebInnerDiaLabel, "cell 3 2,alignx left"); + + ebInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(ebInnerDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + ebPanel.add(spin, "cell 4 2, growx"); + ebPanel.add(new UnitSelector(ebInnerDia), "w 34lp!"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + ebPanel.add(panel, "cell 4 3"); + panel.setLayout(null); + ebImageBtn = new JButton("No Image"); + ebImageBtn.setMaximumSize(new Dimension(75, 75)); + ebImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(ebImageBtn); + ebImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + ebImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + ebImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + ebImageBtn.setIcon(ebImage); + } + } + }); + } + + { + JPanel llPanel = new JPanel(); + componentOverlayPanel.add(llPanel, "LAUNCHLUG"); + llPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); + JLabel llPartNoLabel = new JLabel("Part No:"); + llPanel.add(llPartNoLabel, "cell 0 0,alignx left"); + + llPartNoTextField = new JTextField(); + llPanel.add(llPartNoTextField, "cell 1 0,growx"); + llPartNoTextField.setColumns(10); + + JLabel llDescLabel = new JLabel("Description:"); + llPanel.add(llDescLabel, "cell 3 0,alignx left"); + + llDescTextField = new JTextField(); + llPanel.add(llDescTextField, "cell 4 0,growx"); + llDescTextField.setColumns(10); + + JLabel llLengthLabel = new JLabel("Length:"); + llPanel.add(llLengthLabel, "cell 0 1,alignx left"); + + llLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + JSpinner spin = new JSpinner(llLength.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + llPanel.add(spin, "cell 1 1, growx"); + llPanel.add(new UnitSelector(llLength), "growx"); + + JLabel llMassLabel = new JLabel("Mass:"); + llPanel.add(llMassLabel, "cell 3 1,alignx left"); + + llMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + spin = new JSpinner(llMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + llPanel.add(spin, "cell 4 1, growx"); + llPanel.add(new UnitSelector(llMass), "w 34lp!"); + + JLabel llOuterDiaLabel = new JLabel("Outer Dia.:"); + llPanel.add(llOuterDiaLabel, "cell 0 2,alignx left"); + + llOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(llOuterDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + llPanel.add(spin, "cell 1 2, growx"); + llPanel.add(new UnitSelector(llOuterDia), "growx"); + + JLabel llInnerDiaLabel = new JLabel("Inner Dia.:"); + llPanel.add(llInnerDiaLabel, "cell 3 2,alignx left"); + + llInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(llInnerDia.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + llPanel.add(spin, "cell 4 2, growx"); + llPanel.add(new UnitSelector(llInnerDia), "w 34lp!"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + llPanel.add(panel, "cell 4 3"); + panel.setLayout(null); + llImageBtn = new JButton("No Image"); + llImageBtn.setMaximumSize(new Dimension(75, 75)); + llImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(llImageBtn); + llImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + llImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + llImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + llImageBtn.setIcon(llImage); + } + } + }); + } + + { + JPanel stPanel = new JPanel(); + componentOverlayPanel.add(stPanel, "STREAMER"); + stPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); + JLabel stPartNoLabel = new JLabel("Part No:"); + stPanel.add(stPartNoLabel, "cell 0 0,alignx left"); + + stPartNoTextField = new JTextField(); + stPanel.add(stPartNoTextField, "cell 1 0,growx"); + stPartNoTextField.setColumns(10); + + JLabel stDescLabel = new JLabel("Description:"); + stPanel.add(stDescLabel, "cell 3 0,alignx left"); + + stDescTextField = new JTextField(); + stPanel.add(stDescTextField, "cell 4 0,growx"); + stDescTextField.setColumns(10); + + JLabel stLengthLabel = new JLabel("Length:"); + stPanel.add(stLengthLabel, "cell 0 1,alignx left"); + + stLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + JSpinner spin = new JSpinner(stLength.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + stPanel.add(spin, "cell 1 1, growx"); + stPanel.add(new UnitSelector(stLength), "growx"); + + JLabel stMassLabel = new JLabel("Mass:"); + stPanel.add(stMassLabel, "cell 3 1,alignx left"); + + stMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + spin = new JSpinner(stMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + stPanel.add(spin, "cell 4 1, growx"); + stPanel.add(new UnitSelector(stMass), "growx"); + + JLabel stThicknessLabel = new JLabel("Thickness:"); + stPanel.add(stThicknessLabel, "cell 0 2,alignx left"); + + stThickness = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(stThickness.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + stPanel.add(spin, "cell 1 2, growx"); + stPanel.add(new UnitSelector(stThickness), "growx"); + + JLabel stWidthLabel = new JLabel("Width:"); + stPanel.add(stWidthLabel, "cell 3 2,alignx left"); + + stWidth = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(stWidth.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + stPanel.add(spin, "cell 4 2, growx"); + stPanel.add(new UnitSelector(stWidth), "growx"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + stPanel.add(panel, "cell 4 3"); + panel.setLayout(null); + stImageBtn = new JButton("No Image"); + stImageBtn.setMaximumSize(new Dimension(75, 75)); + stImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(stImageBtn); + stImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + stImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + stImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + stImageBtn.setIcon(stImage); + } + } + }); + } + + { + JPanel pcPanel = new JPanel(); + componentOverlayPanel.add(pcPanel, "PARACHUTE"); + pcPanel.setLayout(new MigLayout("", "[][157.00,grow 79][65.00][grow][][]", "[][][][][][]")); + JLabel pcPartNoLabel = new JLabel("Part No:"); + pcPanel.add(pcPartNoLabel, "cell 0 0,alignx left"); + + pcPartNoTextField = new JTextField(); + pcPanel.add(pcPartNoTextField, "cell 1 0,growx"); + pcPartNoTextField.setColumns(10); + + JLabel pcDescLabel = new JLabel("Description:"); + pcPanel.add(pcDescLabel, "cell 3 0,alignx left"); + + pcDescTextField = new JTextField(); + pcPanel.add(pcDescTextField, "cell 4 0,growx"); + pcDescTextField.setColumns(10); + + JLabel pcSidesLabel = new JLabel("Sides:"); + pcPanel.add(pcSidesLabel, "cell 0 1,alignx left"); + + pcSides = new JTextField(); + pcPanel.add(pcSides, "cell 1 1, growx"); + pcSides.setInputVerifier(NON_NEGATIVE_INTEGER); + pcSides.setColumns(10); + + JLabel pcMassLabel = new JLabel("Mass:"); + pcPanel.add(pcMassLabel, "cell 3 1,alignx left"); + + pcMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0); + JSpinner spin = new JSpinner(pcMass.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + pcPanel.add(spin, "cell 4 1, growx"); + pcPanel.add(new UnitSelector(pcMass), "growx"); + + JLabel pcDiameterLabel = new JLabel("Diameter:"); + pcPanel.add(pcDiameterLabel, "cell 0 2,alignx left"); + + pcDiameter = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(pcDiameter.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + pcPanel.add(spin, "cell 1 2, growx"); + pcPanel.add(new UnitSelector(pcDiameter)); + + JLabel pcLineLengthLabel = new JLabel("Line Length:"); + pcPanel.add(pcLineLengthLabel, "cell 3 2,alignx left"); + + pcLineLength = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0); + spin = new JSpinner(pcLineLength.getSpinnerModel()); + spin.setEditor(new SpinnerEditor(spin)); + pcPanel.add(spin, "cell 4 2, growx"); + pcPanel.add(new UnitSelector(pcLineLength), "growx"); + + JLabel pcLineCountLabel = new JLabel("Line Count:"); + pcPanel.add(pcLineCountLabel, "cell 3 3,alignx left"); + + pcLineCount = new JTextField(); + pcLineCount.setInputVerifier(NON_NEGATIVE_INTEGER); + pcPanel.add(pcLineCount, "cell 4 3, growx"); + pcLineCount.setColumns(10); + + JLabel pcLineMaterialLabel = new JLabel("Line Material:"); + pcPanel.add(pcLineMaterialLabel, "cell 3 4,alignx left, aligny top, pad 7 0 0 0 "); + + pcLineMaterialChooser = new MaterialChooser(); + pcLineMaterialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.LINE)); + pcPanel.add(pcLineMaterialChooser, "cell 4 4, span 3 1, growx, aligny top"); + + JPanel panel = new JPanel(); + panel.setMinimumSize(new Dimension(200, 200)); + pcPanel.add(panel, "cell 1 3, span 1 3"); + panel.setLayout(null); + pcImageBtn = new JButton("No Image"); + pcImageBtn.setMaximumSize(new Dimension(75, 75)); + pcImageBtn.setMinimumSize(new Dimension(75, 75)); + panel.add(pcImageBtn); + pcImageBtn.setBounds(new Rectangle(6, 6, 132, 145)); + + pcImageBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = imageChooser.getSelectedFile(); + pcImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155); + pcImageBtn.setIcon(pcImage); + } + } + }); + } + + JPanel buttonPane = new JPanel(); + getContentPane().add(buttonPane, BorderLayout.SOUTH); + buttonPane.setLayout(new MigLayout("", "[130px][176.00px][131.00px]", "[29px]")); + JButton btnSaveAndNew = new JButton("Save and New"); + btnSaveAndNew.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent arg0) { + saveResult(); + } + }); + buttonPane.add(btnSaveAndNew, "cell 0 0,alignx left,aligny top"); + + JButton okButton = new JButton("Save and Close"); + okButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent event) { + if (saveResult()) { + dispose(); + } + } + }); + okButton.setActionCommand("OK"); + buttonPane.add(okButton, "cell 1 0,alignx left,aligny top"); + getRootPane().setDefaultButton(okButton); + + JButton cancelButton = new JButton("Close"); + cancelButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent event) { + dispose(); + } + }); + cancelButton.setActionCommand("Close"); + buttonPane.add(cancelButton, "cell 6 0,alignx right,aligny top"); + + if (toEdit != null) { + fillEditor(toEdit, matHolder); + } + holder = matHolder; + } + + /** + * When an existing preset is edited, we want to disable the other types of presets. If the user wants a different + * type of component, then they should delete this one and add a new one. + * + * @param cb the combo box component + * @param preset the preset being edited + */ + private void setItems(DeselectableComboBox cb, ComponentPreset preset) { + cb.addItem(trans.get(NOSE_CONE_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.NOSE_CONE)); + cb.addItem(trans.get(BODY_TUBE_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.BODY_TUBE)); + cb.addItem(trans.get(BULKHEAD_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.BULK_HEAD)); + cb.addItem(trans.get(CR_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.CENTERING_RING)); + cb.addItem(trans.get(EB_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.ENGINE_BLOCK)); + cb.addItem(trans.get(TRANSITION_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.TRANSITION)); + cb.addItem(trans.get(TUBE_COUPLER_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.TUBE_COUPLER)); + cb.addItem(trans.get(LAUNCH_LUG_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.LAUNCH_LUG)); + cb.addItem(trans.get(PARACHUTE_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.PARACHUTE)); + cb.addItem(trans.get(STREAMER_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.STREAMER)); + } + + /** + * Create an image chooser. Currently png and jpg are supported. + * + * @return a file chooser that looks for image files + */ + private JFileChooser createImageChooser() { + final JFileChooser chooser = new JFileChooser(); + ImagePreviewPanel preview = new ImagePreviewPanel(); + chooser.setAccessory(preview); + chooser.addPropertyChangeListener(preview); + chooser.setAcceptAllFileFilterUsed(false); + chooser.addChoosableFileFilter(new FileNameExtensionFilter("Image Files", "png", "jpg", "jpeg")); + return chooser; + } + + /** + * To support editing of an existing preset, the swing components need to be prepopulated with the field data. + * + * @param preset the preset to edit + */ + private void fillEditor(ComponentPreset preset, MaterialHolder holder) { + ComponentPreset.Type t = preset.getType(); + + mfgTextField.setText(preset.get(ComponentPreset.MANUFACTURER).getDisplayName()); + setMaterial(materialChooser, preset, holder, Material.Type.BULK, ComponentPreset.MATERIAL); + switch (t) { + case BODY_TUBE: + typeCombo.setSelectedItem(trans.get(BODY_TUBE_KEY)); + btDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + + if (preset.has(ComponentPreset.INNER_DIAMETER)) { + btInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); + btInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.LENGTH)) { + btLength.setValue(preset.get(ComponentPreset.LENGTH)); + btLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.MASS)) { + btMass.setValue(preset.get(ComponentPreset.MASS)); + btMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.OUTER_DIAMETER)) { + btOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); + btOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.IMAGE)) { + btImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + btImageBtn.setIcon(btImage); + } + btPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + break; + case BULK_HEAD: + typeCombo.setSelectedItem(trans.get(BULKHEAD_KEY)); + bhDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + if (preset.has(ComponentPreset.LENGTH)) { + bhLength.setValue(preset.get(ComponentPreset.LENGTH)); + bhLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.MASS)) { + bhMass.setValue(preset.get(ComponentPreset.MASS)); + bhMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.OUTER_DIAMETER)) { + bhOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); + bhOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.IMAGE)) { + bhImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + bhImageBtn.setIcon(bhImage); + } + bhPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + break; + case CENTERING_RING: + typeCombo.setSelectedItem(trans.get(CR_KEY)); + crDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + if (preset.has(ComponentPreset.INNER_DIAMETER)) { + crInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); + crInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.LENGTH)) { + crThickness.setValue(preset.get(ComponentPreset.LENGTH)); + crThickness.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.MASS)) { + crMass.setValue(preset.get(ComponentPreset.MASS)); + crMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.OUTER_DIAMETER)) { + crOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); + crOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.IMAGE)) { + crImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + crImageBtn.setIcon(crImage); + } + crPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + break; + case ENGINE_BLOCK: + typeCombo.setSelectedItem(trans.get(EB_KEY)); + ebDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + if (preset.has(ComponentPreset.INNER_DIAMETER)) { + ebInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); + ebInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.LENGTH)) { + ebThickness.setValue(preset.get(ComponentPreset.LENGTH)); + ebThickness.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.MASS)) { + ebMass.setValue(preset.get(ComponentPreset.MASS)); + ebMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.OUTER_DIAMETER)) { + ebOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); + ebOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.IMAGE)) { + ebImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + ebImageBtn.setIcon(ebImage); + } + ebPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + break; + case NOSE_CONE: + typeCombo.setSelectedItem(trans.get(NOSE_CONE_KEY)); + ncDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + if (preset.has(ComponentPreset.AFT_OUTER_DIAMETER)) { + ncAftDia.setValue(preset.get(ComponentPreset.AFT_OUTER_DIAMETER)); + ncAftDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.AFT_SHOULDER_DIAMETER)) { + ncAftShoulderDia.setValue(preset.get(ComponentPreset.AFT_SHOULDER_DIAMETER)); + ncAftShoulderDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.AFT_SHOULDER_LENGTH)) { + ncAftShoulderLen.setValue(preset.get(ComponentPreset.AFT_SHOULDER_LENGTH)); + ncAftShoulderLen.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.MASS)) { + ncMass.setValue(preset.get(ComponentPreset.MASS)); + ncMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.SHAPE)) { + ncShapeCB.setSelectedItem(preset.get(ComponentPreset.SHAPE).toString()); + } + if (preset.has(ComponentPreset.FILLED)) { + ncFilledCB.setSelected((preset.get(ComponentPreset.FILLED))); + } + if (preset.has(ComponentPreset.LENGTH)) { + ncLength.setValue(preset.get(ComponentPreset.LENGTH)); + ncLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.IMAGE)) { + ncImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + ncImageBtn.setIcon(ncImage); + } + ncPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + break; + case TRANSITION: + typeCombo.setSelectedItem(trans.get(TRANSITION_KEY)); + trDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + if (preset.has(ComponentPreset.AFT_OUTER_DIAMETER)) { + trAftDia.setValue(preset.get(ComponentPreset.AFT_OUTER_DIAMETER)); + trAftDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.AFT_SHOULDER_DIAMETER)) { + trAftShoulderDia.setValue(preset.get(ComponentPreset.AFT_SHOULDER_DIAMETER)); + trAftShoulderDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.AFT_SHOULDER_LENGTH)) { + trAftShoulderLen.setValue(preset.get(ComponentPreset.AFT_SHOULDER_LENGTH)); + trAftShoulderLen.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.FORE_OUTER_DIAMETER)) { + trForeDia.setValue(preset.get(ComponentPreset.FORE_OUTER_DIAMETER)); + trForeDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.FORE_SHOULDER_DIAMETER)) { + trForeShoulderDia.setValue(preset.get(ComponentPreset.FORE_SHOULDER_DIAMETER)); + trForeShoulderDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.FORE_SHOULDER_LENGTH)) { + trForeShoulderLen.setValue(preset.get(ComponentPreset.FORE_SHOULDER_LENGTH)); + trForeShoulderLen.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.MASS)) { + trMass.setValue(preset.get(ComponentPreset.MASS)); + trMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.SHAPE)) { + trShapeCB.setSelectedItem(preset.get(ComponentPreset.SHAPE).toString()); + } + if (preset.has(ComponentPreset.FILLED)) { + trFilledCB.setSelected((preset.get(ComponentPreset.FILLED))); + } + if (preset.has(ComponentPreset.LENGTH)) { + trLength.setValue(preset.get(ComponentPreset.LENGTH)); + trLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.IMAGE)) { + trImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + trImageBtn.setIcon(trImage); + } + trPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + break; + case TUBE_COUPLER: + typeCombo.setSelectedItem(trans.get(TUBE_COUPLER_KEY)); + tcDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + if (preset.has(ComponentPreset.INNER_DIAMETER)) { + tcInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); + tcInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.LENGTH)) { + tcLength.setValue(preset.get(ComponentPreset.LENGTH)); + tcLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.MASS)) { + tcMass.setValue(preset.get(ComponentPreset.MASS)); + tcMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.OUTER_DIAMETER)) { + tcOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); + tcOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + tcPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + if (preset.has(ComponentPreset.IMAGE)) { + tcImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + tcImageBtn.setIcon(tcImage); + } + break; + case LAUNCH_LUG: + typeCombo.setSelectedItem(trans.get(LAUNCH_LUG_KEY)); + llDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + if (preset.has(ComponentPreset.INNER_DIAMETER)) { + llInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER)); + llInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.LENGTH)) { + llLength.setValue(preset.get(ComponentPreset.LENGTH)); + llLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.MASS)) { + llMass.setValue(preset.get(ComponentPreset.MASS)); + llMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.OUTER_DIAMETER)) { + llOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER)); + llOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + llPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + if (preset.has(ComponentPreset.IMAGE)) { + llImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + llImageBtn.setIcon(llImage); + } + break; + case PARACHUTE: + setMaterial(materialChooser, preset, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL); + typeCombo.setSelectedItem(trans.get(PARACHUTE_KEY)); + pcDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + if (preset.has(ComponentPreset.LINE_COUNT)) { + pcLineCount.setText(preset.get(ComponentPreset.LINE_COUNT).toString()); + } + if (preset.has(ComponentPreset.SIDES)) { + pcSides.setText(preset.get(ComponentPreset.SIDES).toString()); + } + if (preset.has(ComponentPreset.MASS)) { + pcMass.setValue(preset.get(ComponentPreset.MASS)); + pcMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.DIAMETER)) { + pcDiameter.setValue(preset.get(ComponentPreset.DIAMETER)); + pcDiameter.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.LINE_LENGTH)) { + pcLineLength.setValue(preset.get(ComponentPreset.LINE_LENGTH)); + pcLineLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + pcPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + if (preset.has(ComponentPreset.IMAGE)) { + pcImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + pcImageBtn.setIcon(pcImage); + } + setMaterial(pcLineMaterialChooser, preset, holder, Material.Type.LINE, ComponentPreset.LINE_MATERIAL); + // pcLineMaterialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.LINE)); + + // pcLineMaterialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.LINE_MATERIAL)); + break; + case STREAMER: + setMaterial(materialChooser, preset, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL); + typeCombo.setSelectedItem(trans.get(STREAMER_KEY)); + stDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); + if (preset.has(ComponentPreset.LENGTH)) { + stLength.setValue(preset.get(ComponentPreset.LENGTH)); + stLength.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.THICKNESS)) { + stThickness.setValue(preset.get(ComponentPreset.LENGTH)); + stThickness.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.MASS)) { + stMass.setValue(preset.get(ComponentPreset.MASS)); + stMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit()); + } + if (preset.has(ComponentPreset.WIDTH)) { + stWidth.setValue(preset.get(ComponentPreset.WIDTH)); + stWidth.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + if (preset.has(ComponentPreset.IMAGE)) { + stImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); + stImageBtn.setIcon(stImage); + } + stPartNoTextField.setText(preset.get(ComponentPreset.PARTNO)); + break; + default: + } + } + + private void setMaterial(final JComboBox chooser, final ComponentPreset preset, final MaterialHolder holder, + final Material.Type theType, final TypedKey key) { + if (holder == null) { + chooser.setModel(new MaterialModel(PresetEditorDialog.this, theType)); + } + else { + chooser.setModel(new MaterialModel(PresetEditorDialog.this, theType, + holder.asDatabase(theType))); + } + if (preset != null) { + chooser.getModel().setSelectedItem(preset.get(key)); + } + } + + /** + * Extract the preset data from the UI fields, create a ComponentPreset instance, and notify the listener. + */ + private boolean saveResult() { + String type = (String) typeCombo.getSelectedItem(); + + ComponentPreset result = null; + + if (type.equals(trans.get(NOSE_CONE_KEY))) { + result = extractNoseCone(); + if (result != null) { + clearNoseCone(); + } + } + else if (type.equals(trans.get(TRANSITION_KEY))) { + result = extractTransition(); + if (result != null) { + clearTransition(); + } + } + else if (type.equals(trans.get(BODY_TUBE_KEY))) { + result = extractBodyTube(); + if (result != null) { + clearBodyTube(); + } + } + else if (type.equals(trans.get(TUBE_COUPLER_KEY))) { + result = extractTubeCoupler(); + if (result != null) { + clearTubeCoupler(); + } + } + else if (type.equals(trans.get(EB_KEY))) { + result = extractEngineBlock(); + if (result != null) { + clearEngineBlock(); + } + } + else if (type.equals(trans.get(CR_KEY))) { + result = extractCenteringRing(); + if (result != null) { + clearCenteringRing(); + } + } + else if (type.equals(trans.get(BULKHEAD_KEY))) { + result = extractBulkhead(); + if (result != null) { + clearBulkhead(); + } + } + else if (type.equals(trans.get(LAUNCH_LUG_KEY))) { + result = extractLaunchLug(); + if (result != null) { + clearLaunchLug(); + } + } + else if (type.equals(trans.get(PARACHUTE_KEY))) { + result = extractParachute(); + if (result != null) { + clearParachute(); + } + } + else if (type.equals(trans.get(STREAMER_KEY))) { + result = extractStreamer(); + if (result != null) { + clearStreamer(); + } + } + if (result != null) { + resultListener.notifyResult(result); + return true; + } + else { + return false; + } + } + + private ComponentPreset extractNoseCone() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.NOSE_CONE); + props.put(ComponentPreset.AFT_OUTER_DIAMETER, ncAftDia.getValue()); + props.put(ComponentPreset.AFT_SHOULDER_DIAMETER, ncAftShoulderDia.getValue()); + props.put(ComponentPreset.AFT_SHOULDER_LENGTH, ncAftShoulderLen.getValue()); + props.put(ComponentPreset.DESCRIPTION, ncDescTextField.getText()); + props.put(ComponentPreset.PARTNO, ncPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + props.put(ComponentPreset.LENGTH, ncLength.getValue()); + props.put(ComponentPreset.SHAPE, Transition.Shape.toShape((String) ncShapeCB.getSelectedItem())); + final Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + props.put(ComponentPreset.MASS, ncMass.getValue()); + props.put(ComponentPreset.FILLED, ncFilledCB.isSelected()); + if (ncImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(ncImage.getImage())); + } + + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert nose cone attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory nose cone attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearNoseCone() { + ncAftDia.setValue(0); + ncAftShoulderDia.setValue(0); + ncAftShoulderLen.setValue(0); + ncDescTextField.setText(""); + ncPartNoTextField.setText(""); + ncLength.setValue(0); + ncMass.setValue(0); + ncFilledCB.setSelected(false); + ncImage = null; + ncImageBtn.setIcon(null); + } + + private ComponentPreset extractTransition() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION); + props.put(ComponentPreset.AFT_OUTER_DIAMETER, trAftDia.getValue()); + props.put(ComponentPreset.AFT_SHOULDER_DIAMETER, trAftShoulderDia.getValue()); + props.put(ComponentPreset.AFT_SHOULDER_LENGTH, trAftShoulderLen.getValue()); + props.put(ComponentPreset.FORE_OUTER_DIAMETER, trForeDia.getValue()); + props.put(ComponentPreset.FORE_SHOULDER_DIAMETER, trForeShoulderDia.getValue()); + props.put(ComponentPreset.FORE_SHOULDER_LENGTH, trForeShoulderLen.getValue()); + props.put(ComponentPreset.DESCRIPTION, trDescTextField.getText()); + props.put(ComponentPreset.PARTNO, trPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + + props.put(ComponentPreset.LENGTH, trLength.getValue()); + props.put(ComponentPreset.SHAPE, Transition.Shape.toShape((String) trShapeCB.getSelectedItem())); + final Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + props.put(ComponentPreset.MASS, trMass.getValue()); + props.put(ComponentPreset.FILLED, trFilledCB.isSelected()); + if (trImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(trImage.getImage())); + } + + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert transition attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory transition attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearTransition() { + trAftDia.setValue(0); + trAftShoulderDia.setValue(0); + trAftShoulderLen.setValue(0); + trForeDia.setValue(0); + trForeShoulderDia.setValue(0); + trForeShoulderLen.setValue(0); + trDescTextField.setText(""); + trPartNoTextField.setText(""); + trLength.setValue(0); + trMass.setValue(0); + trFilledCB.setSelected(false); + trImage = null; + trImageBtn.setIcon(null); + } + + private ComponentPreset extractBodyTube() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.BODY_TUBE); + props.put(ComponentPreset.OUTER_DIAMETER, btOuterDia.getValue()); + props.put(ComponentPreset.INNER_DIAMETER, btInnerDia.getValue()); + props.put(ComponentPreset.DESCRIPTION, btDescTextField.getText()); + props.put(ComponentPreset.PARTNO, btPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + props.put(ComponentPreset.LENGTH, btLength.getValue()); + final Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + props.put(ComponentPreset.MASS, btMass.getValue()); + if (btImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(btImage.getImage())); + } + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert body tube attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory body tube attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearBodyTube() { + btOuterDia.setValue(0); + btInnerDia.setValue(0); + btDescTextField.setText(""); + btPartNoTextField.setText(""); + btLength.setValue(0); + btMass.setValue(0); + btImage = null; + btImageBtn.setIcon(null); + } + + public ComponentPreset extractTubeCoupler() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.TUBE_COUPLER); + props.put(ComponentPreset.OUTER_DIAMETER, tcOuterDia.getValue()); + props.put(ComponentPreset.INNER_DIAMETER, tcInnerDia.getValue()); + props.put(ComponentPreset.DESCRIPTION, tcDescTextField.getText()); + props.put(ComponentPreset.PARTNO, tcPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + props.put(ComponentPreset.LENGTH, tcLength.getValue()); + final Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + props.put(ComponentPreset.MASS, tcMass.getValue()); + if (tcImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(tcImage.getImage())); + } + + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert tube coupler attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory tube coupler attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearTubeCoupler() { + tcOuterDia.setValue(0); + tcInnerDia.setValue(0); + tcDescTextField.setText(""); + tcPartNoTextField.setText(""); + tcLength.setValue(0); + tcMass.setValue(0); + tcImage = null; + tcImageBtn.setIcon(null); + } + + private ComponentPreset extractBulkhead() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.BULK_HEAD); + props.put(ComponentPreset.OUTER_DIAMETER, bhOuterDia.getValue()); + props.put(ComponentPreset.DESCRIPTION, bhDescTextField.getText()); + props.put(ComponentPreset.PARTNO, bhPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + props.put(ComponentPreset.LENGTH, bhLength.getValue()); + final Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + props.put(ComponentPreset.MASS, bhMass.getValue()); + if (bhImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(bhImage.getImage())); + } + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert bulkhead attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory bulkhead attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearBulkhead() { + bhOuterDia.setValue(0); + bhDescTextField.setText(""); + bhPartNoTextField.setText(""); + bhLength.setValue(0); + bhMass.setValue(0); + bhImage = null; + bhImageBtn.setIcon(null); + } + + private ComponentPreset extractCenteringRing() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.CENTERING_RING); + props.put(ComponentPreset.OUTER_DIAMETER, crOuterDia.getValue()); + props.put(ComponentPreset.INNER_DIAMETER, crInnerDia.getValue()); + props.put(ComponentPreset.DESCRIPTION, crDescTextField.getText()); + props.put(ComponentPreset.PARTNO, crPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + props.put(ComponentPreset.LENGTH, crThickness.getValue()); + final Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + props.put(ComponentPreset.MASS, crMass.getValue()); + if (crImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(crImage.getImage())); + } + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert centering ring attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory centering ring attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearCenteringRing() { + crOuterDia.setValue(0); + crInnerDia.setValue(0); + crDescTextField.setText(""); + crPartNoTextField.setText(""); + crThickness.setValue(0); + crMass.setValue(0); + crImage = null; + crImageBtn.setIcon(null); + } + + public ComponentPreset extractEngineBlock() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.ENGINE_BLOCK); + props.put(ComponentPreset.OUTER_DIAMETER, ebOuterDia.getValue()); + props.put(ComponentPreset.INNER_DIAMETER, ebInnerDia.getValue()); + props.put(ComponentPreset.DESCRIPTION, ebDescTextField.getText()); + props.put(ComponentPreset.PARTNO, ebPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + props.put(ComponentPreset.LENGTH, ebThickness.getValue()); + final Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + props.put(ComponentPreset.MASS, ebMass.getValue()); + if (ebImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(ebImage.getImage())); + } + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert engine block attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory engine block attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearEngineBlock() { + ebOuterDia.setValue(0); + ebInnerDia.setValue(0); + ebDescTextField.setText(""); + ebPartNoTextField.setText(""); + ebThickness.setValue(0); + ebMass.setValue(0); + ebImage = null; + ebImageBtn.setIcon(null); + } + + public ComponentPreset extractLaunchLug() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.LAUNCH_LUG); + props.put(ComponentPreset.OUTER_DIAMETER, llOuterDia.getValue()); + props.put(ComponentPreset.INNER_DIAMETER, llInnerDia.getValue()); + props.put(ComponentPreset.DESCRIPTION, llDescTextField.getText()); + props.put(ComponentPreset.PARTNO, llPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + props.put(ComponentPreset.LENGTH, llLength.getValue()); + final Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + props.put(ComponentPreset.MASS, llMass.getValue()); + if (llImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(llImage.getImage())); + } + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert launch lug attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory launch lug attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearLaunchLug() { + llOuterDia.setValue(0); + llInnerDia.setValue(0); + llDescTextField.setText(""); + llPartNoTextField.setText(""); + llLength.setValue(0); + llMass.setValue(0); + llImage = null; + llImageBtn.setIcon(null); + } + + public ComponentPreset extractParachute() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.PARACHUTE); + props.put(ComponentPreset.DIAMETER, pcDiameter.getValue()); + props.put(ComponentPreset.DESCRIPTION, pcDescTextField.getText()); + props.put(ComponentPreset.PARTNO, pcPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + if (!pcLineCount.getText().equals("")) { + props.put(ComponentPreset.LINE_COUNT, Integer.parseInt(pcLineCount.getText())); + } + if (!pcSides.getText().equals("")) { + props.put(ComponentPreset.SIDES, Integer.parseInt(pcSides.getText())); + } + props.put(ComponentPreset.LINE_LENGTH, pcLineLength.getValue()); + Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + material = (Material) pcLineMaterialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.LINE_MATERIAL, material); + } + props.put(ComponentPreset.MASS, pcMass.getValue()); + if (pcImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(pcImage.getImage())); + } + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert parachute attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory parachute attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearParachute() { + ebOuterDia.setValue(0); + ebInnerDia.setValue(0); + ebDescTextField.setText(""); + ebPartNoTextField.setText(""); + ebThickness.setValue(0); + ebMass.setValue(0); + ebImage = null; + ebImageBtn.setIcon(null); + } + + public ComponentPreset extractStreamer() { + TypedPropertyMap props = new TypedPropertyMap(); + try { + props.put(ComponentPreset.TYPE, ComponentPreset.Type.STREAMER); + props.put(ComponentPreset.DESCRIPTION, stDescTextField.getText()); + props.put(ComponentPreset.PARTNO, stPartNoTextField.getText()); + props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText())); + props.put(ComponentPreset.THICKNESS, stThickness.getValue()); + props.put(ComponentPreset.LENGTH, stLength.getValue()); + props.put(ComponentPreset.WIDTH, stWidth.getValue()); + final Material material = (Material) materialChooser.getSelectedItem(); + if (material != null) { + props.put(ComponentPreset.MATERIAL, material); + } + else { + JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE); + return null; + } + props.put(ComponentPreset.MASS, stMass.getValue()); + if (stImage != null) { + props.put(ComponentPreset.IMAGE, imageToByteArray(stImage.getImage())); + } + return ComponentPresetFactory.create(props); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(null, "Could not convert engine block attribute.", "Error", JOptionPane.ERROR_MESSAGE); + } catch (InvalidComponentPresetException e) { + JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory engine block attribute not set."), "Error", JOptionPane.ERROR_MESSAGE); + } + return null; + } + + private void clearStreamer() { + stWidth.setValue(0); + stLength.setValue(0); + stDescTextField.setText(""); + stPartNoTextField.setText(""); + stThickness.setValue(0); + stMass.setValue(0); + stImage = null; + stImageBtn.setIcon(null); + } + + @Override + public void itemStateChanged(ItemEvent evt) { + CardLayout cl = (CardLayout) (componentOverlayPanel.getLayout()); + final String item = (String) evt.getItem(); + if (materialChooser != null && evt.getStateChange() == ItemEvent.SELECTED) { + if (item.equals(trans.get(PARACHUTE_KEY)) || item.equals(trans.get(STREAMER_KEY))) { + if (!((MaterialModel) materialChooser.getModel()).getType().equals(Material.Type.SURFACE)) { + setMaterial(materialChooser, null, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL); + } + } + else { + if (!((MaterialModel) materialChooser.getModel()).getType().equals(Material.Type.BULK)) { + setMaterial(materialChooser, null, holder, Material.Type.BULK, ComponentPreset.MATERIAL); + } + } + } + cl.show(componentOverlayPanel, componentMap.get(item)); + } + + //Todo: I18N + private String craftErrorMessage(InvalidComponentPresetException e, String baseMsg) { + StringBuilder stringBuilder = new StringBuilder(); + List invalids = e.getErrors(); + stringBuilder.append(baseMsg).append("\n"); + for (int i = 0; i < invalids.size(); i++) { + String s = invalids.get(i); + stringBuilder.append(s).append("\n"); + } + + return stringBuilder.toString(); + } + + /** + * Convert an image to a byte array in png format. + * + * @param originalImage + * + * @return + */ + private byte[] imageToByteArray(Image originalImage) { + byte[] imageInByte = null; + try { + BufferedImage bi = imageToBufferedImage(originalImage); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(bi, "png", baos); + baos.flush(); + imageInByte = baos.toByteArray(); + baos.close(); + } catch (IOException e) { + log.error("Could not read image."); + } + return imageInByte; + } + + private BufferedImage imageToBufferedImage(final Image originalImage) { + BufferedImage bi = new BufferedImage(originalImage.getWidth(null), originalImage.getHeight(null), BufferedImage.TYPE_INT_RGB); + + Graphics2D g2 = bi.createGraphics(); + g2.drawImage(originalImage, 0, 0, null); + return bi; + } + + private BufferedImage byteArrayToImage(byte[] src) { + // convert byte array back to BufferedImage + InputStream in = new ByteArrayInputStream(src); + try { + return ImageIO.read(in); + } catch (IOException e) { + log.error("Could not convert image."); + } + return null; + } + + private ImageIcon scaleImage(Image image, int targetDimension) { + int width = image.getWidth(this); + int height = image.getHeight(this); + double ratio = 1.0; + + /* + * Determine how to scale the image. Since the accessory can expand + * vertically make sure we don't go larger than 150 when scaling + * vertically. + */ + if (width >= height) { + ratio = (double) (targetDimension - 5) / width; + width = targetDimension - 5; + height = (int) (height * ratio); + } + else { + if (getHeight() > 150) { + ratio = (double) (targetDimension - 5) / height; + height = targetDimension - 5; + width = (int) (width * ratio); + } + else { + ratio = (double) getHeight() / height; + height = getHeight(); + width = (int) (width * ratio); + } + } + + return new ImageIcon(image.getScaledInstance(width, height, Image.SCALE_DEFAULT)); + } + + static class PresetInputVerifier extends InputVerifier { + + /** + * Matches user input against a regular expression. + */ + private Matcher matcher; + + PresetInputVerifier(final Pattern thePattern) { + matcher = thePattern.matcher(""); + } + + /** + * Return true only if the untrimmed user input matches the regular expression provided to the constructor. + * + * @param aComponent must be an instance of JTextComponent. + */ + @Override + public boolean verify(JComponent aComponent) { + JTextComponent textComponent = (JTextComponent) aComponent; + String text = textComponent.getText(); + matcher.reset(text); + return matcher.matches(); + } + + /** + * Always returns true, in this implementation, such that focus can always transfer to another + * component whenever the validation fails. + *

+ *

If super.shouldYieldFocus returns false, then clear the text field. + * + * @param aComponent is a JTextComponent. + */ + @Override + public boolean shouldYieldFocus(JComponent aComponent) { + if (!super.shouldYieldFocus(aComponent)) { + ((JTextComponent) aComponent).setText(""); + } + return true; + } + } + + class MaterialChooser extends JComboBox { + + public MaterialChooser() { + } + + public MaterialChooser(MaterialModel model) { + super(model); + } + + /** + * Sets the data model that the JComboBox uses to obtain the list of items. + * + * @param aModel the ComboBoxModel that provides the displayed list of items + * + * @beaninfo bound: true description: Model that the combo box uses to get data to display. + */ + @Override + public void setModel(final ComboBoxModel aModel) { + if (getModel() instanceof MaterialModel) { + MaterialModel old = (MaterialModel) getModel(); + old.removeListener(); + } + super.setModel(aModel); + + } + } }