From 2282d33c3d0d8bb378adb4a52b3af89a624b8001 Mon Sep 17 00:00:00 2001 From: Daniel_M_Williams Date: Sat, 8 Dec 2018 18:29:01 -0500 Subject: [PATCH] [fixes #329] refactors some event-handling in component config dialogs --- .../src/net/sf/openrocket/gui/adaptors/BooleanModel.java | 8 ++++++-- swing/src/net/sf/openrocket/gui/adaptors/DoubleModel.java | 5 +++++ .../sf/openrocket/gui/configdialog/BodyTubeConfig.java | 8 -------- .../sf/openrocket/gui/configdialog/NoseConeConfig.java | 2 -- .../sf/openrocket/gui/configdialog/TransitionConfig.java | 7 ++----- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/adaptors/BooleanModel.java b/swing/src/net/sf/openrocket/gui/adaptors/BooleanModel.java index 92003d5b8..2f631058a 100644 --- a/swing/src/net/sf/openrocket/gui/adaptors/BooleanModel.java +++ b/swing/src/net/sf/openrocket/gui/adaptors/BooleanModel.java @@ -15,6 +15,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.sf.openrocket.logging.Markers; +import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.ChangeSource; import net.sf.openrocket.util.Invalidatable; @@ -101,8 +102,11 @@ public class BooleanModel extends AbstractAction implements StateChangeListener, this.valueName = valueName; Method getter = null, setter = null; - - + + if(RocketComponent.class.isAssignableFrom(source.getClass())) { + ((RocketComponent)source).addChangeListener(this); + } + // Try get/is and set try { getter = source.getClass().getMethod("is" + valueName); diff --git a/swing/src/net/sf/openrocket/gui/adaptors/DoubleModel.java b/swing/src/net/sf/openrocket/gui/adaptors/DoubleModel.java index e6fd328fa..6fb903c53 100644 --- a/swing/src/net/sf/openrocket/gui/adaptors/DoubleModel.java +++ b/swing/src/net/sf/openrocket/gui/adaptors/DoubleModel.java @@ -21,6 +21,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.sf.openrocket.logging.Markers; +import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.unit.Unit; import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.util.BugException; @@ -657,6 +658,10 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat this.minValue = min; this.maxValue = max; + if(RocketComponent.class.isAssignableFrom(source.getClass())) { + ((RocketComponent)source).addChangeListener(this); + } + try { getMethod = source.getClass().getMethod("get" + valueName); } catch (NoSuchMethodException e) { diff --git a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java index 222fada8f..e0949a142 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java @@ -31,8 +31,6 @@ public class BodyTubeConfig extends RocketComponentConfig { JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", "")); - - //// Body tube length panel.add(new JLabel(trans.get("BodyTubecfg.lbl.Bodytubelength"))); @@ -46,13 +44,11 @@ public class BodyTubeConfig extends RocketComponentConfig { 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"))); // Diameter = 2*Radius final DoubleModel od = new DoubleModel(component, "OuterRadius", 2, UnitGroup.UNITS_LENGTH, 0); - component.addChangeListener(od); spin = new JSpinner(od.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); panel.add(spin, "growx"); @@ -71,8 +67,6 @@ public class BodyTubeConfig extends RocketComponentConfig { // Diameter = 2*Radius final DoubleModel innerRadiusModel = new DoubleModel(component, "InnerRadius", 2, UnitGroup.UNITS_LENGTH, 0); - component.addChangeListener(innerRadiusModel); - spin = new JSpinner(innerRadiusModel.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); panel.add(spin, "growx"); @@ -85,7 +79,6 @@ public class BodyTubeConfig extends RocketComponentConfig { panel.add(new JLabel(trans.get("BodyTubecfg.lbl.Wallthickness"))); final DoubleModel thicknessModel = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0); - component.addChangeListener(thicknessModel); spin = new JSpinner(thicknessModel.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); panel.add(spin, "growx"); @@ -113,7 +106,6 @@ public class BodyTubeConfig extends RocketComponentConfig { tabbedPane.insertTab(trans.get("BodyTubecfg.tab.Motor"), null, motorConfig, trans.get("BodyTubecfg.tab.Motormountconf"), 1); - } @Override diff --git a/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java index 7b3440de7..f4c174c79 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java @@ -102,7 +102,6 @@ public class NoseConeConfig extends RocketComponentConfig { panel.add(new JLabel(trans.get("NoseConeCfg.lbl.Basediam"))); final DoubleModel aftRadiusModel = new DoubleModel(component, "AftRadius", 2.0, UnitGroup.UNITS_LENGTH, 0); // Diameter = 2*Radius - component.addChangeListener(aftRadiusModel); final JSpinner radiusSpinner = new JSpinner(aftRadiusModel.getSpinnerModel()); radiusSpinner.setEditor(new SpinnerEditor(radiusSpinner)); panel.add(radiusSpinner, "growx"); @@ -120,7 +119,6 @@ public class NoseConeConfig extends RocketComponentConfig { panel.add(new JLabel(trans.get("NoseConeCfg.lbl.Wallthickness"))); final DoubleModel thicknessModel = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0); - component.addChangeListener(thicknessModel); final JSpinner thicknessSpinner = new JSpinner(thicknessModel.getSpinnerModel()); thicknessSpinner.setEditor(new SpinnerEditor(thicknessSpinner)); panel.add(thicknessSpinner, "growx"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java index 9ffce3508..5b2b11c9c 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java @@ -110,9 +110,8 @@ public class TransitionConfig extends RocketComponentConfig { { /// Fore diameter: panel.add(new JLabel(trans.get("TransitionCfg.lbl.Forediam"))); + // Diameter = 2*Radius final DoubleModel foreRadiusModel = new DoubleModel(component, "ForeRadius", 2, UnitGroup.UNITS_LENGTH, 0); - // Diameter = 2*Radius - component.addChangeListener(foreRadiusModel ); final JSpinner foreRadiusSpinner = new JSpinner(foreRadiusModel.getSpinnerModel()); foreRadiusSpinner.setEditor(new SpinnerEditor(foreRadiusSpinner)); @@ -130,9 +129,8 @@ public class TransitionConfig extends RocketComponentConfig { { //// Aft diameter: panel.add(new JLabel(trans.get("TransitionCfg.lbl.Aftdiam"))); + // Diameter = 2*Radius final DoubleModel aftRadiusModel = new DoubleModel(component, "AftRadius", 2, UnitGroup.UNITS_LENGTH, 0); - // Diameter = 2*Radius - component.addChangeListener(aftRadiusModel); final JSpinner aftRadiusSpinner = new JSpinner(aftRadiusModel .getSpinnerModel()); aftRadiusSpinner.setEditor(new SpinnerEditor(aftRadiusSpinner)); @@ -151,7 +149,6 @@ public class TransitionConfig extends RocketComponentConfig { panel.add(new JLabel(trans.get("TransitionCfg.lbl.Wallthickness"))); final DoubleModel thicknessModel = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0); - component.addChangeListener(thicknessModel); final JSpinner thicknessSpinner = new JSpinner(thicknessModel.getSpinnerModel()); thicknessSpinner.setEditor(new SpinnerEditor(thicknessSpinner));