Export HTML option
[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.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
17 \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
25 \r
26 import com.billkuker.rocketry.motorsim.Burn;\r
27 import com.billkuker.rocketry.motorsim.Motor;\r
28 import com.billkuker.rocketry.motorsim.io.ENGExporter;\r
29 import com.billkuker.rocketry.motorsim.io.HTMLExporter;\r
30 import com.billkuker.rocketry.motorsim.io.MotorIO;\r
31 import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;\r
32 import com.billkuker.rocketry.motorsim.visual.RememberJFrame;\r
33 \r
34 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {\r
35         private static final long serialVersionUID = 1L;\r
36 \r
37         MultiMotorThrustChart mbc = new MultiMotorThrustChart();\r
38         MultiMotorPressureChart mpc = new MultiMotorPressureChart();\r
39         JScrollPane mmtScroll;\r
40         MultiMotorTable mmt = new MultiMotorTable();\r
41 \r
42         JFrame detached;\r
43         JTabbedPane detachedTabs;\r
44 \r
45         public MotorsEditor(JFrame f) {\r
46                 super(f, "Motor");\r
47 \r
48                 mmtScroll = new JScrollPane(mmt);\r
49                 \r
50 \r
51 \r
52                 addCreator(new ObjectCreator() {\r
53                         @Override\r
54                         public Motor newObject() {\r
55                                 return MotorEditor.defaultMotor();\r
56                         }\r
57 \r
58                         @Override\r
59                         public String getName() {\r
60                                 return "Motor";\r
61                         }\r
62                 });\r
63 \r
64                 detached = new RememberJFrame(800,600){\r
65                         private static final long serialVersionUID = 1L;\r
66                 };\r
67                 detached.setTitle(MotorWorkbench.name + " - All Motors");\r
68                 detached.setContentPane(detachedTabs = new JTabbedPane());\r
69 \r
70                 detached.addWindowListener(new WindowListener() {\r
71                         @Override\r
72                         public void windowClosing(WindowEvent arg0) {\r
73                                 attach();\r
74                         }\r
75                         @Override\r
76                         public void windowOpened(WindowEvent arg0) {}\r
77                         @Override\r
78                         public void windowIconified(WindowEvent arg0) {}\r
79                         @Override\r
80                         public void windowDeiconified(WindowEvent arg0) {}\r
81                         @Override\r
82                         public void windowDeactivated(WindowEvent arg0) {}\r
83                         @Override\r
84                         public void windowClosed(WindowEvent arg0) {}\r
85                         @Override\r
86                         public void windowActivated(WindowEvent arg0) {}\r
87                 });\r
88                 attach();\r
89         }\r
90 \r
91         public void attach() {\r
92                 detachedTabs.remove(mbc);\r
93                 detachedTabs.remove(mpc);\r
94                 detachedTabs.remove(mmtScroll);\r
95                 insertTab("All Motors", null, mmtScroll, null, 0);\r
96                 insertTab("All Thrust", null, mbc, null, 1);\r
97                 insertTab("All Pressure", null, mpc, null, 2);\r
98                 detached.setVisible(false);\r
99         }\r
100         \r
101         public void detach() {\r
102                 if (detached.isVisible())\r
103                         return;\r
104                 remove(mbc);\r
105                 remove(mpc);\r
106                 remove(mmtScroll);\r
107                 detachedTabs.addTab("All Motors",mmtScroll);\r
108                 detachedTabs.addTab("All Thrust", mbc);\r
109                 detachedTabs.addTab("All Pressure", mpc);\r
110                 detached.setVisible(true);\r
111         }\r
112 \r
113         @Override\r
114         protected void objectAdded(Motor m, MotorEditor e) {\r
115                 e.addBurnWatcher(mbc);\r
116                 e.addBurnWatcher(mpc);\r
117                 e.addBurnWatcher(mmt);\r
118         }\r
119 \r
120         @Override\r
121         protected void objectRemoved(Motor m, MotorEditor e) {\r
122                 mbc.removeBurn(e.burn);\r
123                 mpc.removeBurn(e.burn);\r
124                 mmt.removeBurn(e.burn);\r
125         }\r
126 \r
127         @Override\r
128         public MotorEditor createEditor(Motor o) {\r
129                 return new MotorEditor(o);\r
130         }\r
131 \r
132         @Override\r
133         protected Motor loadFromFile(File f) throws IOException {\r
134                 return MotorIO.readMotor(new FileInputStream(f));\r
135         }\r
136 \r
137         @Override\r
138         protected void saveToFile(Motor o, File f) throws IOException {\r
139                 MotorIO.writeMotor(o, new FileOutputStream(f));\r
140         }\r
141 \r
142         @Override\r
143         public JMenu getMenu() {\r
144                 JMenu ret = super.getMenu();\r
145                 ret.add(new JSeparator());\r
146                 ret.add(new JMenu("Export"){\r
147                         private static final long serialVersionUID = 1L;\r
148                         {\r
149                                 add(new JMenuItem("Export .ENG") {\r
150                                         private static final long serialVersionUID = 1L;\r
151                                         {\r
152                                                 addActionListener(new ActionListener() {\r
153                                                         @Override\r
154                                                         public void actionPerformed(ActionEvent arg0) {\r
155 \r
156                                                                 final FileDialog fd = new FileDialog(frame,\r
157                                                                                 "Export .ENG File", FileDialog.SAVE);\r
158                                                                 fd.setFile("motorsim.eng");\r
159                                                                 fd.setVisible(true);\r
160                                                                 if (fd.getFile() != null) {\r
161                                                                         File file = new File(fd.getDirectory()\r
162                                                                                         + fd.getFile());\r
163                                                                         MotorEditor me = getSelectedEditor();\r
164                                                                         Vector<Burn> bb = new Vector<Burn>();\r
165                                                                         bb.add(me.burn);\r
166                                                                         try {\r
167                                                                                 ENGExporter.export(bb, file);\r
168                                                                         } catch (IOException e) {\r
169                                                                                 // TODO Auto-generated catch block\r
170                                                                                 e.printStackTrace();\r
171                                                                         }\r
172                                                                 }\r
173                                                         }\r
174                                                 });\r
175                                         }\r
176                                 });     \r
177                                 add(new JMenuItem("Export HTML") {\r
178                                         private static final long serialVersionUID = 1L;\r
179                                         {\r
180                                                 addActionListener(new ActionListener() {\r
181                                                         @Override\r
182                                                         public void actionPerformed(ActionEvent arg0) {\r
183                                                                 ByteArrayOutputStream out = new ByteArrayOutputStream();\r
184                                                                 MotorEditor me = getSelectedEditor();\r
185                                                                 try {\r
186                                                                         HTMLExporter.export(me.burn, out);\r
187                                                                         String html = new String(out.toByteArray());\r
188                                                                         Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();\r
189                                                                         clipboard.setContents( new StringSelection(html), null );\r
190                                                                         JOptionPane.showMessageDialog(MotorsEditor.this, "HTML Copied to Clipboard");\r
191                                                                 } catch (Exception e) {\r
192                                                                         \r
193                                                                 }\r
194                                                                 \r
195                                                         }\r
196                                                 });\r
197                                         }\r
198                                 });     \r
199                         }\r
200                 });\r
201                 return ret;\r
202         }\r
203 }\r