Make all-views detachable
authorBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 19:19:44 +0000 (19:19 +0000)
committerBill Kuker <bkuker@billkuker.com>
Tue, 23 Nov 2010 19:19:44 +0000 (19:19 +0000)
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java

index e758daac7c3b1d09d747528f32d7796fa09e33e8..c19afb6b46fae923c32de246c55497a2290770c1 100644 (file)
@@ -25,7 +25,7 @@ public class MotorWorkbench extends JFrame {
        private JFrame fuelEditorFrame = new JFrame(){\r
                private static final long serialVersionUID = 1L;\r
                {\r
-                       setSize(1024, 768);\r
+                       setSize(800, 600);\r
                        add(fuelEditor = new FuelsEditor(this));\r
                        JMenuBar b;\r
                        setJMenuBar(b = new JMenuBar());\r
@@ -99,7 +99,18 @@ public class MotorWorkbench extends JFrame {
                                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
index c5b771dd4e65743542342eb5f8369d436b516678..a2f214d4ebe854b8429cf076d3be7ff3f1800637 100644 (file)
@@ -3,6 +3,8 @@ package com.billkuker.rocketry.motorsim.visual.workbench;
 import java.awt.FileDialog;\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
 import java.io.File;\r
 import java.io.FileInputStream;\r
 import java.io.FileOutputStream;\r
@@ -14,6 +16,7 @@ import javax.swing.JMenu;
 import javax.swing.JMenuItem;\r
 import javax.swing.JScrollPane;\r
 import javax.swing.JSeparator;\r
+import javax.swing.JTabbedPane;\r
 \r
 import com.billkuker.rocketry.motorsim.Burn;\r
 import com.billkuker.rocketry.motorsim.Motor;\r
@@ -23,18 +26,22 @@ import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;
 \r
 public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {\r
        private static final long serialVersionUID = 1L;\r
-       \r
+\r
        MultiMotorThrustChart mbc = new MultiMotorThrustChart();\r
        MultiMotorPressureChart mpc = new MultiMotorPressureChart();\r
+       JScrollPane mmtScroll;\r
        MultiMotorTable mmt = new MultiMotorTable();\r
 \r
+       JFrame detached;\r
+       JTabbedPane detachedTabs;\r
+\r
        public MotorsEditor(JFrame f) {\r
                super(f, "Motor");\r
+\r
+               mmtScroll = new JScrollPane(mmt);\r
                \r
-               addTab("All Motors", new JScrollPane(mmt));\r
-               addTab("All Thrust", mbc);\r
-               addTab("All Pressure", mpc);\r
-               \r
+\r
+\r
                addCreator(new ObjectCreator() {\r
                        @Override\r
                        public Motor newObject() {\r
@@ -46,17 +53,64 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
                                return "Motor";\r
                        }\r
                });\r
+\r
+               detached = new JFrame();\r
+               detached.setSize(800, 600);\r
+               detached.setTitle(MotorWorkbench.name + " - All Motors");\r
+               detached.setContentPane(detachedTabs = new JTabbedPane());\r
+\r
+               detached.addWindowListener(new WindowListener() {\r
+                       @Override\r
+                       public void windowClosing(WindowEvent arg0) {\r
+                               attach();\r
+                       }\r
+                       @Override\r
+                       public void windowOpened(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowIconified(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowDeiconified(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowDeactivated(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowClosed(WindowEvent arg0) {}\r
+                       @Override\r
+                       public void windowActivated(WindowEvent arg0) {}\r
+               });\r
+               attach();\r
+       }\r
+\r
+       public void attach() {\r
+               detachedTabs.remove(mbc);\r
+               detachedTabs.remove(mpc);\r
+               detachedTabs.remove(mmtScroll);\r
+               insertTab("All Motors", null, mmtScroll, null, 0);\r
+               insertTab("All Thrust", null, mbc, null, 1);\r
+               insertTab("All Pressure", null, mpc, null, 2);\r
+               detached.setVisible(false);\r
        }\r
        \r
+       public void detach() {\r
+               if (detached.isVisible())\r
+                       return;\r
+               remove(mbc);\r
+               remove(mpc);\r
+               remove(mmtScroll);\r
+               detachedTabs.addTab("All Motors",mmtScroll);\r
+               detachedTabs.addTab("All Thrust", mbc);\r
+               detachedTabs.addTab("All Pressure", mpc);\r
+               detached.setVisible(true);\r
+       }\r
+\r
        @Override\r
-       protected void objectAdded(Motor m, MotorEditor e){\r
+       protected void objectAdded(Motor m, MotorEditor e) {\r
                e.addBurnWatcher(mbc);\r
                e.addBurnWatcher(mpc);\r
                e.addBurnWatcher(mmt);\r
        }\r
-       \r
+\r
        @Override\r
-       protected void objectRemoved(Motor m, MotorEditor e){\r
+       protected void objectRemoved(Motor m, MotorEditor e) {\r
                mbc.removeBurn(e.burn);\r
                mpc.removeBurn(e.burn);\r
                mmt.removeBurn(e.burn);\r
@@ -67,7 +121,6 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
                return new MotorEditor(o);\r
        }\r
 \r
-\r
        @Override\r
        protected Motor loadFromFile(File f) throws IOException {\r
                return MotorIO.readMotor(new FileInputStream(f));\r
@@ -78,19 +131,19 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
                MotorIO.writeMotor(o, new FileOutputStream(f));\r
        }\r
 \r
-       \r
        @Override\r
-       public JMenu getMenu(){\r
+       public JMenu getMenu() {\r
                JMenu ret = super.getMenu();\r
                ret.add(new JSeparator());\r
-               ret.add(new JMenuItem("Export .ENG"){\r
+               ret.add(new JMenuItem("Export .ENG") {\r
                        private static final long serialVersionUID = 1L;\r
                        {\r
                                addActionListener(new ActionListener() {\r
                                        @Override\r
                                        public void actionPerformed(ActionEvent arg0) {\r
 \r
-                                               final FileDialog fd = new FileDialog(frame, "Export .ENG File", FileDialog.SAVE);\r
+                                               final FileDialog fd = new FileDialog(frame,\r
+                                                               "Export .ENG File", FileDialog.SAVE);\r
                                                fd.setFile("motorsim.eng");\r
                                                fd.setVisible(true);\r
                                                if (fd.getFile() != null) {\r