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 net.sf.openrocket.file.RocketLoadException;
\r
28 import org.apache.log4j.Logger;
\r
30 import com.billkuker.rocketry.motorsim.Burn;
\r
31 import com.billkuker.rocketry.motorsim.Motor;
\r
32 import com.billkuker.rocketry.motorsim.io.ENGExporter;
\r
33 import com.billkuker.rocketry.motorsim.io.HTMLExporter;
\r
34 import com.billkuker.rocketry.motorsim.io.MotorIO;
\r
35 import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;
\r
36 import com.billkuker.rocketry.motorsim.visual.RememberJFrame;
\r
37 import com.billkuker.rocketry.motorsim.visual.openRocket.RocketSimTable;
\r
39 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
\r
40 private static Logger log = Logger.getLogger(MotorsEditor.class);
\r
42 private static final long serialVersionUID = 1L;
\r
44 MultiMotorThrustChart mbc = new MultiMotorThrustChart();
\r
45 MultiMotorPressureChart mpc = new MultiMotorPressureChart();
\r
46 JScrollPane mmtScroll;
\r
47 MultiMotorTable mmt = new MultiMotorTable();
\r
48 RocketSimTable rst = new RocketSimTable();
\r
51 JTabbedPane detachedTabs;
\r
53 public MotorsEditor(JFrame f) {
\r
56 mmtScroll = new JScrollPane(mmt);
\r
60 addCreator(new ObjectCreator() {
\r
62 public Motor newObject() {
\r
63 return MotorEditor.defaultMotor();
\r
67 public String getName() {
\r
72 detached = new RememberJFrame(800,600){
\r
73 private static final long serialVersionUID = 1L;
\r
75 detached.setIconImage(MotorWorkbench.getIcon());
\r
76 detached.setTitle(MotorWorkbench.name + " - All Motors");
\r
77 detached.setContentPane(detachedTabs = new JTabbedPane());
\r
79 detached.addWindowListener(new WindowListener() {
\r
81 public void windowClosing(WindowEvent arg0) {
\r
85 public void windowOpened(WindowEvent arg0) {}
\r
87 public void windowIconified(WindowEvent arg0) {}
\r
89 public void windowDeiconified(WindowEvent arg0) {}
\r
91 public void windowDeactivated(WindowEvent arg0) {}
\r
93 public void windowClosed(WindowEvent arg0) {}
\r
95 public void windowActivated(WindowEvent arg0) {}
\r
100 public void attach() {
\r
101 detachedTabs.remove(mbc);
\r
102 detachedTabs.remove(mpc);
\r
103 detachedTabs.remove(mmtScroll);
\r
104 detachedTabs.remove(rst);
\r
105 insertTab("All Motors", null, mmtScroll, null, 0);
\r
106 insertTab("All Thrust", null, mbc, null, 1);
\r
107 insertTab("All Pressure", null, mpc, null, 2);
\r
108 insertTab("Flight Sims", null, rst, null, 3);
\r
109 detached.setVisible(false);
\r
112 public void detach() {
\r
113 if (detached.isVisible())
\r
119 detachedTabs.addTab("All Motors",mmtScroll);
\r
120 detachedTabs.addTab("All Thrust", mbc);
\r
121 detachedTabs.addTab("All Pressure", mpc);
\r
122 detachedTabs.addTab("Flight Sims", rst);
\r
123 detached.setVisible(true);
\r
127 protected void objectAdded(Motor m, MotorEditor e) {
\r
128 e.addBurnWatcher(mbc);
\r
129 e.addBurnWatcher(mpc);
\r
130 e.addBurnWatcher(mmt);
\r
131 e.addBurnWatcher(rst);
\r
135 protected void objectRemoved(Motor m, MotorEditor e) {
\r
136 mbc.removeBurn(e.burn);
\r
137 mpc.removeBurn(e.burn);
\r
138 mmt.removeBurn(e.burn);
\r
142 public MotorEditor createEditor(Motor o) {
\r
143 return new MotorEditor(o);
\r
147 protected Motor loadFromFile(File f) throws IOException {
\r
148 return MotorIO.readMotor(new FileInputStream(f));
\r
152 protected void saveToFile(Motor o, File f) throws IOException {
\r
153 MotorIO.writeMotor(o, new FileOutputStream(f));
\r
156 private void openRocket(){
\r
157 final FileDialog fd = new FileDialog(frame, "Open Rocket...", FileDialog.LOAD);
\r
158 fd.setVisible(true);
\r
159 if ( fd.getFile() != null ) {
\r
160 File file = new File(fd.getDirectory() + fd.getFile());
\r
161 log.warn("Opening File " + file.getAbsolutePath());
\r
163 rst.openRocket(file);
\r
164 } catch (RocketLoadException e) {
\r
171 public JMenu getMenu() {
\r
172 JMenu ret = super.getMenu();
\r
173 ret.add(new JSeparator());
\r
175 ret.add(new JMenuItem("Open Rocket..."){
\r
176 private static final long serialVersionUID = 1L;
\r
178 addActionListener(new ActionListener() {
\r
180 public void actionPerformed(ActionEvent ae) {
\r
181 log.debug("Open Rocksim...");
\r
188 ret.add(new JSeparator());
\r
189 ret.add(new JMenu("Export"){
\r
190 private static final long serialVersionUID = 1L;
\r
192 add(new JMenuItem("Export .ENG") {
\r
193 private static final long serialVersionUID = 1L;
\r
195 addActionListener(new ActionListener() {
\r
197 public void actionPerformed(ActionEvent arg0) {
\r
199 final FileDialog fd = new FileDialog(frame,
\r
200 "Export .ENG File", FileDialog.SAVE);
\r
201 fd.setFile("motorsim.eng");
\r
202 fd.setVisible(true);
\r
203 if (fd.getFile() != null) {
\r
204 File file = new File(fd.getDirectory()
\r
206 MotorEditor me = getSelectedEditor();
\r
207 Vector<Burn> bb = new Vector<Burn>();
\r
210 ENGExporter.export(bb, file);
\r
211 } catch (IOException e) {
\r
219 add(new JMenuItem("Export HTML to Clipboard") {
\r
220 private static final long serialVersionUID = 1L;
\r
222 addActionListener(new ActionListener() {
\r
224 public void actionPerformed(ActionEvent arg0) {
\r
225 ByteArrayOutputStream out = new ByteArrayOutputStream();
\r
226 MotorEditor me = getSelectedEditor();
\r
228 HTMLExporter.export(me.burn, out);
\r
229 String html = new String(out.toByteArray());
\r
230 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
\r
231 clipboard.setContents( new StringSelection(html), null );
\r
232 JOptionPane.showMessageDialog(MotorsEditor.this, "HTML Copied to Clipboard");
\r
233 } catch (Exception e) {
\r