Merge pull request #2133 from SiboVG/issue-2104
[#2104] Display ISA values in temp & pressure fields
This commit is contained in:
commit
193eb6db23
@ -213,6 +213,13 @@ public class SimulationOptions implements ChangeSource, Cloneable {
|
|||||||
if (MathUtil.equals(this.launchAltitude, altitude))
|
if (MathUtil.equals(this.launchAltitude, altitude))
|
||||||
return;
|
return;
|
||||||
this.launchAltitude = altitude;
|
this.launchAltitude = altitude;
|
||||||
|
|
||||||
|
// Update the launch temperature and pressure if using ISA
|
||||||
|
if (useISA) {
|
||||||
|
setLaunchTemperature(ISA_ATMOSPHERIC_MODEL.getConditions(getLaunchAltitude()).getTemperature());
|
||||||
|
setLaunchPressure(ISA_ATMOSPHERIC_MODEL.getConditions(getLaunchAltitude()).getPressure());
|
||||||
|
}
|
||||||
|
|
||||||
fireChangeEvent();
|
fireChangeEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,6 +272,13 @@ public class SimulationOptions implements ChangeSource, Cloneable {
|
|||||||
if (isa == useISA)
|
if (isa == useISA)
|
||||||
return;
|
return;
|
||||||
useISA = isa;
|
useISA = isa;
|
||||||
|
|
||||||
|
// Update the launch temperature and pressure
|
||||||
|
if (isa) {
|
||||||
|
setLaunchTemperature(ISA_ATMOSPHERIC_MODEL.getConditions(getLaunchAltitude()).getTemperature());
|
||||||
|
setLaunchPressure(ISA_ATMOSPHERIC_MODEL.getConditions(getLaunchAltitude()).getPressure());
|
||||||
|
}
|
||||||
|
|
||||||
fireChangeEvent();
|
fireChangeEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,6 +349,13 @@ public abstract class Preferences implements ChangeSource {
|
|||||||
if (MathUtil.equals(this.getDouble(LAUNCH_ALTITUDE, 0), altitude))
|
if (MathUtil.equals(this.getDouble(LAUNCH_ALTITUDE, 0), altitude))
|
||||||
return;
|
return;
|
||||||
this.putDouble(LAUNCH_ALTITUDE, altitude);
|
this.putDouble(LAUNCH_ALTITUDE, altitude);
|
||||||
|
|
||||||
|
// Update the launch temperature and pressure if using ISA
|
||||||
|
if (getISAAtmosphere()) {
|
||||||
|
setLaunchTemperature(ISA_ATMOSPHERIC_MODEL.getConditions(getLaunchAltitude()).getTemperature());
|
||||||
|
setLaunchPressure(ISA_ATMOSPHERIC_MODEL.getConditions(getLaunchAltitude()).getPressure());
|
||||||
|
}
|
||||||
|
|
||||||
fireChangeEvent();
|
fireChangeEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -443,6 +450,13 @@ public abstract class Preferences implements ChangeSource {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.putBoolean(LAUNCH_USE_ISA, isa);
|
this.putBoolean(LAUNCH_USE_ISA, isa);
|
||||||
|
|
||||||
|
// Update the launch temperature and pressure
|
||||||
|
if (isa) {
|
||||||
|
setLaunchTemperature(ISA_ATMOSPHERIC_MODEL.getConditions(getLaunchAltitude()).getTemperature());
|
||||||
|
setLaunchPressure(ISA_ATMOSPHERIC_MODEL.getConditions(getLaunchAltitude()).getPressure());
|
||||||
|
}
|
||||||
|
|
||||||
fireChangeEvent();
|
fireChangeEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,10 +6,13 @@ import java.beans.PropertyChangeListener;
|
|||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.EventListener;
|
||||||
import java.util.EventObject;
|
import java.util.EventObject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
|
import javax.swing.event.ChangeEvent;
|
||||||
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -40,7 +43,7 @@ import net.sf.openrocket.util.StateChangeListener;
|
|||||||
*
|
*
|
||||||
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
||||||
*/
|
*/
|
||||||
public class BooleanModel extends AbstractAction implements StateChangeListener, Invalidatable {
|
public class BooleanModel extends AbstractAction implements StateChangeListener, ChangeSource, Invalidatable {
|
||||||
private static final long serialVersionUID = -7299680391506320196L;
|
private static final long serialVersionUID = -7299680391506320196L;
|
||||||
private static final Logger log = LoggerFactory.getLogger(BooleanModel.class);
|
private static final Logger log = LoggerFactory.getLogger(BooleanModel.class);
|
||||||
|
|
||||||
@ -67,6 +70,7 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
|||||||
private boolean oldEnabled;
|
private boolean oldEnabled;
|
||||||
|
|
||||||
private Invalidator invalidator = new Invalidator(this);
|
private Invalidator invalidator = new Invalidator(this);
|
||||||
|
private final ArrayList<EventListener> listeners = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -272,6 +276,15 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
|||||||
oldEnabled = e;
|
oldEnabled = e;
|
||||||
setEnabled(e);
|
setEnabled(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (EventListener listener : listeners) {
|
||||||
|
if (listener instanceof StateChangeListener) {
|
||||||
|
((StateChangeListener) listener).stateChanged(event);
|
||||||
|
} else if (listener instanceof ChangeListener) {
|
||||||
|
ChangeEvent cevent = new ChangeEvent(this);
|
||||||
|
((ChangeListener) listener).stateChanged(cevent);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -294,6 +307,15 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
|||||||
updateEnableStatus();
|
updateEnableStatus();
|
||||||
firing--;
|
firing--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (EventListener listener : listeners) {
|
||||||
|
if (listener instanceof StateChangeListener) {
|
||||||
|
((StateChangeListener) listener).stateChanged(e);
|
||||||
|
} else if (listener instanceof ChangeListener) {
|
||||||
|
ChangeEvent cevent = new ChangeEvent(this);
|
||||||
|
((ChangeListener) listener).stateChanged(cevent);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -303,6 +325,34 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
|||||||
super.addPropertyChangeListener(listener);
|
super.addPropertyChangeListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a listener to the model. Adds the model as a listener to the value source if this
|
||||||
|
* is the first listener.
|
||||||
|
* @param listener Listener to add.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void addChangeListener(StateChangeListener listener) {
|
||||||
|
checkState(true);
|
||||||
|
|
||||||
|
if (listeners.add(listener)) {
|
||||||
|
log.trace(this + " adding listener (total " + listeners.size() + "): " + listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a listener from the model. Removes the model from being a listener to the Component
|
||||||
|
* if this was the last listener of the model.
|
||||||
|
* @param listener Listener to remove.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void removeChangeListener(StateChangeListener listener) {
|
||||||
|
checkState(false);
|
||||||
|
|
||||||
|
if (listeners.remove(listener)) {
|
||||||
|
log.trace(this + " removing listener (total " + listeners.size() + "): " + listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invalidates this model by removing all listeners and removing this from
|
* Invalidates this model by removing all listeners and removing this from
|
||||||
@ -320,6 +370,10 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
|||||||
this.removePropertyChangeListener(l);
|
this.removePropertyChangeListener(l);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!this.listeners.isEmpty()) {
|
||||||
|
log.warn("Invalidating " + this + " while still having listeners " + this.listeners);
|
||||||
|
}
|
||||||
|
this.listeners.clear();
|
||||||
if (source != null) {
|
if (source != null) {
|
||||||
source.removeChangeListener(this);
|
source.removeChangeListener(this);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package net.sf.openrocket.gui.dialogs.preferences;
|
|||||||
import java.awt.LayoutManager;
|
import java.awt.LayoutManager;
|
||||||
import java.awt.event.KeyAdapter;
|
import java.awt.event.KeyAdapter;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.util.EventObject;
|
||||||
|
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
@ -26,6 +27,7 @@ import net.sf.openrocket.models.atmosphere.ExtendedISAModel;
|
|||||||
import net.sf.openrocket.simulation.SimulationOptions;
|
import net.sf.openrocket.simulation.SimulationOptions;
|
||||||
import net.sf.openrocket.unit.UnitGroup;
|
import net.sf.openrocket.unit.UnitGroup;
|
||||||
import net.sf.openrocket.util.Chars;
|
import net.sf.openrocket.util.Chars;
|
||||||
|
import net.sf.openrocket.util.StateChangeListener;
|
||||||
|
|
||||||
public class LaunchPreferencesPanel extends PreferencesPanel {
|
public class LaunchPreferencesPanel extends PreferencesPanel {
|
||||||
|
|
||||||
@ -50,6 +52,8 @@ public class LaunchPreferencesPanel extends PreferencesPanel {
|
|||||||
UnitSelector unit;
|
UnitSelector unit;
|
||||||
BasicSlider slider;
|
BasicSlider slider;
|
||||||
DoubleModel m;
|
DoubleModel m;
|
||||||
|
DoubleModel temperatureModel;
|
||||||
|
DoubleModel pressureModel;
|
||||||
JSpinner spin;
|
JSpinner spin;
|
||||||
|
|
||||||
// Wind settings: Average wind speed, turbulence intensity, std.
|
// Wind settings: Average wind speed, turbulence intensity, std.
|
||||||
@ -215,20 +219,20 @@ public class LaunchPreferencesPanel extends PreferencesPanel {
|
|||||||
isa.addEnableComponent(label, false);
|
isa.addEnableComponent(label, false);
|
||||||
sub.add(label);
|
sub.add(label);
|
||||||
|
|
||||||
m = new DoubleModel(preferences, "LaunchTemperature",
|
temperatureModel = new DoubleModel(preferences, "LaunchTemperature",
|
||||||
UnitGroup.UNITS_TEMPERATURE, 0);
|
UnitGroup.UNITS_TEMPERATURE, 0);
|
||||||
|
|
||||||
spin = new JSpinner(m.getSpinnerModel());
|
spin = new JSpinner(temperatureModel.getSpinnerModel());
|
||||||
spin.setEditor(new SpinnerEditor(spin));
|
spin.setEditor(new SpinnerEditor(spin));
|
||||||
spin.setToolTipText(tip);
|
spin.setToolTipText(tip);
|
||||||
isa.addEnableComponent(spin, false);
|
isa.addEnableComponent(spin, false);
|
||||||
sub.add(spin, "growx");
|
sub.add(spin, "growx");
|
||||||
|
|
||||||
unit = new UnitSelector(m);
|
unit = new UnitSelector(temperatureModel);
|
||||||
unit.setToolTipText(tip);
|
unit.setToolTipText(tip);
|
||||||
isa.addEnableComponent(unit, false);
|
isa.addEnableComponent(unit, false);
|
||||||
sub.add(unit, "growx");
|
sub.add(unit, "growx");
|
||||||
slider = new BasicSlider(m.getSliderModel(253.15, 308.15)); // -20 ...
|
slider = new BasicSlider(temperatureModel.getSliderModel(253.15, 308.15)); // -20 ...
|
||||||
// 35
|
// 35
|
||||||
slider.setToolTipText(tip);
|
slider.setToolTipText(tip);
|
||||||
isa.addEnableComponent(slider, false);
|
isa.addEnableComponent(slider, false);
|
||||||
@ -242,24 +246,33 @@ public class LaunchPreferencesPanel extends PreferencesPanel {
|
|||||||
isa.addEnableComponent(label, false);
|
isa.addEnableComponent(label, false);
|
||||||
sub.add(label);
|
sub.add(label);
|
||||||
|
|
||||||
m = new DoubleModel(preferences, "LaunchPressure",
|
pressureModel = new DoubleModel(preferences, "LaunchPressure",
|
||||||
UnitGroup.UNITS_PRESSURE, 0);
|
UnitGroup.UNITS_PRESSURE, 0);
|
||||||
|
|
||||||
spin = new JSpinner(m.getSpinnerModel());
|
spin = new JSpinner(pressureModel.getSpinnerModel());
|
||||||
spin.setEditor(new SpinnerEditor(spin));
|
spin.setEditor(new SpinnerEditor(spin));
|
||||||
spin.setToolTipText(tip);
|
spin.setToolTipText(tip);
|
||||||
isa.addEnableComponent(spin, false);
|
isa.addEnableComponent(spin, false);
|
||||||
sub.add(spin, "growx");
|
sub.add(spin, "growx");
|
||||||
|
|
||||||
unit = new UnitSelector(m);
|
unit = new UnitSelector(pressureModel);
|
||||||
unit.setToolTipText(tip);
|
unit.setToolTipText(tip);
|
||||||
isa.addEnableComponent(unit, false);
|
isa.addEnableComponent(unit, false);
|
||||||
sub.add(unit, "growx");
|
sub.add(unit, "growx");
|
||||||
slider = new BasicSlider(m.getSliderModel(0.950e5, 1.050e5));
|
slider = new BasicSlider(pressureModel.getSliderModel(0.950e5, 1.050e5));
|
||||||
slider.setToolTipText(tip);
|
slider.setToolTipText(tip);
|
||||||
isa.addEnableComponent(slider, false);
|
isa.addEnableComponent(slider, false);
|
||||||
sub.add(slider, "w 75lp, wrap");
|
sub.add(slider, "w 75lp, wrap");
|
||||||
|
|
||||||
|
isa.addChangeListener(new StateChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void stateChanged(EventObject e) {
|
||||||
|
temperatureModel.stateChanged(e);
|
||||||
|
pressureModel.stateChanged(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// // Launch site preferences
|
// // Launch site preferences
|
||||||
sub = new JPanel(new MigLayout("fill, gap rel unrel",
|
sub = new JPanel(new MigLayout("fill, gap rel unrel",
|
||||||
"[grow][65lp!][30lp!][75lp!]", ""));
|
"[grow][65lp!][30lp!][75lp!]", ""));
|
||||||
|
@ -2,6 +2,7 @@ package net.sf.openrocket.gui.simulation;
|
|||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.util.EventObject;
|
||||||
|
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
@ -27,6 +28,7 @@ import net.sf.openrocket.startup.Application;
|
|||||||
import net.sf.openrocket.unit.UnitGroup;
|
import net.sf.openrocket.unit.UnitGroup;
|
||||||
import net.sf.openrocket.util.Chars;
|
import net.sf.openrocket.util.Chars;
|
||||||
import net.sf.openrocket.gui.widgets.SelectColorButton;
|
import net.sf.openrocket.gui.widgets.SelectColorButton;
|
||||||
|
import net.sf.openrocket.util.StateChangeListener;
|
||||||
|
|
||||||
public class SimulationConditionsPanel extends JPanel {
|
public class SimulationConditionsPanel extends JPanel {
|
||||||
private static final Translator trans = Application.getTranslator();
|
private static final Translator trans = Application.getTranslator();
|
||||||
@ -43,6 +45,8 @@ public class SimulationConditionsPanel extends JPanel {
|
|||||||
BasicSlider slider;
|
BasicSlider slider;
|
||||||
DoubleModel m;
|
DoubleModel m;
|
||||||
JSpinner spin;
|
JSpinner spin;
|
||||||
|
DoubleModel temperatureModel;
|
||||||
|
DoubleModel pressureModel;
|
||||||
|
|
||||||
//// Wind settings: Average wind speed, turbulence intensity, std. deviation, and direction
|
//// Wind settings: Average wind speed, turbulence intensity, std. deviation, and direction
|
||||||
sub = new JPanel(new MigLayout("fill, gap rel unrel",
|
sub = new JPanel(new MigLayout("fill, gap rel unrel",
|
||||||
@ -198,19 +202,19 @@ public class SimulationConditionsPanel extends JPanel {
|
|||||||
isa.addEnableComponent(label, false);
|
isa.addEnableComponent(label, false);
|
||||||
sub.add(label);
|
sub.add(label);
|
||||||
|
|
||||||
m = new DoubleModel(conditions, "LaunchTemperature", UnitGroup.UNITS_TEMPERATURE, 0);
|
temperatureModel = new DoubleModel(conditions, "LaunchTemperature", UnitGroup.UNITS_TEMPERATURE, 0);
|
||||||
|
|
||||||
spin = new JSpinner(m.getSpinnerModel());
|
spin = new JSpinner(temperatureModel.getSpinnerModel());
|
||||||
spin.setEditor(new SpinnerEditor(spin));
|
spin.setEditor(new SpinnerEditor(spin));
|
||||||
spin.setToolTipText(tip);
|
spin.setToolTipText(tip);
|
||||||
isa.addEnableComponent(spin, false);
|
isa.addEnableComponent(spin, false);
|
||||||
sub.add(spin, "growx");
|
sub.add(spin, "growx");
|
||||||
|
|
||||||
unit = new UnitSelector(m);
|
unit = new UnitSelector(temperatureModel);
|
||||||
unit.setToolTipText(tip);
|
unit.setToolTipText(tip);
|
||||||
isa.addEnableComponent(unit, false);
|
isa.addEnableComponent(unit, false);
|
||||||
sub.add(unit, "growx");
|
sub.add(unit, "growx");
|
||||||
slider = new BasicSlider(m.getSliderModel(253.15, 308.15)); // -20 ... 35
|
slider = new BasicSlider(temperatureModel.getSliderModel(253.15, 308.15)); // -20 ... 35
|
||||||
slider.setToolTipText(tip);
|
slider.setToolTipText(tip);
|
||||||
isa.addEnableComponent(slider, false);
|
isa.addEnableComponent(slider, false);
|
||||||
sub.add(slider, "w 75lp, wrap");
|
sub.add(slider, "w 75lp, wrap");
|
||||||
@ -225,24 +229,31 @@ public class SimulationConditionsPanel extends JPanel {
|
|||||||
isa.addEnableComponent(label, false);
|
isa.addEnableComponent(label, false);
|
||||||
sub.add(label);
|
sub.add(label);
|
||||||
|
|
||||||
m = new DoubleModel(conditions, "LaunchPressure", UnitGroup.UNITS_PRESSURE, 0);
|
pressureModel = new DoubleModel(conditions, "LaunchPressure", UnitGroup.UNITS_PRESSURE, 0);
|
||||||
|
|
||||||
spin = new JSpinner(m.getSpinnerModel());
|
spin = new JSpinner(pressureModel.getSpinnerModel());
|
||||||
spin.setEditor(new SpinnerEditor(spin));
|
spin.setEditor(new SpinnerEditor(spin));
|
||||||
spin.setToolTipText(tip);
|
spin.setToolTipText(tip);
|
||||||
isa.addEnableComponent(spin, false);
|
isa.addEnableComponent(spin, false);
|
||||||
sub.add(spin, "growx");
|
sub.add(spin, "growx");
|
||||||
|
|
||||||
unit = new UnitSelector(m);
|
unit = new UnitSelector(pressureModel);
|
||||||
unit.setToolTipText(tip);
|
unit.setToolTipText(tip);
|
||||||
isa.addEnableComponent(unit, false);
|
isa.addEnableComponent(unit, false);
|
||||||
sub.add(unit, "growx");
|
sub.add(unit, "growx");
|
||||||
slider = new BasicSlider(m.getSliderModel(0.950e5, 1.050e5));
|
slider = new BasicSlider(pressureModel.getSliderModel(0.950e5, 1.050e5));
|
||||||
slider.setToolTipText(tip);
|
slider.setToolTipText(tip);
|
||||||
isa.addEnableComponent(slider, false);
|
isa.addEnableComponent(slider, false);
|
||||||
sub.add(slider, "w 75lp, wrap");
|
sub.add(slider, "w 75lp, wrap");
|
||||||
|
|
||||||
|
|
||||||
|
isa.addChangeListener(new StateChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void stateChanged(EventObject e) {
|
||||||
|
temperatureModel.stateChanged(e);
|
||||||
|
pressureModel.stateChanged(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user