[Bugfix] Fixed Stage Separation Bugs
UI elements now change per-configuration separations not the defaults fixed separation configuration file-write code. Added max-time guard for simulations at 1200 seconds.
This commit is contained in:
parent
238726f371
commit
ec05e46a0e
@ -150,7 +150,7 @@ class DocumentConfig {
|
|||||||
"auto",
|
"auto",
|
||||||
Reflection.findMethod(BodyTube.class, "setOuterRadiusAutomatic", boolean.class)));
|
Reflection.findMethod(BodyTube.class, "setOuterRadiusAutomatic", boolean.class)));
|
||||||
|
|
||||||
// ParallelStage
|
// Parallel Stage
|
||||||
setters.put("ParallelStage:instancecount", new IntSetter(
|
setters.put("ParallelStage:instancecount", new IntSetter(
|
||||||
Reflection.findMethod(ParallelStage.class, "setInstanceCount",int.class)));
|
Reflection.findMethod(ParallelStage.class, "setInstanceCount",int.class)));
|
||||||
setters.put("ParallelStage:radialoffset", new DoubleSetter(
|
setters.put("ParallelStage:radialoffset", new DoubleSetter(
|
||||||
|
@ -51,24 +51,20 @@ public class AxialStageSaver extends ComponentAssemblySaver {
|
|||||||
// Note - getFlightConfigurationIDs returns at least one element. The first element
|
// Note - getFlightConfigurationIDs returns at least one element. The first element
|
||||||
// is null and means "default".
|
// is null and means "default".
|
||||||
|
|
||||||
int configCount = rocket.getConfigSet().size();
|
|
||||||
if (1 < configCount ){
|
|
||||||
|
|
||||||
for (FlightConfiguration curConfig : rocket.getConfigSet()){
|
for (FlightConfiguration curConfig : rocket.getConfigSet()){
|
||||||
FlightConfigurationID fcid = curConfig.getFlightConfigurationID();
|
FlightConfigurationID fcid = curConfig.getFlightConfigurationID();
|
||||||
if (fcid == null) {
|
if (fcid == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (stage.getSeparationConfigurations().isDefault(fcid)) {
|
|
||||||
|
StageSeparationConfiguration curSepCfg = stage.getSeparationConfigurations().get(fcid);
|
||||||
|
if( stage.getSeparationConfigurations().isDefault( curSepCfg )){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
StageSeparationConfiguration separationConfig = stage.getSeparationConfigurations().get(fcid);
|
|
||||||
elements.add("<separationconfiguration configid=\"" + fcid.key + "\">");
|
elements.add("<separationconfiguration configid=\"" + fcid.key + "\">");
|
||||||
elements.addAll(separationConfig(separationConfig, true));
|
elements.addAll(separationConfig(curSepCfg, true));
|
||||||
elements.add("</separationconfiguration>");
|
elements.add("</separationconfiguration>");
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,12 +12,12 @@ public class AxialStage extends ComponentAssembly implements FlightConfigurableC
|
|||||||
private static final Translator trans = Application.getTranslator();
|
private static final Translator trans = Application.getTranslator();
|
||||||
//private static final Logger log = LoggerFactory.getLogger(AxialStage.class);
|
//private static final Logger log = LoggerFactory.getLogger(AxialStage.class);
|
||||||
|
|
||||||
protected ParameterSet<StageSeparationConfiguration> separationConfigurations;
|
protected ParameterSet<StageSeparationConfiguration> separations;
|
||||||
|
|
||||||
protected int stageNumber;
|
protected int stageNumber;
|
||||||
|
|
||||||
public AxialStage(){
|
public AxialStage(){
|
||||||
this.separationConfigurations = new ParameterSet<StageSeparationConfiguration>(
|
this.separations = new ParameterSet<StageSeparationConfiguration>(
|
||||||
this, ComponentChangeEvent.EVENT_CHANGE, new StageSeparationConfiguration());
|
this, ComponentChangeEvent.EVENT_CHANGE, new StageSeparationConfiguration());
|
||||||
this.relativePosition = Position.AFTER;
|
this.relativePosition = Position.AFTER;
|
||||||
this.stageNumber = 0;
|
this.stageNumber = 0;
|
||||||
@ -35,7 +35,7 @@ public class AxialStage extends ComponentAssembly implements FlightConfigurableC
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ParameterSet<StageSeparationConfiguration> getSeparationConfigurations() {
|
public ParameterSet<StageSeparationConfiguration> getSeparationConfigurations() {
|
||||||
return separationConfigurations;
|
return separations;
|
||||||
}
|
}
|
||||||
|
|
||||||
// not strictly accurate, but this should provide an acceptable estimate for total vehicle size
|
// not strictly accurate, but this should provide an acceptable estimate for total vehicle size
|
||||||
@ -74,13 +74,13 @@ public class AxialStage extends ComponentAssembly implements FlightConfigurableC
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cloneFlightConfiguration(FlightConfigurationID oldConfigId, FlightConfigurationID newConfigId) {
|
public void cloneFlightConfiguration(FlightConfigurationID oldConfigId, FlightConfigurationID newConfigId) {
|
||||||
separationConfigurations.cloneFlightConfiguration(oldConfigId, newConfigId);
|
separations.cloneFlightConfiguration(oldConfigId, newConfigId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected RocketComponent copyWithOriginalID() {
|
protected RocketComponent copyWithOriginalID() {
|
||||||
AxialStage copy = (AxialStage) super.copyWithOriginalID();
|
AxialStage copy = (AxialStage) super.copyWithOriginalID();
|
||||||
copy.separationConfigurations = new ParameterSet<StageSeparationConfiguration>(separationConfigurations,
|
copy.separations = new ParameterSet<StageSeparationConfiguration>(separations,
|
||||||
copy, ComponentChangeEvent.EVENT_CHANGE);
|
copy, ComponentChangeEvent.EVENT_CHANGE);
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
@ -136,6 +136,12 @@ public class AxialStage extends ComponentAssembly implements FlightConfigurableC
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String toDebugSeparation() {
|
||||||
|
StringBuilder buff = new StringBuilder();
|
||||||
|
buff.append( this.separations.toDebug() );
|
||||||
|
return buff.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cloneFlightConfiguration(FlightConfigurationID oldConfigId, FlightConfigurationID newConfigId) {
|
public void cloneFlightConfiguration(FlightConfigurationID oldConfigId, FlightConfigurationID newConfigId) {
|
||||||
this.separationConfigurations.cloneFlightConfiguration(oldConfigId, newConfigId);
|
this.separations.cloneFlightConfiguration(oldConfigId, newConfigId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -22,7 +22,7 @@ import net.sf.openrocket.util.Utils;
|
|||||||
*/
|
*/
|
||||||
public class ParameterSet<E extends FlightConfigurableParameter<E>> implements FlightConfigurable<E> {
|
public class ParameterSet<E extends FlightConfigurableParameter<E>> implements FlightConfigurable<E> {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(ParameterSet.class);
|
//private static final Logger log = LoggerFactory.getLogger(ParameterSet.class);
|
||||||
protected final HashMap<FlightConfigurationID, E> map = new HashMap<FlightConfigurationID, E>();
|
protected final HashMap<FlightConfigurationID, E> map = new HashMap<FlightConfigurationID, E>();
|
||||||
|
|
||||||
protected E defaultValue;
|
protected E defaultValue;
|
||||||
@ -185,12 +185,8 @@ public class ParameterSet<E extends FlightConfigurableParameter<E>> implements F
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset( FlightConfigurationID fcid) {
|
public void reset( FlightConfigurationID fcid) {
|
||||||
// enforce at least one value in the set
|
if( fcid.isValid() ){
|
||||||
if( 1 < this.map.size() ){
|
|
||||||
set( fcid, null);
|
set( fcid, null);
|
||||||
}else{
|
|
||||||
log.warn(" attempted to remove last element from the FlightConfigurationSet<"+this.getDefault().getClass().getSimpleName()+"> attached to: "+component.getName()+". Ignoring. ");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,11 +226,9 @@ public class ParameterSet<E extends FlightConfigurableParameter<E>> implements F
|
|||||||
public String toDebug(){
|
public String toDebug(){
|
||||||
StringBuilder buf = new StringBuilder();
|
StringBuilder buf = new StringBuilder();
|
||||||
buf.append(String.format("====== Dumping ConfigurationSet for: '%s' of type: %s ======\n", this.component.getName(), this.component.getClass().getSimpleName() ));
|
buf.append(String.format("====== Dumping ConfigurationSet for: '%s' of type: %s ======\n", this.component.getName(), this.component.getClass().getSimpleName() ));
|
||||||
buf.append(String.format(" >> FlightConfigurationSet (%d configurations)\n", this.size() ));
|
buf.append(String.format(" >> ParameterSet<%s> (%d configurations)\n", this.defaultValue.getClass().getSimpleName(), this.size() ));
|
||||||
|
|
||||||
if( 0 == this.map.size() ){
|
buf.append(String.format(" >> [%s]= %s\n", "DEFAULT", this.getDefault().toString() ));
|
||||||
buf.append(String.format(" >> [%s]= %s\n", "*DEFAULT*", this.getDefault().toString() ));
|
|
||||||
}else{
|
|
||||||
for( FlightConfigurationID loopFCID : this.getSortedConfigurationIDs()){
|
for( FlightConfigurationID loopFCID : this.getSortedConfigurationIDs()){
|
||||||
String shortKey = loopFCID.toShortKey();
|
String shortKey = loopFCID.toShortKey();
|
||||||
|
|
||||||
@ -244,8 +238,15 @@ public class ParameterSet<E extends FlightConfigurableParameter<E>> implements F
|
|||||||
}
|
}
|
||||||
buf.append(String.format(" >> [%s]= %s\n", shortKey, inst ));
|
buf.append(String.format(" >> [%s]= %s\n", shortKey, inst ));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clears all configuration-specific settings -- meaning querying the parameter for any configuration will return the default value.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void clear() {
|
||||||
|
this.map.clear();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
|||||||
|
|
||||||
private final List<StateChangeListener> listeners = new ArrayList<StateChangeListener>();
|
private final List<StateChangeListener> listeners = new ArrayList<StateChangeListener>();
|
||||||
|
|
||||||
private SeparationEvent separationEvent = SeparationEvent.UPPER_IGNITION;
|
private SeparationEvent separationEvent = SeparationEvent.NEVER;
|
||||||
private double separationDelay = 0;
|
private double separationDelay = 0;
|
||||||
|
|
||||||
public SeparationEvent getSeparationEvent() {
|
public SeparationEvent getSeparationEvent() {
|
||||||
|
@ -21,6 +21,7 @@ import net.sf.openrocket.rocketcomponent.MotorMount;
|
|||||||
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
|
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
|
||||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||||
|
import net.sf.openrocket.simulation.FlightEvent.Type;
|
||||||
import net.sf.openrocket.simulation.exception.MotorIgnitionException;
|
import net.sf.openrocket.simulation.exception.MotorIgnitionException;
|
||||||
import net.sf.openrocket.simulation.exception.SimulationException;
|
import net.sf.openrocket.simulation.exception.SimulationException;
|
||||||
import net.sf.openrocket.simulation.exception.SimulationLaunchException;
|
import net.sf.openrocket.simulation.exception.SimulationLaunchException;
|
||||||
@ -483,6 +484,12 @@ public class BasicEventSimulationEngine implements SimulationEngine {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( 1200 < currentStatus.getSimulationTime() ){
|
||||||
|
ret = false;
|
||||||
|
log.error("Simulation hit max time (1200s): aborting.");
|
||||||
|
currentStatus.getFlightData().addEvent(new FlightEvent( FlightEvent.Type.SIMULATION_END, currentStatus.getSimulationTime()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// If no motor has ignited, abort
|
// If no motor has ignited, abort
|
||||||
if (!currentStatus.isMotorIgnited()) {
|
if (!currentStatus.isMotorIgnited()) {
|
||||||
|
@ -14,6 +14,7 @@ import net.sf.openrocket.gui.components.StyledLabel;
|
|||||||
import net.sf.openrocket.gui.components.StyledLabel.Style;
|
import net.sf.openrocket.gui.components.StyledLabel.Style;
|
||||||
import net.sf.openrocket.l10n.Translator;
|
import net.sf.openrocket.l10n.Translator;
|
||||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||||
|
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
||||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||||
import net.sf.openrocket.startup.Application;
|
import net.sf.openrocket.startup.Application;
|
||||||
@ -31,7 +32,6 @@ public class AxialStageConfig extends ComponentAssemblyConfig {
|
|||||||
tabbedPane.insertTab(trans.get("StageConfig.tab.Separation"), null, tab,
|
tabbedPane.insertTab(trans.get("StageConfig.tab.Separation"), null, tab,
|
||||||
trans.get("StageConfig.tab.Separation.ttip"), 2);
|
trans.get("StageConfig.tab.Separation.ttip"), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -41,14 +41,30 @@ public class AxialStageConfig extends ComponentAssemblyConfig {
|
|||||||
// Select separation event
|
// Select separation event
|
||||||
panel.add(new StyledLabel(trans.get("StageConfig.separation.lbl.title") + " " + CommonStrings.dagger, Style.BOLD), "spanx, wrap rel");
|
panel.add(new StyledLabel(trans.get("StageConfig.separation.lbl.title") + " " + CommonStrings.dagger, Style.BOLD), "spanx, wrap rel");
|
||||||
|
|
||||||
StageSeparationConfiguration config = stage.getSeparationConfigurations().getDefault();
|
FlightConfiguration flConfig = stage.getRocket().getDefaultConfiguration();
|
||||||
JComboBox<?> combo = new JComboBox(new EnumModel<StageSeparationConfiguration.SeparationEvent>(config, "SeparationEvent"));
|
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 );
|
||||||
|
}
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
JComboBox<?> combo = new JComboBox<StageSeparationConfiguration.SeparationEvent>(
|
||||||
|
new EnumModel<StageSeparationConfiguration.SeparationEvent>( sepConfig, "SeparationEvent",
|
||||||
|
new StageSeparationConfiguration.SeparationEvent[] {
|
||||||
|
StageSeparationConfiguration.SeparationEvent.UPPER_IGNITION,
|
||||||
|
StageSeparationConfiguration.SeparationEvent.IGNITION,
|
||||||
|
StageSeparationConfiguration.SeparationEvent.BURNOUT,
|
||||||
|
StageSeparationConfiguration.SeparationEvent.EJECTION,
|
||||||
|
StageSeparationConfiguration.SeparationEvent.LAUNCH,
|
||||||
|
StageSeparationConfiguration.SeparationEvent.NEVER }));
|
||||||
|
//combo.setSelectedItem(sepConfig);
|
||||||
panel.add(combo, "");
|
panel.add(combo, "");
|
||||||
|
|
||||||
// ... and delay
|
// ... and delay
|
||||||
panel.add(new JLabel(trans.get("StageConfig.separation.lbl.plus")), "");
|
panel.add(new JLabel(trans.get("StageConfig.separation.lbl.plus")), "");
|
||||||
|
|
||||||
DoubleModel dm = new DoubleModel(config, "SeparationDelay", 0);
|
DoubleModel dm = new DoubleModel( sepConfig, "SeparationDelay", 0);
|
||||||
JSpinner spin = new JSpinner(dm.getSpinnerModel());
|
JSpinner spin = new JSpinner(dm.getSpinnerModel());
|
||||||
spin.setEditor(new SpinnerEditor(spin));
|
spin.setEditor(new SpinnerEditor(spin));
|
||||||
panel.add(spin, "width 45");
|
panel.add(spin, "width 45");
|
||||||
|
@ -16,27 +16,18 @@ import net.sf.openrocket.gui.adaptors.EnumModel;
|
|||||||
import net.sf.openrocket.gui.adaptors.IntegerModel;
|
import net.sf.openrocket.gui.adaptors.IntegerModel;
|
||||||
import net.sf.openrocket.gui.components.UnitSelector;
|
import net.sf.openrocket.gui.components.UnitSelector;
|
||||||
import net.sf.openrocket.l10n.Translator;
|
import net.sf.openrocket.l10n.Translator;
|
||||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
|
||||||
import net.sf.openrocket.rocketcomponent.ParallelStage;
|
import net.sf.openrocket.rocketcomponent.ParallelStage;
|
||||||
import net.sf.openrocket.rocketcomponent.ComponentAssembly;
|
|
||||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||||
import net.sf.openrocket.startup.Application;
|
import net.sf.openrocket.startup.Application;
|
||||||
import net.sf.openrocket.unit.UnitGroup;
|
import net.sf.openrocket.unit.UnitGroup;
|
||||||
import net.sf.openrocket.util.ChangeSource;
|
|
||||||
|
|
||||||
public class ParallelStageConfig extends RocketComponentConfig {
|
public class ParallelStageConfig extends AxialStageConfig {
|
||||||
private static final long serialVersionUID = -944969957186522471L;
|
private static final long serialVersionUID = -944969957186522471L;
|
||||||
private static final Translator trans = Application.getTranslator();
|
private static final Translator trans = Application.getTranslator();
|
||||||
|
|
||||||
public ParallelStageConfig(OpenRocketDocument document, RocketComponent component) {
|
public ParallelStageConfig(OpenRocketDocument document, RocketComponent component) {
|
||||||
super(document, component);
|
super(document, component);
|
||||||
|
|
||||||
// For DEBUG purposes
|
|
||||||
if( component instanceof AxialStage ){
|
|
||||||
System.err.println(" Dumping AxialStage tree info for devel / debugging.");
|
|
||||||
System.err.println(component.toDebugTree());
|
|
||||||
}
|
|
||||||
|
|
||||||
// only stages which are actually off-centerline will get the dialog here:
|
// only stages which are actually off-centerline will get the dialog here:
|
||||||
tabbedPane.insertTab( trans.get("RocketCompCfg.tab.Parallel"), null, parallelTab( (ParallelStage)component ), trans.get("RocketCompCfg.tab.ParallelComment"), 1);
|
tabbedPane.insertTab( trans.get("RocketCompCfg.tab.Parallel"), null, parallelTab( (ParallelStage)component ), trans.get("RocketCompCfg.tab.ParallelComment"), 1);
|
||||||
}
|
}
|
||||||
@ -88,6 +79,7 @@ public class ParallelStageConfig extends RocketComponentConfig {
|
|||||||
motherPanel.add( positionLabel);
|
motherPanel.add( positionLabel);
|
||||||
|
|
||||||
// EnumModel(ChangeSource source, String valueName, Enum<T>[] values) {
|
// EnumModel(ChangeSource source, String valueName, Enum<T>[] values) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
ComboBoxModel<RocketComponent.Position> relativePositionMethodModel = new EnumModel<RocketComponent.Position>(component, "RelativePositionMethod",
|
ComboBoxModel<RocketComponent.Position> relativePositionMethodModel = new EnumModel<RocketComponent.Position>(component, "RelativePositionMethod",
|
||||||
new RocketComponent.Position[] {
|
new RocketComponent.Position[] {
|
||||||
RocketComponent.Position.TOP,
|
RocketComponent.Position.TOP,
|
||||||
|
@ -23,6 +23,7 @@ import net.sf.openrocket.gui.util.GUIUtil;
|
|||||||
import net.sf.openrocket.l10n.Translator;
|
import net.sf.openrocket.l10n.Translator;
|
||||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||||
import net.sf.openrocket.rocketcomponent.FlightConfigurationID;
|
import net.sf.openrocket.rocketcomponent.FlightConfigurationID;
|
||||||
|
import net.sf.openrocket.rocketcomponent.ParameterSet;
|
||||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration.SeparationEvent;
|
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration.SeparationEvent;
|
||||||
@ -39,11 +40,14 @@ public class SeparationSelectionDialog extends JDialog {
|
|||||||
|
|
||||||
private StageSeparationConfiguration newConfiguration;
|
private StageSeparationConfiguration newConfiguration;
|
||||||
|
|
||||||
public SeparationSelectionDialog(Window parent, final Rocket rocket, final AxialStage component) {
|
public SeparationSelectionDialog(Window parent, final Rocket rocket, final AxialStage stage) {
|
||||||
super(parent, trans.get("edtmotorconfdlg.title.Selectseparationconf"), Dialog.ModalityType.APPLICATION_MODAL);
|
super(parent, trans.get("edtmotorconfdlg.title.Selectseparationconf"), Dialog.ModalityType.APPLICATION_MODAL);
|
||||||
final FlightConfigurationID id = rocket.getDefaultConfiguration().getFlightConfigurationID();
|
final FlightConfigurationID id = rocket.getDefaultConfiguration().getFlightConfigurationID();
|
||||||
|
|
||||||
newConfiguration = component.getSeparationConfigurations().get(id).clone();
|
newConfiguration = stage.getSeparationConfigurations().get(id);
|
||||||
|
if( stage.getSeparationConfigurations().isDefault( newConfiguration )){
|
||||||
|
newConfiguration = newConfiguration.clone();
|
||||||
|
}
|
||||||
|
|
||||||
JPanel panel = new JPanel(new MigLayout("fill"));
|
JPanel panel = new JPanel(new MigLayout("fill"));
|
||||||
|
|
||||||
@ -51,7 +55,7 @@ public class SeparationSelectionDialog extends JDialog {
|
|||||||
// Select separation event
|
// Select separation event
|
||||||
panel.add(new JLabel(trans.get("SeparationSelectionDialog.opt.title")), "span, wrap rel");
|
panel.add(new JLabel(trans.get("SeparationSelectionDialog.opt.title")), "span, wrap rel");
|
||||||
|
|
||||||
boolean isDefault = component.getSeparationConfigurations().isDefault(id);
|
boolean isDefault = stage.getSeparationConfigurations().isDefault(id);
|
||||||
final JRadioButton defaultButton = new JRadioButton(trans.get("SeparationSelectionDialog.opt.default"), isDefault);
|
final JRadioButton defaultButton = new JRadioButton(trans.get("SeparationSelectionDialog.opt.default"), isDefault);
|
||||||
panel.add(defaultButton, "span, gapleft para, wrap rel");
|
panel.add(defaultButton, "span, gapleft para, wrap rel");
|
||||||
String str = trans.get("SeparationSelectionDialog.opt.override");
|
String str = trans.get("SeparationSelectionDialog.opt.override");
|
||||||
@ -65,12 +69,13 @@ public class SeparationSelectionDialog extends JDialog {
|
|||||||
|
|
||||||
// Select the button based on current configuration. If the configuration is overridden
|
// Select the button based on current configuration. If the configuration is overridden
|
||||||
// The the overrideButton is selected.
|
// The the overrideButton is selected.
|
||||||
boolean isOverridden = !component.getSeparationConfigurations().isDefault(id);
|
boolean isOverridden = !stage.getSeparationConfigurations().isDefault(id);
|
||||||
if (isOverridden) {
|
if (isOverridden) {
|
||||||
overrideButton.setSelected(true);
|
overrideButton.setSelected(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
final JComboBox event = new JComboBox(new EnumModel<SeparationEvent>(newConfiguration, "SeparationEvent"));
|
@SuppressWarnings("unchecked")
|
||||||
|
final JComboBox<?> event = new JComboBox<SeparationEvent>(new EnumModel<SeparationEvent>(newConfiguration, "SeparationEvent"));
|
||||||
event.setSelectedItem(newConfiguration.getSeparationEvent());
|
event.setSelectedItem(newConfiguration.getSeparationEvent());
|
||||||
panel.add(event, "wrap rel");
|
panel.add(event, "wrap rel");
|
||||||
|
|
||||||
@ -92,14 +97,14 @@ public class SeparationSelectionDialog extends JDialog {
|
|||||||
okButton.addActionListener(new ActionListener() {
|
okButton.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if( newConfiguration.getSeparationEvent() == StageSeparationConfiguration.SeparationEvent.NEVER ){
|
||||||
|
newConfiguration.setSeparationDelay(0);
|
||||||
|
}
|
||||||
if (defaultButton.isSelected()) {
|
if (defaultButton.isSelected()) {
|
||||||
// FlightConfigurationSet<StageSeparationConfiguration> sepConfigSet = component.getSeparationConfigurations();
|
stage.getSeparationConfigurations().clear();
|
||||||
// StageSeparationConfiguration sepConfig = sepConfigSet.get(FlightConfigurationID.DEFAULT_CONFIGURATION_ID);
|
stage.getSeparationConfigurations().setDefault( newConfiguration);
|
||||||
// component.getSeparationConfigurations().setDefault( sepConfig);
|
|
||||||
// old version
|
|
||||||
//component.getSeparationConfigurations().setDefault( fcid?, newConfiguration);
|
|
||||||
} else {
|
} else {
|
||||||
component.getSeparationConfigurations().set(id, newConfiguration);
|
stage.getSeparationConfigurations().set(id, newConfiguration);
|
||||||
}
|
}
|
||||||
SeparationSelectionDialog.this.setVisible(false);
|
SeparationSelectionDialog.this.setVisible(false);
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ import net.sf.openrocket.startup.Application;
|
|||||||
import net.sf.openrocket.unit.UnitGroup;
|
import net.sf.openrocket.unit.UnitGroup;
|
||||||
|
|
||||||
public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialStage> {
|
public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialStage> {
|
||||||
|
private static final long serialVersionUID = -1556652925279847316L;
|
||||||
static final Translator trans = Application.getTranslator();
|
static final Translator trans = Application.getTranslator();
|
||||||
private RocketDescriptor descriptor = Application.getInjector().getInstance(RocketDescriptor.class);
|
private RocketDescriptor descriptor = Application.getInjector().getInstance(RocketDescriptor.class);
|
||||||
|
|
||||||
@ -67,6 +67,8 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialS
|
|||||||
protected JTable initializeTable() {
|
protected JTable initializeTable() {
|
||||||
//// Separation selection
|
//// Separation selection
|
||||||
separationTableModel = new FlightConfigurableTableModel<AxialStage>(AxialStage.class, rocket) {
|
separationTableModel = new FlightConfigurableTableModel<AxialStage>(AxialStage.class, rocket) {
|
||||||
|
private static final long serialVersionUID = 7979648984099308970L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean includeComponent(AxialStage component) {
|
protected boolean includeComponent(AxialStage component) {
|
||||||
return component.getStageNumber() > 0;
|
return component.getStageNumber() > 0;
|
||||||
@ -121,6 +123,7 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialS
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class SeparationTableCellRenderer extends FlightConfigurablePanel<AxialStage>.FlightConfigurableCellRenderer {
|
private class SeparationTableCellRenderer extends FlightConfigurablePanel<AxialStage>.FlightConfigurableCellRenderer {
|
||||||
|
private static final long serialVersionUID = -7066580803931938686L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected JLabel format(AxialStage stage, FlightConfigurationID configId, JLabel label) {
|
protected JLabel format(AxialStage stage, FlightConfigurationID configId, JLabel label) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user