Added burn progress bar, fixed it so burn results appear when it is finished
authorBill Kuker <bkuker@billkuker.com>
Fri, 7 Aug 2009 00:57:51 +0000 (00:57 +0000)
committerBill Kuker <bkuker@billkuker.com>
Fri, 7 Aug 2009 00:57:51 +0000 (00:57 +0000)
src/MotorWorkbench.java
src/com/billkuker/rocketry/motorsim/Burn.java
src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java
src/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java

index e7a75b37da13855f2a5fb58f3d8acc597f8d28df..716ac0627e15bc2cd5032e83e45b31940f773483 100644 (file)
@@ -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);
+                       }
+               });
+               
        }
 
 }
index c528333185343c2ab80ddf8ab910b8e5ec6a4142..046dca2f5c66ae1e40b6055df492eb9557d86ce2 100644 (file)
@@ -34,6 +34,12 @@ public class Burn {
        private static Logger log = Logger.getLogger(Burn.class);\r
        protected final Motor motor;\r
        \r
+       public interface BurnProgressListener{\r
+               public void setProgress(float p);\r
+       }\r
+       \r
+       private BurnProgressListener bpl = null;\r
+       \r
        private static final Amount<Pressure> atmosphereicPressure = Amount.valueOf(101000, SI.PASCAL);\r
        \r
        public class Interval{\r
@@ -68,6 +74,12 @@ public class Burn {
                burn();\r
        }\r
        \r
+       public Burn(Motor m, BurnProgressListener bpl){\r
+               motor = m;\r
+               this.bpl = bpl;\r
+               burn();\r
+       }\r
+       \r
        private void burn(){\r
                log.info("Starting burn...");\r
                long start = new Date().getTime();\r
@@ -112,6 +124,11 @@ public class Burn {
                        \r
                        log.debug("Regression: " + next.regression);\r
                        \r
+                       if ( bpl != null ){\r
+                               Amount<Dimensionless> a = next.regression.divide(motor.getGrain().webThickness()).to(Dimensionless.UNIT);\r
+                               bpl.setProgress((float)a.doubleValue(Dimensionless.UNIT));\r
+                       }\r
+                       \r
                        next.time = prev.time.plus(dt);\r
                        \r
                        //log.debug("Vold: " + motor.getGrain().volume(prev.regression).to(SI.MILLIMETER.pow(3)));\r
index c9fdcce6dc68b486a2f1bdc188dbfd5b9d593932..f6e9d843778808b854d0ecb2845e5143ba8803a8 100644 (file)
@@ -17,6 +17,7 @@ import javax.swing.BoxLayout;
 import javax.swing.JButton;\r
 import javax.swing.JFrame;\r
 import javax.swing.JPanel;\r
+import javax.swing.JProgressBar;\r
 import javax.swing.JSplitPane;\r
 import javax.swing.JTabbedPane;\r
 import javax.swing.JTextField;\r
@@ -119,11 +120,21 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                        removeAll();\r
                        new Thread() {\r
                                public void run() {\r
-                                       final Burn b = new Burn(motor);\r
+                                       final JProgressBar bar = new JProgressBar(0,100);\r
+                                       add(bar);\r
+                                       final Burn b = new Burn(motor, new Burn.BurnProgressListener(){\r
+                                               @Override\r
+                                               public void setProgress(float f){\r
+                                                       bar.setValue((int)(f*100));\r
+                                               }\r
+                                       });\r
                                        final BurnPanel bp = new BurnPanel(b);\r
                                        SwingUtilities.invokeLater(new Thread() {\r
                                                public void run() {\r
+                                                       remove(bar);\r
                                                        add(bp, BorderLayout.CENTER);\r
+                                                       \r
+                                                       revalidate();\r
                                                }\r
                                        });\r
                                }\r
index 92e28c8f6f839e09d499b99400e4d267a3142d9f..ee12fa88d1e3b2f2e04675671796f6ccfa357196 100644 (file)
@@ -41,7 +41,6 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener {
        private JSplitPane split;\r
        private JTree tree;\r
        private JTabbedPane motors;\r
-       private JToolBar bar;\r
        private WorkbenchTreeModel tm;\r
 \r
        private HashMap<MotorEditor, File> e2f = new HashMap<MotorEditor, File>();\r
@@ -56,10 +55,6 @@ public class MotorWorkbench extends JFrame implements TreeSelectionListener {
                top = new JPanel(new BorderLayout());\r
                setContentPane(top);\r
 \r
-               bar = new JToolBar();\r
-               bar.add(new JButton("Burn"));\r
-               top.add(bar, BorderLayout.PAGE_START);\r
-\r
                motors = new JTabbedPane();\r
 \r
                tree = new JTree(tm = new WorkbenchTreeModel());\r