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
26 import com.billkuker.rocketry.motorsim.visual.RememberJFrame;
\r
28 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
\r
29 private static final long serialVersionUID = 1L;
\r
31 MultiMotorThrustChart mbc = new MultiMotorThrustChart();
\r
32 MultiMotorPressureChart mpc = new MultiMotorPressureChart();
\r
33 JScrollPane mmtScroll;
\r
34 MultiMotorTable mmt = new MultiMotorTable();
\r
37 JTabbedPane detachedTabs;
\r
39 public MotorsEditor(JFrame f) {
\r
42 mmtScroll = new JScrollPane(mmt);
\r
46 addCreator(new ObjectCreator() {
\r
48 public Motor newObject() {
\r
49 return MotorEditor.defaultMotor();
\r
53 public String getName() {
\r
58 detached = new RememberJFrame(800,600){
\r
59 private static final long serialVersionUID = 1L;
\r
61 detached.setTitle(MotorWorkbench.name + " - All Motors");
\r
62 detached.setContentPane(detachedTabs = new JTabbedPane());
\r
64 detached.addWindowListener(new WindowListener() {
\r
66 public void windowClosing(WindowEvent arg0) {
\r
70 public void windowOpened(WindowEvent arg0) {}
\r
72 public void windowIconified(WindowEvent arg0) {}
\r
74 public void windowDeiconified(WindowEvent arg0) {}
\r
76 public void windowDeactivated(WindowEvent arg0) {}
\r
78 public void windowClosed(WindowEvent arg0) {}
\r
80 public void windowActivated(WindowEvent arg0) {}
\r
85 public void attach() {
\r
86 detachedTabs.remove(mbc);
\r
87 detachedTabs.remove(mpc);
\r
88 detachedTabs.remove(mmtScroll);
\r
89 insertTab("All Motors", null, mmtScroll, null, 0);
\r
90 insertTab("All Thrust", null, mbc, null, 1);
\r
91 insertTab("All Pressure", null, mpc, null, 2);
\r
92 detached.setVisible(false);
\r
95 public void detach() {
\r
96 if (detached.isVisible())
\r
101 detachedTabs.addTab("All Motors",mmtScroll);
\r
102 detachedTabs.addTab("All Thrust", mbc);
\r
103 detachedTabs.addTab("All Pressure", mpc);
\r
104 detached.setVisible(true);
\r
108 protected void objectAdded(Motor m, MotorEditor e) {
\r
109 e.addBurnWatcher(mbc);
\r
110 e.addBurnWatcher(mpc);
\r
111 e.addBurnWatcher(mmt);
\r
115 protected void objectRemoved(Motor m, MotorEditor e) {
\r
116 mbc.removeBurn(e.burn);
\r
117 mpc.removeBurn(e.burn);
\r
118 mmt.removeBurn(e.burn);
\r
122 public MotorEditor createEditor(Motor o) {
\r
123 return new MotorEditor(o);
\r
127 protected Motor loadFromFile(File f) throws IOException {
\r
128 return MotorIO.readMotor(new FileInputStream(f));
\r
132 protected void saveToFile(Motor o, File f) throws IOException {
\r
133 MotorIO.writeMotor(o, new FileOutputStream(f));
\r
137 public JMenu getMenu() {
\r
138 JMenu ret = super.getMenu();
\r
139 ret.add(new JSeparator());
\r
140 ret.add(new JMenuItem("Export .ENG") {
\r
141 private static final long serialVersionUID = 1L;
\r
143 addActionListener(new ActionListener() {
\r
145 public void actionPerformed(ActionEvent arg0) {
\r
147 final FileDialog fd = new FileDialog(frame,
\r
148 "Export .ENG File", FileDialog.SAVE);
\r
149 fd.setFile("motorsim.eng");
\r
150 fd.setVisible(true);
\r
151 if (fd.getFile() != null) {
\r
152 File file = new File(fd.getDirectory()
\r
154 MotorEditor me = getSelectedEditor();
\r
155 Vector<Burn> bb = new Vector<Burn>();
\r
158 ENGExporter.export(bb, file);
\r
159 } catch (IOException e) {
\r
160 // TODO Auto-generated catch block
\r
161 e.printStackTrace();
\r