intitial checkin
authorca
Fri, 23 May 1997 16:28:06 +0200
changeset 120 d83c307f3bf5
parent 119 39acd704ad51
child 121 96d6feeeb049
intitial checkin
ResourceRetriever.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ResourceRetriever.st	Fri May 23 16:28:06 1997 +0200
@@ -0,0 +1,187 @@
+"
+ COPYRIGHT (c) 1997 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+
+
+
+Object subclass:#ResourceRetriever
+	instanceVariableNames:'className resourceOwner selector labelText'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Interface-UIPainter'
+!
+
+!ResourceRetriever class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1997 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+
+
+!
+
+documentation
+"
+        This class is used to retrieve resources for a painted interface of
+        some sort. If the className is specified, then the owner of the resource
+        is fixed at painting time. If not, then the ApplicationModel which invokes
+        the painted interface is assumed to be the owner of the resource.
+
+        When the retriever is sent the message #value, it sends the message #valueFor:
+        to the resource owner, to retrive the resource
+
+    [author:]
+        Claus Atzkern
+
+    [see also:]
+        Application
+        Menu
+        MenuItem
+"
+
+
+
+! !
+
+!ResourceRetriever methodsFor:'accessing'!
+
+className
+    "return the value of the instance variable 'className' (automatically generated)"
+
+    ^ className!
+
+className:something
+    "set the class which provides the resources
+    "
+    className     := something.
+    resourceOwner := nil.
+!
+
+selector
+    "return the value of the instance variable 'selector' (automatically generated)"
+
+    ^ selector!
+
+selector:something
+    "set the value of the instance variable 'selector' (automatically generated)"
+
+    selector := something.
+!
+
+value
+    "returns value assigned to resource or nil
+    "
+    |resource|
+
+    (resource := self resource) isNil ifTrue:[
+        ^ labelText
+    ].
+
+    (labelText notNil and:[resource isImage]) ifTrue:[
+        ^ LabelAndIcon icon:resource string:(Text string:labelText emphasis:#bold)
+    ].
+  ^ resource
+! !
+
+!ResourceRetriever methodsFor:'accessing resource'!
+
+findGuiResourcesIn:aResourceContainer
+    "setup a resource owner
+    "
+    className isNil ifTrue:[
+        resourceOwner := aResourceContainer
+    ].
+!
+
+resource
+    "returns form assigned to resource or nil
+    "
+    selector isNil ifTrue:[
+        ^nil
+    ].
+
+    resourceOwner isNil ifTrue:[
+        (    className isNil
+          or:[(resourceOwner := Smalltalk at:className ifAbsent:nil) isNil]
+        ) ifTrue:[
+            ^ nil
+        ]
+    ].
+  ^ resourceOwner visualFor:selector.
+! !
+
+!ResourceRetriever methodsFor:'converting'!
+
+fromLiteralArrayEncoding:anArray
+    "read my values from an encoding.
+    "
+    className     := anArray at: 2.
+    selector      := anArray at: 3.
+
+    anArray size == 4 ifTrue:[
+        labelText := anArray at:4
+    ].
+    resourceOwner := nil.
+
+!
+
+literalArrayEncoding
+    "encode myself as an array, from which a copy of the receiver can be
+     reconstructed with #decodeAsLiteralArray.
+
+     The encoding is: 
+        (#ResourceRetriever className selector)
+
+     or if labelText not nil:
+        (#ResourceRetriever className selector labelText)
+    "
+    labelText isNil ifTrue:[
+        ^ Array with:(self class name) with:className with:selector
+    ] ifFalse:[
+        ^ Array with:(self class name) with:className with:selector with:labelText
+    ].
+
+! !
+
+!ResourceRetriever methodsFor:'testing'!
+
+isDefined
+    "returns true if resource exists
+    "
+    selector notNil ifTrue:[
+        ^ (resourceOwner notNil or:[className notNil])
+    ].
+  ^ false
+!
+
+notDefined
+    "returns false if resource is not defined
+    "
+    self isDefined ifTrue:[^ false ]
+                  ifFalse:[^ true  ]
+! !
+
+!ResourceRetriever class methodsFor:'documentation'!
+
+version
+    ^ '$Header$'
+! !