From 1ed7354337c8300f5817f9cb802658ae83bb76a0 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Sat, 26 Aug 2023 23:20:30 +0100 Subject: [PATCH] Fix multi-comp deployment editing --- .../rocketcomponent/RecoveryDevice.java | 5 ++--- .../DeploymentSelectionDialog.java | 17 ++++++++++++++--- .../FlightConfigurablePanel.java | 17 +++++++++++++---- .../RecoveryConfigurationPanel.java | 8 +++++++- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/core/src/net/sf/openrocket/rocketcomponent/RecoveryDevice.java b/core/src/net/sf/openrocket/rocketcomponent/RecoveryDevice.java index 9fc15a8e4..572778387 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/RecoveryDevice.java +++ b/core/src/net/sf/openrocket/rocketcomponent/RecoveryDevice.java @@ -30,8 +30,7 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu private FlightConfigurableParameterSet deploymentConfigurations; public RecoveryDevice() { - this.deploymentConfigurations = - new FlightConfigurableParameterSet( new DeploymentConfiguration()); + this.deploymentConfigurations = new FlightConfigurableParameterSet<>( new DeploymentConfiguration()); defaultMaterial = (Material.Surface) Application.getPreferences().getDefaultComponentMaterial(RecoveryDevice.class, Material.Type.SURFACE); setMaterial(Application.getPreferences().getDefaultComponentMaterial(RecoveryDevice.class, Material.Type.SURFACE)); } @@ -148,7 +147,7 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu @Override protected RocketComponent copyWithOriginalID() { RecoveryDevice copy = (RecoveryDevice) super.copyWithOriginalID(); - copy.deploymentConfigurations = new FlightConfigurableParameterSet(deploymentConfigurations); + copy.deploymentConfigurations = new FlightConfigurableParameterSet<>(deploymentConfigurations); return copy; } diff --git a/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/DeploymentSelectionDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/DeploymentSelectionDialog.java index 86ea30c3d..225e58947 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/DeploymentSelectionDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/DeploymentSelectionDialog.java @@ -4,6 +4,7 @@ import java.awt.Dialog; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; import javax.swing.ButtonGroup; import javax.swing.JButton; @@ -46,6 +47,8 @@ public class DeploymentSelectionDialog extends JDialog { private final JSpinner altSpinner; private final UnitSelector altUnit; private final JSlider altSlider; + + private boolean isOverrideDefault; public DeploymentSelectionDialog(Window parent, final Rocket rocket, final FlightConfigurationId id, final RecoveryDevice component) { super(parent, trans.get("edtmotorconfdlg.title.Selectdeploymentconf"), Dialog.ModalityType.APPLICATION_MODAL); @@ -59,7 +62,9 @@ public class DeploymentSelectionDialog extends JDialog { panel.add(defaultButton, "span, gapleft para, wrap rel"); String str = trans.get("DeploymentSelectionDialog.opt.override"); str = str.replace("{0}", descriptor.format(rocket, id)); - final JRadioButton overrideButton = new JRadioButton(str, false); + final JRadioButton overrideButton = new JRadioButton(str); + overrideButton.addItemListener(e -> isOverrideDefault = e.getStateChange() == ItemEvent.SELECTED); + overrideButton.setSelected(false); panel.add(overrideButton, "span, gapleft para, wrap para"); ButtonGroup buttonGroup = new ButtonGroup(); @@ -156,6 +161,12 @@ public class DeploymentSelectionDialog extends JDialog { altUnit.setEnabled(enabled); altSlider.setEnabled(enabled); } - - + + /** + * Returns true if this dialog was used to override the default configuration. + * @return true if this dialog was used to override the default configuration. + */ + public boolean isOverrideDefault() { + return isOverrideDefault; + } } diff --git a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java index 7f4fa0ed9..ee6cb3b80 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java @@ -253,7 +253,10 @@ public abstract class FlightConfigurablePanel selectedComponent = (Pair) tableValue; - components.add(selectedComponent.getV()); + T comp = selectedComponent.getV(); + if (!components.contains(comp)) { + components.add(comp); + } } } } @@ -292,11 +295,17 @@ public abstract class FlightConfigurablePanel selectedComponent = (Pair) tableValue; FlightConfigurationId fcid = selectedComponent.getU(); - Ids.add(fcid); + if (!Ids.contains(fcid)) { + Ids.add(fcid); + } } else if (tableValue instanceof FlightConfigurationId) { - Ids.add((FlightConfigurationId) tableValue); + if (!Ids.contains(tableValue)) { + Ids.add((FlightConfigurationId) tableValue); + } } else { - Ids.add(FlightConfigurationId.ERROR_FCID); + if (!Ids.contains(FlightConfigurationId.ERROR_FCID)) { + Ids.add(FlightConfigurationId.ERROR_FCID); + } } } diff --git a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java index 76e35748b..46d19db3c 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java @@ -181,7 +181,7 @@ public class RecoveryConfigurationPanel extends FlightConfigurablePanel