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
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
\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
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
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
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