ResourceRetriever.st
author ca
Mon, 05 Jan 1998 17:48:53 +0100
changeset 397 be1357e3bf7f
parent 378 9057ea063eca
child 399 0822ecf56bf2
permissions -rw-r--r--
checkin from browser

"
 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-Support-UI'
!

!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
"
    ST80 compatibility class.

    The class is not completed yet and certainly not bug free.
    Also, it is not guaranteed that all winSpecs are understood.

    Notice: 
        this class was implemented using protocol information
        from alpha testers, literature and by reading public domain code
        - it may not be complete or compatible to
        the corresponding ST-80 class. 
        If you encounter any incompatibilities, please forward a note 
        describing the incompatibility verbal (i.e. no code) to the ST/X team.

    [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.
!

labelText
    ^ labelText
!

labelText:aText
    labelText := aText
!

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 the value assigned to resource or nil
    "
    |resource|

    (resource := self resource) isNil ifTrue:[
        ^ labelText
    ].

    (labelText notNil and:[resource isImage]) ifTrue:[
        ^ LabelAndIcon icon:resource string:labelText
    ].
  ^ resource

    "Modified: / 31.10.1997 / 12:10:05 / cg"
! !

!ResourceRetriever methodsFor:'accessing resource'!

findGuiResourcesIn:aResourceContainer
    "setup a resource owner
    "
    className isNil ifTrue:[
        resourceOwner := aResourceContainer
    ].
!

resource
    "returns a form assigned to resource or nil
    "
    |img cls appl|

    selector isNil ifTrue:[
        ^nil
    ].

    resourceOwner isNil ifTrue:[
        (resourceOwner := Smalltalk resolveName:className inClass:self class) isNil ifTrue:[
            ^ nil
        ]
    ].

    (resourceOwner respondsTo:#visualFor:) ifTrue:[
        (img := resourceOwner visualFor:selector) notNil ifTrue:[
            ^ img
        ]
    ].

    (resourceOwner respondsTo:selector) ifTrue:[
        ^ resourceOwner perform:selector
    ].

    resourceOwner isClass ifFalse:[
        cls := resourceOwner class.

        (cls respondsTo:selector) ifTrue:[
            ^ cls perform:selector
        ]
    ].
    ^ nil

    "Modified: / 31.10.1997 / 12:09:52 / cg"
! !

!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$'
! !