package com.billkuker.rocketry.motorsim.visual.workbench;\r
\r
+import java.awt.Image;\r
+import java.awt.Toolkit;\r
import java.awt.event.ActionEvent;\r
import java.awt.event.ActionListener;\r
+import java.awt.event.WindowEvent;\r
+import java.awt.event.WindowListener;\r
\r
import javax.swing.ButtonGroup;\r
import javax.swing.JFrame;\r
import javax.swing.JMenu;\r
import javax.swing.JMenuBar;\r
import javax.swing.JMenuItem;\r
+import javax.swing.JOptionPane;\r
import javax.swing.JRadioButtonMenuItem;\r
-import javax.swing.WindowConstants;\r
+import javax.swing.JSeparator;\r
\r
import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
+import com.billkuker.rocketry.motorsim.debug.DebugFrame;\r
import com.billkuker.rocketry.motorsim.fuel.FuelsEditor;\r
+import com.billkuker.rocketry.motorsim.visual.RememberJFrame;\r
\r
\r
-public class MotorWorkbench extends JFrame {\r
+public class MotorWorkbench extends RememberJFrame {\r
+ public static final String version = "2.0 BETA3";\r
+ public static final String name = "MotorSim " + version;\r
private static final long serialVersionUID = 1L;\r
\r
- private MultiBurnChart mb;\r
+ private MultiMotorThrustChart mb;\r
private JFrame allBurns;\r
\r
- private JFrame fuelEditorFrame = new JFrame(){\r
+ private SettingsEditor settings = new SettingsEditor(this);\r
+ \r
+ private About about = new About(this);\r
+ \r
+ private JFrame fuelEditorFrame = new RememberJFrame(800,600){\r
private static final long serialVersionUID = 1L;\r
{\r
- setSize(1024, 768);\r
+ setIconImage(getIcon());\r
+ setSize(800, 600);\r
add(fuelEditor = new FuelsEditor(this));\r
JMenuBar b;\r
setJMenuBar(b = new JMenuBar());\r
b.add(fuelEditor.getMenu());\r
- setTitle("MotorSim - Fuel Editor");\r
+ setTitle(name + " - Fuel Editor");\r
}\r
};\r
private FuelsEditor fuelEditor;\r
\r
private MotorsEditor motorsEditor;\r
\r
+ public static Image getIcon(){\r
+ return Toolkit.getDefaultToolkit().getImage(MotorWorkbench.class.getResource("icon.png"));\r
+ }\r
\r
public MotorWorkbench() {\r
- setTitle("MotorSim 1.0 RC1");\r
- setSize(1024, 768);\r
+ super(1024, 768);\r
+ setTitle(name);\r
+ setIconImage(getIcon());\r
\r
motorsEditor = new MotorsEditor(this);\r
setContentPane(motorsEditor);\r
\r
addMenu();\r
\r
- mb = new MultiBurnChart();\r
+ mb = new MultiMotorThrustChart();\r
allBurns = new JFrame();\r
allBurns.setTitle("All Burns");\r
allBurns.setSize(800, 600);\r
- setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);\r
allBurns.add(mb);\r
\r
+ setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);\r
+\r
+ addWindowListener(new WindowListener() {\r
+ \r
+ @Override\r
+ public void windowOpened(WindowEvent e) {}\r
+ \r
+ @Override\r
+ public void windowIconified(WindowEvent e) {}\r
+ \r
+ @Override\r
+ public void windowDeiconified(WindowEvent e) {}\r
+ \r
+ @Override\r
+ public void windowDeactivated(WindowEvent e) {}\r
+ \r
+ @Override\r
+ public void windowClosing(WindowEvent e) {\r
+ maybeQuit();\r
+ }\r
+ \r
+ @Override\r
+ public void windowClosed(WindowEvent e) {}\r
+ \r
+ @Override\r
+ public void windowActivated(WindowEvent e) {}\r
+ });\r
\r
- setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);\r
- setVisible(true);\r
-\r
+ }\r
+ \r
+ private void maybeQuit(){\r
+ if (motorsEditor.hasDirty()) {\r
+ int response = JOptionPane\r
+ .showConfirmDialog(\r
+ MotorWorkbench.this,\r
+ "There are unsaved Motors.\nExit Anyway?",\r
+ "Confirm",\r
+ JOptionPane.YES_NO_OPTION);\r
+ if (response == JOptionPane.NO_OPTION) {\r
+ return;\r
+ }\r
+ }\r
+ if (fuelEditor.hasDirty()) {\r
+ int response = JOptionPane\r
+ .showConfirmDialog(\r
+ MotorWorkbench.this,\r
+ "There are unsaved Fuels.\nExit Anyway?",\r
+ "Confirm",\r
+ JOptionPane.YES_NO_OPTION);\r
+ if (response == JOptionPane.NO_OPTION) {\r
+ return;\r
+ }\r
+ }\r
+ MotorWorkbench.this.dispose();\r
+ System.exit(0);\r
}\r
\r
private void addMenu() {\r
private static final long serialVersionUID = 1L;\r
\r
{\r
- add(motorsEditor.getMenu());\r
+ JMenu file = motorsEditor.getMenu();\r
+ file.add(new JSeparator());\r
+ file.add(new JMenuItem("Quit") {\r
+ private static final long serialVersionUID = 1L;\r
+ {\r
+ addActionListener(new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ maybeQuit();\r
+ }\r
+ });\r
+ }\r
+ });\r
+ add(file);\r
\r
add(new JMenu("Settings") {\r
private static final long serialVersionUID = 1L;\r
});\r
add(sci);\r
add(nonsci);\r
+ \r
+ add(new JSeparator());\r
+ add(new JMenuItem("Simulation Settings"){\r
+ private static final long serialVersionUID = 1L;\r
+ {\r
+ addActionListener(new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ settings.setVisible(true);\r
+ }\r
+ });\r
+ }\r
+ });\r
}\r
});\r
add(new JMenu("View") {\r
private static final long serialVersionUID = 1L;\r
{\r
- add(new JMenuItem("Fuel Editor") {\r
+ add(new JMenuItem("Detach \"All Motors\" tabs") {\r
+ private static final long serialVersionUID = 1L;\r
+ {\r
+ addActionListener(new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent arg0) {\r
+ motorsEditor.detach();\r
+ }\r
+ });\r
+ }\r
+ });\r
+ add(new JMenuItem("Show Fuel Editor") {\r
private static final long serialVersionUID = 1L;\r
{\r
addActionListener(new ActionListener() {\r
});\r
}\r
});\r
+ add(new JMenu("Help"){\r
+ private static final long serialVersionUID = 1L;\r
+ {\r
+ add(new JMenuItem("About") {\r
+ private static final long serialVersionUID = 1L;\r
+ {\r
+ addActionListener(new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ about.setVisible(true);\r
+ }\r
+ });\r
+ }\r
+ });\r
+ add(new JMenuItem("Debug") {\r
+ private static final long serialVersionUID = 1L;\r
+ {\r
+ addActionListener(new ActionListener() {\r
+ @Override\r
+ public void actionPerformed(ActionEvent e) {\r
+ new DebugFrame();\r
+ }\r
+ });\r
+ }\r
+ });\r
+ }\r
+ });\r
}\r
});\r
}\r