Split out summary panel
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / workbench / MotorEditor.java
index dcea55419256d73a2e2f31312f6e068f0270c13a..2c863e62b99fbcc1e707c8553501f2b37dc7711c 100644 (file)
@@ -4,13 +4,16 @@ import java.awt.BorderLayout;
 import java.awt.Dimension;\r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ActionListener;\r
+import java.awt.event.ComponentEvent;\r
+import java.awt.event.ComponentListener;\r
 import java.awt.event.FocusEvent;\r
 import java.awt.event.FocusListener;\r
 import java.beans.PropertyChangeEvent;\r
 import java.beans.PropertyChangeListener;\r
 import java.beans.PropertyVetoException;\r
-import java.io.IOException;\r
+import java.util.Collection;\r
 import java.util.HashMap;\r
+import java.util.List;\r
 import java.util.Map;\r
 import java.util.Vector;\r
 \r
@@ -18,7 +21,7 @@ import javax.measure.quantity.Length;
 import javax.measure.unit.SI;\r
 import javax.swing.Box;\r
 import javax.swing.BoxLayout;\r
-import javax.swing.ComboBoxModel;\r
+import javax.swing.DefaultComboBoxModel;\r
 import javax.swing.JButton;\r
 import javax.swing.JComboBox;\r
 import javax.swing.JFrame;\r
@@ -34,8 +37,6 @@ import javax.swing.UIManager;
 import javax.swing.WindowConstants;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;\r
-import org.fife.ui.rsyntaxtextarea.SyntaxConstants;\r
 import org.jscience.physics.amount.Amount;\r
 \r
 import com.billkuker.rocketry.motorsim.Burn;\r
@@ -48,6 +49,7 @@ import com.billkuker.rocketry.motorsim.Grain;
 import com.billkuker.rocketry.motorsim.Motor;\r
 import com.billkuker.rocketry.motorsim.Nozzle;\r
 import com.billkuker.rocketry.motorsim.RocketScience;\r
+import com.billkuker.rocketry.motorsim.cases.Schedule40;\r
 import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
 import com.billkuker.rocketry.motorsim.grain.CSlot;\r
 import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
@@ -56,7 +58,7 @@ import com.billkuker.rocketry.motorsim.grain.Finocyl;
 import com.billkuker.rocketry.motorsim.grain.Moonburner;\r
 import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
 import com.billkuker.rocketry.motorsim.grain.RodAndTubeGrain;\r
-import com.billkuker.rocketry.motorsim.io.MotorIO;\r
+import com.billkuker.rocketry.motorsim.grain.Star;\r
 import com.billkuker.rocketry.motorsim.visual.BurnPanel;\r
 import com.billkuker.rocketry.motorsim.visual.Editor;\r
 import com.billkuker.rocketry.motorsim.visual.GrainPanel;\r
@@ -65,30 +67,41 @@ import com.billkuker.rocketry.motorsim.visual.HardwarePanel;
 public class MotorEditor extends JTabbedPane implements PropertyChangeListener {\r
        private static final long serialVersionUID = 1L;\r
        private static Logger log = Logger.getLogger(MotorEditor.class);\r
-       RSyntaxTextArea text = new RSyntaxTextArea();\r
        Motor motor;\r
        GrainEditor grainEditor;\r
        BurnTab bt;\r
        Burn burn;\r
 \r
        private Vector<BurnWatcher> burnWatchers = new Vector<BurnWatcher>();\r
-       private ComboBoxModel availableFuels;\r
+       private DefaultComboBoxModel availableFuels = new DefaultComboBoxModel();\r
+       \r
+       public void addFuel(Fuel f){\r
+               availableFuels.addElement(f);\r
+       }\r
 \r
        //private static final int XML_TAB = 0;\r
        private static final int CASING_TAB = 0;\r
        private static final int GRAIN_TAB = 1;\r
        private static final int BURN_TAB = 2;\r
 \r
-       @SuppressWarnings("unchecked")\r
-       private Class[] grainTypes = { CoredCylindricalGrain.class, Finocyl.class,\r
-                       Moonburner.class, RodAndTubeGrain.class, CSlot.class, EndBurner.class };\r
+       private List<Class<? extends Grain>> grainTypes = new Vector<Class<? extends Grain>>();\r
+       {\r
+               grainTypes.add(CoredCylindricalGrain.class);\r
+               grainTypes.add(Finocyl.class);\r
+               grainTypes.add(Star.class);\r
+               grainTypes.add(Moonburner.class);\r
+               grainTypes.add(RodAndTubeGrain.class);\r
+               grainTypes.add(CSlot.class);\r
+               grainTypes.add(EndBurner.class);\r
+       }\r
 \r
        private abstract class Chooser<T> extends JPanel {\r
                private static final long serialVersionUID = 1L;\r
-               private Class<? extends T>[] types;\r
+               private List<Class<? extends T>> types;\r
                private Map<Class<? extends T>, T> old = new HashMap<Class<? extends T>, T>();\r
 \r
-               public Chooser(T initial, Class<? extends T>... ts) {\r
+               @SuppressWarnings("unchecked")\r
+               public Chooser(T initial, List<Class<? extends T>> ts) {\r
                        types = ts;\r
                        if ( initial != null )\r
                                old.put((Class<? extends T>)initial.getClass(), initial);\r
@@ -163,6 +176,7 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                                                SwingUtilities.invokeLater(new Thread() {\r
                                                        public void run() {\r
                                                                remove(bar);\r
+                                                               remove(progress);\r
                                                                add(bp, BorderLayout.CENTER);\r
 \r
                                                                for (BurnWatcher bw : burnWatchers)\r
@@ -232,12 +246,13 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                }\r
        }\r
 \r
-       private class CaseEditor extends JSplitPane {\r
+       private class CaseEditor extends JSplitPane implements ComponentListener {\r
                private static final long serialVersionUID = 1L;\r
 \r
                public CaseEditor(Nozzle n, Chamber c) {\r
                        super(JSplitPane.VERTICAL_SPLIT);\r
                        setName("General Parameters");\r
+                       this.addComponentListener(this);\r
                        \r
                        JPanel parts = new JPanel();\r
                        parts.setLayout(new BoxLayout(parts, BoxLayout.X_AXIS));\r
@@ -275,16 +290,22 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                                }\r
                        });\r
                        nameAndFuel.add(new JLabel("Fuel:"));\r
-                       nameAndFuel.add( new JComboBox(availableFuels){{\r
-                               setMinimumSize(new Dimension(200, 20));\r
-                               setMaximumSize(new Dimension(Short.MAX_VALUE, 20));\r
-                               addActionListener(new ActionListener(){\r
-                                       @Override\r
-                                       public void actionPerformed(ActionEvent e) {\r
-                                               motor.setFuel((Fuel)getSelectedItem());\r
-                                               System.out.println("FUEL CHANGED");\r
-                                       }});\r
-                       }});\r
+                       nameAndFuel.add( new JComboBox(availableFuels){\r
+                               {\r
+                                       this.setSelectedItem(motor.getFuel());\r
+                               }\r
+                               private static final long serialVersionUID = 1L;\r
+                               {\r
+                                       setMinimumSize(new Dimension(200, 20));\r
+                                       setMaximumSize(new Dimension(Short.MAX_VALUE, 20));\r
+                                       addActionListener(new ActionListener(){\r
+                                               @Override\r
+                                               public void actionPerformed(ActionEvent e) {\r
+                                                       motor.setFuel((Fuel)getSelectedItem());\r
+                                                       System.out.println("FUEL CHANGED");\r
+                                               }});\r
+                               }\r
+                       });\r
                        nameAndFuel.add(Box.createVerticalGlue());\r
                        parts.add(nameAndFuel);\r
                        \r
@@ -309,41 +330,47 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                                                .addPropertyChangeListener(MotorEditor.this);\r
                        }\r
                }\r
-       }\r
 \r
-       {\r
-               text.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_XML);\r
+               @Override\r
+               public void componentHidden(ComponentEvent arg0) {\r
 \r
+               }\r
+\r
+               @Override\r
+               public void componentMoved(ComponentEvent arg0) {\r
+\r
+               }\r
+\r
+               @Override\r
+               public void componentResized(ComponentEvent arg0) {\r
+                       setResizeWeight(.5);\r
+                       setDividerLocation(.5);\r
+               }\r
+\r
+               @Override\r
+               public void componentShown(ComponentEvent arg0) {\r
+\r
+               }\r
        }\r
 \r
-       public MotorEditor(Motor m, ComboBoxModel fuels) {\r
+\r
+       public MotorEditor(Motor m, Collection<Fuel> fuels) {\r
                super(JTabbedPane.BOTTOM);\r
-               this.availableFuels = fuels;\r
-               text.setName("XML");\r
-               text.setEditable(false);\r
-               //add(text, XML_TAB);\r
-               setMotor(m, true);\r
+               for ( Fuel f : fuels )\r
+                       addFuel(f);\r
+               setMotor(m);\r
        }\r
 \r
        public Motor getMotor() {\r
                return motor;\r
        }\r
 \r
-       private void reText() {\r
-               try {\r
-                       text.setText(MotorIO.writeMotor(motor));\r
-               } catch (IOException e) {\r
-                       throw new Error(e);\r
-               }\r
-       }\r
 \r
-       private void setMotor(Motor m, boolean retext) {\r
+       private void setMotor(Motor m) {\r
                if (motor != null)\r
                        motor.removePropertyChangeListener(this);\r
                motor = m;\r
                motor.addPropertyChangeListener(this);\r
-               if (retext)\r
-                       reText();\r
                if (grainEditor != null)\r
                        remove(grainEditor);\r
                while (getTabCount() > 1)\r
@@ -353,7 +380,6 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                add(bt = new BurnTab(), BURN_TAB);\r
        }\r
 \r
-       @Deprecated\r
        public static Motor defaultMotor() {\r
                Motor m = new Motor();\r
                m.setName("Example Motor");\r
@@ -364,6 +390,10 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
                m.setChamber(c);\r
 \r
+               Schedule40 pvc = new Schedule40();\r
+               pvc.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
+               m.setChamber(pvc);\r
+               \r
                CoredCylindricalGrain g = new CoredCylindricalGrain();\r
                try {\r
                        g.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
@@ -372,6 +402,7 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                } catch (PropertyVetoException v) {\r
                        throw new Error(v);\r
                }\r
+               \r
 \r
                m.setGrain(new MultiGrain(g, 2));\r
 \r
@@ -416,7 +447,6 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
        }\r
 \r
        public void propertyChange(PropertyChangeEvent evt) {\r
-               reText();\r
                // Dont re-burn for a name change!\r
                if (!evt.getPropertyName().equals("Name")){\r
                        bt.reBurn();\r