From 9700c9fc86c5854518875b75f6a96e9f865565d0 Mon Sep 17 00:00:00 2001 From: Sibo Van Gool Date: Mon, 30 Aug 2021 10:53:41 +0200 Subject: [PATCH] [fixes #771] Auto update simulations upon motor/recovery/stage configuration change --- .../DeploymentConfiguration.java | 16 +++++++- .../StageSeparationConfiguration.java | 18 ++++++++- .../FlightConfigurablePanel.java | 8 +++- .../FlightConfigurationPanel.java | 19 ++++----- .../MotorConfigurationPanel.java | 39 +++++++++++++------ .../RecoveryConfigurationPanel.java | 17 ++++++-- .../SeparationConfigurationPanel.java | 31 +++++++++------ 7 files changed, 107 insertions(+), 41 deletions(-) diff --git a/core/src/net/sf/openrocket/rocketcomponent/DeploymentConfiguration.java b/core/src/net/sf/openrocket/rocketcomponent/DeploymentConfiguration.java index 1ab819f11..f30885a60 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/DeploymentConfiguration.java +++ b/core/src/net/sf/openrocket/rocketcomponent/DeploymentConfiguration.java @@ -8,6 +8,8 @@ import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.util.MathUtil; import net.sf.openrocket.util.Pair; +import java.util.Objects; + public class DeploymentConfiguration implements FlightConfigurableParameter { @@ -154,5 +156,17 @@ public class DeploymentConfiguration implements FlightConfigurableParameter { public static enum SeparationEvent { @@ -144,8 +146,20 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter clone.separationDelay = this.separationDelay; return clone; } - - + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + StageSeparationConfiguration that = (StageSeparationConfiguration) o; + return Double.compare(that.separationDelay, separationDelay) == 0 && separationEvent == that.separationEvent; + } + + @Override + public int hashCode() { + return Objects.hash(separationEvent, separationDelay); + } + private void fireChangeEvent() { } 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 39490f44e..54071c1f1 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java @@ -54,10 +54,14 @@ public abstract class FlightConfigurablePanel Motor mtr = motorChooserDialog.getSelectedMotor(); double d = motorChooserDialog.getSelectedDelay(); if (mtr != null) { + if (mtr == curMount.getMotorConfig(fcid).getMotor()) { + return; + } final MotorConfiguration templateConfig = curMount.getMotorConfig(fcid); final MotorConfiguration newConfig = new MotorConfiguration( curMount, fcid, templateConfig); newConfig.setMotor(mtr); newConfig.setEjectionDelay(d); curMount.setMotorConfig( newConfig, fcid); - } - fireTableDataChanged(); + fireTableDataChanged(ComponentChangeEvent.MOTOR_CHANGE); + } } private void removeMotor() { @@ -226,24 +231,30 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel curMount.setMotorConfig( null, fcid); - fireTableDataChanged(); + fireTableDataChanged(ComponentChangeEvent.MOTOR_CHANGE); } private void selectIgnition() { - MotorMount curMount = getSelectedComponent(); - FlightConfigurationId fcid= getSelectedConfigurationId(); - if ( (null == fcid )||( null == curMount )){ - return; - } - + MotorMount curMount = getSelectedComponent(); + FlightConfigurationId fcid = getSelectedConfigurationId(); + if ((null == fcid) || (null == curMount)) { + return; + } + + MotorConfiguration curInstance = curMount.getMotorConfig(fcid); + IgnitionEvent initialIgnitionEvent = curInstance.getIgnitionEvent(); + double initialIgnitionDelay = curInstance.getIgnitionDelay(); + // this call also performs the update changes IgnitionSelectionDialog ignitionDialog = new IgnitionSelectionDialog( SwingUtilities.getWindowAncestor(this.flightConfigurationPanel), fcid, curMount); ignitionDialog.setVisible(true); - - fireTableDataChanged(); + + if (!initialIgnitionEvent.equals(curInstance.getIgnitionEvent()) || (initialIgnitionDelay != curInstance.getIgnitionDelay())) { + fireTableDataChanged(ComponentChangeEvent.MOTOR_CHANGE); + } } @@ -254,10 +265,14 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel return; } MotorConfiguration curInstance = curMount.getMotorConfig(fcid); + IgnitionEvent initialIgnitionEvent = curInstance.getIgnitionEvent(); + double initialIgnitionDelay = curInstance.getIgnitionDelay(); curInstance.useDefaultIgnition(); - fireTableDataChanged(); + if (!initialIgnitionEvent.equals(curInstance.getIgnitionEvent()) || (initialIgnitionDelay != curInstance.getIgnitionDelay())) { + fireTableDataChanged(ComponentChangeEvent.MOTOR_CHANGE); + } } 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 80c71a8fd..9fd246ec2 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java @@ -99,22 +99,31 @@ public class RecoveryConfigurationPanel extends FlightConfigurablePanel