[fixes #358] Fix multi-component stage editing
This commit is contained in:
parent
33b19ecc04
commit
79973e2cfb
@ -192,5 +192,44 @@ public class AxialStage extends ComponentAssembly implements FlightConfigurableC
|
||||
|
||||
}
|
||||
|
||||
|
||||
public StageSeparationConfiguration getSeparationConfiguration() {
|
||||
FlightConfiguration flConfig = getRocket().getSelectedConfiguration();
|
||||
StageSeparationConfiguration sepConfig = getSeparationConfigurations().get(flConfig.getId());
|
||||
// to ensure the configuration is distinct, and we're not modifying the default
|
||||
if ((sepConfig == getSeparationConfigurations().getDefault())
|
||||
&& (flConfig.getId() != FlightConfigurationId.DEFAULT_VALUE_FCID)) {
|
||||
sepConfig = new StageSeparationConfiguration();
|
||||
getSeparationConfigurations().set(flConfig.getId(), sepConfig);
|
||||
}
|
||||
return sepConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addConfigListener(RocketComponent listener) {
|
||||
boolean success = super.addConfigListener(listener);
|
||||
if (listener instanceof AxialStage) {
|
||||
StageSeparationConfiguration thisConfig = getSeparationConfiguration();
|
||||
StageSeparationConfiguration listenerConfig = ((AxialStage) listener).getSeparationConfiguration();
|
||||
success = success && thisConfig.addConfigListener(listenerConfig);
|
||||
return success;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeConfigListener(RocketComponent listener) {
|
||||
super.removeConfigListener(listener);
|
||||
if (listener instanceof AxialStage) {
|
||||
StageSeparationConfiguration thisConfig = getSeparationConfiguration();
|
||||
StageSeparationConfiguration listenerConfig = ((AxialStage) listener).getSeparationConfiguration();
|
||||
thisConfig.removeConfigListener(listenerConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearConfigListeners() {
|
||||
super.clearConfigListeners();
|
||||
StageSeparationConfiguration thisConfig = getSeparationConfiguration();
|
||||
thisConfig.clearConfigListeners();
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ import net.sf.openrocket.simulation.FlightEvent;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.util.MathUtil;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class StageSeparationConfiguration implements FlightConfigurableParameter<StageSeparationConfiguration> {
|
||||
@ -98,12 +100,18 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
||||
|
||||
private SeparationEvent separationEvent = SeparationEvent.UPPER_IGNITION;
|
||||
private double separationDelay = 0;
|
||||
|
||||
private final List<StageSeparationConfiguration> configListeners = new LinkedList<>();
|
||||
|
||||
public SeparationEvent getSeparationEvent() {
|
||||
return separationEvent;
|
||||
}
|
||||
|
||||
public void setSeparationEvent(SeparationEvent separationEvent) {
|
||||
for (StageSeparationConfiguration listener : configListeners) {
|
||||
listener.setSeparationEvent(separationEvent);
|
||||
}
|
||||
|
||||
if (separationEvent == null) {
|
||||
throw new NullPointerException("separationEvent is null");
|
||||
}
|
||||
@ -119,6 +127,10 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
||||
}
|
||||
|
||||
public void setSeparationDelay(double separationDelay) {
|
||||
for (StageSeparationConfiguration listener : configListeners) {
|
||||
listener.setSeparationDelay(separationDelay);
|
||||
}
|
||||
|
||||
if (MathUtil.equals(this.separationDelay, separationDelay)) {
|
||||
return;
|
||||
}
|
||||
@ -168,5 +180,30 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
||||
@Override
|
||||
public void update(){
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new config listener that will undergo the same configuration changes as this configuration.
|
||||
* @param listener new config listener
|
||||
* @return true if listener was successfully added, false if not
|
||||
*/
|
||||
public boolean addConfigListener(StageSeparationConfiguration listener) {
|
||||
if (listener == null) {
|
||||
return false;
|
||||
}
|
||||
configListeners.add(listener);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void removeConfigListener(StageSeparationConfiguration listener) {
|
||||
configListeners.remove(listener);
|
||||
}
|
||||
|
||||
public void clearConfigListeners() {
|
||||
configListeners.clear();
|
||||
}
|
||||
|
||||
public List<StageSeparationConfiguration> getConfigListeners() {
|
||||
return configListeners;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -42,14 +42,8 @@ public class AxialStageConfig extends ComponentAssemblyConfig {
|
||||
|
||||
// Select separation event
|
||||
panel.add(new StyledLabel(trans.get("StageConfig.separation.lbl.title") + " " + CommonStrings.dagger, Style.BOLD), "spanx, wrap rel");
|
||||
|
||||
FlightConfiguration flConfig = stage.getRocket().getSelectedConfiguration();
|
||||
StageSeparationConfiguration sepConfig = stage.getSeparationConfigurations().get(flConfig.getId());
|
||||
// to ensure the configuration is distinct, and we're not modifying the default
|
||||
if( sepConfig == stage.getSeparationConfigurations().getDefault() ){
|
||||
sepConfig = new StageSeparationConfiguration();
|
||||
stage.getSeparationConfigurations().set( flConfig.getId(), sepConfig );
|
||||
}
|
||||
|
||||
StageSeparationConfiguration sepConfig = stage.getSeparationConfiguration();
|
||||
|
||||
JComboBox<?> combo = new JComboBox<StageSeparationConfiguration.SeparationEvent>(
|
||||
new EnumModel<StageSeparationConfiguration.SeparationEvent>( sepConfig, "SeparationEvent", SeparationEvent.values()));
|
||||
|
Loading…
x
Reference in New Issue
Block a user