Edit Panel
authorBill Kuker <bkuker@billkuker.com>
Fri, 12 Nov 2010 14:06:37 +0000 (14:06 +0000)
committerBill Kuker <bkuker@billkuker.com>
Fri, 12 Nov 2010 14:06:37 +0000 (14:06 +0000)
gui/com/billkuker/rocketry/motorsim/visual/MultiObjectEditor.java

index ec9e8393f1cb7610df660ab979c5c55bcdf596af..133c0c4e42e8662d82cc2323efe1f4be6f1cb885 100644 (file)
@@ -27,10 +27,17 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
 \r
        private static final Logger log = Logger.getLogger(MultiObjectEditor.class);\r
        \r
+       protected abstract class ObjectCreator {\r
+               public abstract OBJECT newObject();\r
+               public abstract String getName();\r
+       }\r
+       \r
        private final Frame frame;\r
        \r
        private final String noun;\r
        \r
+       private Set<ObjectCreator> creators = new HashSet<ObjectCreator>();\r
+       \r
        private final Map<OBJECT, EDITOR> objectToEditor = new HashMap<OBJECT, EDITOR>();\r
        private final Map<EDITOR, OBJECT> editorToObject = new HashMap<EDITOR, OBJECT>();\r
        private final Map<File, EDITOR> fileToEditor = new HashMap<File, EDITOR>();\r
@@ -43,6 +50,10 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
                this.noun = " " + noun.trim();\r
        }\r
        \r
+       protected final void addCreator(ObjectCreator c){\r
+               creators.add(c);\r
+       }\r
+       \r
        public final void dirty(final OBJECT o){\r
                if ( !dirty.contains(o) )\r
                        setTitleAt(indexOfComponent(objectToEditor.get(o)), "*" + getTitleAt(indexOfComponent(objectToEditor.get(o))));\r
@@ -66,8 +77,8 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
                return ret;\r
        }\r
        \r
-       private void menuNew(){\r
-               add(newObject());\r
+       private void menuNew(ObjectCreator c){\r
+               add(c.newObject());\r
        }\r
        \r
        @SuppressWarnings("unchecked")\r
@@ -163,16 +174,23 @@ public abstract class MultiObjectEditor<OBJECT, EDITOR extends Component> extend
        \r
        public final List<JMenuItem> getMenuItems(){\r
                List<JMenuItem> ret = new Vector<JMenuItem>();\r
-               ret.add(new JMenuItem("New" + noun){\r
+               ret.add(new JMenu("New"){\r
                        private static final long serialVersionUID = 1L;\r
                        {\r
-                               addActionListener(new ActionListener() {\r
-                                       @Override\r
-                                       public void actionPerformed(ActionEvent ae) {\r
-                                               log.debug("New");\r
-                                               menuNew();\r
-                                       }\r
-                               });\r
+                               for (final ObjectCreator c : creators ){\r
+                                       add(new JMenuItem("New " + c.getName()){\r
+                                               private static final long serialVersionUID = 1L;\r
+                                               {\r
+                                                       addActionListener(new ActionListener() {\r
+                                                               @Override\r
+                                                               public void actionPerformed(ActionEvent ae) {\r
+                                                                       log.debug("New");\r
+                                                                       menuNew(c);\r
+                                                               }\r
+                                                       });\r
+                                               }\r
+                                       });\r
+                               }\r
                        }\r
                });\r
                ret.add(new JMenuItem("Open" + noun + "..."){\r