/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.navigator.ui;
import Sirius.navigator.connection.SessionManager;
import Sirius.navigator.exception.ConnectionException;
import Sirius.navigator.exception.ExceptionManager;
import Sirius.navigator.method.MethodManager;
import Sirius.navigator.plugin.PluginRegistry;
import Sirius.navigator.plugin.interfaces.PluginMethod;
import Sirius.navigator.plugin.interfaces.PluginSupport;
import Sirius.navigator.resource.PropertyManager;
import Sirius.navigator.resource.ResourceManager;
import Sirius.navigator.search.dynamic.SearchSearchTopicsDialogAction;
import Sirius.navigator.types.treenode.RootTreeNode;
import Sirius.navigator.ui.dialog.ErrorDialog;
import Sirius.navigator.ui.embedded.AbstractEmbeddedComponentsMap;
import Sirius.navigator.ui.embedded.EmbeddedComponent;
import Sirius.navigator.ui.embedded.EmbeddedContainer;
import Sirius.navigator.ui.embedded.EmbeddedContainersMap;
import Sirius.navigator.ui.embedded.EmbeddedMenu;
import org.apache.log4j.Logger;
import org.openide.util.Exceptions;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JSeparator;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import de.cismet.tools.gui.StaticSwingTools;
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
public class MutableMenuBar extends JMenuBar {
//~ Static fields/initializers ---------------------------------------------
private static final Logger LOG = Logger.getLogger(MutableMenuBar.class);
//~ Instance fields --------------------------------------------------------
ResourceManager resources = ResourceManager.getManager();
private final PluginMenuesMap pluginMenues;
private final EmbeddedContainersMap moveableMenues;
private Sirius.navigator.plugin.interfaces.LayoutManager layoutManager;
private JMenu viewMenu;
private JMenu pluginMenu;
private JMenu searchMenu;
private String helpUrl;
private String newsUrl;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new MutableMenuBar object.
*/
public MutableMenuBar() {
super();
pluginMenues = new PluginMenuesMap();
moveableMenues = new EmbeddedContainersMap();
this.makeDefaultMenues();
}
//~ Methods ----------------------------------------------------------------
/**
* Adds new moveable menues to this menu bar.
*
* @param id DOCUMENT ME!
* @param menues DOCUMENT ME!
*/
public void addMoveableMenues(final String id, final Collection menues) {
this.moveableMenues.add(new MoveableMenues(id, menues));
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
*/
public void removeMoveableMenues(final String id) {
this.moveableMenues.remove(id);
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
* @param visible DOCUMENT ME!
*/
public void setMoveableMenuesVisible(final String id, final boolean visible) {
this.moveableMenues.setVisible(id, visible);
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isMoveableMenuesVisible(final String id) {
return this.moveableMenues.isVisible(id);
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
* @param enabled DOCUMENT ME!
*/
public void setMoveableMenuesEnabled(final String id, final boolean enabled) {
this.moveableMenues.setEnabled(id, enabled);
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isMoveableMenuesEnabled(final String id) {
return this.moveableMenues.isEnabled(id);
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isMoveableMenuesAvailable(final String id) {
return this.moveableMenues.isAvailable(id);
}
/**
* DOCUMENT ME!
*
* @param menu DOCUMENT ME!
*/
public void addPluginMenu(final EmbeddedMenu menu) {
if (menu.getItemCount() > 0) {
this.pluginMenues.add(menu);
} else if (LOG.isDebugEnabled()) {
LOG.warn("menu '" + menu.getId() + "' does not contain any items, ignoring menu"); // NOI18N
}
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
*/
public void removePluginMenu(final String id) {
this.pluginMenues.remove(id);
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
* @param enabled DOCUMENT ME!
*/
public void setPluginMenuEnabled(final String id, final boolean enabled) {
this.pluginMenues.setEnabled(id, enabled);
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isPluginMenuEnabled(final String id) {
return this.pluginMenues.isEnabled(id);
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isPluginMenuAvailable(final String id) {
return this.pluginMenues.isAvailable(id);
}
/**
* Creates the default menues & menu entries.
*/
private void makeDefaultMenues() {
if (LOG.isDebugEnabled()) {
LOG.debug("creating default menues"); // NOI18N
}
final MenuItemActionListener itemListener = new MenuItemActionListener();
JMenu menu = new JMenu(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.title")); // NOI18N
menu.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.mnemonic").charAt(0)); // NOI18N
this.add(menu);
// LayoutControls
// Gegenwärtiges Layout Speichern
JMenuItem item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.saveCurrentLayout.title")); // NOI18N
menu.add(item);
item.setIcon(resources.getIcon("layout.png")); // NOI18N
item.setAccelerator(KeyStroke.getKeyStroke("ctrl S")); // NOI18N
item.setActionCommand("navigator.save.current.layout"); // NOI18N
item.addActionListener(itemListener);
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.saveCurrentLayout.tooltip")); // NOI18N
// Layout öffnen
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.openLayout.title"))); // NOI18N
item.setIcon(resources.getIcon("layout.png")); // NOI18N
item.setAccelerator(KeyStroke.getKeyStroke("ctrl O")); // NOI18N
item.setActionCommand("navigator.open.layout"); // NOI18N
item.addActionListener(itemListener);
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.openLayout.tooltip")); // NOI18N
// Layout reseten
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.resetLayout.title"))); // NOI18N
item.setIcon(resources.getIcon("layout.png")); // NOI18N
item.setAccelerator(KeyStroke.getKeyStroke("strg R")); // NOI18N
item.setActionCommand("navigator.reset.layout"); // NOI18N
item.addActionListener(itemListener);
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.resetLayout.tooltip")); // NOI18N
menu.add(new JSeparator());
// Hell
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.reloadCatalogue.title"))); // NOI18N
item.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.reloadCatalogue.mnemonic").charAt(0)); // NOI18N
item.setAccelerator(KeyStroke.getKeyStroke("F5")); // NOI18N
item.setActionCommand("tree.refresh"); // NOI18N
item.addActionListener(itemListener);
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.reloadCatalogue.tooltip")); // NOI18N
menu.add(new JSeparator());
// Beenden .............................................................
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.exit.title"))); // NOI18N
item.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.exit.mnemonic").charAt(0)); // NOI18N
item.setIcon(resources.getIcon("stop16.gif")); // NOI18N
item.setAccelerator(KeyStroke.getKeyStroke("alt X")); // NOI18N
item.setActionCommand("navigator.exit"); // NOI18N
item.addActionListener(itemListener);
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.navigatorMenu.exit.tooltip")); // NOI18N
menu = new JMenu(org.openide.util.NbBundle.getMessage(MutableMenuBar.class, "MutableMenuBar.searchMenu.title")); // NOI18N
menu.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.mnemonic").charAt(0)); // NOI18N
this.add(menu);
// Suche ...............................................................
if (PropertyManager.getManager().isEnableSearchDialog()) {
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.search.title"))); // NOI18N
item.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.search.mnemonic").charAt(0)); // NOI18N
item.setIcon(resources.getIcon("find16.gif")); // NOI18N
item.setAccelerator(KeyStroke.getKeyStroke("alt S")); // NOI18N
item.setActionCommand("search.search"); // NOI18N
item.addActionListener(itemListener);
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.search.tooltip")); // NOI18N);
} else {
menu.add(item = new JMenuItem(new SearchSearchTopicsDialogAction())); // NOI18N
item.setText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.search.title")); // NOI18N
item.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.search.mnemonic").charAt(0)); // NOI18N
item.setAccelerator(KeyStroke.getKeyStroke("alt S")); // NOI18N
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.search.tooltip")); // NOI18N);
}
// show search results .................................................
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.showResults.title"))); // NOI18N
item.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.showResults.mnemonic").charAt(0)); // NOI18N
item.setIcon(resources.getIcon("searchresults16.gif")); // NOI18N
item.setActionCommand("search.show"); // NOI18N
item.addActionListener(itemListener);
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.showResults.tooltip")); // NOI18N);
doNotShowThisMenuItemAsItsFunctionalityIsBroken(item);
// search result profiles .....................................................
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.searchResultProfiles.title"))); // NOI18N
item.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.searchResultProfiles.mnemonic").charAt(0)); // NOI18N
item.setIcon(resources.getIcon("searchresultprofiles16.gif")); // NOI18N
item.setActionCommand("search.profiles.result"); // NOI18N
item.addActionListener(itemListener);
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.searchResultProfiles.tooltip")); // NOI18N);
doNotShowThisMenuItemAsItsFunctionalityIsBroken(item);
// search profiles .....................................................
if (PropertyManager.getManager().isEnableSearchDialog()) {
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.searchProfiles.title"))); // NOI18N
item.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.searchMenu.searchProfiles.mnemonic").charAt(0)); // NOI18N
item.setIcon(resources.getIcon("searchresultprofiles16.gif")); // NOI18N
item.setActionCommand("search.profiles"); // NOI18N
item.addActionListener(itemListener);
doNotShowThisMenuItemAsItsFunctionalityIsBroken(item);
}
searchMenu = menu;
menu = new JMenu(org.openide.util.NbBundle.getMessage(MutableMenuBar.class, "MutableMenuBar.pluginMenu.title")); // NOI18N
menu.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.pluginMenu.mnemonic").charAt(0)); // NOI18N
menu.setEnabled(false); // HELL
this.add(menu);
this.pluginMenu = menu;
// plugin manager ......................................................
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.pluginMenu.pluginManager.title"))); // NOI18N
item.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.pluginMenu.pluginManager.mnemonic").charAt(0)); // NOI18N
item.setIcon(resources.getIcon("plugin_node_root.gif")); // NOI18N
item.setActionCommand("plugin.manager"); // NOI18N
item.addActionListener(itemListener);
menu.addSeparator();
// Extras menu ......................................................
menu = new JMenu(org.openide.util.NbBundle.getMessage(MutableMenuBar.class, "MutableMenuBar.extrasMenu.title")); // NOI18N
menu.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.extrasMenu.mnemonic").charAt(0)); // NOI18N
this.add(menu);
menu.add(item = new JMenuItem(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.extrasMenu.options.title"))); // NOI18N
item.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.extrasMenu.options.mnemonic").charAt(0)); // NOI18N
item.setIcon(resources.getIcon("tooloptions.png")); // NOI18N
item.setActionCommand("extras.options"); // NOI18N
item.addActionListener(itemListener);
item.setToolTipText(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.extrasMenu.options.tooltip")); // NOI18N
menu = new JMenu(org.openide.util.NbBundle.getMessage(MutableMenuBar.class, "MutableMenuBar.windowMenu.title")); // NOI18N
menu.setMnemonic(org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.windowMenu.mnemonic").charAt(0)); // NOI18N
this.add(menu);
viewMenu = menu;
}
/**
* The functionality of the menu items hidden with this method is broken. Therefore that functionality needs to be
* fixed before the items can become visible again.
*
* @param menuItem DOCUMENT ME!
*/
private void doNotShowThisMenuItemAsItsFunctionalityIsBroken(final JMenuItem menuItem) {
menuItem.setVisible(false);
}
/**
* DOCUMENT ME!
*
* @param viewItem DOCUMENT ME!
*/
public void addViewMenuItem(final JMenuItem viewItem) {
if (viewMenu != null) {
viewMenu.add(viewItem);
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public JMenu getViewMenu() {
return viewMenu;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public JMenu getSearchMenu() {
return searchMenu;
}
/**
* DOCUMENT ME!
*
* @param layoutManager DOCUMENT ME!
*/
public void registerLayoutManager(final Sirius.navigator.plugin.interfaces.LayoutManager layoutManager) {
this.layoutManager = layoutManager;
}
//~ Inner Classes ----------------------------------------------------------
/**
* INNERE KLASSEN ZUM BEARBEITEN DER EREIGNISSE ============================.
*
* @version $Revision$, $Date$
*/
private class MenuItemActionListener implements ActionListener {
//~ Methods ------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param e DOCUMENT ME!
*/
@Override
public void actionPerformed(final ActionEvent e) {
if (e.getActionCommand().equals("search.search")) { // NOI18N
try {
MethodManager.getManager().showSearchDialog();
} catch (Exception ex) {
LOG.fatal("Error while processing search method", ex); // NOI18N
final ErrorDialog errorDialog = new ErrorDialog(
org.openide.util.NbBundle.getMessage(
MutableMenuBar.class,
"MutableMenuBar.MenuItemActionListener.actionPerformed(ActionEvent).ErrorDialog.message"), // NOI18N
ex.toString(),
ErrorDialog.WARNING);
StaticSwingTools.showDialog(errorDialog);
}
} else if (e.getActionCommand().equals("navigator.exit")) { // NOI18N
if (ExceptionManager.getManager().showExitDialog(ComponentRegistry.getRegistry().getMainWindow())) {
LOG.info("closing program"); // NOI18N
ComponentRegistry.getRegistry().getNavigator().dispose();
System.exit(0);
}
} else if (e.getActionCommand().equals("search.show")) { // NOI18N
MethodManager.getManager().showSearchResults();
} else if (e.getActionCommand().equals("search.profiles.result")) { // NOI18N
MethodManager.getManager().showQueryResultProfileManager();
} else if (e.getActionCommand().equals("search.profiles")) { // NOI18N
MethodManager.getManager().showQueryProfilesManager();
} else if (e.getActionCommand().equals("plugin.manager")) { // NOI18N
MethodManager.getManager().showPluginManager();
} else if (e.getActionCommand().equals("extras.options")) { // NOI18N
MethodManager.getManager().showOptionsDialog();
} else if (e.getActionCommand().equals("tree.refresh")) { // NOI18N
try {
final TreePath selectionPath = ComponentRegistry.getRegistry()
.getCatalogueTree()
.getSelectionPath();
if ((selectionPath != null) && (selectionPath.getPath().length > 0)) {
final RootTreeNode rootTreeNode = new RootTreeNode(SessionManager.getProxy().getRoots());
((DefaultTreeModel)ComponentRegistry.getRegistry().getCatalogueTree().getModel()).setRoot(
rootTreeNode);
((DefaultTreeModel)ComponentRegistry.getRegistry().getCatalogueTree().getModel()).reload();
ComponentRegistry.getRegistry().getCatalogueTree().exploreSubtree(selectionPath);
}
} catch (ConnectionException ex) {
LOG.error("Error while refreshing the tree", ex); // NOI18N
} catch (RuntimeException ex) {
LOG.error("Error while refreshing the tree", ex); // NOI18N
}
} else if (e.getActionCommand().equals("navigator.reset.layout")) { // NOI18N
if (LOG.isDebugEnabled()) {
LOG.debug("reset layout"); // NOI18N
}
if (layoutManager != null) {
layoutManager.resetLayout();
} else {
// TODO Meldung Benutzer
}
final PluginSupport cismapPlugin = PluginRegistry.getRegistry().getPlugin("cismap");
if (cismapPlugin != null) {
if (LOG.isDebugEnabled()) {
LOG.debug("reset layout of cismap plugin"); // NOI18N
}
final PluginMethod resetLayoutMethod = cismapPlugin.getMethod(
"de.cismet.cismap.navigatorplugin.CismapPlugin$ResetLayoutMethod");
if (resetLayoutMethod != null) {
try {
resetLayoutMethod.invoke();
} catch (Exception ex) {
LOG.error("ResetLayoutMethod of cismap plugin failed: " + ex.getMessage(), ex);
}
} else {
LOG.warn("ResetLayoutMethod of cismap plugin not available");
}
}
} else if (e.getActionCommand().equals("navigator.open.layout")) { // NOI18N
if (LOG.isDebugEnabled()) {
LOG.debug("open layout"); // NOI18N
}
if (layoutManager != null) {
layoutManager.loadLayout((java.awt.Component)StaticSwingTools.getParentFrame(MutableMenuBar.this));
} else {
// TODO Meldung Benutzer
}
} else if (e.getActionCommand().equals("navigator.save.current.layout")) { // NOI18N
if (LOG.isDebugEnabled()) {
LOG.debug("save layout"); // NOI18N
}
if (layoutManager != null) {
layoutManager.saveCurrentLayout((java.awt.Component)StaticSwingTools.getParentFrame(
MutableMenuBar.this));
} else {
// TODO Meldung Benutzer
}
}
}
}
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
private class PluginMenuesMap extends AbstractEmbeddedComponentsMap {
//~ Constructors -------------------------------------------------------
/**
* Creates a new PluginMenuesMap object.
*/
private PluginMenuesMap() {
Logger.getLogger(PluginMenuesMap.class);
}
//~ Methods ------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param component DOCUMENT ME!
*/
@Override
protected void doAdd(final EmbeddedComponent component) {
if (component instanceof EmbeddedMenu) {
MutableMenuBar.this.pluginMenu.add((EmbeddedMenu)component);
} else {
this.logger.error("doAdd(): invalid object type '" + component.getClass().getName() // NOI18N
+ "', 'Sirius.navigator.EmbeddedMenu' expected"); // NOI18N
}
}
/**
* DOCUMENT ME!
*
* @param component DOCUMENT ME!
*/
@Override
protected void doRemove(final EmbeddedComponent component) {
if (component instanceof EmbeddedMenu) {
MutableMenuBar.this.pluginMenu.remove((EmbeddedMenu)component);
} else {
this.logger.error("doRemove(): invalid object type '" + component.getClass().getName() // NOI18N
+ "', 'Sirius.navigator.EmbeddedMenu' expected"); // NOI18N
}
}
}
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
private class MoveableMenues extends EmbeddedContainer {
//~ Instance fields ----------------------------------------------------
/** LOGGER. */
private final transient Logger logger = Logger.getLogger(MoveableMenues.class);
//~ Constructors -------------------------------------------------------
/**
* Creates a new MoveableMenues object.
*
* @param id DOCUMENT ME!
* @param components DOCUMENT ME!
*/
public MoveableMenues(final String id, final Collection components) {
super(id, components);
super.setVisible(true);
}
//~ Methods ------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param visible DOCUMENT ME!
*/
@Override
public void setVisible(final boolean visible) {
if (this.isVisible() != visible) {
super.setVisible(visible);
if (visible) {
this.addComponents();
} else {
this.removeComponents();
}
} else {
this.logger.warn("unexpected call to 'setVisible()': '" + visible + "'"); // NOI18N
}
}
/**
* DOCUMENT ME!
*/
@Override
protected void addComponents() {
Component component = MutableMenuBar.this.getComponent(MutableMenuBar.this.getComponentCount() - 1);
if (!(component instanceof MutableMenuSeparator)) {
MutableMenuBar.this.add(new MutableMenuSeparator());
}
final ComponentIterator iterator = this.iterator();
while (iterator.hasNext()) {
component = iterator.next();
if (component != null) {
if (component instanceof JMenu) {
MutableMenuBar.this.add((JMenu)component);
} else {
this.logger.error("addComponents(): invalid object type '" + component.getClass().getName()
+ "', 'javax.swing.JMenu' expected"); // NOI18N
}
}
}
MutableMenuBar.this.invalidate();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
synchronized (getTreeLock()) {
validateTree();
}
repaint();
}
});
}
/**
* DOCUMENT ME!
*/
@Override
protected void removeComponents() {
Component component;
final ComponentIterator iterator = this.iterator();
while (iterator.hasNext()) {
component = iterator.next();
if (component != null) {
if (component instanceof JMenu) {
MutableMenuBar.this.remove(component);
} else {
this.logger.error("removeComponents(): invalid object type '" + component.getClass().getName()
+ "', 'javax.swing.JMenu' expected"); // NOI18N
}
}
}
component = MutableMenuBar.this.getComponent(MutableMenuBar.this.getComponentCount() - 1);
if (component instanceof MutableMenuSeparator) {
MutableMenuBar.this.remove(component);
}
MutableMenuBar.this.invalidate();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
synchronized (getTreeLock()) {
validateTree();
}
repaint();
}
});
}
}
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
private class MutableMenuSeparator extends JSeparator {
//~ Constructors -------------------------------------------------------
/**
* Creates a new MutableMenuSeparator object.
*/
public MutableMenuSeparator() {
super(SwingConstants.VERTICAL);
this.setMaximumSize(new Dimension(5, 60));
}
}
}