001    package nl.cwi.sen1.util;
002    
003    import java.awt.Component;
004    
005    import javax.swing.Action;
006    import javax.swing.JMenu;
007    import javax.swing.JMenuBar;
008    
009    import nl.cwi.sen1.configapi.Factory;
010    import nl.cwi.sen1.configapi.types.ActionDescription;
011    import nl.cwi.sen1.configapi.types.ActionDescriptionList;
012    import nl.cwi.sen1.configapi.types.Event;
013    import toolbus.AbstractTool;
014    import aterm.ATerm;
015    import aterm.ATermFactory;
016    import aterm.pure.PureFactory;
017    
018    public class StudioMenuBar  {
019            protected MenuBuilder menuBuilder;
020    
021            protected ATerm id;
022    
023            private JMenu menu;
024    
025            public StudioMenuBar(ATermFactory factory, AbstractTool bridge) {
026                    menuBuilder = new MenuBuilder(bridge);
027                    this.id = factory.parse("studio-menubar");
028                    this.menu = new JMenu();
029            }
030    
031            public void add(ActionDescriptionList list) {
032                    add(list, null);
033            }
034    
035            public void add(ActionDescriptionList list, Action action) {
036                    menuBuilder.fill(menu, id, list, action);
037            }
038    
039            public void add(Event event, Action action) {
040                    Factory f = Factory.getInstance((PureFactory) id.getFactory());
041                    ActionDescription d = f.makeActionDescription_Description(id, event);
042                    ActionDescriptionList l = f.makeActionDescriptionList(d);
043                    add(l, action);
044            }
045    
046            public void add(Event event) {
047                    add(event, null);
048            }
049            
050            public void add(JMenu menu) {
051                    this.menu.add(menu);
052            }
053    
054            public JMenuBar getMenuBar() {
055                    JMenuBar bar = new JMenuBar();
056                    for (Component d : this.menu.getMenuComponents()) {
057                            bar.add(d);
058                    }
059                    return bar;
060            }
061    }