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
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
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
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
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
@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
@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
});\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