mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			693 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			693 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Java
		
	
	
	
/* JMenuBar.java --
 | 
						|
   Copyright (C) 2002, 2004, 2005, 2006  Free Software Foundation, Inc.
 | 
						|
 | 
						|
This file is part of GNU Classpath.
 | 
						|
 | 
						|
GNU Classpath is free software; you can redistribute it and/or modify
 | 
						|
it under the terms of the GNU General Public License as published by
 | 
						|
the Free Software Foundation; either version 2, or (at your option)
 | 
						|
any later version.
 | 
						|
 | 
						|
GNU Classpath 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
 | 
						|
General Public License for more details.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License
 | 
						|
along with GNU Classpath; see the file COPYING.  If not, write to the
 | 
						|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
02110-1301 USA.
 | 
						|
 | 
						|
Linking this library statically or dynamically with other modules is
 | 
						|
making a combined work based on this library.  Thus, the terms and
 | 
						|
conditions of the GNU General Public License cover the whole
 | 
						|
combination.
 | 
						|
 | 
						|
As a special exception, the copyright holders of this library give you
 | 
						|
permission to link this library with independent modules to produce an
 | 
						|
executable, regardless of the license terms of these independent
 | 
						|
modules, and to copy and distribute the resulting executable under
 | 
						|
terms of your choice, provided that you also meet, for each linked
 | 
						|
independent module, the terms and conditions of the license of that
 | 
						|
module.  An independent module is a module which is not derived from
 | 
						|
or based on this library.  If you modify this library, you may extend
 | 
						|
this exception to your version of the library, but you are not
 | 
						|
obligated to do so.  If you do not wish to do so, delete this
 | 
						|
exception statement from your version. */
 | 
						|
 | 
						|
 | 
						|
package javax.swing;
 | 
						|
 | 
						|
import gnu.java.lang.CPStringBuilder;
 | 
						|
 | 
						|
import java.awt.Component;
 | 
						|
import java.awt.Graphics;
 | 
						|
import java.awt.Insets;
 | 
						|
import java.awt.event.KeyEvent;
 | 
						|
import java.awt.event.MouseEvent;
 | 
						|
 | 
						|
import javax.accessibility.Accessible;
 | 
						|
import javax.accessibility.AccessibleContext;
 | 
						|
import javax.accessibility.AccessibleRole;
 | 
						|
import javax.accessibility.AccessibleSelection;
 | 
						|
import javax.accessibility.AccessibleStateSet;
 | 
						|
import javax.swing.plaf.MenuBarUI;
 | 
						|
 | 
						|
import javax.swing.border.Border;
 | 
						|
 | 
						|
/**
 | 
						|
 * JMenuBar is a container for menu's. For a menu bar to be seen on the
 | 
						|
 * screen, at least one menu should be added to it. Just like adding
 | 
						|
 * components to container, one can use add() to add menu's to the menu bar.
 | 
						|
 * Menu's will be displayed in the menu  bar in the order they were added.
 | 
						|
 * The JMenuBar uses selectionModel to keep track of selected menu index.
 | 
						|
 * JMenuBar's selectionModel will fire ChangeEvents to its registered
 | 
						|
 * listeners when the selected index changes.
 | 
						|
 */
 | 
						|
public class JMenuBar extends JComponent implements Accessible, MenuElement
 | 
						|
{
 | 
						|
  /**
 | 
						|
   * Provides accessibility support for <code>JMenuBar</code>.
 | 
						|
   *
 | 
						|
   * @author Roman Kennke (kennke@aicas.com)
 | 
						|
   */
 | 
						|
  protected class AccessibleJMenuBar extends AccessibleJComponent
 | 
						|
    implements AccessibleSelection
 | 
						|
  {
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the number of selected items in the menu bar. Possible values
 | 
						|
     * are <code>0</code> if nothing is selected, or <code>1</code> if one
 | 
						|
     * item is selected.
 | 
						|
     *
 | 
						|
     * @return the number of selected items in the menu bar
 | 
						|
     */
 | 
						|
    public int getAccessibleSelectionCount()
 | 
						|
    {
 | 
						|
      int count = 0;
 | 
						|
      if (getSelectionModel().getSelectedIndex() != -1)
 | 
						|
        count = 1;
 | 
						|
      return count;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the selected with index <code>i</code> menu, or
 | 
						|
     * <code>null</code> if the specified menu is not selected.
 | 
						|
     *
 | 
						|
     * @param i the index of the menu to return
 | 
						|
     *
 | 
						|
     * @return the selected with index <code>i</code> menu, or
 | 
						|
     *         <code>null</code> if the specified menu is not selected
 | 
						|
     */
 | 
						|
    public Accessible getAccessibleSelection(int i)
 | 
						|
    {
 | 
						|
      if (getSelectionModel().getSelectedIndex() != i)
 | 
						|
        return null;
 | 
						|
      return getMenu(i);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns <code>true</code> if the specified menu is selected,
 | 
						|
     * <code>false</code> otherwise.
 | 
						|
     *
 | 
						|
     * @param i the index of the menu to check
 | 
						|
     *
 | 
						|
     *@return <code>true</code> if the specified menu is selected,
 | 
						|
     *        <code>false</code> otherwise
 | 
						|
     */
 | 
						|
    public boolean isAccessibleChildSelected(int i)
 | 
						|
    {
 | 
						|
      return getSelectionModel().getSelectedIndex() == i;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Selects the menu with index <code>i</code>. If another menu is already
 | 
						|
     * selected, this will be deselected.
 | 
						|
     *
 | 
						|
     * @param i the menu to be selected
 | 
						|
     */
 | 
						|
    public void addAccessibleSelection(int i)
 | 
						|
    {
 | 
						|
      getSelectionModel().setSelectedIndex(i);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Deselects the menu with index <code>i</code>.
 | 
						|
     *
 | 
						|
     * @param i the menu index to be deselected
 | 
						|
     */
 | 
						|
    public void removeAccessibleSelection(int i)
 | 
						|
    {
 | 
						|
      if (getSelectionModel().getSelectedIndex() == i)
 | 
						|
        getSelectionModel().clearSelection();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Deselects all possibly selected menus.
 | 
						|
     */
 | 
						|
    public void clearAccessibleSelection()
 | 
						|
    {
 | 
						|
      getSelectionModel().clearSelection();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * In menu bars it is not possible to select all items, so this method
 | 
						|
     * does nothing.
 | 
						|
     */
 | 
						|
    public void selectAllAccessibleSelection()
 | 
						|
    {
 | 
						|
      // In menu bars it is not possible to select all items, so this method
 | 
						|
      // does nothing.
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the accessible role of <code>JMenuBar</code>, which is
 | 
						|
     * {@link AccessibleRole#MENU_BAR}.
 | 
						|
     *
 | 
						|
     * @return the accessible role of <code>JMenuBar</code>, which is
 | 
						|
     *         {@link AccessibleRole#MENU_BAR}
 | 
						|
     */
 | 
						|
    public AccessibleRole getAccessibleRole()
 | 
						|
    {
 | 
						|
      return AccessibleRole.MENU_BAR;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the <code>AccessibleSelection</code> for this object. This
 | 
						|
     * method returns <code>this</code>, since the
 | 
						|
     * <code>AccessibleJMenuBar</code> manages its selection itself.
 | 
						|
     *
 | 
						|
     * @return the <code>AccessibleSelection</code> for this object
 | 
						|
     */
 | 
						|
    public AccessibleSelection getAccessibleSelection()
 | 
						|
    {
 | 
						|
      return this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the state of this <code>AccessibleJMenuBar</code>.
 | 
						|
     *
 | 
						|
     * @return the state of this <code>AccessibleJMenuBar</code>.
 | 
						|
     */
 | 
						|
    public AccessibleStateSet getAccessibleStateSet()
 | 
						|
    {
 | 
						|
      AccessibleStateSet stateSet = super.getAccessibleStateSet();
 | 
						|
      // TODO: Figure out what state must be added to the super state set.
 | 
						|
      return stateSet;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  private static final long serialVersionUID = -8191026883931977036L;
 | 
						|
 | 
						|
  /** JMenuBar's model. It keeps track of selected menu's index */
 | 
						|
  private transient SingleSelectionModel selectionModel;
 | 
						|
 | 
						|
  /* borderPainted property indicating if the menuBar's border will be painted*/
 | 
						|
  private boolean borderPainted;
 | 
						|
 | 
						|
  /* margin between menu bar's border and its menues*/
 | 
						|
  private Insets margin;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new JMenuBar object.
 | 
						|
   */
 | 
						|
  public JMenuBar()
 | 
						|
  {
 | 
						|
    selectionModel = new DefaultSingleSelectionModel();
 | 
						|
    borderPainted = true;
 | 
						|
    updateUI();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Adds menu to the menu bar
 | 
						|
   *
 | 
						|
   * @param c menu to add
 | 
						|
   *
 | 
						|
   * @return reference to the added menu
 | 
						|
   */
 | 
						|
  public JMenu add(JMenu c)
 | 
						|
  {
 | 
						|
    c.setAlignmentX(Component.LEFT_ALIGNMENT);
 | 
						|
    super.add(c);
 | 
						|
    return c;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method overrides addNotify() in the Container to register
 | 
						|
   * this menu bar with the current keyboard manager.
 | 
						|
   */
 | 
						|
  public void addNotify()
 | 
						|
  {
 | 
						|
    super.addNotify();
 | 
						|
    KeyboardManager.getManager().registerJMenuBar(this);
 | 
						|
  }
 | 
						|
 | 
						|
  public AccessibleContext getAccessibleContext()
 | 
						|
  {
 | 
						|
    if (accessibleContext == null)
 | 
						|
      accessibleContext = new AccessibleJMenuBar();
 | 
						|
    return accessibleContext;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns reference to this menu bar
 | 
						|
   *
 | 
						|
   * @return reference to this menu bar
 | 
						|
   */
 | 
						|
  public Component getComponent()
 | 
						|
  {
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns component at the specified index.
 | 
						|
   *
 | 
						|
   * @param i index of the component to get
 | 
						|
   *
 | 
						|
   * @return component at the specified index. Null is returned if
 | 
						|
   * component at the specified index doesn't exist.
 | 
						|
   * @deprecated Replaced by getComponent(int)
 | 
						|
   */
 | 
						|
  public Component getComponentAtIndex(int i)
 | 
						|
  {
 | 
						|
    return getComponent(i);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns index of the specified component
 | 
						|
   *
 | 
						|
   * @param c Component to search for
 | 
						|
   *
 | 
						|
   * @return index of the specified component. -1 is returned if
 | 
						|
   * specified component doesnt' exist in the menu bar.
 | 
						|
   */
 | 
						|
  public int getComponentIndex(Component c)
 | 
						|
  {
 | 
						|
    Component[] comps = getComponents();
 | 
						|
 | 
						|
    int index = -1;
 | 
						|
 | 
						|
    for (int i = 0; i < comps.length; i++)
 | 
						|
      {
 | 
						|
        if (comps[i].equals(c))
 | 
						|
          {
 | 
						|
            index = i;
 | 
						|
            break;
 | 
						|
          }
 | 
						|
      }
 | 
						|
 | 
						|
    return index;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method is not implemented and will throw an {@link Error} if called.
 | 
						|
   *
 | 
						|
   * @return This method never returns anything, it throws an exception.
 | 
						|
   */
 | 
						|
  public JMenu getHelpMenu()
 | 
						|
  {
 | 
						|
    // the following error matches the behaviour of the reference
 | 
						|
    // implementation...
 | 
						|
    throw new Error("getHelpMenu() is not implemented");
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the margin between the menu bar's border and its menus.  If the
 | 
						|
   * margin is <code>null</code>, this method returns
 | 
						|
   * <code>new Insets(0, 0, 0, 0)</code>.
 | 
						|
   *
 | 
						|
   * @return The margin (never <code>null</code>).
 | 
						|
   *
 | 
						|
   * @see #setMargin(Insets)
 | 
						|
   */
 | 
						|
  public Insets getMargin()
 | 
						|
  {
 | 
						|
    if (margin == null)
 | 
						|
      return new Insets(0, 0, 0, 0);
 | 
						|
    else
 | 
						|
      return margin;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Return menu at the specified index. If component at the
 | 
						|
   * specified index is not a menu, then null is returned.
 | 
						|
   *
 | 
						|
   * @param index index to look for the menu
 | 
						|
   *
 | 
						|
   * @return menu at specified index, or null if menu doesn't exist
 | 
						|
   * at the specified index.
 | 
						|
   */
 | 
						|
  public JMenu getMenu(int index)
 | 
						|
  {
 | 
						|
    if (getComponentAtIndex(index) instanceof JMenu)
 | 
						|
      return (JMenu) getComponentAtIndex(index);
 | 
						|
    else
 | 
						|
      return null;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns number of menu's in this menu bar
 | 
						|
   *
 | 
						|
   * @return number of menu's in this menu bar
 | 
						|
   */
 | 
						|
  public int getMenuCount()
 | 
						|
  {
 | 
						|
    return getComponentCount();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns selection model for this menu bar. SelectionModel
 | 
						|
   * keeps track of the selected menu in the menu bar. Whenever
 | 
						|
   * selected property of selectionModel changes, the ChangeEvent
 | 
						|
   * will be fired its ChangeListeners.
 | 
						|
   *
 | 
						|
   * @return selection model for this menu bar.
 | 
						|
   */
 | 
						|
  public SingleSelectionModel getSelectionModel()
 | 
						|
  {
 | 
						|
    return selectionModel;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Method of MenuElement interface. It returns subcomponents
 | 
						|
   * of the menu bar, which are all the menues that it contains.
 | 
						|
   *
 | 
						|
   * @return MenuElement[] array containing menues in this menu bar
 | 
						|
   */
 | 
						|
  public MenuElement[] getSubElements()
 | 
						|
  {
 | 
						|
    MenuElement[] subElements = new MenuElement[getComponentCount()];
 | 
						|
 | 
						|
    int j = 0;
 | 
						|
    boolean doResize = false;
 | 
						|
    MenuElement menu;
 | 
						|
    for (int i = 0; i < getComponentCount(); i++)
 | 
						|
      {
 | 
						|
        menu = getMenu(i);
 | 
						|
        if (menu != null)
 | 
						|
          {
 | 
						|
            subElements[j++] = (MenuElement) menu;
 | 
						|
          }
 | 
						|
        else
 | 
						|
          doResize = true;
 | 
						|
      }
 | 
						|
 | 
						|
    if (! doResize)
 | 
						|
      return subElements;
 | 
						|
    else
 | 
						|
      {
 | 
						|
        MenuElement[] subElements2 = new MenuElement[j];
 | 
						|
        for (int i = 0; i < j; i++)
 | 
						|
          subElements2[i] = subElements[i];
 | 
						|
 | 
						|
        return subElements2;
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
    * Set the "UI" property of the menu bar, which is a look and feel class
 | 
						|
    * responsible for handling the menuBar's input events and painting it.
 | 
						|
    *
 | 
						|
    * @return The current "UI" property
 | 
						|
    */
 | 
						|
  public MenuBarUI getUI()
 | 
						|
  {
 | 
						|
    return (MenuBarUI) ui;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method returns a name to identify which look and feel class will be
 | 
						|
   * the UI delegate for the menu bar.
 | 
						|
   *
 | 
						|
   * @return The Look and Feel classID. "MenuBarUI"
 | 
						|
   */
 | 
						|
  public String getUIClassID()
 | 
						|
  {
 | 
						|
    return "MenuBarUI";
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns true if menu bar paints its border and false otherwise
 | 
						|
   *
 | 
						|
   * @return true if menu bar paints its border and false otherwise
 | 
						|
   */
 | 
						|
  public boolean isBorderPainted()
 | 
						|
  {
 | 
						|
    return borderPainted;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns true if some menu in menu bar is selected.
 | 
						|
   *
 | 
						|
   * @return true if some menu in menu bar is selected and false otherwise
 | 
						|
   */
 | 
						|
  public boolean isSelected()
 | 
						|
  {
 | 
						|
    return selectionModel.isSelected();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method does nothing by default. This method is need for the
 | 
						|
   * MenuElement interface to be implemented.
 | 
						|
   *
 | 
						|
   * @param isIncluded true if menuBar is included in the selection
 | 
						|
   * and false otherwise
 | 
						|
   */
 | 
						|
  public void menuSelectionChanged(boolean isIncluded)
 | 
						|
  {
 | 
						|
    // Do nothing - needed for implementation of MenuElement interface
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Paints border of the menu bar, if its borderPainted property is set to
 | 
						|
   * true.
 | 
						|
   *
 | 
						|
   * @param g The graphics context with which to paint the border
 | 
						|
   */
 | 
						|
  protected void paintBorder(Graphics g)
 | 
						|
  {
 | 
						|
    if (borderPainted)
 | 
						|
      {
 | 
						|
        Border border = getBorder();
 | 
						|
        if (border != null)
 | 
						|
          getBorder().paintBorder(this, g, 0, 0, getSize(null).width,
 | 
						|
                                  getSize(null).height);
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * A string that describes this JMenuBar. Normally only used
 | 
						|
   * for debugging.
 | 
						|
   *
 | 
						|
   * @return A string describing this JMenuBar
 | 
						|
   */
 | 
						|
  protected String paramString()
 | 
						|
  {
 | 
						|
    CPStringBuilder sb = new CPStringBuilder();
 | 
						|
    sb.append(super.paramString());
 | 
						|
    sb.append(",margin=");
 | 
						|
    if (getMargin() != null)
 | 
						|
      sb.append(getMargin());
 | 
						|
    sb.append(",paintBorder=").append(isBorderPainted());
 | 
						|
    return sb.toString();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Process key events forwarded from MenuSelectionManager. This method
 | 
						|
   * doesn't do anything. It is here to conform to the MenuElement interface.
 | 
						|
   *
 | 
						|
   * @param e event forwarded from MenuSelectionManager
 | 
						|
   * @param path path to the menu element from which event was generated
 | 
						|
   * @param manager MenuSelectionManager for the current menu hierarchy
 | 
						|
   *
 | 
						|
   */
 | 
						|
  public void processKeyEvent(KeyEvent e, MenuElement[] path,
 | 
						|
                              MenuSelectionManager manager)
 | 
						|
  {
 | 
						|
    // Do nothing - needed for implementation of MenuElement interface
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method overrides JComponent.processKeyBinding to allow the
 | 
						|
   * JMenuBar to check all the child components (recursiveley) to see
 | 
						|
   * if they'll consume the event.
 | 
						|
   *
 | 
						|
   * @param ks the KeyStroke for the event
 | 
						|
   * @param e the KeyEvent for the event
 | 
						|
   * @param condition the focus condition for the binding
 | 
						|
   * @param pressed true if the key is pressed
 | 
						|
   */
 | 
						|
  protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition,
 | 
						|
                                      boolean pressed)
 | 
						|
  {
 | 
						|
    // See if the regular JComponent behavior consumes the event
 | 
						|
    if (super.processKeyBinding(ks, e, condition, pressed))
 | 
						|
      return true;
 | 
						|
 | 
						|
    // If not, have to recursively check all the child menu elements to see
 | 
						|
    // if they want it
 | 
						|
    MenuElement[] children = getSubElements();
 | 
						|
    for (int i = 0; i < children.length; i++)
 | 
						|
      if (processKeyBindingHelper(children[i], ks, e, condition, pressed))
 | 
						|
        return true;
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This is a helper method to recursively check the children of this
 | 
						|
   * JMenuBar to see if they will consume a key event via key bindings.
 | 
						|
   * This is used for menu accelerators.
 | 
						|
   * @param menuElement the menuElement to check (and check all its children)
 | 
						|
   * @param ks the KeyStroke for the event
 | 
						|
   * @param e the KeyEvent that may be consumed
 | 
						|
   * @param condition the focus condition for the binding
 | 
						|
   * @param pressed true if the key was pressed
 | 
						|
   * @return true <code>menuElement</code> or one of its children consume
 | 
						|
   * the event (processKeyBinding returns true for menuElement or one of
 | 
						|
   * its children).
 | 
						|
   */
 | 
						|
  static boolean processKeyBindingHelper(MenuElement menuElement, KeyStroke ks,
 | 
						|
                                         KeyEvent e, int condition,
 | 
						|
                                         boolean pressed)
 | 
						|
  {
 | 
						|
    if (menuElement == null)
 | 
						|
      return false;
 | 
						|
 | 
						|
    // First check the menuElement itself, if it's a JComponent
 | 
						|
    if (menuElement instanceof JComponent
 | 
						|
        && ((JComponent) menuElement).processKeyBinding(ks, e, condition,
 | 
						|
                                                        pressed))
 | 
						|
      return true;
 | 
						|
 | 
						|
    // If that didn't consume it, check all the children recursively
 | 
						|
    MenuElement[] children = menuElement.getSubElements();
 | 
						|
    for (int i = 0; i < children.length; i++)
 | 
						|
      if (processKeyBindingHelper(children[i], ks, e, condition, pressed))
 | 
						|
        return true;
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Process mouse events forwarded from MenuSelectionManager. This method
 | 
						|
   * doesn't do anything. It is here to conform to the MenuElement interface.
 | 
						|
   *
 | 
						|
   * @param event event forwarded from MenuSelectionManager
 | 
						|
   * @param path path to the menu element from which event was generated
 | 
						|
   * @param manager MenuSelectionManager for the current menu hierarchy
 | 
						|
   *
 | 
						|
   */
 | 
						|
  public void processMouseEvent(MouseEvent event, MenuElement[] path,
 | 
						|
                                MenuSelectionManager manager)
 | 
						|
  {
 | 
						|
    // Do nothing - needed for implementation of MenuElement interface
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method overrides removeNotify() in the Container to
 | 
						|
   * unregister this menu bar from the current keyboard manager.
 | 
						|
   */
 | 
						|
  public void removeNotify()
 | 
						|
  {
 | 
						|
    KeyboardManager.getManager().unregisterJMenuBar(this);
 | 
						|
    super.removeNotify();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets painting status of the border. If 'b' is true then menu bar's
 | 
						|
   * border will be painted, and it will not be painted otherwise.
 | 
						|
   *
 | 
						|
   * @param b indicates if menu bar's border should be painted.
 | 
						|
   */
 | 
						|
  public void setBorderPainted(boolean b)
 | 
						|
  {
 | 
						|
    if (b != borderPainted)
 | 
						|
      {
 | 
						|
        boolean old = borderPainted;
 | 
						|
        borderPainted = b;
 | 
						|
        firePropertyChange("borderPainted", old, b);
 | 
						|
        revalidate();
 | 
						|
        repaint();
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets help menu for this menu bar
 | 
						|
   *
 | 
						|
   * @param menu help menu
 | 
						|
   *
 | 
						|
   * @specnote The specification states that this method is not yet implemented
 | 
						|
   *           and should throw an exception.
 | 
						|
   */
 | 
						|
  public void setHelpMenu(JMenu menu)
 | 
						|
  {
 | 
						|
    // We throw an Error here, just as Sun's JDK does.
 | 
						|
    throw new Error("setHelpMenu() not yet implemented.");
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the margin between the menu bar's border and its menus (this is a
 | 
						|
   * bound property with the name 'margin').
 | 
						|
   *
 | 
						|
   * @param m  the margin (<code>null</code> permitted).
 | 
						|
   *
 | 
						|
   * @see #getMargin()
 | 
						|
   */
 | 
						|
  public void setMargin(Insets m)
 | 
						|
  {
 | 
						|
    if (m != margin)
 | 
						|
      {
 | 
						|
        Insets oldMargin = margin;
 | 
						|
        margin = m;
 | 
						|
        firePropertyChange("margin", oldMargin, margin);
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Changes menu bar's selection to the specified menu.
 | 
						|
   * This method updates selected index of menu bar's selection model,
 | 
						|
   * which results in a model firing change event.
 | 
						|
   *
 | 
						|
   * @param sel menu to select
 | 
						|
   */
 | 
						|
  public void setSelected(Component sel)
 | 
						|
  {
 | 
						|
    int index = getComponentIndex(sel);
 | 
						|
    selectionModel.setSelectedIndex(index);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets menuBar's selection model to the one specified
 | 
						|
   *
 | 
						|
   * @param model SingleSelectionModel that needs to be set for this menu bar
 | 
						|
   */
 | 
						|
  public void setSelectionModel(SingleSelectionModel model)
 | 
						|
  {
 | 
						|
    if (selectionModel != model)
 | 
						|
      {
 | 
						|
        SingleSelectionModel oldModel = selectionModel;
 | 
						|
        selectionModel = model;
 | 
						|
        firePropertyChange("model", oldModel, selectionModel);
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the "UI" property of the menu bar, which is a look and feel class
 | 
						|
   * responsible for handling menuBar's input events and painting it.
 | 
						|
   *
 | 
						|
   * @param ui The new "UI" property
 | 
						|
   */
 | 
						|
  public void setUI(MenuBarUI ui)
 | 
						|
  {
 | 
						|
    super.setUI(ui);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Set the "UI" property to a class constructed, via the {@link
 | 
						|
   * UIManager}, from the current look and feel.
 | 
						|
   */
 | 
						|
  public void updateUI()
 | 
						|
  {
 | 
						|
    setUI((MenuBarUI) UIManager.getUI(this));
 | 
						|
  }
 | 
						|
}
 |