X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=gui%2Fcom%2Fbillkuker%2Frocketry%2Fmotorsim%2Fvisual%2Fworkbench%2FMotorEditor.java;h=c71e2fdbdcc6074d22749fc55161c97164963744;hb=0ccf63cf496d22cbd99d6604d2c883d3d2e2a632;hp=6224d6a2f4d4975ce771fb72014f9c5001be5040;hpb=aae16c6d608cbd66bb494c7a085eb68509c6f388;p=sw%2Fmotorsim diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index 6224d6a..c71e2fd 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -16,6 +16,7 @@ import java.net.URI; import java.util.List; import java.util.Vector; +import javax.measure.quantity.Duration; import javax.measure.unit.SI; import javax.swing.Box; import javax.swing.BoxLayout; @@ -55,7 +56,9 @@ import com.billkuker.rocketry.motorsim.grain.EndBurner; import com.billkuker.rocketry.motorsim.grain.Finocyl; import com.billkuker.rocketry.motorsim.grain.Moonburner; import com.billkuker.rocketry.motorsim.grain.MultiGrain; +import com.billkuker.rocketry.motorsim.grain.MultiPort; import com.billkuker.rocketry.motorsim.grain.RodAndTubeGrain; +import com.billkuker.rocketry.motorsim.grain.Square; import com.billkuker.rocketry.motorsim.grain.Star; import com.billkuker.rocketry.motorsim.visual.BurnPanel; import com.billkuker.rocketry.motorsim.visual.ClassChooser; @@ -74,6 +77,7 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR SummaryPanel sp; JTextArea error; JTabbedPane tabs; + boolean closed = false; private Vector burnWatchers = new Vector(); private DefaultComboBoxModel availableFuels = new DefaultComboBoxModel(); @@ -82,16 +86,24 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR setLayout( new BorderLayout()); tabs = new JTabbedPane(JTabbedPane.TOP); add(tabs, BorderLayout.CENTER); - setMotor(m); + availableFuels.addElement(m.getFuel()); + availableFuels.setSelectedItem(m.getFuel()); + FuelResolver.addFuelsChangeListener(this); fuelsChanged(); + setMotor(m); + + Burn.getBurnSettings().addPropertyChangeListener(this); } @Override public void fuelsChanged() { - availableFuels.removeAllElements(); - availableFuels.addElement(motor.getFuel()); + while ( availableFuels.getSize() > 0 && availableFuels.getIndexOf(availableFuels.getSelectedItem()) != 0 ) + availableFuels.removeElementAt(0); + while ( availableFuels.getSize() > 1 ) + availableFuels.removeElementAt(1); for ( Fuel f : FuelResolver.getFuelMap().values() ){ - availableFuels.addElement(f); + if ( f != availableFuels.getSelectedItem() ) + availableFuels.addElement(f); } } @@ -109,6 +121,8 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR grainTypes.add(RodAndTubeGrain.class); grainTypes.add(CSlot.class); grainTypes.add(EndBurner.class); + grainTypes.add(MultiPort.class); + grainTypes.add(Square.class); } private List> chamberTypes = new Vector>(); @@ -143,6 +157,10 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR sp = null; } currentThread = new Thread() { + { + setName("Burn " + motor.getName()); + setDaemon(true); + } public void run() { final Thread me = this; try { @@ -154,6 +172,11 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR @Override public void setProgress(float f) { if ( currentThread != me ){ + log.info("Cancel burn on change"); + throw new BurnCanceled(); + } + if ( closed ){ + log.info("Cancel burn on close"); throw new BurnCanceled(); } } @@ -299,6 +322,10 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR ((ChangeListening.Subject) motor.getChamber()) .addPropertyChangeListener(MotorEditor.this); } + if (motor.getFuel() instanceof ChangeListening.Subject ){ + ((ChangeListening.Subject) motor.getFuel()) + .addPropertyChangeListener(MotorEditor.this); + } } public CaseEditor() { @@ -359,7 +386,7 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR @Override public void actionPerformed(ActionEvent e) { motor.setFuel((Fuel)getSelectedItem()); - System.out.println("FUEL CHANGED"); + log.debug("FUEL CHANGED"); }}); } }); @@ -385,17 +412,55 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR } return motor.getChamber(); } catch (InstantiationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + log.error(e); } catch (IllegalAccessException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + log.error(e); } return null; } }); + + + l = new JLabel("Delay:"); + l.setAlignmentX(LEFT_ALIGNMENT); + nameAndFuel.add(l); + nameAndFuel.add(new JTextField(Double.toString(motor.getEjectionDelay().doubleValue(SI.SECOND))) { + private static final long serialVersionUID = 1L; + { + setAlignmentX(LEFT_ALIGNMENT); + setMinimumSize(new Dimension(200, 20)); + setMaximumSize(new Dimension(Short.MAX_VALUE, 20)); + final JTextField t = this; + addFocusListener(new FocusListener() { + + @Override + public void focusLost(FocusEvent e) { + try { + String n = t.getText(); + double d = Double.parseDouble(n); + Amount delay = Amount.valueOf(d, SI.SECOND); + if ( delay != motor.getEjectionDelay() ){ + motor.setEjectionDelay(delay); + } + } catch ( Exception ex ){ + log.warn(e); + setText(Double.toString(motor.getEjectionDelay().doubleValue(SI.SECOND))); + } + } + + @Override + public void focusGained(FocusEvent e) { + + } + }); + + } + }); + + + nameAndFuel.add(Box.createVerticalGlue()); parts.add(nameAndFuel); @@ -469,9 +534,10 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR tabs.add(bt = new BurnTab(), BURN_TAB); } + private static int idx; public static Motor defaultMotor() { Motor m = new Motor(); - m.setName("Example Motor"); + m.setName("New Motor " + ++idx); try { m.setFuel(FuelResolver.getFuel(new URI("motorsim:KNDX"))); } catch (Exception e) {