// Copyright 2003, SLAC, Stanford, U.S.A. package org.freehep.swing.event; import java.awt.Component; import java.awt.event.MouseEvent; import javax.swing.SwingUtilities; import javax.swing.event.MouseInputListener; /** * This class allows MouseEvents from the three buttons to be routed to * three MouseInputListeners. The MouseEvents generated for these listeners * always have Button1 in their event. * * @author Mark Donszelmann * @version $Id: MouseInputRouter.java 8584 2006-08-10 23:06:37Z duns $ * @status NOT TESTED */ public class MouseInputRouter implements MouseInputListener { MouseInputListener left, middle, right; public MouseInputRouter(Component c) { c.addMouseMotionListener(this); c.addMouseListener(this); } public void setLeftMouseInputListener(MouseInputListener l) { left = l; } public void setMiddleMouseInputListener(MouseInputListener l) { middle = l; } public void setRightInputListener(MouseInputListener l) { right = l; } private MouseEvent convertMouseEvent(MouseEvent event) { int modifiers = event.getModifiers() | event.getModifiersEx(); modifiers |= MouseEvent.BUTTON1_MASK; modifiers &= ~MouseEvent.BUTTON2_MASK; modifiers &= ~MouseEvent.BUTTON3_MASK; modifiers |= MouseEvent.BUTTON1_DOWN_MASK; modifiers &= ~MouseEvent.BUTTON2_DOWN_MASK; modifiers &= ~MouseEvent.BUTTON3_DOWN_MASK; return new MouseEvent(event.getComponent(), event.getID(), event.getWhen(), modifiers, event.getX(), event.getY(), event.getClickCount(), event.isPopupTrigger(), event.getButton()); } public void mousePressed(MouseEvent event) { if ((left != null) && (SwingUtilities.isLeftMouseButton(event))) { left.mousePressed(event); } if ((middle != null) && (SwingUtilities.isMiddleMouseButton(event))) { middle.mousePressed(convertMouseEvent(event)); } if ((right != null) && (SwingUtilities.isRightMouseButton(event))) { right.mousePressed(convertMouseEvent(event)); } } public void mouseReleased(MouseEvent event) { if ((left != null) && (SwingUtilities.isLeftMouseButton(event))) { left.mouseReleased(event); } if ((middle != null) && (SwingUtilities.isMiddleMouseButton(event))) { middle.mouseReleased(convertMouseEvent(event)); } if ((right != null) && (SwingUtilities.isRightMouseButton(event))) { right.mouseReleased(convertMouseEvent(event)); } } public void mouseClicked(MouseEvent event) { if ((left != null) && (SwingUtilities.isLeftMouseButton(event))) { left.mouseClicked(event); } if ((middle != null) && (SwingUtilities.isMiddleMouseButton(event))) { middle.mouseClicked(convertMouseEvent(event)); } if ((right != null) && (SwingUtilities.isRightMouseButton(event))) { right.mouseClicked(convertMouseEvent(event)); } } public void mouseDragged(MouseEvent event) { if ((left != null) && (SwingUtilities.isLeftMouseButton(event))) { left.mouseDragged(event); } if ((middle != null) && (SwingUtilities.isMiddleMouseButton(event))) { middle.mouseDragged(convertMouseEvent(event)); } if ((right != null) && (SwingUtilities.isRightMouseButton(event))) { right.mouseDragged(convertMouseEvent(event)); } } public void mouseMoved(MouseEvent event) { if (left != null) left.mouseMoved(event); if (middle != null) middle.mouseMoved(event); if (right != null) right.mouseMoved(event); } public void mouseEntered(MouseEvent event) { if (left != null) left.mouseEntered(event); if (middle != null) middle.mouseEntered(event); if (right != null) right.mouseEntered(event); } public void mouseExited(MouseEvent event) { if (left != null) left.mouseExited(event); if (middle != null) middle.mouseExited(event); if (right != null) right.mouseExited(event); } }