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