X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=gui%2Fcom%2Fbillkuker%2Frocketry%2Fmotorsim%2Fvisual%2Fworkbench%2FMotorsEditor.java;h=46c73d8c642f875f32e489d734787f49e78b9d99;hb=8f68dc05a0ecb47193582a42f7a49601b190114e;hp=05d947585d1248401f5081bec7ddd9cfb08c60a9;hpb=f9a2c2e1c17e4aeea0c7f4e816c2bbcd52dd43be;p=sw%2Fmotorsim diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java index 05d9475..46c73d8 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java @@ -1,7 +1,14 @@ package com.billkuker.rocketry.motorsim.visual.workbench; import java.awt.FileDialog; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -11,27 +18,37 @@ import java.util.Vector; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JScrollPane; import javax.swing.JSeparator; -import java.awt.event.ActionListener; +import javax.swing.JTabbedPane; import com.billkuker.rocketry.motorsim.Burn; import com.billkuker.rocketry.motorsim.Motor; import com.billkuker.rocketry.motorsim.io.ENGExporter; +import com.billkuker.rocketry.motorsim.io.HTMLExporter; import com.billkuker.rocketry.motorsim.io.MotorIO; import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor; +import com.billkuker.rocketry.motorsim.visual.RememberJFrame; 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 Thrust", mbc); - addTab("All Pressure", mpc); - + + addCreator(new ObjectCreator() { @Override public Motor newObject() { @@ -43,18 +60,68 @@ public class MotorsEditor extends MultiObjectEditor { return "Motor"; } }); + + detached = new RememberJFrame(800,600){ + private static final long serialVersionUID = 1L; + }; + 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); } @Override @@ -62,7 +129,6 @@ public class MotorsEditor extends MultiObjectEditor { return new MotorEditor(o); } - @Override protected Motor loadFromFile(File f) throws IOException { return MotorIO.readMotor(new FileInputStream(f)); @@ -73,36 +139,63 @@ 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 JMenu("Export"){ 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); - fd.setFile("motorsim.eng"); - fd.setVisible(true); - if (fd.getFile() != null) { - File file = new File(fd.getDirectory() - + fd.getFile()); - MotorEditor me = getSelectedEditor(); - Vector bb = new Vector(); - bb.add(me.burn); - try { - ENGExporter.export(bb, file); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + 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); + fd.setFile("motorsim.eng"); + fd.setVisible(true); + if (fd.getFile() != null) { + File file = new File(fd.getDirectory() + + fd.getFile()); + MotorEditor me = getSelectedEditor(); + Vector bb = new Vector(); + bb.add(me.burn); + try { + ENGExporter.export(bb, file); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + }); + } + }); + add(new JMenuItem("Export HTML") { + private static final long serialVersionUID = 1L; + { + addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + MotorEditor me = getSelectedEditor(); + try { + HTMLExporter.export(me.burn, out); + String html = new String(out.toByteArray()); + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + clipboard.setContents( new StringSelection(html), null ); + JOptionPane.showMessageDialog(MotorsEditor.this, "HTML Copied to Clipboard"); + } catch (Exception e) { + + } + } - } + }); } - }); + }); } }); return ret;