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