1 package com.billkuker.rocketry.motorsim.visual.workbench;
\r
3 import java.awt.FileDialog;
\r
4 import java.awt.Toolkit;
\r
5 import java.awt.datatransfer.Clipboard;
\r
6 import java.awt.datatransfer.StringSelection;
\r
7 import java.awt.event.ActionEvent;
\r
8 import java.awt.event.ActionListener;
\r
9 import java.awt.event.WindowEvent;
\r
10 import java.awt.event.WindowListener;
\r
11 import java.io.ByteArrayOutputStream;
\r
12 import java.io.File;
\r
13 import java.io.FileInputStream;
\r
14 import java.io.FileOutputStream;
\r
15 import java.io.IOException;
\r
16 import java.util.Vector;
\r
18 import javax.swing.JFrame;
\r
19 import javax.swing.JMenu;
\r
20 import javax.swing.JMenuItem;
\r
21 import javax.swing.JOptionPane;
\r
22 import javax.swing.JScrollPane;
\r
23 import javax.swing.JSeparator;
\r
24 import javax.swing.JTabbedPane;
\r
26 import com.billkuker.rocketry.motorsim.Burn;
\r
27 import com.billkuker.rocketry.motorsim.Motor;
\r
28 import com.billkuker.rocketry.motorsim.io.ENGExporter;
\r
29 import com.billkuker.rocketry.motorsim.io.HTMLExporter;
\r
30 import com.billkuker.rocketry.motorsim.io.MotorIO;
\r
31 import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;
\r
32 import com.billkuker.rocketry.motorsim.visual.RememberJFrame;
\r
34 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
\r
35 private static final long serialVersionUID = 1L;
\r
37 MultiMotorThrustChart mbc = new MultiMotorThrustChart();
\r
38 MultiMotorPressureChart mpc = new MultiMotorPressureChart();
\r
39 JScrollPane mmtScroll;
\r
40 MultiMotorTable mmt = new MultiMotorTable();
\r
43 JTabbedPane detachedTabs;
\r
45 public MotorsEditor(JFrame f) {
\r
48 mmtScroll = new JScrollPane(mmt);
\r
52 addCreator(new ObjectCreator() {
\r
54 public Motor newObject() {
\r
55 return MotorEditor.defaultMotor();
\r
59 public String getName() {
\r
64 detached = new RememberJFrame(800,600){
\r
65 private static final long serialVersionUID = 1L;
\r
67 detached.setTitle(MotorWorkbench.name + " - All Motors");
\r
68 detached.setContentPane(detachedTabs = new JTabbedPane());
\r
70 detached.addWindowListener(new WindowListener() {
\r
72 public void windowClosing(WindowEvent arg0) {
\r
76 public void windowOpened(WindowEvent arg0) {}
\r
78 public void windowIconified(WindowEvent arg0) {}
\r
80 public void windowDeiconified(WindowEvent arg0) {}
\r
82 public void windowDeactivated(WindowEvent arg0) {}
\r
84 public void windowClosed(WindowEvent arg0) {}
\r
86 public void windowActivated(WindowEvent arg0) {}
\r
91 public void attach() {
\r
92 detachedTabs.remove(mbc);
\r
93 detachedTabs.remove(mpc);
\r
94 detachedTabs.remove(mmtScroll);
\r
95 insertTab("All Motors", null, mmtScroll, null, 0);
\r
96 insertTab("All Thrust", null, mbc, null, 1);
\r
97 insertTab("All Pressure", null, mpc, null, 2);
\r
98 detached.setVisible(false);
\r
101 public void detach() {
\r
102 if (detached.isVisible())
\r
107 detachedTabs.addTab("All Motors",mmtScroll);
\r
108 detachedTabs.addTab("All Thrust", mbc);
\r
109 detachedTabs.addTab("All Pressure", mpc);
\r
110 detached.setVisible(true);
\r
114 protected void objectAdded(Motor m, MotorEditor e) {
\r
115 e.addBurnWatcher(mbc);
\r
116 e.addBurnWatcher(mpc);
\r
117 e.addBurnWatcher(mmt);
\r
121 protected void objectRemoved(Motor m, MotorEditor e) {
\r
122 mbc.removeBurn(e.burn);
\r
123 mpc.removeBurn(e.burn);
\r
124 mmt.removeBurn(e.burn);
\r
128 public MotorEditor createEditor(Motor o) {
\r
129 return new MotorEditor(o);
\r
133 protected Motor loadFromFile(File f) throws IOException {
\r
134 return MotorIO.readMotor(new FileInputStream(f));
\r
138 protected void saveToFile(Motor o, File f) throws IOException {
\r
139 MotorIO.writeMotor(o, new FileOutputStream(f));
\r
143 public JMenu getMenu() {
\r
144 JMenu ret = super.getMenu();
\r
145 ret.add(new JSeparator());
\r
146 ret.add(new JMenu("Export"){
\r
147 private static final long serialVersionUID = 1L;
\r
149 add(new JMenuItem("Export .ENG") {
\r
150 private static final long serialVersionUID = 1L;
\r
152 addActionListener(new ActionListener() {
\r
154 public void actionPerformed(ActionEvent arg0) {
\r
156 final FileDialog fd = new FileDialog(frame,
\r
157 "Export .ENG File", FileDialog.SAVE);
\r
158 fd.setFile("motorsim.eng");
\r
159 fd.setVisible(true);
\r
160 if (fd.getFile() != null) {
\r
161 File file = new File(fd.getDirectory()
\r
163 MotorEditor me = getSelectedEditor();
\r
164 Vector<Burn> bb = new Vector<Burn>();
\r
167 ENGExporter.export(bb, file);
\r
168 } catch (IOException e) {
\r
169 // TODO Auto-generated catch block
\r
170 e.printStackTrace();
\r
177 add(new JMenuItem("Export HTML") {
\r
178 private static final long serialVersionUID = 1L;
\r
180 addActionListener(new ActionListener() {
\r
182 public void actionPerformed(ActionEvent arg0) {
\r
183 ByteArrayOutputStream out = new ByteArrayOutputStream();
\r
184 MotorEditor me = getSelectedEditor();
\r
186 HTMLExporter.export(me.burn, out);
\r
187 String html = new String(out.toByteArray());
\r
188 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
\r
189 clipboard.setContents( new StringSelection(html), null );
\r
190 JOptionPane.showMessageDialog(MotorsEditor.this, "HTML Copied to Clipboard");
\r
191 } catch (Exception e) {
\r