/** * Add all the menu currently available to the menu. This may be called any time BlueJ feels that * the menu needs to be updated. * * @param onThisProject a specific project to look for, or null for all projects. */ public void addExtensionMenu(Project onThisProject) { // Get all menus that can be possibly be generated now. List<JMenuItem> menuItems = extMgr.getMenuItems(menuGenerator, onThisProject); // Retrieve all the items from the current menu MenuElement[] elements = popupMenu.getSubElements(); for (int index = 0; index < elements.length; index++) { JComponent aComponent = (JComponent) elements[index].getComponent(); if (aComponent == null) { continue; } if (!(aComponent instanceof JMenuItem)) { continue; } ExtensionWrapper aWrapper = (ExtensionWrapper) aComponent.getClientProperty("bluej.extmgr.ExtensionWrapper"); if (aWrapper == null) { continue; } popupMenu.remove(aComponent); } popupMenu.remove(menuSeparator); // If the provided menu is empty we are done here. if (menuItems.isEmpty()) { return; } popupMenu.add(menuSeparator); for (JMenuItem menuItem : menuItems) { popupMenu.add(menuItem); } }
/** * Constructor for the MenuManager object. * * @param aPopupMenu The menu that extensions are attaching to. */ public MenuManager(JPopupMenu aPopupMenu) { extMgr = ExtensionsManager.getInstance(); popupMenu = aPopupMenu; popupMenu.addPopupMenuListener(this); menuSeparator = new JPopupMenu.Separator(); }