Stop processing a burn on motor close
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / workbench / MotorsEditor.java
index e805f8acef95bbd7ba72c9d0a0e2e881ab5292ce..63d8156b97b46f5b3d2f1cca43bd32e12284726b 100644 (file)
@@ -1,7 +1,14 @@
 package com.billkuker.rocketry.motorsim.visual.workbench;\r
 \r
 import java.awt.FileDialog;\r
+import java.awt.Toolkit;\r
+import java.awt.datatransfer.Clipboard;\r
+import java.awt.datatransfer.StringSelection;\r
 import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.WindowEvent;\r
+import java.awt.event.WindowListener;\r
+import java.io.ByteArrayOutputStream;\r
 import java.io.File;\r
 import java.io.FileInputStream;\r
 import java.io.FileOutputStream;\r
@@ -11,30 +18,45 @@ import java.util.Vector;
 import javax.swing.JFrame;\r
 import javax.swing.JMenu;\r
 import javax.swing.JMenuItem;\r
+import javax.swing.JOptionPane;\r
 import javax.swing.JScrollPane;\r
 import javax.swing.JSeparator;\r
-import java.awt.event.ActionListener;\r
+import javax.swing.JTabbedPane;\r
+\r
+import net.sf.openrocket.file.RocketLoadException;\r
+\r
+import org.apache.log4j.Logger;\r
 \r
 import com.billkuker.rocketry.motorsim.Burn;\r
 import com.billkuker.rocketry.motorsim.Motor;\r
 import com.billkuker.rocketry.motorsim.io.ENGExporter;\r
+import com.billkuker.rocketry.motorsim.io.HTMLExporter;\r
 import com.billkuker.rocketry.motorsim.io.MotorIO;\r
 import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;\r
+import com.billkuker.rocketry.motorsim.visual.RememberJFrame;\r
+import com.billkuker.rocketry.motorsim.visual.openRocket.RocketSimTable;\r
 \r
 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {\r
+       private static Logger log = Logger.getLogger(MotorsEditor.class);\r
+                       \r
        private static final long serialVersionUID = 1L;\r
-       \r
+\r
        MultiMotorThrustChart mbc = new MultiMotorThrustChart();\r
        MultiMotorPressureChart mpc = new MultiMotorPressureChart();\r
+       JScrollPane mmtScroll;\r
        MultiMotorTable mmt = new MultiMotorTable();\r
+       RocketSimTable rst = new RocketSimTable();\r
+\r
+       JFrame detached;\r
+       JTabbedPane detachedTabs;\r
 \r
        public MotorsEditor(JFrame f) {\r
                super(f, "Motor");\r
+\r
+               mmtScroll = new JScrollPane(mmt);\r
                \r
-               addTab("All Motors", new JScrollPane(mmt));\r
-               addTab("All Thrust", mbc);\r
-               addTab("All Pressure", mpc);\r
-               \r
+\r
+\r
                addCreator(new ObjectCreator() {\r
                        @Override\r
                        public Motor newObject() {\r
@@ -46,20 +68,76 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
                                return "Motor";\r
                        }\r
                });\r
+\r
+               detached = new RememberJFrame(800,600){\r
+                       private static final long serialVersionUID = 1L;\r
+               };\r
+               detached.setIconImage(MotorWorkbench.getIcon());\r
+               detached.setTitle(MotorWorkbench.name + " - All Motors");\r
+               detached.setContentPane(detachedTabs = new JTabbedPane());\r
+\r
+               detached.addWindowListener(new WindowListener() {\r
+                       @Override\r
+                       public void windowClosing(WindowEvent arg0) {\r
+                               attach();\r
+                       }\r
+                       @Override\r
+                       public void windowOpened(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowIconified(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowDeiconified(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowDeactivated(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowClosed(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowActivated(WindowEvent arg0) {}\r
+               });\r
+               attach();\r
+       }\r
+\r
+       public void attach() {\r
+               detachedTabs.remove(mbc);\r
+               detachedTabs.remove(mpc);\r
+               detachedTabs.remove(mmtScroll);\r
+               detachedTabs.remove(rst);\r
+               insertTab("All Motors", null, mmtScroll, null, 0);\r
+               insertTab("All Thrust", null, mbc, null, 1);\r
+               insertTab("All Pressure", null, mpc, null, 2);\r
+               insertTab("Flight Sims", null, rst, null, 3);\r
+               detached.setVisible(false);\r
        }\r
        \r
+       public void detach() {\r
+               if (detached.isVisible())\r
+                       return;\r
+               remove(mbc);\r
+               remove(mpc);\r
+               remove(mmtScroll);\r
+               remove(rst);\r
+               detachedTabs.addTab("All Motors",mmtScroll);\r
+               detachedTabs.addTab("All Thrust", mbc);\r
+               detachedTabs.addTab("All Pressure", mpc);\r
+               detachedTabs.addTab("Flight Sims", rst);\r
+               detached.setVisible(true);\r
+       }\r
+\r
        @Override\r
-       protected void objectAdded(Motor m, MotorEditor e){\r
+       protected void objectAdded(Motor m, MotorEditor e) {\r
                e.addBurnWatcher(mbc);\r
                e.addBurnWatcher(mpc);\r
                e.addBurnWatcher(mmt);\r
+               e.addBurnWatcher(rst);\r
        }\r
-       \r
+\r
        @Override\r
-       protected void objectRemoved(Motor m, MotorEditor e){\r
+       protected void objectRemoved(Motor m, MotorEditor e) {\r
                mbc.removeBurn(e.burn);\r
                mpc.removeBurn(e.burn);\r
                mmt.removeBurn(e.burn);\r
+               rst.replace(e.burn, null);\r
+               e.closed = true;\r
        }\r
 \r
        @Override\r
@@ -67,7 +145,6 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
                return new MotorEditor(o);\r
        }\r
 \r
-\r
        @Override\r
        protected Motor loadFromFile(File f) throws IOException {\r
                return MotorIO.readMotor(new FileInputStream(f));\r
@@ -77,39 +154,94 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
        protected void saveToFile(Motor o, File f) throws IOException {\r
                MotorIO.writeMotor(o, new FileOutputStream(f));\r
        }\r
-\r
        \r
+       private void openRocket(){\r
+               final FileDialog fd = new FileDialog(frame, "Open Rocket...", FileDialog.LOAD);\r
+               fd.setVisible(true);\r
+               if ( fd.getFile() != null ) {\r
+                       File file = new File(fd.getDirectory() + fd.getFile());\r
+                       log.warn("Opening File " + file.getAbsolutePath());\r
+                       try {\r
+                               rst.openRocket(file);\r
+                       } catch (RocketLoadException e) {\r
+                               log.error(e);\r
+                       }\r
+               }\r
+       }\r
+\r
        @Override\r
-       public JMenu getMenu(){\r
+       public JMenu getMenu() {\r
                JMenu ret = super.getMenu();\r
                ret.add(new JSeparator());\r
-               ret.add(new JMenuItem("Export .ENG"){\r
+               \r
+               ret.add(new JMenuItem("Open Rocket..."){\r
                        private static final long serialVersionUID = 1L;\r
                        {\r
                                addActionListener(new ActionListener() {\r
                                        @Override\r
-                                       public void actionPerformed(ActionEvent arg0) {\r
-\r
-                                               final FileDialog fd = new FileDialog(frame, "Export .ENG File", FileDialog.SAVE);\r
-                                               fd.setFile("motorsim.eng");\r
-                                               fd.setVisible(true);\r
-                                               if (fd.getFile() != null) {\r
-                                                       File file = new File(fd.getDirectory()\r
-                                                                       + fd.getFile());\r
-                                                       MotorEditor me = getSelectedEditor();\r
-                                                       Vector<Burn> bb = new Vector<Burn>();\r
-                                                       bb.add(me.burn);\r
-                                                       try {\r
-                                                               ENGExporter.export(bb, file);\r
-                                                       } catch (IOException e) {\r
-                                                               // TODO Auto-generated catch block\r
-                                                               e.printStackTrace();\r
-                                                       }\r
-                                               }\r
+                                       public void actionPerformed(ActionEvent ae) {\r
+                                               log.debug("Open Rocksim...");\r
+                                               openRocket();\r
                                        }\r
                                });\r
                        }\r
                });\r
+               \r
+               ret.add(new JSeparator());\r
+               ret.add(new JMenu("Export"){\r
+                       private static final long serialVersionUID = 1L;\r
+                       {\r
+                               add(new JMenuItem("Export .ENG") {\r
+                                       private static final long serialVersionUID = 1L;\r
+                                       {\r
+                                               addActionListener(new ActionListener() {\r
+                                                       @Override\r
+                                                       public void actionPerformed(ActionEvent arg0) {\r
+\r
+                                                               final FileDialog fd = new FileDialog(frame,\r
+                                                                               "Export .ENG File", FileDialog.SAVE);\r
+                                                               fd.setFile("motorsim.eng");\r
+                                                               fd.setVisible(true);\r
+                                                               if (fd.getFile() != null) {\r
+                                                                       File file = new File(fd.getDirectory()\r
+                                                                                       + fd.getFile());\r
+                                                                       MotorEditor me = getSelectedEditor();\r
+                                                                       Vector<Burn> bb = new Vector<Burn>();\r
+                                                                       bb.add(me.burn);\r
+                                                                       try {\r
+                                                                               ENGExporter.export(bb, file);\r
+                                                                       } catch (IOException e) {\r
+                                                                               log.error(e);\r
+                                                                       }\r
+                                                               }\r
+                                                       }\r
+                                               });\r
+                                       }\r
+                               });     \r
+                               add(new JMenuItem("Export HTML to Clipboard") {\r
+                                       private static final long serialVersionUID = 1L;\r
+                                       {\r
+                                               addActionListener(new ActionListener() {\r
+                                                       @Override\r
+                                                       public void actionPerformed(ActionEvent arg0) {\r
+                                                               ByteArrayOutputStream out = new ByteArrayOutputStream();\r
+                                                               MotorEditor me = getSelectedEditor();\r
+                                                               try {\r
+                                                                       HTMLExporter.export(me.burn, out);\r
+                                                                       String html = new String(out.toByteArray());\r
+                                                                       Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();\r
+                                                                       clipboard.setContents( new StringSelection(html), null );\r
+                                                                       JOptionPane.showMessageDialog(MotorsEditor.this, "HTML Copied to Clipboard");\r
+                                                               } catch (Exception e) {\r
+                                                                       \r
+                                                               }\r
+                                                               \r
+                                                       }\r
+                                               });\r
+                                       }\r
+                               });     \r
+                       }\r
+               });\r
                return ret;\r
        }\r
 }\r