1/* 2 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package com.sun.java.swing.plaf.motif; 27 28import javax.swing.*; 29import javax.swing.event.*; 30import javax.swing.plaf.*; 31import javax.swing.plaf.basic.BasicRadioButtonMenuItemUI; 32 33import java.awt.*; 34import java.awt.event.*; 35import java.io.Serializable; 36import sun.swing.SwingUtilities2; 37 38 39/** 40 * MotifRadioButtonMenuItem implementation 41 * <p> 42 * <strong>Warning:</strong> 43 * Serialized objects of this class will not be compatible with 44 * future Swing releases. The current serialization support is appropriate 45 * for short term storage or RMI between applications running the same 46 * version of Swing. A future release of Swing will provide support for 47 * long term persistence. 48 * 49 * @author Georges Saab 50 * @author Rich Schiavi 51 */ 52public class MotifRadioButtonMenuItemUI extends BasicRadioButtonMenuItemUI 53{ 54 protected ChangeListener changeListener; 55 56 public static ComponentUI createUI(JComponent b) { 57 return new MotifRadioButtonMenuItemUI(); 58 } 59 60 protected void installListeners() { 61 super.installListeners(); 62 changeListener = createChangeListener(menuItem); 63 menuItem.addChangeListener(changeListener); 64 } 65 66 protected void uninstallListeners() { 67 super.uninstallListeners(); 68 menuItem.removeChangeListener(changeListener); 69 } 70 71 protected ChangeListener createChangeListener(JComponent c) { 72 return new ChangeHandler(); 73 } 74 75 @SuppressWarnings("serial") // Same-version serialization only 76 protected class ChangeHandler implements ChangeListener, Serializable { 77 public void stateChanged(ChangeEvent e) { 78 JMenuItem c = (JMenuItem)e.getSource(); 79 LookAndFeel.installProperty(c, "borderPainted", c.isArmed()); 80 } 81 } 82 83 protected MouseInputListener createMouseInputListener(JComponent c) { 84 return new MouseInputHandler(); 85 } 86 87 88 protected class MouseInputHandler implements MouseInputListener { 89 public void mouseClicked(MouseEvent e) {} 90 public void mousePressed(MouseEvent e) { 91 MenuSelectionManager manager = MenuSelectionManager.defaultManager(); 92 manager.setSelectedPath(getPath()); 93 } 94 public void mouseReleased(MouseEvent e) { 95 MenuSelectionManager manager = 96 MenuSelectionManager.defaultManager(); 97 JMenuItem menuItem = (JMenuItem)e.getComponent(); 98 Point p = e.getPoint(); 99 if(p.x >= 0 && p.x < menuItem.getWidth() && 100 p.y >= 0 && p.y < menuItem.getHeight()) { 101 String property = "RadioButtonMenuItem.doNotCloseOnMouseClick"; 102 if (!SwingUtilities2.getBoolean(menuItem, property)) { 103 manager.clearSelectedPath(); 104 } 105 menuItem.doClick(0); 106 } else { 107 manager.processMouseEvent(e); 108 } 109 } 110 public void mouseEntered(MouseEvent e) {} 111 public void mouseExited(MouseEvent e) {} 112 public void mouseDragged(MouseEvent e) { 113 MenuSelectionManager.defaultManager().processMouseEvent(e); 114 } 115 public void mouseMoved(MouseEvent e) { } 116 } 117 118} 119