Check for dirty motors and fuels before quitting
authorBill Kuker <bkuker@billkuker.com>
Sun, 28 Nov 2010 22:13:18 +0000 (22:13 +0000)
committerBill Kuker <bkuker@billkuker.com>
Sun, 28 Nov 2010 22:13:18 +0000 (22:13 +0000)
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java

index e1dd52ac0cf16a8d99bda44369fcb5b4367f4293..f08fd2829869b5d67bed2e8d9024bb69306eaa28 100644 (file)
@@ -2,14 +2,17 @@ package com.billkuker.rocketry.motorsim.visual.workbench;
 \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.fuel.FuelsEditor;\r
@@ -53,14 +56,63 @@ public class MotorWorkbench extends RememberJFrame {
                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
-\r
-               setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);\r
-               //setVisible(true);\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
        }\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
+       }\r
 \r
        private void addMenu() {\r
 \r
@@ -68,7 +120,20 @@ public class MotorWorkbench extends RememberJFrame {
                        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