/* MenuBar.java -- An AWT menu bar class
Copyright (C) 1999 Free Software Foundation, Inc.
This file is part of the non-peer AWT libraries of GNU Classpath.
This library is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published
by the Free Software Foundation, either version 2 of the License, or
(at your option) any later verion.
This library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; if not, write to the Free Software Foundation
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. */
package java.awt;
import java.awt.peer.MenuBarPeer;
import java.awt.peer.MenuComponentPeer;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.Vector;
/**
* This class implements a menu bar in the AWT system.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class MenuBar extends MenuComponent implements MenuContainer, Serializable
{
/*
* Static Variables
*/
// Serialization Constant
private static final long serialVersionUID = -4930327919388951260L;
/*************************************************************************/
/*
* Instance Variables
*/
/**
* @serial The menu used for providing help information
*/
private Menu helpMenu;
/**
* @serial The menus contained in this menu bar.
*/
private Vector menus = new Vector();
/*************************************************************************/
/*
* Constructors
*/
/**
* Initializes a new instance of MenuBar
.
*/
public
MenuBar()
{
}
/*************************************************************************/
/*
* Instance Methods
*/
/**
* Returns the help menu for this menu bar. This may be null
.
*
* @return The help menu for this menu bar.
*/
public Menu
getHelpMenu()
{
return(helpMenu);
}
/*************************************************************************/
/**
* Sets the help menu for this menu bar.
*
* @param helpMenu The new help menu for this menu bar.
*/
public synchronized void
setHelpMenu(Menu helpMenu)
{
// FIXME: Does this need to be added to the vector of items?
this.helpMenu = helpMenu;
MenuBarPeer mbp = (MenuBarPeer)getPeer();
if (mbp != null)
mbp.addHelpMenu(helpMenu);
}
/*************************************************************************/
/**
* Adds the specified menu to this menu bar.
*
* @param menu The menu to add.
*
* @return The menu that was added.
*/
public synchronized Menu
add(Menu menu)
{
menus.addElement(menu);
MenuBarPeer mbp = (MenuBarPeer)getPeer();
if (mbp != null)
mbp.addMenu(menu);
return(menu);
}
/*************************************************************************/
/**
* Removes the menu at the specified index.
*
* @param index The index of the menu to remove from the menu bar.
*/
public synchronized void
remove(int index)
{
menus.removeElementAt(index);
MenuBarPeer mbp = (MenuBarPeer)getPeer();
if (mbp != null)
mbp.delMenu(index);
}
/*************************************************************************/
/**
* Removes the specified menu from the menu bar.
*
* @param menu The menu to remove from the menu bar.
*/
public void
remove(MenuComponent menu)
{
int index = menus.indexOf(menu);
if (index == -1)
return;
remove(index);
}
/*************************************************************************/
/**
* Returns the number of elements in this menu bar.
*
* @return The number of elements in the menu bar.
*/
public int
getMenuCount()
{
// FIXME: How does the help menu fit in here?
return(menus.size());
}
/*************************************************************************/
/**
* Returns the number of elements in this menu bar.
*
* @return The number of elements in the menu bar.
*
* @deprecated This method is deprecated in favor of getMenuCount()
.
*/
public int
countMenus()
{
return(getMenuCount());
}
/*************************************************************************/
/**
* Returns the menu at the specified index.
*
* @return The requested menu.
*
* @exception ArrayIndexOutOfBoundsException If the index is not valid.
*/
public Menu
getMenu(int index)
{
return((Menu)menus.elementAt(index));
}
/*************************************************************************/
/**
* Creates this object's native peer.
*/
public void
addNotify()
{
if (getPeer() == null)
setPeer((MenuComponentPeer)getToolkit().createMenuBar(this));
}
/*************************************************************************/
/**
* Destroys this object's native peer.
*/
public void
removeNotify()
{
super.removeNotify();
}
/*************************************************************************/
/**
* Returns a list of all shortcuts for the menus in this menu bar.
*
* @return A list of all shortcuts for the menus in this menu bar.
*/
public synchronized Enumeration
shortcuts()
{
Vector shortcuts = new Vector();
Enumeration e = menus.elements();
while (e.hasMoreElements())
{
Menu menu = (Menu)e.nextElement();
if (menu.getShortcut() != null)
shortcuts.addElement(menu.getShortcut());
}
return(shortcuts.elements());
}
/*************************************************************************/
/**
* Returns the menu item for the specified shortcut, or null
* if no such item exists.
*
* @param shortcut The shortcut to return the menu item for.
*
* @return The menu item for the specified shortcut.
*/
public MenuItem
getShortcutMenuItem(MenuShortcut shortcut)
{
Enumeration e = menus.elements();
while (e.hasMoreElements())
{
Menu menu = (Menu)e.nextElement();
MenuShortcut s = menu.getShortcut();
if ((s != null) && (s.equals(shortcut)))
return(menu);
}
return(null);
}
/*************************************************************************/
/**
* Deletes the specified menu shortcut.
*
* @param shortcut The shortcut to delete.
*/
public void
deleteShortcut(MenuShortcut shortcut)
{
MenuItem mi = getShortcutMenuItem(shortcut);
if (mi != null)
mi.setShortcut(null);
}
} // class MenuBar