1. /*
  2. * @(#)MotifMenuItemUI.java 1.46 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 java.awt.*;
  14. import java.awt.event.*;
  15. import javax.swing.plaf.*;
  16. import javax.swing.plaf.basic.BasicMenuItemUI;
  17. /**
  18. * MotifMenuItem implementation
  19. * <p>
  20. *
  21. * @author Rich Schiavi
  22. * @author Georges Saab
  23. */
  24. public class MotifMenuItemUI extends BasicMenuItemUI
  25. {
  26. protected ChangeListener changeListener;
  27. public static ComponentUI createUI(JComponent c)
  28. {
  29. return new MotifMenuItemUI();
  30. }
  31. protected void installListeners() {
  32. super.installListeners();
  33. changeListener = createChangeListener(menuItem);
  34. menuItem.addChangeListener(changeListener);
  35. }
  36. protected void uninstallListeners() {
  37. super.uninstallListeners();
  38. menuItem.removeChangeListener(changeListener);
  39. }
  40. protected ChangeListener createChangeListener(JComponent c) {
  41. return new ChangeHandler();
  42. }
  43. protected MouseInputListener createMouseInputListener(JComponent c) {
  44. return new MouseInputHandler();
  45. }
  46. public void paint(Graphics g, JComponent c) {
  47. MotifGraphicsUtils.paintMenuItem(g, c, checkIcon,arrowIcon,
  48. selectionBackground, selectionForeground,
  49. defaultTextIconGap);
  50. }
  51. protected class ChangeHandler implements ChangeListener {
  52. public void stateChanged(ChangeEvent e) {
  53. JMenuItem c = (JMenuItem)e.getSource();
  54. if (c.isArmed() || c.isSelected()) {
  55. c.setBorderPainted(true);
  56. } else {
  57. c.setBorderPainted(false);
  58. }
  59. }
  60. }
  61. protected class MouseInputHandler implements MouseInputListener {
  62. public void mouseClicked(MouseEvent e) {}
  63. public void mousePressed(MouseEvent e) {
  64. MenuSelectionManager manager = MenuSelectionManager.defaultManager();
  65. manager.setSelectedPath(getPath());
  66. }
  67. public void mouseReleased(MouseEvent e) {
  68. MenuSelectionManager manager =
  69. MenuSelectionManager.defaultManager();
  70. JMenuItem menuItem = (JMenuItem)e.getComponent();
  71. Point p = e.getPoint();
  72. if(p.x >= 0 && p.x < menuItem.getWidth() &&
  73. p.y >= 0 && p.y < menuItem.getHeight()) {
  74. manager.clearSelectedPath();
  75. menuItem.doClick(0);
  76. } else {
  77. manager.processMouseEvent(e);
  78. }
  79. }
  80. public void mouseEntered(MouseEvent e) {}
  81. public void mouseExited(MouseEvent e) {}
  82. public void mouseDragged(MouseEvent e) {
  83. MenuSelectionManager.defaultManager().processMouseEvent(e);
  84. }
  85. public void mouseMoved(MouseEvent e) { }
  86. }
  87. }