1 package com.billkuker.rocketry.motorsim.visual.workbench;
\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
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
19 import org.apache.log4j.Logger;
\r
20 import org.apache.log4j.lf5.LF5Appender;
\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
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
33 private MultiMotorThrustChart mb;
\r
34 private JFrame allBurns;
\r
36 private SettingsEditor settings = new SettingsEditor(this);
\r
38 private About about = new About(this);
\r
40 private JFrame fuelEditorFrame = new RememberJFrame(800,600){
\r
41 private static final long serialVersionUID = 1L;
\r
43 setIconImage(getIcon());
\r
45 add(fuelEditor = new FuelsEditor(this));
\r
47 setJMenuBar(b = new JMenuBar());
\r
48 b.add(fuelEditor.getMenu());
\r
49 setTitle(name + " - Fuel Editor");
\r
52 private FuelsEditor fuelEditor;
\r
54 private MotorsEditor motorsEditor;
\r
56 public static Image getIcon(){
\r
57 return Toolkit.getDefaultToolkit().getImage(MotorWorkbench.class.getResource("icon.png"));
\r
60 public MotorWorkbench() {
\r
63 setIconImage(getIcon());
\r
65 motorsEditor = new MotorsEditor(this);
\r
66 setContentPane(motorsEditor);
\r
70 mb = new MultiMotorThrustChart();
\r
71 allBurns = new JFrame();
\r
72 allBurns.setTitle("All Burns");
\r
73 allBurns.setSize(800, 600);
\r
76 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
\r
78 addWindowListener(new WindowListener() {
\r
81 public void windowOpened(WindowEvent e) {}
\r
84 public void windowIconified(WindowEvent e) {}
\r
87 public void windowDeiconified(WindowEvent e) {}
\r
90 public void windowDeactivated(WindowEvent e) {}
\r
93 public void windowClosing(WindowEvent e) {
\r
98 public void windowClosed(WindowEvent e) {}
\r
101 public void windowActivated(WindowEvent e) {}
\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
113 JOptionPane.YES_NO_OPTION);
\r
114 if (response == JOptionPane.NO_OPTION) {
\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
124 JOptionPane.YES_NO_OPTION);
\r
125 if (response == JOptionPane.NO_OPTION) {
\r
129 MotorWorkbench.this.dispose();
\r
133 private void addMenu() {
\r
135 setJMenuBar(new JMenuBar() {
\r
136 private static final long serialVersionUID = 1L;
\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
144 addActionListener(new ActionListener() {
\r
146 public void actionPerformed(ActionEvent e) {
\r
154 add(new JMenu("Settings") {
\r
155 private static final long serialVersionUID = 1L;
\r
157 ButtonGroup units = new ButtonGroup();
\r
158 JRadioButtonMenuItem sci = new JRadioButtonMenuItem(
\r
160 JRadioButtonMenuItem nonsci = new JRadioButtonMenuItem(
\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
169 .setUnitPreference(UnitPreference.SI);
\r
172 nonsci.addActionListener(new ActionListener() {
\r
173 public void actionPerformed(ActionEvent arg0) {
\r
175 .setUnitPreference(UnitPreference.NONSI);
\r
181 add(new JSeparator());
\r
182 add(new JMenuItem("Simulation Settings"){
\r
183 private static final long serialVersionUID = 1L;
\r
185 addActionListener(new ActionListener() {
\r
187 public void actionPerformed(ActionEvent e) {
\r
188 settings.setVisible(true);
\r
195 add(new JMenu("View") {
\r
196 private static final long serialVersionUID = 1L;
\r
198 add(new JMenuItem("Detach \"All Motors\" tabs") {
\r
199 private static final long serialVersionUID = 1L;
\r
201 addActionListener(new ActionListener() {
\r
203 public void actionPerformed(ActionEvent arg0) {
\r
204 motorsEditor.detach();
\r
209 add(new JMenuItem("Show Fuel Editor") {
\r
210 private static final long serialVersionUID = 1L;
\r
212 addActionListener(new ActionListener() {
\r
214 public void actionPerformed(ActionEvent arg0) {
\r
215 fuelEditorFrame.setVisible(true);
\r
216 fuelEditorFrame.toFront();
\r
223 add(new JMenu("Help"){
\r
224 private static final long serialVersionUID = 1L;
\r
226 add(new JMenuItem("About") {
\r
227 private static final long serialVersionUID = 1L;
\r
229 addActionListener(new ActionListener() {
\r
231 public void actionPerformed(ActionEvent e) {
\r
232 about.setVisible(true);
\r
237 add(new JSeparator());
\r
238 add(new JMenu("Debug"){
\r
239 private static final long serialVersionUID = 1L;
\r
241 add(new JMenuItem("Debug Window") {
\r
242 private static final long serialVersionUID = 1L;
\r
244 addActionListener(new ActionListener() {
\r
246 public void actionPerformed(ActionEvent e) {
\r
252 add(new JMenuItem("Log Window") {
\r
254 private static final long serialVersionUID = 1L;
\r
256 addActionListener(new ActionListener() {
\r
258 public void actionPerformed(ActionEvent e) {
\r
259 if ( lf5 == null ){
\r
260 lf5 = new LF5Appender();
\r
261 Logger.getRootLogger().addAppender(lf5);
\r
263 lf5.getLogBrokerMonitor().show();
\r