view java/src/java/beans/PropertyChangeSupport.d @ 12:bc29606a740c

Added dwt-addons in original directory structure of eclipse.org
author Frank Benoit <benoit@tionex.de>
date Sat, 14 Mar 2009 18:23:29 +0100
parents
children 9b96950f2c3c
line wrap: on
line source

module java.beans.PropertyChangeSupport;

import java.lang.all;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;

class PropertyChangeSupport {
    PropertyChangeListener[][ String ] listeners;
    Object obj;
    this(Object obj){
        this.obj = obj;
    }
    void addPropertyChangeListener(PropertyChangeListener listener){
        addPropertyChangeListener( "", listener );
    }
    void addPropertyChangeListener(String propertyName, PropertyChangeListener listener){
        PropertyChangeListener[] list;
        if( auto l = propertyName in listeners ){
            list = *l;
        }
        list ~= listener;
        listeners[ propertyName.dup ] = list;
    }
    void firePropertyChange(String propertyName, bool oldValue, bool newValue){
        firePropertyChange( propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue) );
    }
    void firePropertyChange(String propertyName, int oldValue, int newValue){
        firePropertyChange( propertyName, new Integer(oldValue), new Integer(newValue) );
    }
    void firePropertyChange(String propertyName, Object oldValue, Object newValue){
        PropertyChangeListener[] list;
        if( auto l = propertyName in listeners ){
            list = *l;
        }
        auto evt = new PropertyChangeEvent( obj, propertyName, oldValue, newValue );
        foreach( listener; list ){
            if( listener ){
                listener.propertyChange( evt );
            }
        }
    }
    void removePropertyChangeListener(PropertyChangeListener listener){
        removePropertyChangeListener( "", listener );
    }
    void removePropertyChangeListener(String propertyName, PropertyChangeListener listener){
        if( auto list = propertyName in listeners ){
            list.length = tango.core.Array.remove( *list, listener );
            if( list.length > 0 ){
                listeners[ propertyName.dup ] = *list;
            }
            else{
                listeners.remove( propertyName );
            }
        }
    }
}