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