package javax.swing.plaf.basic;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPopupMenu;
import javax.swing.MenuSelectionManager;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.MenuDragMouseEvent;
import javax.swing.event.MenuDragMouseListener;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuKeyEvent;
import javax.swing.event.MenuKeyListener;
import javax.swing.event.MenuListener;
import javax.swing.event.MouseInputListener;
import javax.swing.plaf.ComponentUI;
public class BasicMenuUI extends BasicMenuItemUI
{
protected ChangeListener changeListener;
protected MenuListener menuListener;
protected PropertyChangeListener propertyChangeListener;
public BasicMenuUI()
{
mouseInputListener = createMouseInputListener((JMenu) menuItem);
menuListener = createMenuListener((JMenu) menuItem);
propertyChangeListener = createPropertyChangeListener((JMenu) menuItem);
}
protected ChangeListener createChangeListener(JComponent c)
{
return new ChangeHandler();
}
protected MenuDragMouseListener createMenuDragMouseListener(JComponent c)
{
return new MenuDragMouseHandler();
}
protected MenuKeyListener createMenuKeyListener(JComponent c)
{
return new MenuKeyHandler();
}
protected MenuListener createMenuListener(JComponent c)
{
return new MenuHandler();
}
protected MouseInputListener createMouseInputListener(JComponent c)
{
return new MouseInputHandler();
}
protected PropertyChangeListener createPropertyChangeListener(JComponent c)
{
return new PropertyChangeHandler();
}
public static ComponentUI createUI(JComponent c)
{
return new BasicMenuUI();
}
public Dimension getMaximumSize(JComponent c)
{
return null;
}
protected String getPropertyPrefix()
{
return null;
}
protected void installDefaults()
{
UIDefaults defaults = UIManager.getLookAndFeelDefaults();
menuItem.setBackground(defaults.getColor("Menu.background"));
menuItem.setBorder(defaults.getBorder("Menu.border"));
menuItem.setFont(defaults.getFont("Menu.font"));
menuItem.setForeground(defaults.getColor("Menu.foreground"));
menuItem.setMargin(defaults.getInsets("Menu.margin"));
acceleratorFont = defaults.getFont("Menu.acceleratorFont");
acceleratorForeground = defaults.getColor("Menu.acceleratorForeground");
acceleratorSelectionForeground = defaults.getColor("Menu.acceleratorSelectionForeground");
selectionBackground = defaults.getColor("Menu.selectionBackground");
selectionForeground = defaults.getColor("Menu.selectionForeground");
arrowIcon = defaults.getIcon("Menu.arrowIcon");
oldBorderPainted = defaults.getBoolean("Menu.borderPainted");
menuItem.setOpaque(true);
}
protected void installKeyboardActions()
{
}
protected void installListeners()
{
((JMenu) menuItem).addMouseListener(mouseInputListener);
((JMenu) menuItem).addMouseMotionListener(mouseInputListener);
((JMenu) menuItem).addMenuListener(menuListener);
((JMenu) menuItem).addMenuDragMouseListener(menuDragMouseListener);
}
protected void setupPostTimer(JMenu menu)
{
}
protected void uninstallDefaults()
{
menuItem.setBackground(null);
menuItem.setBorder(null);
menuItem.setFont(null);
menuItem.setForeground(null);
menuItem.setMargin(null);
acceleratorFont = null;
acceleratorForeground = null;
acceleratorSelectionForeground = null;
selectionBackground = null;
selectionForeground = null;
arrowIcon = null;
}
protected void uninstallKeyboardActions()
{
}
protected void uninstallListeners()
{
((JMenu) menuItem).removeMouseListener(mouseInputListener);
((JMenu) menuItem).removeMenuListener(menuListener);
((JMenu) menuItem).removePropertyChangeListener(propertyChangeListener);
}
protected class MouseInputHandler implements MouseInputListener
{
public void mouseClicked(MouseEvent e)
{
MenuSelectionManager manager = MenuSelectionManager.defaultManager();
manager.processMouseEvent(e);
}
public void mouseDragged(MouseEvent e)
{
MenuSelectionManager manager = MenuSelectionManager.defaultManager();
manager.processMouseEvent(e);
}
public void mouseEntered(MouseEvent e)
{
JMenu menu = (JMenu) menuItem;
if (! menu.isTopLevelMenu()
|| (menu.isTopLevelMenu()
&& (((JMenuBar) menu.getParent()).isSelected() && ! menu.isArmed())))
{
MenuSelectionManager manager = MenuSelectionManager.defaultManager();
manager.setSelectedPath(getPath());
manager.processMouseEvent(e);
}
}
public void mouseExited(MouseEvent e)
{
MenuSelectionManager manager = MenuSelectionManager.defaultManager();
manager.processMouseEvent(e);
}
public void mouseMoved(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
MenuSelectionManager manager = MenuSelectionManager.defaultManager();
JMenu menu = (JMenu) menuItem;
manager.processMouseEvent(e);
if (menu.isTopLevelMenu())
{
if (menu.getPopupMenu().isVisible())
manager.clearSelectedPath();
else
{
int x = 0;
int y = menu.getHeight();
manager.setSelectedPath(getPath());
JMenuBar mb = (JMenuBar) menu.getParent();
mb.getSelectionModel().setSelectedIndex(mb.getComponentIndex(menu));
}
}
}
public void mouseReleased(MouseEvent e)
{
MenuSelectionManager manager = MenuSelectionManager.defaultManager();
manager.processMouseEvent(e);
}
}
protected class MenuHandler implements MenuListener
{
public void menuCanceled(MenuEvent e)
{
menuDeselected(e);
}
public void menuDeselected(MenuEvent e)
{
JMenu menu = (JMenu) menuItem;
if (menu.isTopLevelMenu())
((JMenuBar) menu.getParent()).getSelectionModel().clearSelection();
else
((JPopupMenu) menu.getParent()).getSelectionModel().clearSelection();
}
public void menuSelected(MenuEvent e)
{
JMenu menu = (JMenu) menuItem;
if (menu.isTopLevelMenu())
((JMenuBar) menu.getParent()).setSelected(menu);
else
((JPopupMenu) menu.getParent()).setSelected(menu);
}
}
protected class PropertyChangeHandler implements PropertyChangeListener
{
public void propertyChange(PropertyChangeEvent evt)
{
}
}
protected class ChangeHandler implements ChangeListener
{
public void stateChanged(ChangeEvent e)
{
}
}
protected class MenuDragMouseHandler implements MenuDragMouseListener
{
public void menuDragMouseDragged(MenuDragMouseEvent e)
{
MenuSelectionManager manager = MenuSelectionManager.defaultManager();
manager.setSelectedPath(e.getPath());
}
public void menuDragMouseEntered(MenuDragMouseEvent e)
{
MenuSelectionManager manager = MenuSelectionManager.defaultManager();
manager.setSelectedPath(e.getPath());
}
public void menuDragMouseExited(MenuDragMouseEvent e)
{
}
public void menuDragMouseReleased(MenuDragMouseEvent e)
{
}
}
protected class MenuKeyHandler implements MenuKeyListener
{
public void menuKeyPressed(MenuKeyEvent e)
{
}
public void menuKeyReleased(MenuKeyEvent e)
{
}
public void menuKeyTyped(MenuKeyEvent e)
{
}
}
}