[fixes #871] Disable automatic checkbox upon no reference component

This commit is contained in:
Sibo Van Gool 2021-08-17 17:02:57 +02:00
parent 31f52cec18
commit 855deb11fc
3 changed files with 74 additions and 4 deletions

View File

@ -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");

View File

@ -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:

View File

@ -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: