Added table of motor info
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / workbench / MotorsEditor.java
1 package com.billkuker.rocketry.motorsim.visual.workbench;\r
2 \r
3 import java.awt.FileDialog;\r
4 import java.awt.event.ActionEvent;\r
5 import java.io.File;\r
6 import java.io.FileInputStream;\r
7 import java.io.FileOutputStream;\r
8 import java.io.IOException;\r
9 import java.util.Vector;\r
10 \r
11 import javax.swing.JFrame;\r
12 import javax.swing.JMenu;\r
13 import javax.swing.JMenuItem;\r
14 import javax.swing.JScrollPane;\r
15 import javax.swing.JSeparator;\r
16 import java.awt.event.ActionListener;\r
17 \r
18 import com.billkuker.rocketry.motorsim.Burn;\r
19 import com.billkuker.rocketry.motorsim.Motor;\r
20 import com.billkuker.rocketry.motorsim.io.ENGExporter;\r
21 import com.billkuker.rocketry.motorsim.io.MotorIO;\r
22 import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;\r
23 \r
24 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {\r
25         private static final long serialVersionUID = 1L;\r
26         \r
27         MultiMotorThrustChart mbc = new MultiMotorThrustChart();\r
28         MultiMotorPressureChart mpc = new MultiMotorPressureChart();\r
29         MultiMotorTable mmt = new MultiMotorTable();\r
30 \r
31         public MotorsEditor(JFrame f) {\r
32                 super(f, "Motor");\r
33                 \r
34                 addTab("All Motors", new JScrollPane(mmt));\r
35                 addTab("All Thrust", mbc);\r
36                 addTab("All Pressure", mpc);\r
37                 \r
38                 addCreator(new ObjectCreator() {\r
39                         @Override\r
40                         public Motor newObject() {\r
41                                 return MotorEditor.defaultMotor();\r
42                         }\r
43 \r
44                         @Override\r
45                         public String getName() {\r
46                                 return "Motor";\r
47                         }\r
48                 });\r
49         }\r
50         \r
51         @Override\r
52         protected void objectAdded(Motor m, MotorEditor e){\r
53                 e.addBurnWatcher(mbc);\r
54                 e.addBurnWatcher(mpc);\r
55                 e.addBurnWatcher(mmt);\r
56         }\r
57         \r
58         @Override\r
59         protected void objectRemoved(Motor m, MotorEditor e){\r
60                 mbc.removeBurn(e.burn);\r
61                 mpc.removeBurn(e.burn);\r
62                 mmt.removeBurn(e.burn);\r
63         }\r
64 \r
65         @Override\r
66         public MotorEditor createEditor(Motor o) {\r
67                 return new MotorEditor(o);\r
68         }\r
69 \r
70 \r
71         @Override\r
72         protected Motor loadFromFile(File f) throws IOException {\r
73                 return MotorIO.readMotor(new FileInputStream(f));\r
74         }\r
75 \r
76         @Override\r
77         protected void saveToFile(Motor o, File f) throws IOException {\r
78                 MotorIO.writeMotor(o, new FileOutputStream(f));\r
79         }\r
80 \r
81         \r
82         @Override\r
83         public JMenu getMenu(){\r
84                 JMenu ret = super.getMenu();\r
85                 ret.add(new JSeparator());\r
86                 ret.add(new JMenuItem("Export .ENG"){\r
87                         private static final long serialVersionUID = 1L;\r
88                         {\r
89                                 addActionListener(new ActionListener() {\r
90                                         @Override\r
91                                         public void actionPerformed(ActionEvent arg0) {\r
92 \r
93                                                 final FileDialog fd = new FileDialog(frame, "Export .ENG File", FileDialog.SAVE);\r
94                                                 fd.setFile("motorsim.eng");\r
95                                                 fd.setVisible(true);\r
96                                                 if (fd.getFile() != null) {\r
97                                                         File file = new File(fd.getDirectory()\r
98                                                                         + fd.getFile());\r
99                                                         MotorEditor me = getSelectedEditor();\r
100                                                         Vector<Burn> bb = new Vector<Burn>();\r
101                                                         bb.add(me.burn);\r
102                                                         try {\r
103                                                                 ENGExporter.export(bb, file);\r
104                                                         } catch (IOException e) {\r
105                                                                 // TODO Auto-generated catch block\r
106                                                                 e.printStackTrace();\r
107                                                         }\r
108                                                 }\r
109                                         }\r
110                                 });\r
111                         }\r
112                 });\r
113                 return ret;\r
114         }\r
115 }\r