import java.awt.*;
import java.awt.event.*;

/** An ImageButtonListener that causes its associated 
 * ImageButton to "stick" when activated.  If the ImageButton 
 * is raised it depresses<b>[1]</b> upon a mouse down and stays 
 * down upon a subsequent mouse up event.  The same "sticky" 
 * behaviour occurs when a depressed ImageButton encounters a 
 * mouse down followed by a subsequent mouse up.<p>
 * 
 * <b>[1]</b> No psychiatric consultation is necessary.<p>
 *
 * @version 1.0, Apr 1 1996
 *
 *  Took out check for right-mouse button; mouse events are
 *  handled no matter which mouse button initiated the event.
 *
 * @version 1.1, Dec 20 1996
 *
 *  Upgraded to 1.1 event handling
 *
 * @author  David Geary
 * @see   ImageButton
 * @see   ImageButtonListener
 * @see   SpringyImageButtonListener
 */

public class StickyImageButtonListener extends ImageButtonListener {

    private boolean state = false;

    public void setState (boolean state) {
        this.state = state;
    }

    public boolean getState () {
        return state;
    }

    public void activate(ImageButton ib) {
        state = !state;
        disarm (ib);

        if (ib instanceof CheckImageButton)
            ((CheckImageButton)ib).processStateChange (state);
    }

    public void arm (ImageButton ib) {
        ib.setRaised (state);
        button_armed = true;
    }

    public void disarm (ImageButton ib) {
        ib.setRaised (!state);
        button_armed = false;
    }
}
