import java.awt.event.*;

/** ButtonLikeListener derived from ImageButtonListener,
 * @version 1.0, Dec 19 1996
 * @author  David Geary
 *
 * @see     ButtonLike
 * @see     MomentaryButtonLikeListener
 * @see     SpringyButtonLikeListener
 * @see     StickyButtonLikeListener
 */

abstract public class ButtonLikeListener 
implements MouseListener, MouseMotionListener
{
    protected ButtonLike ib = null;

    protected boolean button_armed = false;

    abstract public void activate  (ButtonLike button);
    abstract public void arm       (ButtonLike button);
    abstract public void disarm    (ButtonLike button);

    ButtonLikeListener (ButtonLike ib) { this.ib = ib; }

    ButtonLikeListener () { }

    public void setTarget (ButtonLike ib) { this.ib = ib; }

    public synchronized void mousePressed (MouseEvent me) {
        if (null == ib) ib = (ButtonLike)me.getComponent ();
        if (ib.isEnabled ())
            arm (ib);
    }

    public synchronized void mouseClicked (MouseEvent me) {
        if (null == ib) ib = (ButtonLike)me.getComponent ();
        if (ib.isEnabled ()
          && button_armed )
            activate  (ib);
    }

    public synchronized void mouseReleased (MouseEvent me) {
        if (null == ib) ib = (ButtonLike)me.getComponent ();
        if (ib.contains (me.getPoint ().x, me.getPoint ().y)
          && ib.isEnabled ()
          && button_armed )
            activate  (ib);
    }

    public synchronized void mouseDragged (MouseEvent me) {
        if (null == ib) ib = (ButtonLike)me.getComponent ();
        if (ib.isEnabled ()) {
            if (ib.contains (me.getPoint ().x, me.getPoint ().y))
                arm (ib);
            else
                disarm (ib);
        }
    }

    public synchronized void mouseMoved (MouseEvent event) { }
    public synchronized void mouseEntered (MouseEvent event) { }
    public synchronized void mouseExited (MouseEvent event) { }
}
/* <IMG SRC="/cgi-bin/counter">*/
