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
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
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
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
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