package com.billkuker.rocketry.motorsim.visual.workbench;\r
\r
-import java.awt.BorderLayout;\r
-import java.awt.FileDialog;\r
import java.awt.event.ActionEvent;\r
import java.awt.event.ActionListener;\r
-import java.io.File;\r
-import java.io.FileInputStream;\r
-import java.io.FileOutputStream;\r
-import java.util.HashMap;\r
-import java.util.Vector;\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.JPanel;\r
import javax.swing.JRadioButtonMenuItem;\r
-import javax.swing.JSeparator;\r
-import javax.swing.JTabbedPane;\r
import javax.swing.WindowConstants;\r
\r
-import com.billkuker.rocketry.motorsim.Burn;\r
-import com.billkuker.rocketry.motorsim.Motor;\r
import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
import com.billkuker.rocketry.motorsim.fuel.FuelsEditor;\r
-import com.billkuker.rocketry.motorsim.io.ENGExporter;\r
-import com.billkuker.rocketry.motorsim.io.MotorIO;\r
\r
\r
public class MotorWorkbench extends JFrame {\r
private static final long serialVersionUID = 1L;\r
\r
- private JPanel top;\r
- private JTabbedPane motors;\r
private MultiBurnChart mb;\r
private JFrame allBurns;\r
\r
}\r
};\r
private FuelsEditor fuelEditor;\r
+ \r
+ private MotorsEditor motorsEditor;\r
\r
- private HashMap<MotorEditor, File> e2f = new HashMap<MotorEditor, File>();\r
- private HashMap<File, MotorEditor> f2e = new HashMap<File, MotorEditor>();\r
-\r
- private HashMap<Motor, MotorEditor> m2e = new HashMap<Motor, MotorEditor>();\r
\r
public MotorWorkbench() {\r
setTitle("MotorSim 1.0 RC1");\r
- addMenu();\r
setSize(1024, 768);\r
- top = new JPanel(new BorderLayout());\r
- setContentPane(top);\r
+\r
+ motorsEditor = new MotorsEditor(this);\r
+ setContentPane(motorsEditor);\r
+ \r
+ addMenu();\r
\r
mb = new MultiBurnChart();\r
allBurns = new JFrame();\r
setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);\r
allBurns.add(mb);\r
\r
- motors = new JTabbedPane();\r
- \r
- top.add(motors, BorderLayout.CENTER);\r
\r
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);\r
setVisible(true);\r
private static final long serialVersionUID = 1L;\r
\r
{\r
- add(new JMenu("File") {\r
- private static final long serialVersionUID = 1L;\r
-\r
- {\r
- add(new JMenuItem("New Motor") {\r
- private static final long serialVersionUID = 1L;\r
- {\r
- addActionListener(new ActionListener() {\r
-\r
- @Override\r
- public void actionPerformed(ActionEvent arg0) {\r
- addMotor(MotorEditor.defaultMotor(), null);\r
- }\r
- });\r
-\r
- }\r
- });\r
- add(new JMenuItem("Open...") {\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(MotorWorkbench.this, "Open Motor", FileDialog.LOAD);\r
- fd.setVisible(true);\r
- if ( fd.getFile() != null ) {\r
- File file = new File(fd.getDirectory() + fd.getFile());\r
- if (f2e.get(file) != null) {\r
- motors.setSelectedComponent(f2e\r
- .get(file));\r
- return;\r
- }\r
- try {\r
- Motor m = MotorIO\r
- .readMotor(new FileInputStream(file));\r
- addMotor(m, file);\r
- \r
- } catch (Exception e) {\r
- JOptionPane.showMessageDialog(\r
- MotorWorkbench.this, e\r
- .getMessage());\r
- }\r
- }\r
- }\r
- });\r
- }\r
- });\r
- \r
- add(new JSeparator());\r
- \r
- add(new JMenuItem("Close Motor") {\r
- private static final long serialVersionUID = 1L;\r
- {\r
- addActionListener(new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent ev) {\r
- MotorEditor e = (MotorEditor) motors\r
- .getSelectedComponent();\r
- motors.remove(e);\r
- f2e.remove(e2f.get(e));\r
- e2f.remove(e);\r
- m2e.remove(e.getMotor());\r
- mb.removeBurn(e.burn);\r
- }\r
- });\r
- }\r
- });\r
- \r
- add(new JMenuItem("Save Motor") {\r
- private static final long serialVersionUID = 1L;\r
- {\r
- addActionListener(new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent e) {\r
- MotorEditor m = (MotorEditor) motors\r
- .getSelectedComponent();\r
- File f = e2f.get(m);\r
- if (f != null)\r
- save(m.getMotor(), f);\r
-\r
- }\r
- });\r
- }\r
- });\r
- add(new JMenuItem("Save Motor As...") {\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(MotorWorkbench.this, "Save Motor As", FileDialog.SAVE);\r
- fd.setVisible(true);\r
- if (fd.getFile() != null ) {\r
- File file = new File(fd.getDirectory() + fd.getFile());\r
- MotorEditor m = (MotorEditor) motors\r
- .getSelectedComponent();\r
- try {\r
- save(m.getMotor(), file);\r
- e2f.put(m, file);\r
- f2e.put(file, m);\r
- motors.setTitleAt(motors\r
- .getSelectedIndex(),\r
- file.getName());\r
- // TODO Set tab title\r
- } catch (Exception e) {\r
- JOptionPane.showMessageDialog(\r
- MotorWorkbench.this, e\r
- .getMessage());\r
- }\r
- }\r
- }\r
- });\r
- }\r
- });\r
- \r
-\r
- add(new JSeparator());\r
- add(new JMenuItem("Export .ENG"){\r
- private static final long serialVersionUID = 1L;\r
-\r
- {\r
- addActionListener(new ActionListener() {\r
- @Override\r
- public void actionPerformed(ActionEvent arg0) {\r
-\r
- final FileDialog fd = new FileDialog(MotorWorkbench.this, "Export .ENG File", FileDialog.SAVE);\r
- fd.setFile("motorsim.eng");\r
- fd.setVisible(true);\r
- if (fd.getFile() != null ) {\r
- File file = new File(fd.getDirectory() + fd.getFile());\r
- Vector<Burn> bb = new Vector<Burn>();\r
- for( MotorEditor me : m2e.values() )\r
- bb.add(me.burn);\r
- try{\r
- ENGExporter.export(bb, file);\r
- } catch ( Exception e ){\r
- e.printStackTrace();\r
- }\r
- }\r
- }\r
- });\r
- }\r
- });\r
- }\r
- });\r
+ add(motorsEditor.getMenu());\r
+ \r
add(new JMenu("Settings") {\r
private static final long serialVersionUID = 1L;\r
{\r
\r
\r
\r
- private void save(Motor m, File f) {\r
- try {\r
- FileOutputStream fo;\r
- MotorIO.writeMotor(m, fo = new FileOutputStream(f));\r
- fo.close();\r
- } catch (Throwable t) {\r
- JOptionPane.showMessageDialog(MotorWorkbench.this, t.getMessage());\r
- }\r
- }\r
-\r
- public void addMotor(Motor m, File f) {\r
- MotorEditor e = new MotorEditor(m);\r
- e.addBurnWatcher(mb);\r
- String title;\r
- if (f == null) {\r
- title = "New Motor";\r
- } else {\r
- title = f.getName();\r
- e2f.put(e, f);\r
- f2e.put(f, e);\r
- }\r
- m2e.put(m, e);\r
- motors.addTab(title, e);\r
- }\r
\r
\r
}\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.visual.workbench;\r
+\r
+import java.awt.FileDialog;\r
+import java.awt.event.ActionEvent;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+import java.util.Vector;\r
+\r
+import javax.swing.JFrame;\r
+import javax.swing.JMenu;\r
+import javax.swing.JMenuItem;\r
+import javax.swing.JSeparator;\r
+import java.awt.event.ActionListener;\r
+\r
+import com.billkuker.rocketry.motorsim.Burn;\r
+import com.billkuker.rocketry.motorsim.Motor;\r
+import com.billkuker.rocketry.motorsim.io.ENGExporter;\r
+import com.billkuker.rocketry.motorsim.io.MotorIO;\r
+import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;\r
+\r
+public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {\r
+ private static final long serialVersionUID = 1L;\r
+\r
+ public MotorsEditor(JFrame f) {\r
+ super(f, "Motor");\r
+ addCreator(new ObjectCreator() {\r
+ @Override\r
+ public Motor newObject() {\r
+ return MotorEditor.defaultMotor();\r
+ }\r
+\r
+ @Override\r
+ public String getName() {\r
+ return "Motor";\r
+ }\r
+ });\r
+ }\r
+\r
+ @Override\r
+ public MotorEditor createEditor(Motor o) {\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
+ }\r
+\r
+ @Override\r
+ protected void saveToFile(Motor o, File f) throws IOException {\r
+ MotorIO.writeMotor(o, new FileOutputStream(f));\r
+ }\r
+\r
+ \r
+ @Override\r
+ public JMenu getMenu(){\r
+ JMenu ret = super.getMenu();\r
+ ret.add(new JSeparator());\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
+ fd.setFile("motorsim.eng");\r
+ fd.setVisible(true);\r
+ if (fd.getFile() != null) {\r
+ File file = new File(fd.getDirectory()\r
+ + fd.getFile());\r
+ MotorEditor me = getSelectedEditor();\r
+ Vector<Burn> bb = new Vector<Burn>();\r
+ bb.add(me.burn);\r
+ try {\r
+ ENGExporter.export(bb, file);\r
+ } catch (IOException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
+ });\r
+ }\r
+ });\r
+ return ret;\r
+ }\r
+}\r