Make the preset combo box display empty when the preset is lost due to changes in...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Fri, 30 Mar 2012 21:09:52 +0000 (21:09 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Fri, 30 Mar 2012 21:09:52 +0000 (21:09 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@494 180e2498-e6e9-4542-8430-84ac67f01cd8

core/src/net/sf/openrocket/gui/adaptors/BodyTubePresetModel.java
core/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java

index ff73bf601ed53a29a41c87a7842f7a36d214d95b..1f46062ac1a85f9fda5f75426affe232fcdcd7bd 100644 (file)
@@ -4,16 +4,12 @@ import java.util.List;
 
 import javax.swing.AbstractListModel;
 import javax.swing.ComboBoxModel;
-import javax.swing.event.ListDataListener;
 
 import net.sf.openrocket.preset.ComponentPreset;
-import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
-import net.sf.openrocket.rocketcomponent.ComponentChangeListener;
 import net.sf.openrocket.rocketcomponent.RocketComponent;
 import net.sf.openrocket.startup.Application;
 
-public class BodyTubePresetModel extends AbstractListModel implements
-               ComboBoxModel, ComponentChangeListener {
+public class BodyTubePresetModel extends AbstractListModel implements ComboBoxModel {
 
        private final RocketComponent component;
 
@@ -25,13 +21,18 @@ public class BodyTubePresetModel extends AbstractListModel implements
        }
        
        public static class BodyTubePresetAdapter {
+               // If the ComponentPreset bt is null, then no preset is selected.
                private ComponentPreset bt;
                private BodyTubePresetAdapter( ComponentPreset bt ) {
                        this.bt = bt;
                }
                @Override
                public String toString() {
-                       return bt.getManufacturer() + " " + bt.getPartNo();
+                       if ( bt != null ) {
+                               return bt.getManufacturer() + " " + bt.getPartNo();
+                       } else {
+                               return "";
+                       }
                }
                @Override
                public int hashCode() {
@@ -65,31 +66,20 @@ public class BodyTubePresetModel extends AbstractListModel implements
 
        @Override
        public Object getElementAt(int index) {
+               if ( index < 0 ) {
+                       return null;
+               }
                return new BodyTubePresetAdapter(presets.get(index));
        }
 
-       @Override
-       public void addListDataListener(ListDataListener l) {
-               // TODO Auto-generated method stub
-
-       }
-
-       @Override
-       public void removeListDataListener(ListDataListener l) {
-               // TODO Auto-generated method stub
-
-       }
-
-       @Override
-       public void componentChanged(ComponentChangeEvent e) {
-               // TODO Auto-generated method stub
-
-       }
-
        @Override
        public void setSelectedItem(Object anItem) {
                BodyTubePresetAdapter selected = (BodyTubePresetAdapter) anItem;
-               component.loadPreset(selected.bt);
+               if ( selected == null ) {
+                       component.loadPreset(null);
+               } else {
+                       component.loadPreset(selected.bt);
+               }
        }
 
        @Override
index ffed6e73829f7edbd71cf713f58f9d07ef47002e..b026a45544876ca3c7eeb5e8a7983a234e9aacb5 100644 (file)
@@ -25,93 +25,93 @@ import net.sf.openrocket.startup.Application;
 import net.sf.openrocket.unit.UnitGroup;
 
 public class BodyTubeConfig extends RocketComponentConfig {
-       
+
        private ComponentChangeListener listener;
        private MotorConfig motorConfigPane = null;
+       private DoubleModel maxLength;
+       private JComboBox presetComboBox;
        private static final Translator trans = Application.getTranslator();
-       
+
        public BodyTubeConfig(OpenRocketDocument d, RocketComponent c) {
                super(d, c);
-               
+
                JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
-               
+
                ////  Body tube template
                panel.add( new JLabel(trans.get("BodyTubecfg.lbl.Bodytubepreset")) );
-               {
-               JComboBox combo = new JComboBox(new BodyTubePresetModel(component));
-               panel.add(combo, "wrap");
-               }
-               
+               presetComboBox = new JComboBox(new BodyTubePresetModel(component));
+               panel.add(presetComboBox, "wrap");
+
                ////  Body tube length
                panel.add(new JLabel(trans.get("BodyTubecfg.lbl.Bodytubelength")));
-               
-               final DoubleModel maxLength = new DoubleModel(2.0);
+
+               maxLength = new DoubleModel(2.0);
                DoubleModel length = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
-               
+
                JSpinner spin = new JSpinner(length.getSpinnerModel());
                spin.setEditor(new SpinnerEditor(spin));
                panel.add(spin, "growx");
-               
+
                panel.add(new UnitSelector(length), "growx");
                panel.add(new BasicSlider(length.getSliderModel(0, 0.5, maxLength)), "w 100lp, wrap");
-               
+
 
                //// Body tube diameter
                panel.add(new JLabel(trans.get("BodyTubecfg.lbl.Outerdiameter")));
-               
+
                DoubleModel od = new DoubleModel(component, "OuterRadius", 2, UnitGroup.UNITS_LENGTH, 0);
                // Diameter = 2*Radius
-               
+
                spin = new JSpinner(od.getSpinnerModel());
                spin.setEditor(new SpinnerEditor(spin));
                panel.add(spin, "growx");
-               
+
                panel.add(new UnitSelector(od), "growx");
                panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap 0px");
-               
+
                JCheckBox check = new JCheckBox(od.getAutomaticAction());
                //// Automatic
                check.setText(trans.get("BodyTubecfg.checkbox.Automatic"));
                panel.add(check, "skip, span 2, wrap");
-               
+
 
                ////  Inner diameter
                panel.add(new JLabel(trans.get("BodyTubecfg.lbl.Innerdiameter")));
-               
+
                // Diameter = 2*Radius
                DoubleModel m = new DoubleModel(component, "InnerRadius", 2, UnitGroup.UNITS_LENGTH, 0);
-               
+
 
                spin = new JSpinner(m.getSpinnerModel());
                spin.setEditor(new SpinnerEditor(spin));
                panel.add(spin, "growx");
-               
+
                panel.add(new UnitSelector(m), "growx");
                panel.add(new BasicSlider(m.getSliderModel(new DoubleModel(0), od)), "w 100lp, wrap");
-               
+
 
                ////  Wall thickness
                panel.add(new JLabel(trans.get("BodyTubecfg.lbl.Wallthickness")));
-               
+
                m = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0);
-               
+
                spin = new JSpinner(m.getSpinnerModel());
                spin.setEditor(new SpinnerEditor(spin));
                panel.add(spin, "growx");
-               
+
                panel.add(new UnitSelector(m), "growx");
                panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap 0px");
-               
+
                //// Filled
                check = new JCheckBox(new BooleanModel(component, "Filled"));
                check.setText(trans.get("BodyTubecfg.checkbox.Filled"));
                panel.add(check, "skip, span 2, wrap");
-               
+
 
                //// Material
                panel.add(materialPanel(new JPanel(new MigLayout()), Material.Type.BULK),
                                "cell 4 0, gapleft paragraph, aligny 0%, spany");
-               
+
                //// General and General properties
                tabbedPane.insertTab(trans.get("BodyTubecfg.tab.General"), null, panel,
                                trans.get("BodyTubecfg.tab.Generalproperties"), 0);
@@ -120,31 +120,22 @@ public class BodyTubeConfig extends RocketComponentConfig {
                tabbedPane.insertTab(trans.get("BodyTubecfg.tab.Motor"), null, motorConfigPane,
                                trans.get("BodyTubecfg.tab.Motormountconf"), 1);
                tabbedPane.setSelectedIndex(0);
-               
+
                // need to work in the max length for body tubes based on presets...
-               BodyTube bt = (BodyTube) component;
-               if ( bt.getPresetComponent() != null ) {
-                       BodyTube btPreset = (BodyTube) bt.getPresetComponent().getPrototype();
-                       maxLength.setValue( btPreset.getLength() );
-               }
+               adjustPresetState();
 
                listener = new ComponentChangeListener() {
 
                        @Override
                        public void componentChanged(ComponentChangeEvent e) {
-                               BodyTube bt = (BodyTube) component;
-                               if ( bt.getPresetComponent() != null ) {
-                                       BodyTube btPreset = (BodyTube) bt.getPresetComponent().getPrototype();
-                                       maxLength.setValue(btPreset.getLength());
-                               }
-                               
+                               adjustPresetState();
                        }
-                       
+
                };
                component.addChangeListener(listener);
-               
+
        }
-       
+
        @Override
        public void updateFields() {
                super.updateFields();
@@ -157,5 +148,19 @@ public class BodyTubeConfig extends RocketComponentConfig {
                super.invalidateModels();
                component.removeChangeListener(listener);
        }
-       
+
+       private void adjustPresetState() {
+               BodyTube bt = (BodyTube) component;
+               if ( bt.getPresetComponent() != null ) {
+                       BodyTube btPreset = (BodyTube) bt.getPresetComponent().getPrototype();
+                       maxLength.setValue( btPreset.getLength() );
+               } else {
+                       // here we should be able to force the preset combo box to display empty.
+                       // We set the selected index to -1 (undefined), then force a repaint.
+                       presetComboBox.setSelectedIndex(-1);
+                       presetComboBox.repaint();
+                       maxLength.setValue(2.0);
+               }
+       }
+
 }