/*----------------------------------------------------------------------------
 * Klasse:		    MyButton.java
 * Beschreibung:	Eigene Button Klasse um Events besser zu behandeln
 * Autor:		    Jack Meyer
 * Datum:		    Dezember, 1997
 * ----------------------------------------------------------------------------
 */

import java.awt.*;
import java.util.*;


public class MyButton extends Button
{

    /*
     * zum Speichern aller an Events interessierten Komponenten = Listeners
     */
    private Vector listeners = new Vector();


    /*
     * Dummy Konstruktor (zum Ableiten gut)
     */
    public MyButton()
    {
        this("press here");
    }

    /*
     * 'normaler' Konstruktor mit Button Text
     */
    public MyButton(String label)
    {
        super(label);
    }


    /*
     * Methode um Listener (Dependents) anzumelden
     */
    public synchronized void addButtonPushListener(MyButtonPushListener bl)
    {
        listeners.addElement(bl);
    }

    /*
     * Methode um Listener wieder abzumelden
     */
    public synchronized void removeButtonPushListener(MyButtonPushListener bl)
    {
        listeners.removeElement(bl);
    }


    /*
     * Eigentliche Event Methode, JAVA Ebents werden hier abgefangen und
     * als eigene MyButtonPushEvent an alle Listener weiter verschickt
     */
    public boolean handleEvent(Event evt)
    {
        // test ob Button Gepressed
        if (evt.id == Event.ACTION_EVENT)
        {
            // generiere mein eigener Event
            MyButtonPushEvent myEvent = new MyButtonPushEvent(this);
            // mach Suicherheitshalber Kopie aller Listeners
            Vector l;
            synchronized(this)
            {
                l = (Vector) listeners.clone();
            };

            // informiere alle interessierten Listeners
            for (int i = 0; i < l.size(); i++)
            {
                MyButtonPushListener bl = (MyButtonPushListener) l.elementAt(i);
                bl.myButtonPushed(this);
            }
        }
        return super.handleEvent(evt);
    }



};