--- /dev/null
+package com.billkuker.rocketry.motorsim.visual.workbench;\r
+\r
+import java.awt.Component;\r
+\r
+import javax.measure.quantity.Pressure;\r
+import javax.measure.quantity.Velocity;\r
+import javax.measure.quantity.VolumetricDensity;\r
+import javax.measure.unit.SI;\r
+import javax.swing.JSplitPane;\r
+import javax.swing.SwingUtilities;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.Fuel;\r
+import com.billkuker.rocketry.motorsim.fuel.EditableCombustionProduct;\r
+import com.billkuker.rocketry.motorsim.fuel.PiecewiseSaintRobertFuel;\r
+import com.billkuker.rocketry.motorsim.visual.Chart;\r
+import com.billkuker.rocketry.motorsim.visual.Editor;\r
+\r
+public abstract class AbstractFuelEditor extends JSplitPane {\r
+ private static final long serialVersionUID = 1L;\r
+\r
+ protected static class EditablePSRFuel extends PiecewiseSaintRobertFuel {\r
+\r
+ @SuppressWarnings("unchecked")\r
+ private Amount<VolumetricDensity> idealDensity = (Amount<VolumetricDensity>) Amount\r
+ .valueOf("1 g/mm^3");\r
+ \r
+ private double combustionEfficiency = 1;\r
+ private double densityRatio = 1;\r
+ private EditableCombustionProduct cp;\r
+ private String name = "New Fuel";\r
+\r
+ public EditablePSRFuel(Type t) {\r
+ super(t);\r
+ cp = new EditableCombustionProduct();\r
+ }\r
+ \r
+ public void clear(){\r
+ super.clear();\r
+ }\r
+ \r
+ public void setType(Type t){\r
+ super.setType(t);\r
+ }\r
+\r
+ public void add(Amount<Pressure> p, final double _a, final double _n) {\r
+ super.add(p, _a, _n);\r
+\r
+ }\r
+\r
+ public Amount<VolumetricDensity> getIdealDensity() {\r
+ return idealDensity;\r
+ }\r
+\r
+ public void setIdealDensity(Amount<VolumetricDensity> idealDensity) {\r
+ this.idealDensity = idealDensity;\r
+ }\r
+\r
+ public double getCombustionEfficiency() {\r
+ return combustionEfficiency;\r
+ }\r
+\r
+ public void setCombustionEfficiency(double combustionEfficiency) {\r
+ this.combustionEfficiency = combustionEfficiency;\r
+ }\r
+\r
+ public double getDensityRatio() {\r
+ return densityRatio;\r
+ }\r
+\r
+ public void setDensityRatio(double densityRatio) {\r
+ this.densityRatio = densityRatio;\r
+ }\r
+\r
+ @Override\r
+ public CombustionProduct getCombustionProduct() {\r
+ return cp;\r
+ }\r
+\r
+ public String getName() {\r
+ return name;\r
+ }\r
+\r
+ public void setName(String name) {\r
+ this.name = name;\r
+ }\r
+\r
+ }\r
+ \r
+ private final JSplitPane editParent;\r
+ private final JSplitPane editTop;\r
+ private final Fuel f;\r
+ private Chart<Pressure, Velocity> burnRate;\r
+ \r
+ public AbstractFuelEditor(Fuel f){\r
+ super(HORIZONTAL_SPLIT);\r
+ this.f = f;\r
+ \r
+ editTop = new JSplitPane(JSplitPane.VERTICAL_SPLIT);\r
+ editTop.setTopComponent(new Editor(f));\r
+ editTop.setBottomComponent(new Editor(f.getCombustionProduct()));\r
+ \r
+ editParent = new JSplitPane(JSplitPane.VERTICAL_SPLIT);\r
+ setLeftComponent(editParent);\r
+ editParent.setTopComponent(editTop);\r
+ editParent.setBottomComponent(getBurnrateEditComponent());\r
+ \r
+ setResizeWeight(0);\r
+ setDividerLocation(.3);\r
+ editParent.setDividerLocation(.5);\r
+ editTop.setDividerLocation(.5);\r
+ editParent.resetToPreferredSizes();\r
+ revalidate();\r
+\r
+ update();\r
+ }\r
+ \r
+ protected abstract Component getBurnrateEditComponent();\r
+ \r
+ public Fuel getFuel(){\r
+ return f;\r
+ }\r
+ \r
+\r
+\r
+ protected void update() {\r
+ SwingUtilities.invokeLater(new Runnable() {\r
+\r
+ @Override\r
+ public void run() {\r
+ editTop.setTopComponent(new Editor(f));\r
+ editTop.setBottomComponent(new Editor(f.getCombustionProduct()));\r
+ if (burnRate != null)\r
+ AbstractFuelEditor.this.remove(burnRate);\r
+ try {\r
+ burnRate = new Chart<Pressure, Velocity>(\r
+ SI.MEGA(SI.PASCAL), SI.MILLIMETER.divide(SI.SECOND)\r
+ .asType(Velocity.class), f, "burnRate");\r
+ } catch (NoSuchMethodException e) {\r
+ throw new Error(e);\r
+ }\r
+ burnRate.setDomain(burnRate.new IntervalDomain(Amount.valueOf(\r
+ 0, SI.MEGA(SI.PASCAL)), Amount.valueOf(11, SI\r
+ .MEGA(SI.PASCAL)), 50));\r
+ AbstractFuelEditor.this.setRightComponent(burnRate);\r
+ AbstractFuelEditor.this.revalidate();\r
+ }\r
+ });\r
+ }\r
+ \r
+}\r
package com.billkuker.rocketry.motorsim.visual.workbench;
+import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.util.Vector;
import javax.measure.quantity.Pressure;
-import javax.measure.quantity.Velocity;
-import javax.measure.quantity.VolumetricDensity;
-import javax.measure.unit.SI;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
-import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import org.jscience.physics.amount.Amount;
-import com.billkuker.rocketry.motorsim.Fuel;
import com.billkuker.rocketry.motorsim.RocketScience;
-import com.billkuker.rocketry.motorsim.fuel.EditableCombustionProduct;
-import com.billkuker.rocketry.motorsim.fuel.PiecewiseSaintRobertFuel;
import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel;
import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type;
-import com.billkuker.rocketry.motorsim.visual.Chart;
-import com.billkuker.rocketry.motorsim.visual.Editor;
-public class SRFuelEditor extends JSplitPane {
+public class SRFuelEditor extends AbstractFuelEditor {
private static final long serialVersionUID = 1L;
private static final NumberFormat nf = new DecimalFormat("##########.###");
- Chart<Pressure, Velocity> burnRate;
-
private class Entry implements Comparable<Entry> {
Amount<Pressure> p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI));
double a;
}
}
- public static class EditablePSRFuel extends PiecewiseSaintRobertFuel {
-
- @SuppressWarnings("unchecked")
- private Amount<VolumetricDensity> idealDensity = (Amount<VolumetricDensity>) Amount
- .valueOf("1 g/mm^3");
-
- private double combustionEfficiency = 1;
- private double densityRatio = 1;
- private EditableCombustionProduct cp;
- private String name = "New Fuel";
-
- public EditablePSRFuel(Type t) {
- super(t);
- cp = new EditableCombustionProduct();
- }
-
- public void clear(){
- super.clear();
- }
-
- public void setType(Type t){
- super.setType(t);
- }
-
- public void add(Amount<Pressure> p, final double _a, final double _n) {
- super.add(p, _a, _n);
-
- }
-
- public Amount<VolumetricDensity> getIdealDensity() {
- return idealDensity;
- }
-
- public void setIdealDensity(Amount<VolumetricDensity> idealDensity) {
- this.idealDensity = idealDensity;
- }
-
- public double getCombustionEfficiency() {
- return combustionEfficiency;
- }
-
- public void setCombustionEfficiency(double combustionEfficiency) {
- this.combustionEfficiency = combustionEfficiency;
- }
-
- public double getDensityRatio() {
- return densityRatio;
- }
-
- public void setDensityRatio(double densityRatio) {
- this.densityRatio = densityRatio;
- }
-
- @Override
- public CombustionProduct getCombustionProduct() {
- return cp;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- }
-
- final EditablePSRFuel f = new EditablePSRFuel(SaintRobertFuel.Type.SI);
-
private class TM extends AbstractTableModel {
private static final long serialVersionUID = 1L;
};
- public Fuel getFuel(){
- return f;
- }
-
- private void update() {
- SwingUtilities.invokeLater(new Runnable() {
-
- @Override
- public void run() {
- editTop.setTopComponent(new Editor(f));
- editTop.setBottomComponent(new Editor(f.getCombustionProduct()));
- if (burnRate != null)
- SRFuelEditor.this.remove(burnRate);
- try {
- burnRate = new Chart<Pressure, Velocity>(
- SI.MEGA(SI.PASCAL), SI.MILLIMETER.divide(SI.SECOND)
- .asType(Velocity.class), f, "burnRate");
- } catch (NoSuchMethodException e) {
- throw new Error(e);
- }
- burnRate.setDomain(burnRate.new IntervalDomain(Amount.valueOf(
- 0, SI.MEGA(SI.PASCAL)), Amount.valueOf(11, SI
- .MEGA(SI.PASCAL)), 50));
- SRFuelEditor.this.setRightComponent(burnRate);
- SRFuelEditor.this.revalidate();
- }
- });
- }
-
private Vector<Entry> entries = new Vector<Entry>();
-
- JSplitPane editParent;
- JSplitPane editTop;
- JSplitPane editBottom;
JPanel controls;
+ final EditablePSRFuel f;
public SRFuelEditor() {
- super(HORIZONTAL_SPLIT);
- setResizeWeight(0);
- setDividerLocation(.3);
+ super( new EditablePSRFuel(SaintRobertFuel.Type.SI) );
+
+ this.f = (EditablePSRFuel)getFuel();
+
+ }
+
+ protected Component getBurnrateEditComponent(){
final TM tm = new TM();
- editParent = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
- editTop = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
- editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
-
- editParent.setTopComponent(editTop);
- editParent.setBottomComponent(editBottom);
+ JSplitPane editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
- editTop.setTopComponent(new Editor(f));
JTable table = new JTable(tm);
JScrollPane scrollpane = new JScrollPane(table);
scrollpane.setMinimumSize(new Dimension(200, 200));
editBottom.setTopComponent(scrollpane);
- setLeftComponent(editParent);
-
+
JButton add = new JButton("Add Data");
add.addActionListener(new ActionListener() {
@Override
editBottom.setBottomComponent(controls);
- editParent.setDividerLocation(.5);
- editTop.setDividerLocation(.5);
+
editBottom.setDividerLocation(.8);
- editParent.resetToPreferredSizes();
- revalidate();
-
- update();
+ return editBottom;
}
public static void main(String args[]) {