From 502e561fc7edf94b78f7d54a98d655f9a7f43372 Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Fri, 12 Nov 2010 14:39:47 +0000 Subject: [PATCH] Removed stupid tree Removed fuel editing from main window Added fuel edit window Still need to plumb fuel editor and FuelResolver --- .../visual/workbench/FuelsEditor.java | 64 ------- .../visual/workbench/MotorEditor.java | 2 +- .../visual/workbench/MotorWorkbench.java | 168 ++++------------- .../workbench/WorkbenchTreeCellRenderer.java | 63 ------- .../visual/workbench/WorkbenchTreeModel.java | 171 ------------------ .../AbstractFuelEditor.java | 73 +------- gui/fuel/FuelsEditor.java | 87 +++++++++ .../workbench => fuel}/LinearFuelEditor.java | 28 ++- .../workbench => fuel}/SRFuelEditor.java | 20 +- 9 files changed, 146 insertions(+), 530 deletions(-) delete mode 100644 gui/com/billkuker/rocketry/motorsim/visual/workbench/FuelsEditor.java delete mode 100644 gui/com/billkuker/rocketry/motorsim/visual/workbench/WorkbenchTreeCellRenderer.java delete mode 100644 gui/com/billkuker/rocketry/motorsim/visual/workbench/WorkbenchTreeModel.java rename gui/{com/billkuker/rocketry/motorsim/visual/workbench => fuel}/AbstractFuelEditor.java (54%) create mode 100644 gui/fuel/FuelsEditor.java rename gui/{com/billkuker/rocketry/motorsim/visual/workbench => fuel}/LinearFuelEditor.java (85%) rename gui/{com/billkuker/rocketry/motorsim/visual/workbench => fuel}/SRFuelEditor.java (91%) diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/FuelsEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/FuelsEditor.java deleted file mode 100644 index 61f7ca8..0000000 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/FuelsEditor.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.billkuker.rocketry.motorsim.visual.workbench; - -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.EditableFuel; -import com.billkuker.rocketry.motorsim.fuel.PiecewiseLinearFuel; -import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel; -import com.billkuker.rocketry.motorsim.io.MotorIO; -import com.billkuker.rocketry.motorsim.visual.FuelPanel; -import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor; -import com.billkuker.rocketry.motorsim.visual.workbench.AbstractFuelEditor.EditablePSRFuel; - -public class FuelsEditor extends MultiObjectEditor { - - public FuelsEditor(Frame frame) { - super(frame, "Fuel"); - } - - @Override - public AbstractFuelEditor createEditor(Fuel o) { - if ( o instanceof PiecewiseLinearFuel ){ - return new LinearFuelEditor((PiecewiseLinearFuel)o); - } else if ( o instanceof EditableFuel ){ - return new SRFuelEditor(new EditablePSRFuel(SaintRobertFuel.Type.SI)); - } - return null; - } - - @Override - public Fuel newObject() { - return new PiecewiseLinearFuel(); - } - - @Override - protected Fuel loadFromFile(File f) throws IOException { - return MotorIO.readFuel(new FileInputStream(f)); - } - - @Override - protected void saveToFile(Fuel o, File f) throws IOException { - MotorIO.writeFuel(o, new FileOutputStream(f)); - } - - 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/visual/workbench/MotorEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index ad2ecf7..2dd251a 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -427,7 +427,7 @@ public class MotorEditor extends JPanel implements PropertyChangeListener { public MotorEditor(Motor m, Collection fuels) { setLayout( new BorderLayout()); - tabs = new JTabbedPane(JTabbedPane.BOTTOM); + tabs = new JTabbedPane(JTabbedPane.TOP); add(tabs, BorderLayout.CENTER); for ( Fuel f : fuels ) diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java index 9c58d6e..5e9652f 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java @@ -1,12 +1,9 @@ package com.billkuker.rocketry.motorsim.visual.workbench; import java.awt.BorderLayout; -import java.awt.Dimension; import java.awt.FileDialog; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -22,48 +19,44 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButtonMenuItem; import javax.swing.JSeparator; -import javax.swing.JSplitPane; import javax.swing.JTabbedPane; -import javax.swing.JTree; import javax.swing.WindowConstants; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; import com.billkuker.rocketry.motorsim.Burn; 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.PiecewiseLinearFuel; -import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel; import com.billkuker.rocketry.motorsim.io.ENGExporter; import com.billkuker.rocketry.motorsim.io.MotorIO; -import com.billkuker.rocketry.motorsim.visual.FuelPanel; -import com.billkuker.rocketry.motorsim.visual.workbench.AbstractFuelEditor.EditablePSRFuel; -import com.billkuker.rocketry.motorsim.visual.workbench.WorkbenchTreeModel.FuelEditNode; -import com.billkuker.rocketry.motorsim.visual.workbench.WorkbenchTreeModel.FuelNode; -public class MotorWorkbench extends JFrame implements TreeSelectionListener { +import fuel.FuelsEditor; + +public class MotorWorkbench extends JFrame { private static final long serialVersionUID = 1L; private JPanel top; - private JSplitPane split; - private JTree tree; private JTabbedPane motors; - private JTabbedPane fuels; - private WorkbenchTreeModel tm; private MultiBurnChart mb; private JFrame allBurns; + + private JFrame fuelEditorFrame = new JFrame(){ + private static final long serialVersionUID = 1L; + { + setSize(1024, 768); + add(fuelEditor = new FuelsEditor(this)); + JMenuBar b; + setJMenuBar(b = new JMenuBar()); + b.add(fuelEditor.getMenu()); + setTitle("MotorSim - Fuel Editor"); + } + }; + private FuelsEditor fuelEditor; private HashMap e2f = new HashMap(); private HashMap f2e = new HashMap(); private HashMap m2e = new HashMap(); - - private static final int TREE_WIDTH = 200; public MotorWorkbench() { setTitle("MotorSim 1.0 RC1"); @@ -80,23 +73,8 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { allBurns.add(mb); motors = new JTabbedPane(); - fuels = new JTabbedPane(); - - tree = new JTree(tm = new WorkbenchTreeModel()); - tree.setCellRenderer(new WorkbenchTreeCellRenderer()); - tree.getSelectionModel().setSelectionMode( - TreeSelectionModel.SINGLE_TREE_SELECTION); - tree.setMinimumSize(new Dimension(TREE_WIDTH, 100)); - - // Listen for when the selection changes. - tree.addTreeSelectionListener(this); - - split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, - tree, motors); - split.setDividerLocation(TREE_WIDTH); - split.revalidate(); - top.add(split, BorderLayout.CENTER); + top.add(motors, BorderLayout.CENTER); for ( Fuel f : FuelResolver.getFuelMap().values() ){ addFuel(f); @@ -172,7 +150,6 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { public void actionPerformed(ActionEvent ev) { MotorEditor e = (MotorEditor) motors .getSelectedComponent(); - tm.removeMotor(e.getMotor()); motors.remove(e); f2e.remove(e2f.get(e)); e2f.remove(e); @@ -232,40 +209,6 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { }); - add(new JSeparator()); - add(new JMenu("New Fuel"){ - private static final long serialVersionUID = 1L; - { - add(new JMenuItem("Saint-Robert") { - private static final long serialVersionUID = 1L; - { - addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - newFuel(new SRFuelEditor(new EditablePSRFuel(SaintRobertFuel.Type.SI))); - } - }); - - } - }); - add(new JMenuItem("Linear"){ - private static final long serialVersionUID = 1L; - { - addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - newFuel(new LinearFuelEditor(new PiecewiseLinearFuel())); - } - }); - - } - }); - } - }); - - add(new JMenuItem("Save Fuel") { - private static final long serialVersionUID = 1L; - }); add(new JSeparator()); add(new JMenuItem("Export .ENG"){ private static final long serialVersionUID = 1L; @@ -326,7 +269,7 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { add(new JMenu("View") { private static final long serialVersionUID = 1L; { - add(new JMenuItem("Show All Motors Graph") { + add(new JMenuItem("All Motors Graph") { private static final long serialVersionUID = 1L; { addActionListener(new ActionListener() { @@ -338,6 +281,18 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { }); } }); + add(new JMenuItem("Fuel Editor") { + private static final long serialVersionUID = 1L; + { + addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + fuelEditorFrame.setVisible(true); + fuelEditorFrame.toFront(); + } + }); + } + }); } }); } @@ -347,33 +302,8 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { private void addFuel(Fuel f){ for ( MotorEditor e : m2e.values() ) e.addFuel(f); - FuelPanel fp = new FuelPanel(f); - FuelNode fn = tm.new FuelNode(fp, f); - tm.getFuels().add(fn); - tm.nodeStructureChanged(tm.getFuels()); - fuels.addTab(f.getName(), fp); } - private void newFuel(final AbstractFuelEditor ed){ - for ( MotorEditor e : m2e.values() ) - e.addFuel(ed.getFuel()); - final FuelEditNode node = tm.new FuelEditNode(ed); - tm.getFuels().add(node); - tm.nodeStructureChanged(tm.getFuels()); - fuels.addTab(ed.getFuel().getName(), ed); - ed.getFuel().addPropertyChangeListener(new PropertyChangeListener(){ - @Override - public void propertyChange(PropertyChangeEvent evt) { - if ( evt.getPropertyName().equals("Name")){ - for ( int i = 0; i < fuels.getTabCount(); i++ ){ - if ( fuels.getComponent(i) == ed ){ - fuels.setTitleAt(i, ed.getFuel().getName()); - tm.nodeChanged(node); - } - } - } - }}); - } private void save(Motor m, File f) { try { @@ -386,7 +316,6 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { } public void addMotor(Motor m, File f) { - tm.addMotor(m); MotorEditor e = new MotorEditor(m, FuelResolver.getFuelMap().values()); e.addBurnWatcher(mb); String title; @@ -401,40 +330,5 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { motors.addTab(title, e); } - @Override - public void valueChanged(TreeSelectionEvent e) { - if (e.getPath().getLastPathComponent() instanceof FuelNode) { - FuelNode fen = ((FuelNode) e.getPath().getLastPathComponent()); - fuels.setSelectedComponent(fen.getUserObject()); - split.setRightComponent(fuels); - split.setDividerLocation(TREE_WIDTH); - split.revalidate(); - } - - Motor m = getMotor(e.getPath()); - - if (m == null) - return; - - split.setRightComponent(motors); - split.setDividerLocation(TREE_WIDTH); - split.revalidate(); - motors.setSelectedComponent(m2e.get(m)); - - if (e.getPath().getLastPathComponent() instanceof DefaultMutableTreeNode) { - Object o = ((DefaultMutableTreeNode) e.getPath() - .getLastPathComponent()).getUserObject(); - m2e.get(m).focusOnObject(o); - } - - } - - private Motor getMotor(TreePath p) { - if (p.getLastPathComponent() instanceof WorkbenchTreeModel.MotorNode) { - return ((WorkbenchTreeModel.MotorNode) p.getLastPathComponent()) - .getUserObject(); - } else if (p.getPath().length > 1) - return getMotor(p.getParentPath()); - return null; - } + } diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/WorkbenchTreeCellRenderer.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/WorkbenchTreeCellRenderer.java deleted file mode 100644 index ae3e3a6..0000000 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/WorkbenchTreeCellRenderer.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.billkuker.rocketry.motorsim.visual.workbench; - -import java.awt.Color; -import java.awt.Component; - -import javax.swing.JTree; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeCellRenderer; - -import com.billkuker.rocketry.motorsim.Motor; -import com.billkuker.rocketry.motorsim.Validating; -import com.billkuker.rocketry.motorsim.Validating.ValidationException; -import com.billkuker.rocketry.motorsim.visual.workbench.WorkbenchTreeModel.FuelNode; - -public class WorkbenchTreeCellRenderer extends DefaultTreeCellRenderer { - private static final long serialVersionUID = 1L; - - @Override - public Component getTreeCellRendererComponent(JTree tree, final Object value, - boolean sel, boolean expanded, boolean leaf, int row, - boolean hasFocus) { - - String tip = null; - setTextNonSelectionColor(Color.black); - setTextSelectionColor(Color.white); - - Object part = null; - if (value instanceof DefaultMutableTreeNode) { - part = ((DefaultMutableTreeNode) value).getUserObject(); - } - - if ( part instanceof Validating ){ - try { - ((Validating)part).validate(); - } catch (ValidationException e) { - setTextSelectionColor(Color.RED); - setTextNonSelectionColor(Color.RED); - setToolTipText(e.getMessage()); - tip = e.getMessage(); - } - } - - super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, - row, hasFocus); - - if (part instanceof Motor) { - setText(((Motor) part).getName()); - } else if ( value instanceof FuelNode ){ - setText(((FuelNode)value).getFuel().getName()); - } else if ( part instanceof String ) { - setText((String)part); - } else if ( part == null ) { - setText(""); - } else { - setText(part.getClass().getSimpleName()); - } - setToolTipText(tip); - - - - return this; - } -} diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/WorkbenchTreeModel.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/WorkbenchTreeModel.java deleted file mode 100644 index 1db767f..0000000 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/WorkbenchTreeModel.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.billkuker.rocketry.motorsim.visual.workbench; - -import java.awt.Component; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.Enumeration; - -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeNode; - -import com.billkuker.rocketry.motorsim.ChangeListening; -import com.billkuker.rocketry.motorsim.Fuel; -import com.billkuker.rocketry.motorsim.Motor; -import com.billkuker.rocketry.motorsim.grain.MultiGrain; - -public class WorkbenchTreeModel extends DefaultTreeModel { - - private static final long serialVersionUID = 1L; - - //TreeNode root = new DefaultMutableTreeNode("Root"); - DefaultMutableTreeNode motors = new DefaultMutableTreeNode("All Motors"); - DefaultMutableTreeNode fuel = new DefaultMutableTreeNode("Fuels"); - - public class MultiGrainNode extends PartNode{ - private static final long serialVersionUID = 1L; - public MultiGrainNode(MultiGrain part) { - super(part); - setAllowsChildren(true); - add(new PartNode(part.getGrain())); - } - @Override - public void propertyChange(PropertyChangeEvent e) { - if ( e.getPropertyName().equals("Grain")){ - remove(0); - add(new PartNode(((MultiGrain)getUserObject()).getGrain())); - nodesChanged(this, new int[]{0}); - } - super.propertyChange(e); - } - } - - public class FuelNode extends DefaultMutableTreeNode{ - private static final long serialVersionUID = 1L; - Fuel f; - public FuelNode(Component c, Fuel f){ - super(c, false); - this.f = f; - } - - @Override - public Component getUserObject(){ - return (Component)super.getUserObject(); - } - - public Fuel getFuel(){ - return f; - } - } - - public class FuelEditNode extends FuelNode { - private static final long serialVersionUID = 1L; - - public FuelEditNode(AbstractFuelEditor sr){ - super(sr, sr.getFuel()); - sr.getFuel().addPropertyChangeListener(new PropertyChangeListener(){ - - @Override - public void propertyChange(PropertyChangeEvent evt) { - nodeChanged(FuelEditNode.this); - }}); - } - - @Override - public AbstractFuelEditor getUserObject(){ - return (AbstractFuelEditor)super.getUserObject(); - } - - } - - public class PartNode extends DefaultMutableTreeNode implements PropertyChangeListener { - private static final long serialVersionUID = 1L; - - public PartNode(Object part) { - super(part, false); - if (part instanceof ChangeListening.Subject) { - ((ChangeListening.Subject) part).addPropertyChangeListener(this); - } - } - - @Override - public void propertyChange(PropertyChangeEvent e) { - nodeChanged(this); - } - - } - - public class MotorNode extends PartNode implements PropertyChangeListener { - private static final long serialVersionUID = 1L; - Motor motor; - PartNode cn, nn, gn, fn; - - public MotorNode(Motor m) { - super(m); - setAllowsChildren(true); - motor = m; - add( cn = new PartNode(m.getChamber())); - add( nn = new PartNode(m.getNozzle())); - if ( m.getGrain() instanceof MultiGrain ){ - gn = new MultiGrainNode(((MultiGrain)m.getGrain())); - } else { - gn = new PartNode(m.getGrain()); - } - add(gn); - if (m instanceof ChangeListening.Subject) { - ((ChangeListening.Subject) m).addPropertyChangeListener(this); - } - } - - @Override - public Motor getUserObject(){ - return (Motor)super.getUserObject(); - } - - @Override - public void propertyChange(PropertyChangeEvent e) { - nodeChanged(this); - super.propertyChange(e); - } - - } - - public WorkbenchTreeModel() { - super(new DefaultMutableTreeNode("Root"), true); - getRoot().add(motors); - getRoot().add(fuel); - } - - @Override - public DefaultMutableTreeNode getRoot(){ - return (DefaultMutableTreeNode)super.getRoot(); - } - - public DefaultMutableTreeNode getMotors(){ - return motors; - } - - public DefaultMutableTreeNode getFuels(){ - return fuel; - } - - public void addMotor(Motor m){ - motors.add(new MotorNode(m)); - nodesWereInserted(motors, new int[]{motors.getChildCount()-1}); - - } - - @SuppressWarnings("unchecked") - public void removeMotor(Motor m){ - Enumeration e = motors.children(); - while ( e.hasMoreElements() ){ - TreeNode n = e.nextElement(); - if ( n instanceof MotorNode ){ - if ( ((MotorNode)n).getUserObject() == m ){ - removeNodeFromParent((MotorNode)n); - } - } - } - } - -} diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/AbstractFuelEditor.java b/gui/fuel/AbstractFuelEditor.java similarity index 54% rename from gui/com/billkuker/rocketry/motorsim/visual/workbench/AbstractFuelEditor.java rename to gui/fuel/AbstractFuelEditor.java index af3fa26..23da52a 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/AbstractFuelEditor.java +++ b/gui/fuel/AbstractFuelEditor.java @@ -1,10 +1,9 @@ -package com.billkuker.rocketry.motorsim.visual.workbench; +package fuel; 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; @@ -12,82 +11,12 @@ 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; diff --git a/gui/fuel/FuelsEditor.java b/gui/fuel/FuelsEditor.java new file mode 100644 index 0000000..4d599f6 --- /dev/null +++ b/gui/fuel/FuelsEditor.java @@ -0,0 +1,87 @@ +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/com/billkuker/rocketry/motorsim/visual/workbench/LinearFuelEditor.java b/gui/fuel/LinearFuelEditor.java similarity index 85% rename from gui/com/billkuker/rocketry/motorsim/visual/workbench/LinearFuelEditor.java rename to gui/fuel/LinearFuelEditor.java index 65a255a..93aff74 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/LinearFuelEditor.java +++ b/gui/fuel/LinearFuelEditor.java @@ -1,4 +1,4 @@ -package com.billkuker.rocketry.motorsim.visual.workbench; +package fuel; import java.awt.Component; import java.awt.Dimension; @@ -6,38 +6,29 @@ 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.Map; import java.util.Vector; import javax.measure.quantity.Pressure; import javax.measure.quantity.Velocity; import javax.measure.unit.SI; -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.PiecewiseLinearFuel; -import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel; -import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type; +import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel; public class LinearFuelEditor 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)); Amount v = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(SI.METERS_PER_SECOND)); @@ -135,11 +126,18 @@ public class LinearFuelEditor extends AbstractFuelEditor { private Vector entries = new Vector(); JPanel controls; - final PiecewiseLinearFuel f; + final EditablePiecewiseLinearFuel f; - public LinearFuelEditor(PiecewiseLinearFuel 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(){ @@ -180,7 +178,7 @@ public class LinearFuelEditor extends AbstractFuelEditor { public static void main(String args[]) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - f.setContentPane(new LinearFuelEditor(new PiecewiseLinearFuel())); + f.setContentPane(new LinearFuelEditor(new EditablePiecewiseLinearFuel())); f.setSize(800, 600); f.setVisible(true); diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/SRFuelEditor.java b/gui/fuel/SRFuelEditor.java similarity index 91% rename from gui/com/billkuker/rocketry/motorsim/visual/workbench/SRFuelEditor.java rename to gui/fuel/SRFuelEditor.java index d4aa6d0..53e3dd4 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/SRFuelEditor.java +++ b/gui/fuel/SRFuelEditor.java @@ -1,4 +1,4 @@ -package com.billkuker.rocketry.motorsim.visual.workbench; +package fuel; import java.awt.Component; import java.awt.Dimension; @@ -27,8 +27,8 @@ import javax.swing.table.AbstractTableModel; import org.jscience.physics.amount.Amount; import com.billkuker.rocketry.motorsim.RocketScience; -import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel; 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; @@ -135,14 +135,20 @@ public class SRFuelEditor extends AbstractFuelEditor { private Vector entries = new Vector(); JPanel controls; - final EditablePSRFuel f; + final EditablePiecewiseSaintRobertFuel f; - public SRFuelEditor(EditablePSRFuel 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(){ @@ -208,7 +214,7 @@ public class SRFuelEditor extends AbstractFuelEditor { public static void main(String args[]) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - f.setContentPane(new SRFuelEditor(new EditablePSRFuel(SaintRobertFuel.Type.SI))); + f.setContentPane(new SRFuelEditor(new EditablePiecewiseSaintRobertFuel())); f.setSize(800, 600); f.setVisible(true); -- 2.39.2