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