0N/A/*
2362N/A * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/Apackage com.sun.java.swing.plaf.motif;
0N/A
0N/Aimport java.awt.*;
0N/Aimport java.awt.event.*;
0N/Aimport javax.swing.*;
0N/Aimport javax.swing.event.*;
0N/Aimport javax.swing.plaf.*;
0N/Aimport javax.swing.border.*;
0N/Aimport javax.swing.plaf.basic.*;
0N/A
0N/A
0N/Aimport javax.swing.plaf.basic.BasicMenuUI;
0N/A
0N/A/**
0N/A * A Motif L&F implementation of MenuUI.
0N/A * <p>
0N/A *
0N/A * @author Georges Saab
0N/A * @author Rich Schiavi
0N/A */
0N/Apublic class MotifMenuUI extends BasicMenuUI
0N/A{
0N/A
0N/A public static ComponentUI createUI( JComponent x ) {
0N/A return new MotifMenuUI();
0N/A }
0N/A
0N/A// These should not be necessary because BasicMenuUI does this,
0N/A// and this class overrides createChangeListener.
0N/A// protected void installListeners() {
0N/A// super.installListeners();
0N/A// changeListener = createChangeListener(menuItem);
0N/A// menuItem.addChangeListener(changeListener);
0N/A// }
0N/A//
0N/A// protected void uninstallListeners() {
0N/A// super.uninstallListeners();
0N/A// menuItem.removeChangeListener(changeListener);
0N/A// }
0N/A
0N/A protected ChangeListener createChangeListener(JComponent c) {
0N/A return new MotifChangeHandler((JMenu)c, this);
0N/A }
0N/A
0N/A private boolean popupIsOpen(JMenu m,MenuElement me[]) {
0N/A int i;
0N/A JPopupMenu pm = m.getPopupMenu();
0N/A
0N/A for(i=me.length-1;i>=0;i--) {
0N/A if(me[i].getComponent() == pm)
0N/A return true;
0N/A }
0N/A return false;
0N/A }
0N/A
0N/A protected MouseInputListener createMouseInputListener(JComponent c) {
0N/A return new MouseInputHandler();
0N/A }
0N/A
0N/A public class MotifChangeHandler extends ChangeHandler {
0N/A public MotifChangeHandler(JMenu m, MotifMenuUI ui) {
0N/A super(m, ui);
0N/A }
0N/A
0N/A
0N/A public void stateChanged(ChangeEvent e) {
0N/A JMenuItem c = (JMenuItem)e.getSource();
0N/A if (c.isArmed() || c.isSelected()) {
0N/A c.setBorderPainted(true);
0N/A // c.repaint();
0N/A } else {
0N/A c.setBorderPainted(false);
0N/A }
0N/A
0N/A super.stateChanged(e);
0N/A }
0N/A }
0N/A
0N/A protected class MouseInputHandler implements MouseInputListener {
0N/A public void mouseClicked(MouseEvent e) {}
0N/A public void mousePressed(MouseEvent e) {
0N/A MenuSelectionManager manager = MenuSelectionManager.defaultManager();
0N/A JMenu menu = (JMenu)e.getComponent();
0N/A if(menu.isEnabled()) {
0N/A if(menu.isTopLevelMenu()) {
0N/A if(menu.isSelected()) {
0N/A manager.clearSelectedPath();
0N/A } else {
0N/A Container cnt = menu.getParent();
0N/A if(cnt != null && cnt instanceof JMenuBar) {
0N/A MenuElement me[] = new MenuElement[2];
0N/A me[0]=(MenuElement)cnt;
0N/A me[1]=menu;
0N/A manager.setSelectedPath(me);
0N/A }
0N/A }
0N/A }
0N/A
0N/A MenuElement path[] = getPath();
0N/A if (path.length > 0) {
0N/A MenuElement newPath[] = new MenuElement[path.length+1];
0N/A System.arraycopy(path,0,newPath,0,path.length);
0N/A newPath[path.length] = menu.getPopupMenu();
0N/A manager.setSelectedPath(newPath);
0N/A }
0N/A }
0N/A }
0N/A
0N/A public void mouseReleased(MouseEvent e) {
0N/A MenuSelectionManager manager =
0N/A MenuSelectionManager.defaultManager();
0N/A JMenuItem menuItem = (JMenuItem)e.getComponent();
0N/A Point p = e.getPoint();
0N/A if(!(p.x >= 0 && p.x < menuItem.getWidth() &&
0N/A p.y >= 0 && p.y < menuItem.getHeight())) {
0N/A manager.processMouseEvent(e);
0N/A }
0N/A }
0N/A public void mouseEntered(MouseEvent e) {}
0N/A public void mouseExited(MouseEvent e) {}
0N/A public void mouseDragged(MouseEvent e) {
0N/A MenuSelectionManager.defaultManager().processMouseEvent(e);
0N/A }
0N/A public void mouseMoved(MouseEvent e) { }
0N/A }
0N/A
0N/A}