From 748d664ab9c429b1df5af82692964893fb004010 Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Tue, 23 Nov 2010 19:19:44 +0000 Subject: [PATCH] Make all-views detachable --- .../visual/workbench/MotorWorkbench.java | 15 +++- .../visual/workbench/MotorsEditor.java | 79 ++++++++++++++++--- 2 files changed, 79 insertions(+), 15 deletions(-) diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java index e758daa..c19afb6 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java @@ -25,7 +25,7 @@ public class MotorWorkbench extends JFrame { private JFrame fuelEditorFrame = new JFrame(){ private static final long serialVersionUID = 1L; { - setSize(1024, 768); + setSize(800, 600); add(fuelEditor = new FuelsEditor(this)); JMenuBar b; setJMenuBar(b = new JMenuBar()); @@ -99,7 +99,18 @@ public class MotorWorkbench extends JFrame { add(new JMenu("View") { private static final long serialVersionUID = 1L; { - add(new JMenuItem("Fuel Editor") { + add(new JMenuItem("Detach \"All Motors\" tabs") { + private static final long serialVersionUID = 1L; + { + addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + motorsEditor.detach(); + } + }); + } + }); + add(new JMenuItem("Show Fuel Editor") { private static final long serialVersionUID = 1L; { addActionListener(new ActionListener() { diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java index c5b771d..a2f214d 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java @@ -3,6 +3,8 @@ package com.billkuker.rocketry.motorsim.visual.workbench; import java.awt.FileDialog; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -14,6 +16,7 @@ import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JSeparator; +import javax.swing.JTabbedPane; import com.billkuker.rocketry.motorsim.Burn; import com.billkuker.rocketry.motorsim.Motor; @@ -23,18 +26,22 @@ import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor; public class MotorsEditor extends MultiObjectEditor { private static final long serialVersionUID = 1L; - + MultiMotorThrustChart mbc = new MultiMotorThrustChart(); MultiMotorPressureChart mpc = new MultiMotorPressureChart(); + JScrollPane mmtScroll; MultiMotorTable mmt = new MultiMotorTable(); + JFrame detached; + JTabbedPane detachedTabs; + public MotorsEditor(JFrame f) { super(f, "Motor"); + + mmtScroll = new JScrollPane(mmt); - addTab("All Motors", new JScrollPane(mmt)); - addTab("All Thrust", mbc); - addTab("All Pressure", mpc); - + + addCreator(new ObjectCreator() { @Override public Motor newObject() { @@ -46,17 +53,64 @@ public class MotorsEditor extends MultiObjectEditor { return "Motor"; } }); + + detached = new JFrame(); + detached.setSize(800, 600); + detached.setTitle(MotorWorkbench.name + " - All Motors"); + detached.setContentPane(detachedTabs = new JTabbedPane()); + + detached.addWindowListener(new WindowListener() { + @Override + public void windowClosing(WindowEvent arg0) { + attach(); + } + @Override + public void windowOpened(WindowEvent arg0) {} + @Override + public void windowIconified(WindowEvent arg0) {} + @Override + public void windowDeiconified(WindowEvent arg0) {} + @Override + public void windowDeactivated(WindowEvent arg0) {} + @Override + public void windowClosed(WindowEvent arg0) {} + @Override + public void windowActivated(WindowEvent arg0) {} + }); + attach(); + } + + public void attach() { + detachedTabs.remove(mbc); + detachedTabs.remove(mpc); + detachedTabs.remove(mmtScroll); + insertTab("All Motors", null, mmtScroll, null, 0); + insertTab("All Thrust", null, mbc, null, 1); + insertTab("All Pressure", null, mpc, null, 2); + detached.setVisible(false); } + public void detach() { + if (detached.isVisible()) + return; + remove(mbc); + remove(mpc); + remove(mmtScroll); + detachedTabs.addTab("All Motors",mmtScroll); + detachedTabs.addTab("All Thrust", mbc); + detachedTabs.addTab("All Pressure", mpc); + detached.setVisible(true); + } + @Override - protected void objectAdded(Motor m, MotorEditor e){ + protected void objectAdded(Motor m, MotorEditor e) { e.addBurnWatcher(mbc); e.addBurnWatcher(mpc); e.addBurnWatcher(mmt); } - + @Override - protected void objectRemoved(Motor m, MotorEditor e){ + protected void objectRemoved(Motor m, MotorEditor e) { mbc.removeBurn(e.burn); mpc.removeBurn(e.burn); mmt.removeBurn(e.burn); @@ -67,7 +121,6 @@ public class MotorsEditor extends MultiObjectEditor { return new MotorEditor(o); } - @Override protected Motor loadFromFile(File f) throws IOException { return MotorIO.readMotor(new FileInputStream(f)); @@ -78,19 +131,19 @@ public class MotorsEditor extends MultiObjectEditor { MotorIO.writeMotor(o, new FileOutputStream(f)); } - @Override - public JMenu getMenu(){ + public JMenu getMenu() { JMenu ret = super.getMenu(); ret.add(new JSeparator()); - ret.add(new JMenuItem("Export .ENG"){ + ret.add(new JMenuItem("Export .ENG") { private static final long serialVersionUID = 1L; { addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { - final FileDialog fd = new FileDialog(frame, "Export .ENG File", FileDialog.SAVE); + final FileDialog fd = new FileDialog(frame, + "Export .ENG File", FileDialog.SAVE); fd.setFile("motorsim.eng"); fd.setVisible(true); if (fd.getFile() != null) { -- 2.30.2