Use MultiObjectEditor for motors
authorBill Kuker <bkuker@billkuker.com>
Mon, 22 Nov 2010 01:59:13 +0000 (01:59 +0000)
committerBill Kuker <bkuker@billkuker.com>
Mon, 22 Nov 2010 01:59:13 +0000 (01:59 +0000)
TODO MULTI BURN PANE

gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java [new file with mode: 0644]

index 433507be88d331f6d07abc82c06df0b46b3ef670..4b0abd3f60b024a73a13958cce06616123b1b6a4 100644 (file)
@@ -1,40 +1,23 @@
 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
@@ -50,18 +33,18 @@ public class MotorWorkbench extends JFrame {
                }\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
@@ -70,9 +53,6 @@ public class MotorWorkbench extends JFrame {
                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
@@ -85,153 +65,8 @@ public class MotorWorkbench extends JFrame {
                        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
@@ -295,30 +130,6 @@ public class MotorWorkbench extends JFrame {
 \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
diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java
new file mode 100644 (file)
index 0000000..48a469a
--- /dev/null
@@ -0,0 +1,91 @@
+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