Changeset 4

Show
Ignore:
Timestamp:
06/17/05 16:48:58 (4 years ago)
Author:
schst
Message:

added the autoRemove feature

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/net/schst/EventDispatcher/EventDispatcher.java

    r3 r4  
    7777    */ 
    7878    public void addListener(String eventName, EventListener listener, boolean autoRemove) { 
    79         // TODO implement autoRemove 
    80          
    8179        if (!this.listeners.containsKey(eventName)) { 
    8280            this.listeners.put(eventName, new EventListenerCollection()); 
    8381        } 
    8482        EventListenerCollection col = (EventListenerCollection)this.listeners.get(eventName); 
    85         col.addListener(listener); 
     83        col.addListener(listener, autoRemove); 
    8684         
    8785        // check the event queue 
     
    114112         // TODO implement autoRemove 
    115113          
    116          this.globalListeners.addListener(listener); 
     114         this.globalListeners.addListener(listener, autoRemove); 
    117115          
    118116         // check the event queue 
     
    124122         } 
    125123     } 
    126      
     124 
    127125    /** 
    128126     * Trigger an event, if you already created an event object 
  • trunk/src/net/schst/EventDispatcher/EventListenerCollection.java

    r1 r4  
    22 
    33import java.util.ArrayList; 
     4import java.util.Iterator; 
    45 
    56/** 
     
    1011public class EventListenerCollection { 
    1112  
     13   /** 
     14    * All event listeners 
     15    */ 
    1216    private ArrayList listeners = new ArrayList(); 
    1317     
    14     public int addListener(EventListener listener) { 
    15         this.listeners.add(listener); 
     18   /** 
     19    * Add a new event listener to the collection 
     20    *  
     21    * @param listener       Listener to add 
     22    * @return               amount of event listeners in this collection 
     23    */ 
     24    public int addListener(EventListener listener, boolean autoRemove) { 
     25 
     26        EventListenerContainer container = new EventListenerContainer(listener); 
     27        container.enableAutoRemove(autoRemove); 
     28         
     29        this.listeners.add(container); 
    1630        return this.listeners.size(); 
    1731    } 
    18      
     32 
     33   /** 
     34    * Propagate an event to all listeners in this collection 
     35    *  
     36    * @param e      event to propagate 
     37    * @return       event 
     38    */ 
    1939    public Event propagate(Event e) { 
     40        ArrayList remove = new ArrayList(); 
    2041        for (int i = 0; i < this.listeners.size(); i++) { 
    21             EventListener listener = (EventListener)this.listeners.get(i); 
    22             listener.handleEvent(e); 
     42            EventListenerContainer container = (EventListenerContainer)this.listeners.get(i); 
     43            container.getListener().handleEvent(e); 
     44             
     45            // remove the listener 
     46            if (container.autoRemoveEnabled()) { 
     47                remove.add(new Integer(i)); 
     48            } 
    2349            if (e.isCancelled()) { 
    2450                break; 
    2551            } 
    2652        } 
     53        // remove the listeners that have been set to autoRemove 
     54        for (Iterator iter = remove.iterator(); iter.hasNext();) { 
     55            Integer index = (Integer) iter.next(); 
     56            this.removeListener(index); 
     57        } 
    2758        return e; 
    2859    } 
     60 
     61   /** 
     62    * Remove a listener from the list 
     63    *  
     64    * @param i 
     65    * @return 
     66    */ 
     67    public EventListenerContainer removeListener(Integer i) { 
     68        return (EventListenerContainer)this.listeners.remove(i.intValue()); 
     69    } 
     70     
    2971}