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