\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
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
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
\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