1 module java.beans.PropertyChangeSupport; 2 3 import java.lang.all; 4 import java.beans.PropertyChangeListener; 5 import java.beans.PropertyChangeEvent; 6 7 version(Tango){ 8 static import tango.core.Array; 9 } else { // Phobos 10 11 } 12 class PropertyChangeSupport { 13 PropertyChangeListener[][ String ] listeners; 14 Object obj; 15 this(Object obj){ 16 this.obj = obj; 17 } 18 void addPropertyChangeListener(PropertyChangeListener listener){ 19 addPropertyChangeListener( "", listener ); 20 } 21 void addPropertyChangeListener(String propertyName, PropertyChangeListener listener){ 22 PropertyChangeListener[] list; 23 if( auto l = propertyName in listeners ){ 24 list = *l; 25 } 26 list ~= listener; 27 version(Tango){ 28 propertyName = propertyName.dup; 29 } 30 listeners[ propertyName ] = list; 31 } 32 void firePropertyChange(String propertyName, bool oldValue, bool newValue){ 33 firePropertyChange( propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue) ); 34 } 35 void firePropertyChange(String propertyName, int oldValue, int newValue){ 36 firePropertyChange( propertyName, new Integer(oldValue), new Integer(newValue) ); 37 } 38 void firePropertyChange(String propertyName, Object oldValue, Object newValue){ 39 PropertyChangeListener[] list; 40 if( auto l = propertyName in listeners ){ 41 list = *l; 42 } 43 auto evt = new PropertyChangeEvent( obj, propertyName, oldValue, newValue ); 44 foreach( listener; list ){ 45 if( listener ){ 46 listener.propertyChange( evt ); 47 } 48 } 49 } 50 void removePropertyChangeListener(PropertyChangeListener listener){ 51 removePropertyChangeListener( "", listener ); 52 } 53 void removePropertyChangeListener(String propertyName, PropertyChangeListener listener){ 54 if( auto list = propertyName in listeners ){ 55 version(Tango){ 56 list.length = tango.core.Array.remove( *list, listener ); 57 } else { 58 implMissing( __FILE__, __LINE__ ); 59 } 60 if( list.length > 0 ){ 61 version(Tango){ 62 propertyName = propertyName.dup; 63 } 64 listeners[ propertyName ] = *list; 65 } 66 else{ 67 listeners.remove( propertyName ); 68 } 69 } 70 } 71 } 72 73