intitial checkin
authorClaus Gittinger <cg@exept.de>
Wed, 21 May 1997 14:17:57 +0200
changeset 2656 c71176e82d85
parent 2655 efbeb1fe80c0
child 2657 a17f1c3543fd
intitial checkin
WeakInterestConverter.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WeakInterestConverter.st	Wed May 21 14:17:57 1997 +0200
@@ -0,0 +1,97 @@
+Object subclass:#WeakInterestConverter
+	instanceVariableNames:'destinationHolder selector aspect'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-Support-Models'
+!
+
+!WeakInterestConverter class methodsFor:'documentation'!
+
+documentation
+"
+    these are much like InterestConverters; however, the reference to
+    the destination is weak, which allows for them to be garbage collected.
+
+    [author:]
+        Claus Gittinger
+"
+! !
+
+!WeakInterestConverter class methodsFor:'instance creation'!
+
+destination:anObject selector:aSelector
+    "create & return an interestConverter, which sends aSelector
+     to anObject when a change notification arrives"
+
+    ^ self basicNew destination:anObject selector:aSelector
+
+    "Created: 21.5.1997 / 14:08:49 / cg"
+!
+
+destination:anObject selector:aSelector aspect:aspect
+    "create & return an interestConverter, which sends aSelector
+     to anObject when a change notification for aspect arrives"
+
+    ^ self basicNew destination:anObject selector:aSelector aspect:aspect
+
+    "Created: 21.5.1997 / 14:08:49 / cg"
+! !
+
+!WeakInterestConverter methodsFor:'accessing'!
+
+aspect
+    "return my aspect (if any)"
+
+    ^ aspect
+
+    "Created: 21.5.1997 / 14:08:49 / cg"
+!
+
+destination
+    "return my destination"
+
+    ^ destinationHolder at:1
+
+    "Created: 21.5.1997 / 14:08:49 / cg"
+!
+
+destination:dest selector:sel
+    "set destination and selector"
+
+    destinationHolder := WeakArray with:dest.
+    selector := sel
+
+    "Created: 21.5.1997 / 14:08:49 / cg"
+!
+
+destination:dest selector:sel aspect:a
+    "set destination, selector and aspect"
+
+    destinationHolder := WeakArray with:dest.
+    selector := sel.
+    aspect := a
+
+    "Created: 21.5.1997 / 14:08:49 / cg"
+! !
+
+!WeakInterestConverter methodsFor:'change & update'!
+
+update:something with:aParameter from:someObject
+    |destination|
+
+    (aspect isNil or:[aspect == something]) ifTrue:[
+        destination := destinationHolder at:1.
+        destination notNil ifTrue:[
+            destination perform:selector
+        ]
+    ]
+
+    "Modified: 8.3.1996 / 22:41:53 / cg"
+    "Created: 21.5.1997 / 14:08:49 / cg"
+! !
+
+!WeakInterestConverter class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libbasic/WeakInterestConverter.st,v 1.1 1997-05-21 12:17:57 cg Exp $'
+! !