Export HTML option
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / workbench / MotorsEditor.java
index 05d947585d1248401f5081bec7ddd9cfb08c60a9..46c73d8c642f875f32e489d734787f49e78b9d99 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,27 +18,37 @@ 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 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
 \r
 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {\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
+\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 Thrust", mbc);\r
-               addTab("All Pressure", mpc);\r
-               \r
+\r
+\r
                addCreator(new ObjectCreator() {\r
                        @Override\r
                        public Motor newObject() {\r
@@ -43,18 +60,68 @@ 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.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
+               insertTab("All Motors", null, mmtScroll, null, 0);\r
+               insertTab("All Thrust", null, mbc, null, 1);\r
+               insertTab("All Pressure", null, mpc, null, 2);\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
+               detachedTabs.addTab("All Motors",mmtScroll);\r
+               detachedTabs.addTab("All Thrust", mbc);\r
+               detachedTabs.addTab("All Pressure", mpc);\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
        }\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
        }\r
 \r
        @Override\r
@@ -62,7 +129,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
@@ -73,36 +139,63 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
                MotorIO.writeMotor(o, new FileOutputStream(f));\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
+               ret.add(new JMenu("Export"){\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
+                               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
+                                                                               // TODO Auto-generated catch block\r
+                                                                               e.printStackTrace();\r
+                                                                       }\r
+                                                               }\r
+                                                       }\r
+                                               });\r
+                                       }\r
+                               });     \r
+                               add(new JMenuItem("Export HTML") {\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
                        }\r
                });\r
                return ret;\r