001 /*
002 * $Id: RolloverProducer.java,v 1.10 2005/10/24 13:20:42 kleopatra Exp $
003 *
004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005 * Santa Clara, California 95054, U.S.A. All rights reserved.
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020 */
021 package org.jdesktop.swingx;
022
023 import java.awt.Point;
024 import java.awt.event.MouseEvent;
025 import java.awt.event.MouseListener;
026 import java.awt.event.MouseMotionListener;
027
028 import javax.swing.JComponent;
029
030 /**
031 * Mouse/Motion/Listener which stores mouse location as
032 * client property in the target JComponent.
033 *
034 * Note: assumes that the component it is listening to is
035 * of type JComponent!
036 *
037 * @author Jeanette Winzenburg
038 */
039 public class RolloverProducer implements MouseListener, MouseMotionListener {
040
041 //----------------- mouseListener
042
043 public static final String CLICKED_KEY = "swingx.clicked";
044 public static final String ROLLOVER_KEY = "swingx.rollover";
045 // public static final String PRESSED_KEY = "swingx.pressed";
046
047
048 public void mouseClicked(MouseEvent e) {
049 }
050
051 public void mousePressed(MouseEvent e) {
052
053 }
054
055 public void mouseReleased(MouseEvent e) {
056 updateRollover(e, CLICKED_KEY);
057
058 }
059
060 public void mouseEntered(MouseEvent e) {
061 updateRollover(e, ROLLOVER_KEY);
062 }
063
064
065 public void mouseExited(MouseEvent e) {
066 if (e.getSource() instanceof JComponent) {
067 ((JComponent) e.getSource()).putClientProperty(ROLLOVER_KEY, null);
068 ((JComponent) e.getSource()).putClientProperty(CLICKED_KEY, null);
069 // ((JComponent) e.getSource()).putClientProperty(PRESSED_KEY, null);
070 }
071
072 }
073
074 //---------------- MouseMotionListener
075 public void mouseDragged(MouseEvent e) {
076 // TODO Auto-generated method stub
077
078 }
079
080 public void mouseMoved(MouseEvent e) {
081 updateRollover(e, ROLLOVER_KEY);
082 }
083
084 protected void updateRollover(MouseEvent e, String property) {
085 updateRolloverPoint((JComponent) e.getComponent(), e.getPoint());
086 updateClientProperty((JComponent) e.getSource(), property);
087 }
088
089 protected Point rollover = new Point(-1, -1);
090
091 protected void updateClientProperty(JComponent component, String property) {
092 Point p = (Point) component.getClientProperty(property);
093 if (p == null || (rollover.x != p.x) || (rollover.y != p.y)) {
094 component.putClientProperty(property, new Point(rollover));
095 }
096 }
097
098 /**
099 * Subclasses must override to map the given mouse coordinates into
100 * appropriate client coordinates. The result must be stored in the
101 * rollover field.
102 *
103 * Here: does nothing.
104 *
105 * @param component
106 * @param mousePoint
107 */
108 protected void updateRolloverPoint(JComponent component, Point mousePoint) {
109
110 }
111
112
113 }