annotate dwtx/dwtxhelper/Bean.d @ 108:d79c6b934729

Impl of Bean
author Frank Benoit <benoit@tionex.de>
date Thu, 07 Aug 2008 16:39:52 +0200
parents 86617aa6b5dd
children 9cb927d16b0a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
100
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 module dwtx.dwtxhelper.Bean;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 import dwt.dwthelper.utils;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 class PropertyChangeEvent : EventObject {
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 private String propertyName;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 private Object oldValue;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 private Object newValue;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 private Object propagationId;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 this( Object source, String propertyName, Object oldValue, Object newValue) {
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 super( source );
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 this.propertyName = propertyName;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 this.oldValue = oldValue;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 this.newValue = newValue;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 Object getNewValue(){
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 return newValue;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 Object getOldValue(){
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 return oldValue;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 Object getPropagationId(){
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 return propagationId;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 String getPropertyName(){
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 return propertyName;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 void setPropagationId(Object propagationId){
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 this.propagationId = propagationId;
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 public override String toString() {
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 return this.classinfo.name ~ "[source=" ~ source.toString() ~ "]";
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 interface PropertyChangeListener {
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 void propertyChange(PropertyChangeEvent evt);
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 class PropertyChangeSupport {
108
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
43 PropertyChangeListener[][ String ] listeners;
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
44 Object obj;
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
45 this(Object obj){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
46 this.obj = obj;
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
47 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
48 void addPropertyChangeListener(PropertyChangeListener listener){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
49 addPropertyChangeListener( "", listener );
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
50 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
51 void addPropertyChangeListener(String propertyName, PropertyChangeListener listener){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
52 PropertyChangeListener[] list = listeners[ propertyName ];
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
53 list ~= listener;
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
54 listeners[ propertyName.dup ] = list;
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
55 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
56 void firePropertyChange(String propertyName, bool oldValue, bool newValue){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
57 firePropertyChange( propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue) );
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
58 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
59 void firePropertyChange(String propertyName, int oldValue, int newValue){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
60 firePropertyChange( propertyName, new Integer(oldValue), new Integer(newValue) );
100
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 }
108
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
62 void firePropertyChange(String propertyName, Object oldValue, Object newValue){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
63 PropertyChangeListener[] list = listeners[ propertyName ];
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
64 auto evt = new PropertyChangeEvent( obj, propertyName, oldValue, newValue );
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
65 foreach( listener; list ){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
66 if( listener ){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
67 listener.propertyChange( evt );
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
68 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
69 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
70 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
71 void removePropertyChangeListener(PropertyChangeListener listener){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
72 removePropertyChangeListener( "", listener );
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
73 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
74 void removePropertyChangeListener(String propertyName, PropertyChangeListener listener){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
75 if( auto list = propertyName in listeners ){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
76 tango.core.Array.remove( *list, listener );
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
77 if( list.length > 0 ){
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
78 listeners[ propertyName.dup ] = *list;
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
79 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
80 else{
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
81 listeners.remove( propertyName );
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
82 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
83 }
d79c6b934729 Impl of Bean
Frank Benoit <benoit@tionex.de>
parents: 100
diff changeset
84 }
100
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 }
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86
86617aa6b5dd More helper classes, needed by draw2d
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87