Add a delay to motor
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / workbench / MotorWorkbench.java
1 package com.billkuker.rocketry.motorsim.visual.workbench;\r
2 \r
3 import java.awt.Image;\r
4 import java.awt.Toolkit;\r
5 import java.awt.event.ActionEvent;\r
6 import java.awt.event.ActionListener;\r
7 import java.awt.event.WindowEvent;\r
8 import java.awt.event.WindowListener;\r
9 \r
10 import javax.swing.ButtonGroup;\r
11 import javax.swing.JFrame;\r
12 import javax.swing.JMenu;\r
13 import javax.swing.JMenuBar;\r
14 import javax.swing.JMenuItem;\r
15 import javax.swing.JOptionPane;\r
16 import javax.swing.JRadioButtonMenuItem;\r
17 import javax.swing.JSeparator;\r
18 \r
19 import org.apache.log4j.Logger;\r
20 import org.apache.log4j.lf5.LF5Appender;\r
21 \r
22 import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
23 import com.billkuker.rocketry.motorsim.debug.DebugFrame;\r
24 import com.billkuker.rocketry.motorsim.fuel.FuelsEditor;\r
25 import com.billkuker.rocketry.motorsim.visual.RememberJFrame;\r
26 \r
27 \r
28 public class MotorWorkbench extends RememberJFrame {\r
29         public static final String version = "2.0 BETA4";\r
30         public static final String name = "MotorSim " + version;\r
31         private static final long serialVersionUID = 1L;\r
32         \r
33         private MultiMotorThrustChart mb;\r
34         private JFrame allBurns;\r
35         \r
36         private SettingsEditor settings = new SettingsEditor(this);\r
37         \r
38         private About about = new About(this);\r
39         \r
40         private JFrame fuelEditorFrame = new RememberJFrame(800,600){\r
41                 private static final long serialVersionUID = 1L;\r
42                 {\r
43                         setIconImage(getIcon());\r
44                         setSize(800, 600);\r
45                         add(fuelEditor = new FuelsEditor(this));\r
46                         JMenuBar b;\r
47                         setJMenuBar(b = new JMenuBar());\r
48                         b.add(fuelEditor.getMenu());\r
49                         setTitle(name + " - Fuel Editor");\r
50                 }\r
51         };\r
52         private FuelsEditor fuelEditor;\r
53         \r
54         private MotorsEditor motorsEditor;\r
55 \r
56         public static Image getIcon(){\r
57                 return Toolkit.getDefaultToolkit().getImage(MotorWorkbench.class.getResource("icon.png"));\r
58         }\r
59         \r
60         public MotorWorkbench() {\r
61                 super(1024, 768);\r
62                 setTitle(name);\r
63                 setIconImage(getIcon());\r
64 \r
65                 motorsEditor = new MotorsEditor(this);\r
66                 setContentPane(motorsEditor);\r
67                 \r
68                 addMenu();\r
69                 \r
70                 mb = new MultiMotorThrustChart();\r
71                 allBurns = new JFrame();\r
72                 allBurns.setTitle("All Burns");\r
73                 allBurns.setSize(800, 600);\r
74                 allBurns.add(mb);\r
75 \r
76                 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);\r
77 \r
78                 addWindowListener(new WindowListener() {\r
79                         \r
80                         @Override\r
81                         public void windowOpened(WindowEvent e) {}\r
82                         \r
83                         @Override\r
84                         public void windowIconified(WindowEvent e) {}\r
85                         \r
86                         @Override\r
87                         public void windowDeiconified(WindowEvent e) {}\r
88                         \r
89                         @Override\r
90                         public void windowDeactivated(WindowEvent e) {}\r
91                         \r
92                         @Override\r
93                         public void windowClosing(WindowEvent e) {\r
94                                 maybeQuit();\r
95                         }\r
96                         \r
97                         @Override\r
98                         public void windowClosed(WindowEvent e) {}\r
99                         \r
100                         @Override\r
101                         public void windowActivated(WindowEvent e) {}\r
102                 });\r
103 \r
104         }\r
105         \r
106         private void maybeQuit(){\r
107                 if (motorsEditor.hasDirty()) {\r
108                         int response = JOptionPane\r
109                                         .showConfirmDialog(\r
110                                                         MotorWorkbench.this,\r
111                                                         "There are unsaved Motors.\nExit Anyway?",\r
112                                                         "Confirm",\r
113                                                         JOptionPane.YES_NO_OPTION);\r
114                         if (response == JOptionPane.NO_OPTION) {\r
115                                 return;\r
116                         }\r
117                 }\r
118                 if (fuelEditor.hasDirty()) {\r
119                         int response = JOptionPane\r
120                                         .showConfirmDialog(\r
121                                                         MotorWorkbench.this,\r
122                                                         "There are unsaved Fuels.\nExit Anyway?",\r
123                                                         "Confirm",\r
124                                                         JOptionPane.YES_NO_OPTION);\r
125                         if (response == JOptionPane.NO_OPTION) {\r
126                                 return;\r
127                         }\r
128                 }\r
129                 MotorWorkbench.this.dispose();\r
130                 System.exit(0);\r
131         }\r
132 \r
133         private void addMenu() {\r
134 \r
135                 setJMenuBar(new JMenuBar() {\r
136                         private static final long serialVersionUID = 1L;\r
137 \r
138                         {\r
139                                 JMenu file = motorsEditor.getMenu();\r
140                                 file.add(new JSeparator());\r
141                                 file.add(new JMenuItem("Quit") {\r
142                                         private static final long serialVersionUID = 1L;\r
143                                         {\r
144                                                 addActionListener(new ActionListener() {\r
145                                                         @Override\r
146                                                         public void actionPerformed(ActionEvent e) {\r
147                                                                 maybeQuit();\r
148                                                         }\r
149                                                 });\r
150                                         }\r
151                                 });\r
152                                 add(file);\r
153                                 \r
154                                 add(new JMenu("Settings") {\r
155                                         private static final long serialVersionUID = 1L;\r
156                                         {\r
157                                                 ButtonGroup units = new ButtonGroup();\r
158                                                 JRadioButtonMenuItem sci = new JRadioButtonMenuItem(\r
159                                                                 "SI");\r
160                                                 JRadioButtonMenuItem nonsci = new JRadioButtonMenuItem(\r
161                                                                 "NonSI");\r
162                                                 units.add(sci);\r
163                                                 units.add(nonsci);\r
164                                                 sci.setSelected(UnitPreference.getUnitPreference() == UnitPreference.SI);\r
165                                                 nonsci.setSelected(UnitPreference.getUnitPreference() == UnitPreference.NONSI);\r
166                                                 sci.addActionListener(new ActionListener() {\r
167                                                         public void actionPerformed(ActionEvent arg0) {\r
168                                                                 UnitPreference\r
169                                                                                 .setUnitPreference(UnitPreference.SI);\r
170                                                         }\r
171                                                 });\r
172                                                 nonsci.addActionListener(new ActionListener() {\r
173                                                         public void actionPerformed(ActionEvent arg0) {\r
174                                                                 UnitPreference\r
175                                                                                 .setUnitPreference(UnitPreference.NONSI);\r
176                                                         }\r
177                                                 });\r
178                                                 add(sci);\r
179                                                 add(nonsci);\r
180                                                 \r
181                                                 add(new JSeparator());\r
182                                                 add(new JMenuItem("Simulation Settings"){\r
183                                                         private static final long serialVersionUID = 1L;\r
184                                                         {\r
185                                                                 addActionListener(new ActionListener() {\r
186                                                                         @Override\r
187                                                                         public void actionPerformed(ActionEvent e) {\r
188                                                                                 settings.setVisible(true);\r
189                                                                         }\r
190                                                                 });\r
191                                                         }\r
192                                                 });\r
193                                         }\r
194                                 });\r
195                                 add(new JMenu("View") {\r
196                                         private static final long serialVersionUID = 1L;\r
197                                         {\r
198                                                 add(new JMenuItem("Detach \"All Motors\" tabs") {\r
199                                                         private static final long serialVersionUID = 1L;\r
200                                                         {\r
201                                                                 addActionListener(new ActionListener() {\r
202                                                                         @Override\r
203                                                                         public void actionPerformed(ActionEvent arg0) {\r
204                                                                                 motorsEditor.detach();\r
205                                                                         }\r
206                                                                 });\r
207                                                         }\r
208                                                 });\r
209                                                 add(new JMenuItem("Show Fuel Editor") {\r
210                                                         private static final long serialVersionUID = 1L;\r
211                                                         {\r
212                                                                 addActionListener(new ActionListener() {\r
213                                                                         @Override\r
214                                                                         public void actionPerformed(ActionEvent arg0) {\r
215                                                                                 fuelEditorFrame.setVisible(true);\r
216                                                                                 fuelEditorFrame.toFront();\r
217                                                                         }\r
218                                                                 });\r
219                                                         }\r
220                                                 });\r
221                                         }\r
222                                 });\r
223                                 add(new JMenu("Help"){\r
224                                         private static final long serialVersionUID = 1L;\r
225                                         {\r
226                                                 add(new JMenuItem("About") {\r
227                                                         private static final long serialVersionUID = 1L;\r
228                                                         {\r
229                                                                 addActionListener(new ActionListener() {\r
230                                                                         @Override\r
231                                                                         public void actionPerformed(ActionEvent e) {\r
232                                                                                 about.setVisible(true);\r
233                                                                         }\r
234                                                                 });\r
235                                                         }\r
236                                                 });\r
237                                                 add(new JSeparator());\r
238                                                 add(new JMenu("Debug"){\r
239                                                         private static final long serialVersionUID = 1L;\r
240                                                         {\r
241                                                                 add(new JMenuItem("Debug Window") {\r
242                                                                         private static final long serialVersionUID = 1L;\r
243                                                                         {\r
244                                                                                 addActionListener(new ActionListener() {\r
245                                                                                         @Override\r
246                                                                                         public void actionPerformed(ActionEvent e) {\r
247                                                                                                 new DebugFrame();\r
248                                                                                         }\r
249                                                                                 });\r
250                                                                         }\r
251                                                                 });\r
252                                                                 add(new JMenuItem("Log Window") {\r
253                                                                         LF5Appender lf5;\r
254                                                                         private static final long serialVersionUID = 1L;\r
255                                                                         {\r
256                                                                                 addActionListener(new ActionListener() {\r
257                                                                                         @Override\r
258                                                                                         public void actionPerformed(ActionEvent e) {\r
259                                                                                                 if ( lf5 == null ){\r
260                                                                                                         lf5 = new LF5Appender();\r
261                                                                                                         Logger.getRootLogger().addAppender(lf5);\r
262                                                                                                 }\r
263                                                                                                 lf5.getLogBrokerMonitor().show();\r
264                                                                                         }\r
265                                                                                 });\r
266                                                                         }\r
267                                                                 });\r
268                                                         }\r
269                                                 });\r
270                                         }\r
271                                 });\r
272                         }\r
273                 });\r
274         }\r
275 \r
276         \r
277 \r
278 \r
279         \r
280 }\r