Stop processing a burn on motor close
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / workbench / MotorEditor.java
index 38e47fb38822be08473c48ddc18668cf488dcbb8..c71e2fdbdcc6074d22749fc55161c97164963744 100644 (file)
@@ -16,6 +16,7 @@ import java.net.URI;
 import java.util.List;\r
 import java.util.Vector;\r
 \r
+import javax.measure.quantity.Duration;\r
 import javax.measure.unit.SI;\r
 import javax.swing.Box;\r
 import javax.swing.BoxLayout;\r
@@ -55,7 +56,9 @@ import com.billkuker.rocketry.motorsim.grain.EndBurner;
 import com.billkuker.rocketry.motorsim.grain.Finocyl;\r
 import com.billkuker.rocketry.motorsim.grain.Moonburner;\r
 import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
+import com.billkuker.rocketry.motorsim.grain.MultiPort;\r
 import com.billkuker.rocketry.motorsim.grain.RodAndTubeGrain;\r
+import com.billkuker.rocketry.motorsim.grain.Square;\r
 import com.billkuker.rocketry.motorsim.grain.Star;\r
 import com.billkuker.rocketry.motorsim.visual.BurnPanel;\r
 import com.billkuker.rocketry.motorsim.visual.ClassChooser;\r
@@ -74,6 +77,7 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR
        SummaryPanel sp;\r
        JTextArea error;\r
        JTabbedPane tabs;\r
+       boolean closed = false;\r
 \r
        private Vector<BurnWatcher> burnWatchers = new Vector<BurnWatcher>();\r
        private DefaultComboBoxModel availableFuels = new DefaultComboBoxModel();\r
@@ -87,6 +91,8 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR
                FuelResolver.addFuelsChangeListener(this);\r
                fuelsChanged();\r
                setMotor(m);\r
+               \r
+               Burn.getBurnSettings().addPropertyChangeListener(this);\r
        }\r
 \r
        @Override\r
@@ -115,6 +121,8 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR
                grainTypes.add(RodAndTubeGrain.class);\r
                grainTypes.add(CSlot.class);\r
                grainTypes.add(EndBurner.class);\r
+               grainTypes.add(MultiPort.class);\r
+               grainTypes.add(Square.class);\r
        }\r
        \r
        private List<Class<? extends Chamber>> chamberTypes = new Vector<Class<? extends Chamber>>();\r
@@ -149,6 +157,10 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR
                                sp = null;\r
                        }\r
                        currentThread = new Thread() {\r
+                               {\r
+                                       setName("Burn " + motor.getName());\r
+                                       setDaemon(true);\r
+                               }\r
                                public void run() {\r
                                        final Thread me = this;\r
                                        try {                                           \r
@@ -160,6 +172,11 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR
                                                                        @Override\r
                                                                        public void setProgress(float f) {\r
                                                                                if ( currentThread != me ){\r
+                                                                                       log.info("Cancel burn on change");\r
+                                                                                       throw new BurnCanceled();\r
+                                                                               }\r
+                                                                               if ( closed ){\r
+                                                                                       log.info("Cancel burn on close");\r
                                                                                        throw new BurnCanceled();\r
                                                                                }\r
                                                                        }\r
@@ -369,7 +386,7 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR
                                                @Override\r
                                                public void actionPerformed(ActionEvent e) {\r
                                                        motor.setFuel((Fuel)getSelectedItem());\r
-                                                       System.out.println("FUEL CHANGED");\r
+                                                       log.debug("FUEL CHANGED");\r
                                                }});\r
                                }\r
                        });\r
@@ -404,6 +421,46 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR
                        });\r
                        \r
                        \r
+                       \r
+                       \r
+                       l = new JLabel("Delay:");\r
+                       l.setAlignmentX(LEFT_ALIGNMENT);\r
+                       nameAndFuel.add(l);\r
+                       nameAndFuel.add(new JTextField(Double.toString(motor.getEjectionDelay().doubleValue(SI.SECOND))) {\r
+                               private static final long serialVersionUID = 1L;\r
+                               {\r
+                                       setAlignmentX(LEFT_ALIGNMENT);\r
+                                       setMinimumSize(new Dimension(200, 20));\r
+                                       setMaximumSize(new Dimension(Short.MAX_VALUE, 20));\r
+                                       final JTextField t = this;\r
+                                       addFocusListener(new FocusListener() {\r
+\r
+                                               @Override\r
+                                               public void focusLost(FocusEvent e) {\r
+                                                       try {\r
+                                                               String n = t.getText();\r
+                                                               double d = Double.parseDouble(n);\r
+                                                               Amount<Duration> delay = Amount.valueOf(d, SI.SECOND);\r
+                                                               if ( delay != motor.getEjectionDelay() ){\r
+                                                                       motor.setEjectionDelay(delay);\r
+                                                               }\r
+                                                       } catch ( Exception ex ){\r
+                                                               log.warn(e);\r
+                                                               setText(Double.toString(motor.getEjectionDelay().doubleValue(SI.SECOND)));\r
+                                                       }\r
+                                               }\r
+\r
+                                               @Override\r
+                                               public void focusGained(FocusEvent e) {\r
+\r
+                                               }\r
+                                       });\r
+\r
+                               }\r
+                       });\r
+                       \r
+                       \r
+                       \r
                        nameAndFuel.add(Box.createVerticalGlue());\r
                        parts.add(nameAndFuel);\r
                        \r