From: Bill Kuker Date: Fri, 7 Aug 2009 00:57:51 +0000 (+0000) Subject: Added burn progress bar, fixed it so burn results appear when it is finished X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=cd943f44efc8a625cfecca3fe02dd3b3d4b9dc76;p=sw%2Fmotorsim Added burn progress bar, fixed it so burn results appear when it is finished --- diff --git a/src/MotorWorkbench.java b/src/MotorWorkbench.java index e7a75b3..716ac06 100644 --- a/src/MotorWorkbench.java +++ b/src/MotorWorkbench.java @@ -1,3 +1,4 @@ +import javax.swing.SwingUtilities; import javax.swing.UIManager; public class MotorWorkbench { @@ -13,7 +14,13 @@ public class MotorWorkbench { } catch (Exception e1) { e1.printStackTrace(); } - new com.billkuker.rocketry.motorsim.visual.workbench.MotorWorkbench().setVisible(true); + SwingUtilities.invokeLater(new Runnable(){ + @Override + public void run() { + new com.billkuker.rocketry.motorsim.visual.workbench.MotorWorkbench().setVisible(true); + } + }); + } } diff --git a/src/com/billkuker/rocketry/motorsim/Burn.java b/src/com/billkuker/rocketry/motorsim/Burn.java index c528333..046dca2 100644 --- a/src/com/billkuker/rocketry/motorsim/Burn.java +++ b/src/com/billkuker/rocketry/motorsim/Burn.java @@ -34,6 +34,12 @@ public class Burn { private static Logger log = Logger.getLogger(Burn.class); protected final Motor motor; + public interface BurnProgressListener{ + public void setProgress(float p); + } + + private BurnProgressListener bpl = null; + private static final Amount atmosphereicPressure = Amount.valueOf(101000, SI.PASCAL); public class Interval{ @@ -68,6 +74,12 @@ public class Burn { burn(); } + public Burn(Motor m, BurnProgressListener bpl){ + motor = m; + this.bpl = bpl; + burn(); + } + private void burn(){ log.info("Starting burn..."); long start = new Date().getTime(); @@ -112,6 +124,11 @@ public class Burn { log.debug("Regression: " + next.regression); + if ( bpl != null ){ + Amount a = next.regression.divide(motor.getGrain().webThickness()).to(Dimensionless.UNIT); + bpl.setProgress((float)a.doubleValue(Dimensionless.UNIT)); + } + next.time = prev.time.plus(dt); //log.debug("Vold: " + motor.getGrain().volume(prev.regression).to(SI.MILLIMETER.pow(3))); diff --git a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index c9fdcce..f6e9d84 100644 --- a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -17,6 +17,7 @@ import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; +import javax.swing.JProgressBar; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.JTextField; @@ -119,11 +120,21 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { removeAll(); new Thread() { public void run() { - final Burn b = new Burn(motor); + final JProgressBar bar = new JProgressBar(0,100); + add(bar); + final Burn b = new Burn(motor, new Burn.BurnProgressListener(){ + @Override + public void setProgress(float f){ + bar.setValue((int)(f*100)); + } + }); final BurnPanel bp = new BurnPanel(b); SwingUtilities.invokeLater(new Thread() { public void run() { + remove(bar); add(bp, BorderLayout.CENTER); + + revalidate(); } }); } diff --git a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java index 92e28c8..ee12fa8 100644 --- a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java +++ b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java @@ -41,7 +41,6 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { private JSplitPane split; private JTree tree; private JTabbedPane motors; - private JToolBar bar; private WorkbenchTreeModel tm; private HashMap e2f = new HashMap(); @@ -56,10 +55,6 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener { top = new JPanel(new BorderLayout()); setContentPane(top); - bar = new JToolBar(); - bar.add(new JButton("Burn")); - top.add(bar, BorderLayout.PAGE_START); - motors = new JTabbedPane(); tree = new JTree(tm = new WorkbenchTreeModel());