changeset 108:d79c6b934729

Impl of Bean
author Frank Benoit <benoit@tionex.de>
date Thu, 07 Aug 2008 16:39:52 +0200
parents ffa785dc65e5
children e4589de2eed6
files dwtx/dwtxhelper/Bean.d
diffstat 1 files changed, 41 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/dwtx/dwtxhelper/Bean.d	Thu Aug 07 16:39:43 2008 +0200
+++ b/dwtx/dwtxhelper/Bean.d	Thu Aug 07 16:39:52 2008 +0200
@@ -40,15 +40,48 @@
 
 
 class PropertyChangeSupport {
-    this(Object){
+    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 = listeners[ propertyName ];
+        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 addPropertyChangeListener(PropertyChangeListener listener){}
-    void addPropertyChangeListener(String propertyName, PropertyChangeListener listener){}
-    void firePropertyChange(String propertyName, bool oldValue, bool newValue){}
-    void firePropertyChange(String propertyName, int oldValue, int newValue){}
-    void firePropertyChange(String propertyName, Object oldValue, Object newValue){}
-    void removePropertyChangeListener(PropertyChangeListener listener){}
-    void removePropertyChangeListener(String propertyName, PropertyChangeListener listener){}
+    void firePropertyChange(String propertyName, Object oldValue, Object newValue){
+        PropertyChangeListener[] list = listeners[ propertyName ];
+        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 ){
+            tango.core.Array.remove( *list, listener );
+            if( list.length > 0 ){
+                listeners[ propertyName.dup ] = *list;
+            }
+            else{
+                listeners.remove( propertyName );
+            }
+        }
+    }
 }