From a396518ae8ea2b524290ea7c1f7d84f42fac1116 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Sat, 26 Aug 2023 23:43:16 +0100 Subject: [PATCH] Fix multi-comp motor ignition editing --- .../IgnitionSelectionDialog.java | 32 +++++++++------- .../MotorConfigurationPanel.java | 38 +++++++++++-------- 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/IgnitionSelectionDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/IgnitionSelectionDialog.java index 41ea1a34a..3c0c4129f 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/IgnitionSelectionDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/flightconfiguration/IgnitionSelectionDialog.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 java.util.Iterator; import javax.swing.ButtonGroup; @@ -44,6 +45,8 @@ public class IgnitionSelectionDialog extends JDialog { private IgnitionEvent startIgnitionEvent; private double startIgnitionDelay; + + private boolean isOverrideDefault; public IgnitionSelectionDialog(Window parent, final FlightConfigurationId curFCID, MotorMount _mount) { super(parent, trans.get("edtmotorconfdlg.title.Selectignitionconf"), Dialog.ModalityType.APPLICATION_MODAL); @@ -62,15 +65,16 @@ public class IgnitionSelectionDialog extends JDialog { Rocket rkt = ((RocketComponent)_mount).getRocket(); str = str.replace("{0}", descriptor.format(rkt, curFCID)); - final JRadioButton overrideButton = new JRadioButton(str, !isDefault); + final JRadioButton overrideButton = new JRadioButton(str); + overrideButton.addItemListener(e -> isOverrideDefault = e.getStateChange() == ItemEvent.SELECTED); + overrideButton.setSelected(!isDefault); panel.add(overrideButton, "span, gapleft para, wrap para"); ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add(defaultButton); buttonGroup.add(overrideButton); - // Select the button based on current configuration. If the configuration is overridden - // The the overrideButton is selected. + // Select the button based on current configuration. If the configuration is overridden the overrideButton is selected. boolean isOverridden = !isDefault; if (isOverridden) { overrideButton.setSelected(true); @@ -114,18 +118,11 @@ public class IgnitionSelectionDialog extends JDialog { // and change all remaining configs // this seems like odd behavior to me, but it matches the text on the UI dialog popup. -teyrana (equipoise@gmail.com) Iterator iter = curMount.getMotorIterator(); - while( iter.hasNext() ){ + while(iter.hasNext() ) { MotorConfiguration next = iter.next(); - next.setIgnitionDelay( cid); - next.setIgnitionEvent( cie); + next.setIgnitionDelay(cid); + next.setIgnitionEvent(cie); } - -// System.err.println("setting default motor ignition ("+defaultMotorInstance.getMotorID().toString()+") to: "); -// System.err.println(" event: "+defaultMotorInstance.getIgnitionEvent().name+" w/delay: "+defaultMotorInstance.getIgnitionDelay()); -// }else { -// System.err.println("setting motor ignition to.... new values: "); -// //destMotorInstance.setIgnitionEvent((IgnitionEvent)eventBox.getSelectedItem()); -// System.err.println(" "+curMotorInstance.getIgnitionEvent()+" w/ "+curMotorInstance.getIgnitionDelay()); } IgnitionSelectionDialog.this.setVisible(false); } @@ -150,5 +147,14 @@ public class IgnitionSelectionDialog extends JDialog { this.setContentPane(panel); GUIUtil.setDisposableDialogOptions(this, okButton); + GUIUtil.installEscapeCloseButtonOperation(this, okButton); + } + + /** + * 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/MotorConfigurationPanel.java b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/MotorConfigurationPanel.java index 2dab2deba..dbb180428 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/MotorConfigurationPanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/MotorConfigurationPanel.java @@ -365,7 +365,6 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel return; } - boolean update = false; MotorMount initMount = mounts.get(0); FlightConfigurationId initFcId = fcIds.get(0); @@ -381,25 +380,34 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel initFcId, initMount); ignitionDialog.setVisible(true); + boolean isOverrideDefault = ignitionDialog.isOverrideDefault(); - if (!initialIgnitionEvent.equals(initConfig.getIgnitionEvent()) || (initialIgnitionDelay != initConfig.getIgnitionDelay())) { - update = true; - } + boolean update = !initialIgnitionEvent.equals(initConfig.getIgnitionEvent()) || + (initialIgnitionDelay != initConfig.getIgnitionDelay()); - for (int i = 0; i < mounts.size(); i++) { - for (int j = 0; j < fcIds.size(); j++) { - if ((i == 0) && (j == 0)) break; + for (MotorMount mount : mounts) { + for (FlightConfigurationId fcId : fcIds) { + if ((mount == initMount) && (fcId == initFcId)) + continue; - MotorConfiguration config = mounts.get(i).getMotorConfig(fcIds.get(j)); - initialIgnitionEvent = config.getIgnitionEvent(); - initialIgnitionDelay = config.getIgnitionDelay(); + MotorConfiguration currentConfig = mount.getMotorConfig(fcId); - config.setIgnitionEvent(initConfig.getIgnitionEvent()); - config.setIgnitionDelay(initConfig.getIgnitionDelay()); - - if (!initialIgnitionEvent.equals(config.getIgnitionEvent()) || (initialIgnitionDelay != config.getIgnitionDelay())) { - update = true; + // It could be that the current config is the default config, but the user has selected to override it. + if (isOverrideDefault && !mount.getMotorConfigurationSet().containsId(fcId)) { + mount.getMotorConfigurationSet().set(fcId, mount.getMotorConfigurationSet().getDefault().clone()); } + + initialIgnitionEvent = currentConfig.getIgnitionEvent(); + initialIgnitionDelay = currentConfig.getIgnitionDelay(); + + if (initialIgnitionEvent.equals(currentConfig.getIgnitionEvent()) && (initialIgnitionDelay != currentConfig.getIgnitionDelay())) { + continue; + } + + update = true; + + currentConfig.setIgnitionEvent(initConfig.getIgnitionEvent()); + currentConfig.setIgnitionDelay(initConfig.getIgnitionDelay()); } }