[gui][PATCH] Fixes to JMenuItem & BasicMenuItemUI

Olga Rodimina rodimina@redhat.com
Wed Apr 28 13:04:00 GMT 2004


Hi,

I've implemented MenuElement interface and few event handling methods in
JMenuItem.java. I've also fixed BasicMenuItemUI.MouseInputHandler to
pass events to MenuSelectionManager instead of handling them by itself.

I'll be committing this patch to java-gui-branch.


Olga.
-------------- next part --------------
? .snprj
? libjava.proj
? patch
? javax/swing/patch
? javax/swing/plaf/basic/patch
Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v
retrieving revision 1.2660.2.77
diff -c -p -u -r1.2660.2.77 ChangeLog
--- ChangeLog	26 Apr 2004 20:19:11 -0000	1.2660.2.77
+++ ChangeLog	27 Apr 2004 16:20:28 -0000
@@ -1,3 +1,25 @@
+2004-04-27  Olga Rodimina  <rodimina@redhat.com>
+
+	* javax/swing/JMenuItem.java
+	(createActionPropertyChangeListener): Implemented.
+	(processMouseEvent): Ditto.
+	(fireMenuDragMouseEntered): Ditto.
+	(fireMenuDragMouseExited): Ditto.
+	(fireMenuDragMouseDragged): Ditto.
+	(fireMenuDragMouseReleased): Ditto.
+	(menuSelectionChanged): Ditto.
+	(getSubElements): Ditto.
+	(getComponent): Ditto.
+	(addMenuDragMouseListener): Ditto.
+	(removeMenuDragMouseListener):Ditto.
+	(addMenuKeyListener): Ditto.
+	(removeMenuKeyListener): Ditto.
+	* javax/swing/plaf/basic/BasicMenuItemUI.java
+	(doClick): Imlemented.
+	* javax/swing/plaf/basic/BasicMenuItemUI.MouseInputHandler:
+	Don't handle mouse events here. Pass them to 
+	MenuSelectionManager.
+	
 2004-04-26  Olga Rodimina  <rodimina@redhat.com>
 	Used correct version of jalopy configuration
 	file to fix style in the files below.
Index: javax/swing/JMenuItem.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/javax/swing/JMenuItem.java,v
retrieving revision 1.2.18.3
diff -c -p -u -r1.2.18.3 JMenuItem.java
--- javax/swing/JMenuItem.java	26 Apr 2004 20:19:13 -0000	1.2.18.3
+++ javax/swing/JMenuItem.java	27 Apr 2004 16:20:29 -0000
@@ -38,6 +38,7 @@ exception statement from your version. *
 package javax.swing;
 
 import java.awt.Component;
+import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
 import java.beans.PropertyChangeEvent;
@@ -45,6 +46,7 @@ import java.beans.PropertyChangeListener
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.util.EventListener;
 import javax.accessibility.Accessible;
 import javax.accessibility.AccessibleContext;
 import javax.accessibility.AccessibleRole;
@@ -267,7 +269,14 @@ public class JMenuItem extends AbstractB
    */
   protected PropertyChangeListener createActionPropertyChangeListener(Action action)
   {
-    return null;
+    return new PropertyChangeListener()
+      {
+	public void propertyChange(PropertyChangeEvent e)
+	{
+	  Action act = (Action) (e.getSource());
+	  configurePropertiesFromAction(act);
+	}
+      };
   }
 
   /**
@@ -280,7 +289,76 @@ public class JMenuItem extends AbstractB
   public void processMouseEvent(MouseEvent event, MenuElement[] path,
                                 MenuSelectionManager manager)
   {
-    // TODO
+    switch (event.getID())
+      {
+      case MouseEvent.MOUSE_CLICKED:
+	doClick();
+	break;
+      case MouseEvent.MOUSE_ENTERED:
+	if (event.getSource() instanceof JMenuItem)
+	  {
+	    JMenuItem item = (JMenuItem) event.getSource();
+	    ButtonModel model = item.getModel();
+
+	    if (item.isRolloverEnabled())
+	      model.setRollover(true);
+
+	    if (model.isPressed()
+	        && (event.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
+	      model.setArmed(true);
+	    else
+	      model.setArmed(false);
+	  }
+	break;
+      case MouseEvent.MOUSE_EXITED:
+	if (event.getSource() instanceof JMenuItem)
+	  {
+	    JMenuItem item = (JMenuItem) event.getSource();
+	    ButtonModel model = item.getModel();
+	    if (item.isRolloverEnabled())
+	      model.setRollover(false);
+	    model.setArmed(false);
+	  }
+	break;
+      case MouseEvent.MOUSE_PRESSED:
+	if (event.getSource() instanceof JMenuItem)
+	  {
+	    if ((event.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
+	      {
+		model.setArmed(true);
+		model.setPressed(true);
+	      }
+	  }
+	break;
+      case MouseEvent.MOUSE_RELEASED:
+	if (event.getSource() instanceof JMenuItem)
+	  {
+	    JMenuItem item = (JMenuItem) event.getSource();
+	    ButtonModel model = item.getModel();
+	    if ((event.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
+	      {
+		model.setPressed(false);
+		model.setArmed(false);
+		manager.clearSelectedPath();
+	      }
+	  }
+	break;
+      case MouseEvent.MOUSE_MOVED:
+	break;
+      case MouseEvent.MOUSE_DRAGGED:
+	MenuDragMouseEvent e = new MenuDragMouseEvent((Component) event
+	                                              .getSource(),
+	                                              event.getID(),
+	                                              event.getWhen(),
+	                                              event.getModifiers(),
+	                                              event.getX(),
+	                                              event.getY(),
+	                                              event.getClickCount(),
+	                                              event.isPopupTrigger(),
+	                                              path, manager);
+	processMenuDragMouseEvent(e);
+	break;
+      }
   }
 
   /**
@@ -303,7 +381,22 @@ public class JMenuItem extends AbstractB
    */
   public void processMenuDragMouseEvent(MenuDragMouseEvent event)
   {
-  } // processMenuDragMouseEvent()
+    switch (event.getID())
+      {
+      case MouseEvent.MOUSE_ENTERED:
+	fireMenuDragMouseEntered(event);
+	break;
+      case MouseEvent.MOUSE_EXITED:
+	fireMenuDragMouseExited(event);
+	break;
+      case MouseEvent.MOUSE_DRAGGED:
+	fireMenuDragMouseDragged(event);
+	break;
+      case MouseEvent.MOUSE_RELEASED:
+	fireMenuDragMouseReleased(event);
+	break;
+      }
+  }
 
   /**
    * DOCUMENT ME!
@@ -322,7 +415,10 @@ public class JMenuItem extends AbstractB
    */
   protected void fireMenuDragMouseEntered(MenuDragMouseEvent event)
   {
-    // TODO
+    EventListener[] ll = listenerList.getListeners(MenuDragMouseListener.class);
+
+    for (int i = 0; i < ll.length; i++)
+      ((MenuDragMouseListener) ll[i]).menuDragMouseEntered(event);
   }
 
   /**
@@ -332,7 +428,10 @@ public class JMenuItem extends AbstractB
    */
   protected void fireMenuDragMouseExited(MenuDragMouseEvent event)
   {
-    // TODO
+    EventListener[] ll = listenerList.getListeners(MenuDragMouseListener.class);
+
+    for (int i = 0; i < ll.length; i++)
+      ((MenuDragMouseListener) ll[i]).menuDragMouseExited(event);
   }
 
   /**
@@ -342,7 +441,10 @@ public class JMenuItem extends AbstractB
    */
   protected void fireMenuDragMouseDragged(MenuDragMouseEvent event)
   {
-    // TODO
+    EventListener[] ll = listenerList.getListeners(MenuDragMouseListener.class);
+
+    for (int i = 0; i < ll.length; i++)
+      ((MenuDragMouseListener) ll[i]).menuDragMouseDragged(event);
   }
 
   /**
@@ -352,7 +454,10 @@ public class JMenuItem extends AbstractB
    */
   protected void fireMenuDragMouseReleased(MenuDragMouseEvent event)
   {
-    // TODO
+    EventListener[] ll = listenerList.getListeners(MenuDragMouseListener.class);
+
+    for (int i = 0; i < ll.length; i++)
+      ((MenuDragMouseListener) ll[i]).menuDragMouseReleased(event);
   }
 
   /**
@@ -392,7 +497,8 @@ public class JMenuItem extends AbstractB
    */
   public void menuSelectionChanged(boolean changed)
   {
-    // TODO
+    if (changed)
+      model.setArmed(true);
   }
 
   /**
@@ -402,7 +508,7 @@ public class JMenuItem extends AbstractB
    */
   public MenuElement[] getSubElements()
   {
-    return null; // TODO
+    return new MenuElement[0];
   }
 
   /**
@@ -412,7 +518,7 @@ public class JMenuItem extends AbstractB
    */
   public Component getComponent()
   {
-    return null; // TODO
+    return this;
   }
 
   /**
@@ -422,7 +528,7 @@ public class JMenuItem extends AbstractB
    */
   public void addMenuDragMouseListener(MenuDragMouseListener listener)
   {
-    // TODO
+    listenerList.add(MenuDragMouseListener.class, listener);
   }
 
   /**
@@ -432,6 +538,7 @@ public class JMenuItem extends AbstractB
    */
   public void removeMenuDragMouseListener(MenuDragMouseListener listener)
   {
+    listenerList.remove(MenuDragMouseListener.class, listener);
   }
 
   /**
@@ -441,6 +548,7 @@ public class JMenuItem extends AbstractB
    */
   public void addMenuKeyListener(MenuKeyListener listener)
   {
+    listenerList.add(MenuKeyListener.class, listener);
   }
 
   /**
@@ -450,6 +558,7 @@ public class JMenuItem extends AbstractB
    */
   public void removeMenuKeyListener(MenuKeyListener listener)
   {
+    listenerList.remove(MenuKeyListener.class, listener);
   }
 
   /**
Index: javax/swing/plaf/basic/BasicMenuItemUI.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/javax/swing/plaf/basic/BasicMenuItemUI.java,v
retrieving revision 1.1.2.6
diff -c -p -u -r1.1.2.6 BasicMenuItemUI.java
--- javax/swing/plaf/basic/BasicMenuItemUI.java	26 Apr 2004 20:19:13 -0000	1.1.2.6
+++ javax/swing/plaf/basic/BasicMenuItemUI.java	27 Apr 2004 16:20:29 -0000
@@ -227,7 +227,8 @@ public class BasicMenuItemUI extends Men
    */
   protected void doClick(MenuSelectionManager msm)
   {
-    // TODO
+    menuItem.doClick();
+    msm.clearSelectedPath();
   }
 
   /**
@@ -717,6 +718,8 @@ public class BasicMenuItemUI extends Men
      */
     public void mouseClicked(MouseEvent e)
     {
+      MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+      manager.processMouseEvent(e);
     }
 
     /**
@@ -726,6 +729,8 @@ public class BasicMenuItemUI extends Men
      */
     public void mouseDragged(MouseEvent e)
     {
+      MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+      manager.processMouseEvent(e);
     }
 
     /**
@@ -735,20 +740,8 @@ public class BasicMenuItemUI extends Men
      */
     public void mouseEntered(MouseEvent e)
     {
-      if (e.getSource() instanceof AbstractButton)
-        {
-	  AbstractButton button = (AbstractButton) e.getSource();
-	  ButtonModel model = button.getModel();
-
-	  if (button.isRolloverEnabled())
-	    model.setRollover(true);
-
-	  if (model.isPressed()
-	      && ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0))
-	    model.setArmed(true);
-	  else
-	    model.setArmed(false);
-        }
+      MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+      manager.processMouseEvent(e);
     }
 
     /**
@@ -758,16 +751,8 @@ public class BasicMenuItemUI extends Men
      */
     public void mouseExited(MouseEvent e)
     {
-      if (e.getSource() instanceof AbstractButton)
-        {
-	  AbstractButton button = (AbstractButton) e.getSource();
-	  ButtonModel model = button.getModel();
-
-	  if (button.isRolloverEnabled())
-	    model.setRollover(false);
-
-	  model.setArmed(false);
-        }
+      MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+      manager.processMouseEvent(e);
     }
 
     /**
@@ -777,6 +762,8 @@ public class BasicMenuItemUI extends Men
      */
     public void mouseMoved(MouseEvent e)
     {
+      MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+      manager.processMouseEvent(e);
     }
 
     /**
@@ -786,18 +773,8 @@ public class BasicMenuItemUI extends Men
      */
     public void mousePressed(MouseEvent e)
     {
-      if (e.getSource() instanceof AbstractButton)
-        {
-	  AbstractButton button = (AbstractButton) e.getSource();
-	  ButtonModel model = button.getModel();
-
-	  if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
-	    {
-	      // It is important that these transitions happen in this order.
-	      model.setArmed(true);
-	      model.setPressed(true);
-	    }
-        }
+      MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+      manager.processMouseEvent(e);
     }
 
     /**
@@ -807,18 +784,12 @@ public class BasicMenuItemUI extends Men
      */
     public void mouseReleased(MouseEvent e)
     {
-      if (e.getSource() instanceof AbstractButton)
-        {
-	  AbstractButton button = (AbstractButton) e.getSource();
-	  ButtonModel model = button.getModel();
-
-	  if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
-	    {
-	      // It is important that these transitions happen in this order.
-	      model.setPressed(false);
-	      model.setArmed(false);
-	    }
-        }
+      // FIXME: Should check if the mouse released while mouse cursor
+      // was indeed over the menu item. If this wasn't the case we probably 
+      // should sent this event to MenuSelectionManager. 
+      MenuSelectionManager manager = MenuSelectionManager.defaultManager();
+      manager.clearSelectedPath();
+      menuItem.doClick(0);
     }
   }
 
@@ -837,7 +808,6 @@ public class BasicMenuItemUI extends Men
      */
     public void menuDragMouseDragged(MenuDragMouseEvent e)
     {
-      // TODO        
     }
 
     /**
@@ -847,7 +817,6 @@ public class BasicMenuItemUI extends Men
      */
     public void menuDragMouseEntered(MenuDragMouseEvent e)
     {
-      // TODO        
     }
 
     /**
@@ -857,7 +826,6 @@ public class BasicMenuItemUI extends Men
      */
     public void menuDragMouseExited(MenuDragMouseEvent e)
     {
-      // TODO        
     }
 
     /**
@@ -867,7 +835,6 @@ public class BasicMenuItemUI extends Men
      */
     public void menuDragMouseReleased(MenuDragMouseEvent e)
     {
-      // TODO        
     }
   }
 
@@ -886,7 +853,6 @@ public class BasicMenuItemUI extends Men
      */
     public void menuKeyPressed(MenuKeyEvent e)
     {
-      // TODO        
     }
 
     /**
@@ -896,7 +862,6 @@ public class BasicMenuItemUI extends Men
      */
     public void menuKeyReleased(MenuKeyEvent e)
     {
-      // TODO        
     }
 
     /**
@@ -906,7 +871,6 @@ public class BasicMenuItemUI extends Men
      */
     public void menuKeyTyped(MenuKeyEvent e)
     {
-      // TODO    
     }
   }
 
@@ -925,7 +889,6 @@ public class BasicMenuItemUI extends Men
      */
     public void propertyChange(PropertyChangeEvent evt)
     {
-      // TODO        
     }
   }
 }


More information about the Java-patches mailing list