From 0b21efa1733db6b57ef09ea467514613b0cca68c Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Fri, 12 Nov 2010 14:06:37 +0000 Subject: [PATCH] Edit Panel --- .../motorsim/visual/MultiObjectEditor.java | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/gui/com/billkuker/rocketry/motorsim/visual/MultiObjectEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/MultiObjectEditor.java index ec9e839..133c0c4 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/MultiObjectEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/MultiObjectEditor.java @@ -27,10 +27,17 @@ public abstract class MultiObjectEditor extend private static final Logger log = Logger.getLogger(MultiObjectEditor.class); + protected abstract class ObjectCreator { + public abstract OBJECT newObject(); + public abstract String getName(); + } + private final Frame frame; private final String noun; + private Set creators = new HashSet(); + private final Map objectToEditor = new HashMap(); private final Map editorToObject = new HashMap(); private final Map fileToEditor = new HashMap(); @@ -43,6 +50,10 @@ public abstract class MultiObjectEditor extend this.noun = " " + noun.trim(); } + protected final void addCreator(ObjectCreator c){ + creators.add(c); + } + public final void dirty(final OBJECT o){ if ( !dirty.contains(o) ) setTitleAt(indexOfComponent(objectToEditor.get(o)), "*" + getTitleAt(indexOfComponent(objectToEditor.get(o)))); @@ -66,8 +77,8 @@ public abstract class MultiObjectEditor extend return ret; } - private void menuNew(){ - add(newObject()); + private void menuNew(ObjectCreator c){ + add(c.newObject()); } @SuppressWarnings("unchecked") @@ -163,16 +174,23 @@ public abstract class MultiObjectEditor extend public final List getMenuItems(){ List ret = new Vector(); - ret.add(new JMenuItem("New" + noun){ + ret.add(new JMenu("New"){ private static final long serialVersionUID = 1L; { - addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent ae) { - log.debug("New"); - menuNew(); - } - }); + for (final ObjectCreator c : creators ){ + add(new JMenuItem("New " + c.getName()){ + private static final long serialVersionUID = 1L; + { + addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent ae) { + log.debug("New"); + menuNew(c); + } + }); + } + }); + } } }); ret.add(new JMenuItem("Open" + noun + "..."){ -- 2.30.2