1. /*
  2. * @(#)MotifCheckBoxMenuItemUI.java 1.39 01/11/29
  3. *
  4. * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.java.swing.plaf.motif;
  8. import javax.swing.*;
  9. import javax.swing.event.*;
  10. import javax.swing.plaf.*;
  11. import javax.swing.plaf.basic.BasicButtonListener;
  12. import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI;
  13. import javax.swing.plaf.basic.BasicGraphicsUtils;
  14. import java.awt.*;
  15. import java.awt.event.*;
  16. /**
  17. * MotifCheckboxMenuItem implementation
  18. * <p>
  19. *
  20. * @version 1.39 11/29/01
  21. * @author Georges Saab
  22. * @author Rich Schiavi
  23. */
  24. public class MotifCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI
  25. {
  26. protected ChangeListener changeListener;
  27. public static ComponentUI createUI(JComponent b) {
  28. return new MotifCheckBoxMenuItemUI();
  29. }
  30. protected void installListeners() {
  31. super.installListeners();
  32. changeListener = createChangeListener(menuItem);
  33. menuItem.addChangeListener(changeListener);
  34. }
  35. protected void uninstallListeners() {
  36. super.uninstallListeners();
  37. menuItem.removeChangeListener(changeListener);
  38. }
  39. protected ChangeListener createChangeListener(JComponent c) {
  40. return new ChangeHandler();
  41. }
  42. protected class ChangeHandler implements ChangeListener {
  43. public void stateChanged(ChangeEvent e) {
  44. JMenuItem c = (JMenuItem)e.getSource();
  45. if (c.isArmed()) {
  46. c.setBorderPainted(true);
  47. } else {
  48. c.setBorderPainted(false);
  49. }
  50. }
  51. }
  52. public void paint(Graphics g, JComponent c) {
  53. MotifGraphicsUtils.paintMenuItem(g, c, checkIcon,arrowIcon,
  54. selectionBackground, selectionForeground,
  55. defaultTextIconGap);
  56. }
  57. protected MouseInputListener createMouseInputListener(JComponent c) {
  58. return new MouseInputHandler();
  59. }
  60. protected class MouseInputHandler implements MouseInputListener {
  61. public void mouseClicked(MouseEvent e) {}
  62. public void mousePressed(MouseEvent e) {
  63. MenuSelectionManager manager = MenuSelectionManager.defaultManager();
  64. manager.setSelectedPath(getPath());
  65. }
  66. public void mouseReleased(MouseEvent e) {
  67. MenuSelectionManager manager =
  68. MenuSelectionManager.defaultManager();
  69. JMenuItem menuItem = (JMenuItem)e.getComponent();
  70. Point p = e.getPoint();
  71. if(p.x >= 0 && p.x < menuItem.getWidth() &&
  72. p.y >= 0 && p.y < menuItem.getHeight()) {
  73. manager.clearSelectedPath();
  74. menuItem.doClick(0);
  75. } else {
  76. manager.processMouseEvent(e);
  77. }
  78. }
  79. public void mouseEntered(MouseEvent e) {}
  80. public void mouseExited(MouseEvent e) {}
  81. public void mouseDragged(MouseEvent e) {
  82. MenuSelectionManager.defaultManager().processMouseEvent(e);
  83. }
  84. public void mouseMoved(MouseEvent e) { }
  85. }
  86. }