From: Bill Kuker Date: Tue, 9 Nov 2010 23:52:25 +0000 (+0000) Subject: Split out common fuel editor supertype for linear peicewise editor X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=7e5d8fbb99505d896d133d4624a6e33914701b0b;p=sw%2Fmotorsim Split out common fuel editor supertype for linear peicewise editor --- diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/AbstractFuelEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/AbstractFuelEditor.java new file mode 100644 index 0000000..af3fa26 --- /dev/null +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/AbstractFuelEditor.java @@ -0,0 +1,152 @@ +package com.billkuker.rocketry.motorsim.visual.workbench; + +import java.awt.Component; + +import javax.measure.quantity.Pressure; +import javax.measure.quantity.Velocity; +import javax.measure.quantity.VolumetricDensity; +import javax.measure.unit.SI; +import javax.swing.JSplitPane; +import javax.swing.SwingUtilities; + +import org.jscience.physics.amount.Amount; + +import com.billkuker.rocketry.motorsim.Fuel; +import com.billkuker.rocketry.motorsim.fuel.EditableCombustionProduct; +import com.billkuker.rocketry.motorsim.fuel.PiecewiseSaintRobertFuel; +import com.billkuker.rocketry.motorsim.visual.Chart; +import com.billkuker.rocketry.motorsim.visual.Editor; + +public abstract class AbstractFuelEditor extends JSplitPane { + private static final long serialVersionUID = 1L; + + protected static class EditablePSRFuel extends PiecewiseSaintRobertFuel { + + @SuppressWarnings("unchecked") + private Amount idealDensity = (Amount) 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 p, final double _a, final double _n) { + super.add(p, _a, _n); + + } + + public Amount getIdealDensity() { + return idealDensity; + } + + public void setIdealDensity(Amount 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; + } + + } + + private final JSplitPane editParent; + private final JSplitPane editTop; + private final Fuel f; + private Chart burnRate; + + public AbstractFuelEditor(Fuel f){ + super(HORIZONTAL_SPLIT); + this.f = f; + + editTop = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + editTop.setTopComponent(new Editor(f)); + editTop.setBottomComponent(new Editor(f.getCombustionProduct())); + + editParent = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + setLeftComponent(editParent); + editParent.setTopComponent(editTop); + editParent.setBottomComponent(getBurnrateEditComponent()); + + setResizeWeight(0); + setDividerLocation(.3); + editParent.setDividerLocation(.5); + editTop.setDividerLocation(.5); + editParent.resetToPreferredSizes(); + revalidate(); + + update(); + } + + protected abstract Component getBurnrateEditComponent(); + + public Fuel getFuel(){ + return f; + } + + + + protected void update() { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + editTop.setTopComponent(new Editor(f)); + editTop.setBottomComponent(new Editor(f.getCombustionProduct())); + if (burnRate != null) + AbstractFuelEditor.this.remove(burnRate); + try { + burnRate = new Chart( + 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)); + AbstractFuelEditor.this.setRightComponent(burnRate); + AbstractFuelEditor.this.revalidate(); + } + }); + } + +} diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/SRFuelEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/SRFuelEditor.java index 6856da7..66ded6a 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/SRFuelEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/SRFuelEditor.java @@ -1,5 +1,6 @@ package com.billkuker.rocketry.motorsim.visual.workbench; +import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; @@ -11,9 +12,6 @@ import java.util.Collections; 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; @@ -22,29 +20,21 @@ import javax.swing.JRadioButton; 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 burnRate; - private class Entry implements Comparable { Amount p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI)); double a; @@ -56,76 +46,6 @@ public class SRFuelEditor extends JSplitPane { } } - public static class EditablePSRFuel extends PiecewiseSaintRobertFuel { - - @SuppressWarnings("unchecked") - private Amount idealDensity = (Amount) 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 p, final double _a, final double _n) { - super.add(p, _a, _n); - - } - - public Amount getIdealDensity() { - return idealDensity; - } - - public void setIdealDensity(Amount 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; @@ -213,65 +133,30 @@ public class SRFuelEditor extends JSplitPane { }; - 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( - 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 entries = new Vector(); - - 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 @@ -314,14 +199,10 @@ public class SRFuelEditor extends JSplitPane { editBottom.setBottomComponent(controls); - editParent.setDividerLocation(.5); - editTop.setDividerLocation(.5); + editBottom.setDividerLocation(.8); - editParent.resetToPreferredSizes(); - revalidate(); - - update(); + return editBottom; } public static void main(String args[]) {