Add add/remove notification
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / MultiObjectEditor.java
index 44bad95d2c0c9b4a8c67450813749fde213ec92a..28fed63b7ab2049bbc0b40565e9a491962288b23 100644 (file)
@@ -13,9 +13,11 @@ import java.util.Map;
 import java.util.Set;\r
 import java.util.Vector;\r
 \r
+import javax.swing.JComponent;\r
 import javax.swing.JMenu;\r
 import javax.swing.JMenuItem;\r
 import javax.swing.JOptionPane;\r
+import javax.swing.JSeparator;\r
 import javax.swing.JTabbedPane;\r
 \r
 import org.apache.log4j.Logger;\r
@@ -32,7 +34,7 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
                public abstract String getName();\r
        }\r
        \r
-       private final Frame frame;\r
+       protected final Frame frame;\r
        \r
        private final String noun;\r
        \r
@@ -51,6 +53,10 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
                this.noun = " " + noun.trim();\r
        }\r
        \r
+       protected void objectAdded(OBJECT o){}\r
+       \r
+       protected void objectRemoved(OBJECT o){}\r
+       \r
        protected final void addCreator(ObjectCreator c){\r
                creators.add(c);\r
        }\r
@@ -73,7 +79,7 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
        \r
        public JMenu getMenu(){\r
                JMenu ret = new JMenu("File");\r
-               for ( JMenuItem i : getMenuItems() )\r
+               for ( JComponent i : getMenuItems() )\r
                        ret.add(i);\r
                return ret;\r
        }\r
@@ -109,6 +115,7 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
                editorToObject.remove(e);\r
                fileToEditor.remove(f);\r
                editorToFile.remove(e);\r
+               objectRemoved(o);\r
                remove(e);\r
        }\r
        \r
@@ -169,15 +176,16 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
                                editorToObject.put(e, o);\r
                                fileToEditor.put(file, e);\r
                                editorToFile.put(e, file);\r
-                               addTab(file.getName(), e);                                                                      \r
+                               addTab(file.getName(), e);      \r
+                               objectAdded(o);\r
                        } catch (Exception e) {\r
                                errorDialog(e);\r
                        }\r
                }\r
        }\r
        \r
-       public final List<JMenuItem> getMenuItems(){\r
-               List<JMenuItem> ret = new Vector<JMenuItem>();\r
+       public final List<JComponent> getMenuItems(){\r
+               List<JComponent> ret = new Vector<JComponent>();\r
                if ( creators.size() == 1 ){\r
                        final ObjectCreator c = creators.get(0);\r
                        ret.add(new JMenuItem("New " + c.getName()){\r
@@ -237,6 +245,7 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
                                });\r
                        }\r
                });\r
+               ret.add(new JSeparator());\r
                ret.add(new JMenuItem("Save" + noun){\r
                        private static final long serialVersionUID = 1L;\r
                        {\r
@@ -270,6 +279,7 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
                editorToObject.put(e, o);\r
                addTab("new", e);\r
                dirty(o);\r
+               objectAdded(o);\r
        }\r
        \r
        public final void load(final File f) throws IOException{\r
@@ -280,6 +290,7 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
                fileToEditor.put(f, e);\r
                editorToFile.put(e, f);\r
                addTab(f.getName(), e);\r
+               objectAdded(o);\r
        }\r
        \r
        public abstract EDITOR createEditor(final OBJECT o);\r