diff --git a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java index e0949a142..677e5778b 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java @@ -5,6 +5,8 @@ import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.document.OpenRocketDocument; @@ -15,7 +17,9 @@ import net.sf.openrocket.gui.components.BasicSlider; import net.sf.openrocket.gui.components.UnitSelector; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.material.Material; +import net.sf.openrocket.rocketcomponent.BodyTube; import net.sf.openrocket.rocketcomponent.MotorMount; +import net.sf.openrocket.rocketcomponent.NoseCone; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; @@ -58,9 +62,24 @@ public class BodyTubeConfig extends RocketComponentConfig { //// Automatic javax.swing.Action outerAutoAction = od.getAutomaticAction(); - JCheckBox check = new JCheckBox(outerAutoAction); - check.setText(trans.get("BodyTubecfg.checkbox.Automatic")); - panel.add(check, "skip, span 2, wrap"); + JCheckBox checkAuto = new JCheckBox(outerAutoAction); + checkAuto.setText(trans.get("BodyTubecfg.checkbox.Automatic")); + panel.add(checkAuto, "skip, span 2, wrap"); + // Disable check button if there is no component to get the diameter from + checkAuto.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (!(c instanceof BodyTube)) return; + if (((BodyTube) c).getPreviousSymmetricComponent() != null) { + checkAuto.setEnabled(true); + } + else { + checkAuto.setEnabled(false); + ((BodyTube) c).setOuterRadiusAutomatic(false); + } + } + }); + checkAuto.getChangeListeners()[0].stateChanged(null); //// Inner diameter panel.add(new JLabel(trans.get("BodyTubecfg.lbl.Innerdiameter"))); @@ -87,7 +106,7 @@ public class BodyTubeConfig extends RocketComponentConfig { panel.add(new BasicSlider(thicknessModel.getSliderModel(0, 0.01)), "w 100lp, wrap 0px"); //// Filled - check = new JCheckBox(new BooleanModel(component, "Filled")); + JCheckBox check = new JCheckBox(new BooleanModel(component, "Filled")); check.setText(trans.get("BodyTubecfg.checkbox.Filled")); panel.add(check, "skip, span 2, wrap"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java index f4c174c79..d8f8332a7 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java @@ -10,6 +10,8 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JSpinner; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.document.OpenRocketDocument; @@ -113,6 +115,21 @@ public class NoseConeConfig extends RocketComponentConfig { //// Automatic check.setText(trans.get("NoseConeCfg.checkbox.Automatic")); panel.add(check, "skip, span 2, wrap"); + // Disable check button if there is no component to get the diameter from + check.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (!(c instanceof NoseCone)) return; + if (((NoseCone) c).getNextSymmetricComponent() != null) { + check.setEnabled(true); + } + else { + check.setEnabled(false); + ((NoseCone) c).setAftRadiusAutomatic(false); + } + } + }); + check.getChangeListeners()[0].stateChanged(null); } {//// Wall thickness: diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java index 5b2b11c9c..90178611f 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java @@ -9,6 +9,8 @@ import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.document.OpenRocketDocument; @@ -20,6 +22,8 @@ import net.sf.openrocket.gui.components.DescriptionArea; import net.sf.openrocket.gui.components.UnitSelector; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.material.Material; +import net.sf.openrocket.rocketcomponent.BodyTube; +import net.sf.openrocket.rocketcomponent.NoseCone; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.Transition; import net.sf.openrocket.startup.Application; @@ -124,6 +128,21 @@ public class TransitionConfig extends RocketComponentConfig { //// Automatic checkbox.setText(trans.get("TransitionCfg.checkbox.Automatic")); panel.add(checkbox, "skip, span 2, wrap"); + // Disable check button if there is no component to get the diameter from + checkbox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (!(c instanceof Transition)) return; + if (((Transition) c).getPreviousSymmetricComponent() != null) { + checkbox.setEnabled(true); + } + else { + checkbox.setEnabled(false); + ((Transition) c).setForeRadiusAutomatic(false); + } + } + }); + checkbox.getChangeListeners()[0].stateChanged(null); } { //// Aft diameter: @@ -143,6 +162,21 @@ public class TransitionConfig extends RocketComponentConfig { //// Automatic aftRadiusCheckbox.setText(trans.get("TransitionCfg.checkbox.Automatic")); panel.add(aftRadiusCheckbox, "skip, span 2, wrap"); + // Disable check button if there is no component to get the diameter from + aftRadiusCheckbox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (!(c instanceof Transition)) return; + if (((Transition) c).getNextSymmetricComponent() != null) { + aftRadiusCheckbox.setEnabled(true); + } + else { + aftRadiusCheckbox.setEnabled(false); + ((Transition) c).setAftRadiusAutomatic(false); + } + } + }); + aftRadiusCheckbox.getChangeListeners()[0].stateChanged(null); } { /// Wall thickness: