Improved HTML Exporter
[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.awt.event.ActionListener;\r
6 import java.awt.event.WindowEvent;\r
7 import java.awt.event.WindowListener;\r
8 import java.io.File;\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
13 \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
20 \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
27 \r
28 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {\r
29         private static final long serialVersionUID = 1L;\r
30 \r
31         MultiMotorThrustChart mbc = new MultiMotorThrustChart();\r
32         MultiMotorPressureChart mpc = new MultiMotorPressureChart();\r
33         JScrollPane mmtScroll;\r
34         MultiMotorTable mmt = new MultiMotorTable();\r
35 \r
36         JFrame detached;\r
37         JTabbedPane detachedTabs;\r
38 \r
39         public MotorsEditor(JFrame f) {\r
40                 super(f, "Motor");\r
41 \r
42                 mmtScroll = new JScrollPane(mmt);\r
43                 \r
44 \r
45 \r
46                 addCreator(new ObjectCreator() {\r
47                         @Override\r
48                         public Motor newObject() {\r
49                                 return MotorEditor.defaultMotor();\r
50                         }\r
51 \r
52                         @Override\r
53                         public String getName() {\r
54                                 return "Motor";\r
55                         }\r
56                 });\r
57 \r
58                 detached = new RememberJFrame(800,600){\r
59                         private static final long serialVersionUID = 1L;\r
60                 };\r
61                 detached.setTitle(MotorWorkbench.name + " - All Motors");\r
62                 detached.setContentPane(detachedTabs = new JTabbedPane());\r
63 \r
64                 detached.addWindowListener(new WindowListener() {\r
65                         @Override\r
66                         public void windowClosing(WindowEvent arg0) {\r
67                                 attach();\r
68                         }\r
69                         @Override\r
70                         public void windowOpened(WindowEvent arg0) {}\r
71                         @Override\r
72                         public void windowIconified(WindowEvent arg0) {}\r
73                         @Override\r
74                         public void windowDeiconified(WindowEvent arg0) {}\r
75                         @Override\r
76                         public void windowDeactivated(WindowEvent arg0) {}\r
77                         @Override\r
78                         public void windowClosed(WindowEvent arg0) {}\r
79                         @Override\r
80                         public void windowActivated(WindowEvent arg0) {}\r
81                 });\r
82                 attach();\r
83         }\r
84 \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
93         }\r
94         \r
95         public void detach() {\r
96                 if (detached.isVisible())\r
97                         return;\r
98                 remove(mbc);\r
99                 remove(mpc);\r
100                 remove(mmtScroll);\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
105         }\r
106 \r
107         @Override\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
112         }\r
113 \r
114         @Override\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
119         }\r
120 \r
121         @Override\r
122         public MotorEditor createEditor(Motor o) {\r
123                 return new MotorEditor(o);\r
124         }\r
125 \r
126         @Override\r
127         protected Motor loadFromFile(File f) throws IOException {\r
128                 return MotorIO.readMotor(new FileInputStream(f));\r
129         }\r
130 \r
131         @Override\r
132         protected void saveToFile(Motor o, File f) throws IOException {\r
133                 MotorIO.writeMotor(o, new FileOutputStream(f));\r
134         }\r
135 \r
136         @Override\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
142                         {\r
143                                 addActionListener(new ActionListener() {\r
144                                         @Override\r
145                                         public void actionPerformed(ActionEvent arg0) {\r
146 \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
153                                                                         + fd.getFile());\r
154                                                         MotorEditor me = getSelectedEditor();\r
155                                                         Vector<Burn> bb = new Vector<Burn>();\r
156                                                         bb.add(me.burn);\r
157                                                         try {\r
158                                                                 ENGExporter.export(bb, file);\r
159                                                         } catch (IOException e) {\r
160                                                                 // TODO Auto-generated catch block\r
161                                                                 e.printStackTrace();\r
162                                                         }\r
163                                                 }\r
164                                         }\r
165                                 });\r
166                         }\r
167                 });\r
168                 return ret;\r
169         }\r
170 }\r