From: Bill Kuker Date: Fri, 12 Nov 2010 14:41:39 +0000 (+0000) Subject: Fix fuel package name X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=1c0b684ce29480300b126f3e67ad3f4dee673b17;p=sw%2Fmotorsim Fix fuel package name --- diff --git a/gui/com/billkuker/rocketry/motorsim/fuel/AbstractFuelEditor.java b/gui/com/billkuker/rocketry/motorsim/fuel/AbstractFuelEditor.java new file mode 100644 index 0000000..03fb5e7 --- /dev/null +++ b/gui/com/billkuker/rocketry/motorsim/fuel/AbstractFuelEditor.java @@ -0,0 +1,81 @@ +package com.billkuker.rocketry.motorsim.fuel; + +import java.awt.Component; + +import javax.measure.quantity.Pressure; +import javax.measure.quantity.Velocity; +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.visual.Chart; +import com.billkuker.rocketry.motorsim.visual.Editor; + +public abstract class AbstractFuelEditor extends JSplitPane { + private static final long serialVersionUID = 1L; + + 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/fuel/FuelsEditor.java b/gui/com/billkuker/rocketry/motorsim/fuel/FuelsEditor.java new file mode 100644 index 0000000..7fd1e67 --- /dev/null +++ b/gui/com/billkuker/rocketry/motorsim/fuel/FuelsEditor.java @@ -0,0 +1,87 @@ +package com.billkuker.rocketry.motorsim.fuel; + +import java.awt.Frame; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +import javax.swing.JFrame; +import javax.swing.JMenuBar; + +import com.billkuker.rocketry.motorsim.Fuel; +import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel; +import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseSaintRobertFuel; +import com.billkuker.rocketry.motorsim.io.MotorIO; +import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor; + +public class FuelsEditor extends MultiObjectEditor { + + private static final long serialVersionUID = 1L; + + public FuelsEditor(Frame frame) { + super(frame, "Fuel"); + addCreator(new ObjectCreator() { + @Override + public Fuel newObject() { + return new EditablePiecewiseLinearFuel(); + } + + @Override + public String getName() { + return "Linear Fuel"; + } + }); + addCreator(new ObjectCreator() { + @Override + public Fuel newObject() { + return new EditablePiecewiseSaintRobertFuel(); + } + + @Override + public String getName() { + return "Saint Robert Fuel"; + } + }); + } + + @Override + public AbstractFuelEditor createEditor(Fuel o) { + if ( o instanceof EditablePiecewiseLinearFuel ){ + return new LinearFuelEditor((EditablePiecewiseLinearFuel)o); + } else if ( o instanceof EditablePiecewiseSaintRobertFuel ){ + return new SRFuelEditor((EditablePiecewiseSaintRobertFuel)o); + } + return null; + } + + @Override + public Fuel newObject() { + return new EditablePiecewiseLinearFuel(); + } + + @Override + protected Fuel loadFromFile(File f) throws IOException { + Fuel fuel = MotorIO.readFuel(new FileInputStream(f)); + return fuel; + } + + @Override + protected void saveToFile(Fuel o, File f) throws IOException { + MotorIO.writeFuel(o, new FileOutputStream(f)); + } + + @SuppressWarnings("deprecation") + public static void main(String args[]){ + JFrame f = new JFrame(); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + FuelsEditor fe; + f.add(fe = new FuelsEditor(f)); + JMenuBar b; + f.setJMenuBar(b = new JMenuBar()); + b.add(fe.getMenu()); + f.setSize(1024, 768); + f.show(); + } + +} diff --git a/gui/com/billkuker/rocketry/motorsim/fuel/LinearFuelEditor.java b/gui/com/billkuker/rocketry/motorsim/fuel/LinearFuelEditor.java new file mode 100644 index 0000000..968123f --- /dev/null +++ b/gui/com/billkuker/rocketry/motorsim/fuel/LinearFuelEditor.java @@ -0,0 +1,187 @@ +package com.billkuker.rocketry.motorsim.fuel; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.util.Collections; +import java.util.Map; +import java.util.Vector; + +import javax.measure.quantity.Pressure; +import javax.measure.quantity.Velocity; +import javax.measure.unit.SI; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTable; +import javax.swing.table.AbstractTableModel; + +import org.jscience.physics.amount.Amount; + +import com.billkuker.rocketry.motorsim.RocketScience; +import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel; + +public class LinearFuelEditor extends AbstractFuelEditor { + private static final long serialVersionUID = 1L; + + private class Entry implements Comparable { + Amount p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI)); + Amount v = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(SI.METERS_PER_SECOND)); + + @Override + public int compareTo(Entry o) { + return p.compareTo(o.p); + } + } + + private class TM extends AbstractTableModel { + private static final long serialVersionUID = 1L; + + @Override + public int getColumnCount() { + return 2; + } + + @Override + public int getRowCount() { + return entries.size(); + } + + @Override + public String getColumnName(int col) { + switch (col) { + case 0: + return "Pressure"; + case 1: + return "Burn Rate"; + } + return null; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + Entry e = entries.get(rowIndex); + switch (columnIndex) { + case 0: + return RocketScience.ammountToString(e.p); + case 1: + return RocketScience.ammountToString(e.v); + } + return null; + } + + public boolean isCellEditable(int row, int col) { + return true; + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col) { + Entry e = entries.get(row); + try { + switch (col) { + case 0: + try { + e.p = (Amount) Amount.valueOf((String) value); + } catch ( Exception ee ){ + double d = Double.parseDouble((String)value); + e.p = (Amount)Amount.valueOf(d, e.p.getUnit()); + } + break; + case 1: + try { + e.v = (Amount) Amount.valueOf((String) value); + } catch ( Exception ee ){ + double d = Double.parseDouble((String)value); + e.v = (Amount)Amount.valueOf(d, e.v.getUnit()); + } + break; + } + } catch (Exception ex) { + ex.printStackTrace(); + } + Collections.sort(entries); + fireTableDataChanged(); + //f = new EditablePSRFuel(SaintRobertFuel.Type.NONSI); + f.clear(); + for (Entry en : entries) { + f.add(en.p, en.v); + } + f.firePropertyChange(new PropertyChangeEvent(f,"entries", null, null)); + + update(); + + } + + @Override + public void fireTableDataChanged() { + super.fireTableDataChanged(); + } + + }; + + private Vector entries = new Vector(); + JPanel controls; + final EditablePiecewiseLinearFuel f; + + public LinearFuelEditor(EditablePiecewiseLinearFuel f) { + super( f ); + this.f = f; + for ( Map.Entry, Amount> e : f.getEntries().entrySet() ){ + Entry n = new Entry(); + n.p = e.getKey(); + n.v = e.getValue(); + entries.add(n); + } + Collections.sort(entries); + } + + protected Component getBurnrateEditComponent(){ + final TM tm = new TM(); + + JSplitPane editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + + + JTable table = new JTable(tm); + JScrollPane scrollpane = new JScrollPane(table); + scrollpane.setMinimumSize(new Dimension(200, 200)); + editBottom.setTopComponent(scrollpane); + + + JButton add = new JButton("Add Data"); + add.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + entries.add(new Entry()); + tm.fireTableDataChanged(); + } + }); + controls = new JPanel(); + controls.setPreferredSize(new Dimension(200, 50)); + controls.setLayout(new FlowLayout()); + + controls.add(add); + + editBottom.setBottomComponent(controls); + + + + editBottom.setDividerLocation(.8); + + return editBottom; + } + + public static void main(String args[]) { + JFrame f = new JFrame(); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f.setContentPane(new LinearFuelEditor(new EditablePiecewiseLinearFuel())); + f.setSize(800, 600); + f.setVisible(true); + + } + +} diff --git a/gui/com/billkuker/rocketry/motorsim/fuel/SRFuelEditor.java b/gui/com/billkuker/rocketry/motorsim/fuel/SRFuelEditor.java new file mode 100644 index 0000000..eaebabd --- /dev/null +++ b/gui/com/billkuker/rocketry/motorsim/fuel/SRFuelEditor.java @@ -0,0 +1,223 @@ +package com.billkuker.rocketry.motorsim.fuel; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.Collections; +import java.util.Vector; + +import javax.measure.quantity.Pressure; +import javax.swing.ButtonGroup; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTable; +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.RocketScience; +import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type; +import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseSaintRobertFuel; + +public class SRFuelEditor extends AbstractFuelEditor { + private static final long serialVersionUID = 1L; + + private static final NumberFormat nf = new DecimalFormat("##########.###"); + + private class Entry implements Comparable { + Amount p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI)); + double a; + double n; + + @Override + public int compareTo(Entry o) { + return p.compareTo(o.p); + } + } + + private class TM extends AbstractTableModel { + private static final long serialVersionUID = 1L; + + @Override + public int getColumnCount() { + return 3; + } + + @Override + public int getRowCount() { + return entries.size(); + } + + @Override + public String getColumnName(int col) { + switch (col) { + case 0: + return "Pressure"; + case 1: + return "Coefficient (a)"; + case 2: + return "Exponent (n)"; + } + return null; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + Entry e = entries.get(rowIndex); + switch (columnIndex) { + case 0: + //Format like 100 psi or 4.8 Mpa + return nf.format(e.p.doubleValue(e.p.getUnit())) + " " + e.p.getUnit(); + case 1: + return e.a; + case 2: + return e.n; + } + return null; + } + + public boolean isCellEditable(int row, int col) { + return true; + } + + @SuppressWarnings("unchecked") + public void setValueAt(Object value, int row, int col) { + Entry e = entries.get(row); + try { + switch (col) { + case 0: + try { + e.p = (Amount) Amount.valueOf((String) value); + } catch ( Exception ee ){ + double d = Double.parseDouble((String)value); + e.p = (Amount)Amount.valueOf(d, e.p.getUnit()); + } + break; + case 1: + e.a = Double.valueOf((String) value); + break; + case 2: + e.n = Double.valueOf((String) value); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + Collections.sort(entries); + fireTableDataChanged(); + //f = new EditablePSRFuel(SaintRobertFuel.Type.NONSI); + f.clear(); + for (Entry en : entries) { + f.add(en.p, en.a, en.n); + } + f.firePropertyChange(new PropertyChangeEvent(f,"entries", null, null)); + + update(); + + } + + @Override + public void fireTableDataChanged() { + super.fireTableDataChanged(); + } + + }; + + private Vector entries = new Vector(); + JPanel controls; + final EditablePiecewiseSaintRobertFuel f; + + public SRFuelEditor(EditablePiecewiseSaintRobertFuel f) { + super( f); + this.f = f; + + for ( Amount p : f.getAMap().keySet() ){ + Entry e = new Entry(); + e.a = f.getAMap().get(p); + e.n = f.getNMap().get(p); + entries.add(e); + } + Collections.sort(entries); + + } + + protected Component getBurnrateEditComponent(){ + final TM tm = new TM(); + + JSplitPane editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + + + JTable table = new JTable(tm); + JScrollPane scrollpane = new JScrollPane(table); + scrollpane.setMinimumSize(new Dimension(200, 200)); + editBottom.setTopComponent(scrollpane); + + + JButton add = new JButton("Add Data"); + add.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + entries.add(new Entry()); + tm.fireTableDataChanged(); + } + }); + controls = new JPanel(); + controls.setPreferredSize(new Dimension(200, 50)); + controls.setLayout(new FlowLayout()); + + controls.add(add); + + + final JRadioButton si, nonsi; + ButtonGroup type = new ButtonGroup(); + JPanel radio = new JPanel(); + radio.add(si = new JRadioButton("SI")); + radio.add(nonsi = new JRadioButton("NonSI")); + controls.add(radio); + type.add(si); + type.add(nonsi); + + si.setSelected(true); + + si.addChangeListener(new ChangeListener(){ + @Override + public void stateChanged(ChangeEvent e) { + if ( si.isSelected() ){ + System.err.println("SI"); + f.setType(Type.SI); + } else { + System.err.println("NONSI"); + f.setType(Type.NONSI); + } + update(); + }}); + + editBottom.setBottomComponent(controls); + + + + editBottom.setDividerLocation(.8); + + return editBottom; + } + + public static void main(String args[]) { + JFrame f = new JFrame(); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f.setContentPane(new SRFuelEditor(new EditablePiecewiseSaintRobertFuel())); + f.setSize(800, 600); + f.setVisible(true); + + } + +} diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java index 5e9652f..328e64d 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java @@ -27,10 +27,10 @@ import com.billkuker.rocketry.motorsim.Fuel; import com.billkuker.rocketry.motorsim.Motor; import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference; import com.billkuker.rocketry.motorsim.fuel.FuelResolver; +import com.billkuker.rocketry.motorsim.fuel.FuelsEditor; import com.billkuker.rocketry.motorsim.io.ENGExporter; import com.billkuker.rocketry.motorsim.io.MotorIO; -import fuel.FuelsEditor; public class MotorWorkbench extends JFrame { private static final long serialVersionUID = 1L; diff --git a/gui/fuel/AbstractFuelEditor.java b/gui/fuel/AbstractFuelEditor.java deleted file mode 100644 index 23da52a..0000000 --- a/gui/fuel/AbstractFuelEditor.java +++ /dev/null @@ -1,81 +0,0 @@ -package fuel; - -import java.awt.Component; - -import javax.measure.quantity.Pressure; -import javax.measure.quantity.Velocity; -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.visual.Chart; -import com.billkuker.rocketry.motorsim.visual.Editor; - -public abstract class AbstractFuelEditor extends JSplitPane { - private static final long serialVersionUID = 1L; - - 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/fuel/FuelsEditor.java b/gui/fuel/FuelsEditor.java deleted file mode 100644 index 4d599f6..0000000 --- a/gui/fuel/FuelsEditor.java +++ /dev/null @@ -1,87 +0,0 @@ -package fuel; - -import java.awt.Frame; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; - -import javax.swing.JFrame; -import javax.swing.JMenuBar; - -import com.billkuker.rocketry.motorsim.Fuel; -import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel; -import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseSaintRobertFuel; -import com.billkuker.rocketry.motorsim.io.MotorIO; -import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor; - -public class FuelsEditor extends MultiObjectEditor { - - private static final long serialVersionUID = 1L; - - public FuelsEditor(Frame frame) { - super(frame, "Fuel"); - addCreator(new ObjectCreator() { - @Override - public Fuel newObject() { - return new EditablePiecewiseLinearFuel(); - } - - @Override - public String getName() { - return "Linear Fuel"; - } - }); - addCreator(new ObjectCreator() { - @Override - public Fuel newObject() { - return new EditablePiecewiseSaintRobertFuel(); - } - - @Override - public String getName() { - return "Saint Robert Fuel"; - } - }); - } - - @Override - public AbstractFuelEditor createEditor(Fuel o) { - if ( o instanceof EditablePiecewiseLinearFuel ){ - return new LinearFuelEditor((EditablePiecewiseLinearFuel)o); - } else if ( o instanceof EditablePiecewiseSaintRobertFuel ){ - return new SRFuelEditor((EditablePiecewiseSaintRobertFuel)o); - } - return null; - } - - @Override - public Fuel newObject() { - return new EditablePiecewiseLinearFuel(); - } - - @Override - protected Fuel loadFromFile(File f) throws IOException { - Fuel fuel = MotorIO.readFuel(new FileInputStream(f)); - return fuel; - } - - @Override - protected void saveToFile(Fuel o, File f) throws IOException { - MotorIO.writeFuel(o, new FileOutputStream(f)); - } - - @SuppressWarnings("deprecation") - public static void main(String args[]){ - JFrame f = new JFrame(); - f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - FuelsEditor fe; - f.add(fe = new FuelsEditor(f)); - JMenuBar b; - f.setJMenuBar(b = new JMenuBar()); - b.add(fe.getMenu()); - f.setSize(1024, 768); - f.show(); - } - -} diff --git a/gui/fuel/LinearFuelEditor.java b/gui/fuel/LinearFuelEditor.java deleted file mode 100644 index 93aff74..0000000 --- a/gui/fuel/LinearFuelEditor.java +++ /dev/null @@ -1,187 +0,0 @@ -package fuel; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.util.Collections; -import java.util.Map; -import java.util.Vector; - -import javax.measure.quantity.Pressure; -import javax.measure.quantity.Velocity; -import javax.measure.unit.SI; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JSplitPane; -import javax.swing.JTable; -import javax.swing.table.AbstractTableModel; - -import org.jscience.physics.amount.Amount; - -import com.billkuker.rocketry.motorsim.RocketScience; -import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel; - -public class LinearFuelEditor extends AbstractFuelEditor { - private static final long serialVersionUID = 1L; - - private class Entry implements Comparable { - Amount p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI)); - Amount v = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(SI.METERS_PER_SECOND)); - - @Override - public int compareTo(Entry o) { - return p.compareTo(o.p); - } - } - - private class TM extends AbstractTableModel { - private static final long serialVersionUID = 1L; - - @Override - public int getColumnCount() { - return 2; - } - - @Override - public int getRowCount() { - return entries.size(); - } - - @Override - public String getColumnName(int col) { - switch (col) { - case 0: - return "Pressure"; - case 1: - return "Burn Rate"; - } - return null; - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - Entry e = entries.get(rowIndex); - switch (columnIndex) { - case 0: - return RocketScience.ammountToString(e.p); - case 1: - return RocketScience.ammountToString(e.v); - } - return null; - } - - public boolean isCellEditable(int row, int col) { - return true; - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col) { - Entry e = entries.get(row); - try { - switch (col) { - case 0: - try { - e.p = (Amount) Amount.valueOf((String) value); - } catch ( Exception ee ){ - double d = Double.parseDouble((String)value); - e.p = (Amount)Amount.valueOf(d, e.p.getUnit()); - } - break; - case 1: - try { - e.v = (Amount) Amount.valueOf((String) value); - } catch ( Exception ee ){ - double d = Double.parseDouble((String)value); - e.v = (Amount)Amount.valueOf(d, e.v.getUnit()); - } - break; - } - } catch (Exception ex) { - ex.printStackTrace(); - } - Collections.sort(entries); - fireTableDataChanged(); - //f = new EditablePSRFuel(SaintRobertFuel.Type.NONSI); - f.clear(); - for (Entry en : entries) { - f.add(en.p, en.v); - } - f.firePropertyChange(new PropertyChangeEvent(f,"entries", null, null)); - - update(); - - } - - @Override - public void fireTableDataChanged() { - super.fireTableDataChanged(); - } - - }; - - private Vector entries = new Vector(); - JPanel controls; - final EditablePiecewiseLinearFuel f; - - public LinearFuelEditor(EditablePiecewiseLinearFuel f) { - super( f ); - this.f = f; - for ( Map.Entry, Amount> e : f.getEntries().entrySet() ){ - Entry n = new Entry(); - n.p = e.getKey(); - n.v = e.getValue(); - entries.add(n); - } - Collections.sort(entries); - } - - protected Component getBurnrateEditComponent(){ - final TM tm = new TM(); - - JSplitPane editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT); - - - JTable table = new JTable(tm); - JScrollPane scrollpane = new JScrollPane(table); - scrollpane.setMinimumSize(new Dimension(200, 200)); - editBottom.setTopComponent(scrollpane); - - - JButton add = new JButton("Add Data"); - add.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - entries.add(new Entry()); - tm.fireTableDataChanged(); - } - }); - controls = new JPanel(); - controls.setPreferredSize(new Dimension(200, 50)); - controls.setLayout(new FlowLayout()); - - controls.add(add); - - editBottom.setBottomComponent(controls); - - - - editBottom.setDividerLocation(.8); - - return editBottom; - } - - public static void main(String args[]) { - JFrame f = new JFrame(); - f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - f.setContentPane(new LinearFuelEditor(new EditablePiecewiseLinearFuel())); - f.setSize(800, 600); - f.setVisible(true); - - } - -} diff --git a/gui/fuel/SRFuelEditor.java b/gui/fuel/SRFuelEditor.java deleted file mode 100644 index 53e3dd4..0000000 --- a/gui/fuel/SRFuelEditor.java +++ /dev/null @@ -1,223 +0,0 @@ -package fuel; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.text.DecimalFormat; -import java.text.NumberFormat; -import java.util.Collections; -import java.util.Vector; - -import javax.measure.quantity.Pressure; -import javax.swing.ButtonGroup; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JScrollPane; -import javax.swing.JSplitPane; -import javax.swing.JTable; -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.RocketScience; -import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type; -import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseSaintRobertFuel; - -public class SRFuelEditor extends AbstractFuelEditor { - private static final long serialVersionUID = 1L; - - private static final NumberFormat nf = new DecimalFormat("##########.###"); - - private class Entry implements Comparable { - Amount p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI)); - double a; - double n; - - @Override - public int compareTo(Entry o) { - return p.compareTo(o.p); - } - } - - private class TM extends AbstractTableModel { - private static final long serialVersionUID = 1L; - - @Override - public int getColumnCount() { - return 3; - } - - @Override - public int getRowCount() { - return entries.size(); - } - - @Override - public String getColumnName(int col) { - switch (col) { - case 0: - return "Pressure"; - case 1: - return "Coefficient (a)"; - case 2: - return "Exponent (n)"; - } - return null; - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - Entry e = entries.get(rowIndex); - switch (columnIndex) { - case 0: - //Format like 100 psi or 4.8 Mpa - return nf.format(e.p.doubleValue(e.p.getUnit())) + " " + e.p.getUnit(); - case 1: - return e.a; - case 2: - return e.n; - } - return null; - } - - public boolean isCellEditable(int row, int col) { - return true; - } - - @SuppressWarnings("unchecked") - public void setValueAt(Object value, int row, int col) { - Entry e = entries.get(row); - try { - switch (col) { - case 0: - try { - e.p = (Amount) Amount.valueOf((String) value); - } catch ( Exception ee ){ - double d = Double.parseDouble((String)value); - e.p = (Amount)Amount.valueOf(d, e.p.getUnit()); - } - break; - case 1: - e.a = Double.valueOf((String) value); - break; - case 2: - e.n = Double.valueOf((String) value); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - Collections.sort(entries); - fireTableDataChanged(); - //f = new EditablePSRFuel(SaintRobertFuel.Type.NONSI); - f.clear(); - for (Entry en : entries) { - f.add(en.p, en.a, en.n); - } - f.firePropertyChange(new PropertyChangeEvent(f,"entries", null, null)); - - update(); - - } - - @Override - public void fireTableDataChanged() { - super.fireTableDataChanged(); - } - - }; - - private Vector entries = new Vector(); - JPanel controls; - final EditablePiecewiseSaintRobertFuel f; - - public SRFuelEditor(EditablePiecewiseSaintRobertFuel f) { - super( f); - this.f = f; - - for ( Amount p : f.getAMap().keySet() ){ - Entry e = new Entry(); - e.a = f.getAMap().get(p); - e.n = f.getNMap().get(p); - entries.add(e); - } - Collections.sort(entries); - - } - - protected Component getBurnrateEditComponent(){ - final TM tm = new TM(); - - JSplitPane editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT); - - - JTable table = new JTable(tm); - JScrollPane scrollpane = new JScrollPane(table); - scrollpane.setMinimumSize(new Dimension(200, 200)); - editBottom.setTopComponent(scrollpane); - - - JButton add = new JButton("Add Data"); - add.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - entries.add(new Entry()); - tm.fireTableDataChanged(); - } - }); - controls = new JPanel(); - controls.setPreferredSize(new Dimension(200, 50)); - controls.setLayout(new FlowLayout()); - - controls.add(add); - - - final JRadioButton si, nonsi; - ButtonGroup type = new ButtonGroup(); - JPanel radio = new JPanel(); - radio.add(si = new JRadioButton("SI")); - radio.add(nonsi = new JRadioButton("NonSI")); - controls.add(radio); - type.add(si); - type.add(nonsi); - - si.setSelected(true); - - si.addChangeListener(new ChangeListener(){ - @Override - public void stateChanged(ChangeEvent e) { - if ( si.isSelected() ){ - System.err.println("SI"); - f.setType(Type.SI); - } else { - System.err.println("NONSI"); - f.setType(Type.NONSI); - } - update(); - }}); - - editBottom.setBottomComponent(controls); - - - - editBottom.setDividerLocation(.8); - - return editBottom; - } - - public static void main(String args[]) { - JFrame f = new JFrame(); - f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - f.setContentPane(new SRFuelEditor(new EditablePiecewiseSaintRobertFuel())); - f.setSize(800, 600); - f.setVisible(true); - - } - -}