Merge pull request #2250 from SiboVG/issue-2244

[#2244 & #2249] Copy default sep config instead of creating new one
This commit is contained in:
Sibo Van Gool 2023-07-18 00:49:30 +02:00 committed by GitHub
commit 875a2b775a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 5 deletions

View File

@ -207,10 +207,10 @@ public class AxialStage extends ComponentAssembly implements FlightConfigurableC
public StageSeparationConfiguration getSeparationConfiguration() { public StageSeparationConfiguration getSeparationConfiguration() {
FlightConfiguration flConfig = getRocket().getSelectedConfiguration(); FlightConfiguration flConfig = getRocket().getSelectedConfiguration();
StageSeparationConfiguration sepConfig = getSeparationConfigurations().get(flConfig.getId()); StageSeparationConfiguration sepConfig = getSeparationConfigurations().get(flConfig.getId());
// to ensure the configuration is distinct, and we're not modifying the default // To ensure the configuration is distinct, and we're not modifying the default
if ((sepConfig == getSeparationConfigurations().getDefault()) if ((sepConfig == getSeparationConfigurations().getDefault())
&& (flConfig.getId() != FlightConfigurationId.DEFAULT_VALUE_FCID)) { && (flConfig.getId() != FlightConfigurationId.DEFAULT_VALUE_FCID)) {
sepConfig = new StageSeparationConfiguration(); sepConfig = sepConfig.copy(flConfig.getId());
getSeparationConfigurations().set(flConfig.getId(), sepConfig); getSeparationConfigurations().set(flConfig.getId(), sepConfig);
} }
return sepConfig; return sepConfig;

View File

@ -181,10 +181,13 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialS
} }
boolean update = false; boolean update = false;
AxialStage initStage = stages.get(0); AxialStage initStage = stages.get(0); // Arbitrary choice of stage (all stages should have the same settings due to multi-comp editing)
FlightConfigurationId initFcId = fcIds.get(0); FlightConfigurationId initFcId = rocket.getSelectedConfiguration().getId(); // The SeparationSelectionDialog should apply its separation settings to the selected configuration
// Store the initial configuration so we can check later whether something changed
StageSeparationConfiguration initialConfig = initStage.getSeparationConfigurations().get(initFcId).copy(initFcId); StageSeparationConfiguration initialConfig = initStage.getSeparationConfigurations().get(initFcId).copy(initFcId);
// Launch the separation config dialog
JDialog d = new SeparationSelectionDialog(SwingUtilities.getWindowAncestor(this), rocket, initStage); JDialog d = new SeparationSelectionDialog(SwingUtilities.getWindowAncestor(this), rocket, initStage);
d.setVisible(true); d.setVisible(true);
@ -195,6 +198,7 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialS
double separationDelay = initStage.getSeparationConfigurations().get(initFcId).getSeparationDelay(); double separationDelay = initStage.getSeparationConfigurations().get(initFcId).getSeparationDelay();
SeparationEvent separationEvent= initStage.getSeparationConfigurations().get(initFcId).getSeparationEvent(); SeparationEvent separationEvent= initStage.getSeparationConfigurations().get(initFcId).getSeparationEvent();
// Parse all stages anc flight configurations to check whether we need to update
for (int i = 0; i < stages.size(); i++) { for (int i = 0; i < stages.size(); i++) {
for (int j = 0; j < fcIds.size(); j++) { for (int j = 0; j < fcIds.size(); j++) {
if ((i == 0) && (j == 0)) break; if ((i == 0) && (j == 0)) break;
@ -205,7 +209,7 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialS
initialConfig = config.copy(fcId); initialConfig = config.copy(fcId);
if (stage.getSeparationConfigurations().isDefault(config)) { if (stage.getSeparationConfigurations().isDefault(config)) {
config = config.clone(); config = config.copy(fcId);
} }
config.setSeparationDelay(separationDelay); config.setSeparationDelay(separationDelay);