1 package com.billkuker.rocketry.motorsim.visual.workbench;
\r
3 import java.awt.FileDialog;
\r
4 import java.awt.event.ActionEvent;
\r
5 import java.awt.event.ActionListener;
\r
6 import java.awt.event.WindowEvent;
\r
7 import java.awt.event.WindowListener;
\r
9 import java.io.FileInputStream;
\r
10 import java.io.FileOutputStream;
\r
11 import java.io.IOException;
\r
12 import java.util.Vector;
\r
14 import javax.swing.JFrame;
\r
15 import javax.swing.JMenu;
\r
16 import javax.swing.JMenuItem;
\r
17 import javax.swing.JScrollPane;
\r
18 import javax.swing.JSeparator;
\r
19 import javax.swing.JTabbedPane;
\r
21 import com.billkuker.rocketry.motorsim.Burn;
\r
22 import com.billkuker.rocketry.motorsim.Motor;
\r
23 import com.billkuker.rocketry.motorsim.io.ENGExporter;
\r
24 import com.billkuker.rocketry.motorsim.io.MotorIO;
\r
25 import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;
\r
27 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
\r
28 private static final long serialVersionUID = 1L;
\r
30 MultiMotorThrustChart mbc = new MultiMotorThrustChart();
\r
31 MultiMotorPressureChart mpc = new MultiMotorPressureChart();
\r
32 JScrollPane mmtScroll;
\r
33 MultiMotorTable mmt = new MultiMotorTable();
\r
36 JTabbedPane detachedTabs;
\r
38 public MotorsEditor(JFrame f) {
\r
41 mmtScroll = new JScrollPane(mmt);
\r
45 addCreator(new ObjectCreator() {
\r
47 public Motor newObject() {
\r
48 return MotorEditor.defaultMotor();
\r
52 public String getName() {
\r
57 detached = new JFrame();
\r
58 detached.setSize(800, 600);
\r
59 detached.setTitle(MotorWorkbench.name + " - All Motors");
\r
60 detached.setContentPane(detachedTabs = new JTabbedPane());
\r
62 detached.addWindowListener(new WindowListener() {
\r
64 public void windowClosing(WindowEvent arg0) {
\r
68 public void windowOpened(WindowEvent arg0) {}
\r
70 public void windowIconified(WindowEvent arg0) {}
\r
72 public void windowDeiconified(WindowEvent arg0) {}
\r
74 public void windowDeactivated(WindowEvent arg0) {}
\r
76 public void windowClosed(WindowEvent arg0) {}
\r
78 public void windowActivated(WindowEvent arg0) {}
\r
83 public void attach() {
\r
84 detachedTabs.remove(mbc);
\r
85 detachedTabs.remove(mpc);
\r
86 detachedTabs.remove(mmtScroll);
\r
87 insertTab("All Motors", null, mmtScroll, null, 0);
\r
88 insertTab("All Thrust", null, mbc, null, 1);
\r
89 insertTab("All Pressure", null, mpc, null, 2);
\r
90 detached.setVisible(false);
\r
93 public void detach() {
\r
94 if (detached.isVisible())
\r
99 detachedTabs.addTab("All Motors",mmtScroll);
\r
100 detachedTabs.addTab("All Thrust", mbc);
\r
101 detachedTabs.addTab("All Pressure", mpc);
\r
102 detached.setVisible(true);
\r
106 protected void objectAdded(Motor m, MotorEditor e) {
\r
107 e.addBurnWatcher(mbc);
\r
108 e.addBurnWatcher(mpc);
\r
109 e.addBurnWatcher(mmt);
\r
113 protected void objectRemoved(Motor m, MotorEditor e) {
\r
114 mbc.removeBurn(e.burn);
\r
115 mpc.removeBurn(e.burn);
\r
116 mmt.removeBurn(e.burn);
\r
120 public MotorEditor createEditor(Motor o) {
\r
121 return new MotorEditor(o);
\r
125 protected Motor loadFromFile(File f) throws IOException {
\r
126 return MotorIO.readMotor(new FileInputStream(f));
\r
130 protected void saveToFile(Motor o, File f) throws IOException {
\r
131 MotorIO.writeMotor(o, new FileOutputStream(f));
\r
135 public JMenu getMenu() {
\r
136 JMenu ret = super.getMenu();
\r
137 ret.add(new JSeparator());
\r
138 ret.add(new JMenuItem("Export .ENG") {
\r
139 private static final long serialVersionUID = 1L;
\r
141 addActionListener(new ActionListener() {
\r
143 public void actionPerformed(ActionEvent arg0) {
\r
145 final FileDialog fd = new FileDialog(frame,
\r
146 "Export .ENG File", FileDialog.SAVE);
\r
147 fd.setFile("motorsim.eng");
\r
148 fd.setVisible(true);
\r
149 if (fd.getFile() != null) {
\r
150 File file = new File(fd.getDirectory()
\r
152 MotorEditor me = getSelectedEditor();
\r
153 Vector<Burn> bb = new Vector<Burn>();
\r
156 ENGExporter.export(bb, file);
\r
157 } catch (IOException e) {
\r
158 // TODO Auto-generated catch block
\r
159 e.printStackTrace();
\r