ScrollableView subclass:#SubCanvas
instanceVariableNames:'builder spec client clientHolder specHolder'
classVariableNames:''
poolDictionaries:''
category:'Views-Basic'
!
!SubCanvas methodsFor:'accessing'!
builder
"return the value of the instance variable 'builder' (automatically generated)"
^ builder!
client
"return the value of the instance variable 'client' (automatically generated)"
^ client!
client:anApplicationModel
"release existing components and generate new components from
the applications windowSpec."
^ self client:anApplicationModel spec:#windowSpec
!
client:anApplication spec:aWindowSpecOrSelector
"release existing components and generate new components from
the applications windowSpec."
|aBuilder|
(anApplication notNil and:[anApplication respondsTo:#builder]) ifTrue:[
aBuilder := anApplication builder
] ifFalse:[
aBuilder := UIBuilder new
].
^ self client:anApplication spec:aWindowSpecOrSelector builder:aBuilder
!
client:anApplication spec:aWindowSpecOrSpecSymbol builder:aBuilder
"release existing components and generate new components from
the given windowSpec, using the given builder."
builder := aBuilder.
spec := aWindowSpecOrSpecSymbol.
"/ check for master application
(anApplication notNil and:[anApplication masterApplication isNil]) ifTrue:[
client := nil.
client := self application.
client ~~ anApplication ifTrue:[
anApplication masterApplication:client
]
].
client := anApplication.
self rebuild.
^ builder
!
spec
"return the value of the instance variable 'spec' (automatically generated)"
^ spec!
spec:something
"set the value of the instance variable 'spec' (automatically generated)"
spec := something.
self rebuild.
! !
!SubCanvas methodsFor:'accessing channels'!
clientHolder
^ clientHolder
!
clientHolder:aValueHolder
clientHolder notNil ifTrue:[
clientHolder removeDependent:self
].
(clientHolder := aValueHolder) notNil ifTrue:[
clientHolder addDependent:self
].
self updateFromChannels
!
specHolder
^ specHolder
!
specHolder:aValueHolder
specHolder notNil ifTrue:[
specHolder removeDependent:self
].
(specHolder := aValueHolder) notNil ifTrue:[
specHolder addDependent:self
].
self updateFromChannels
! !
!SubCanvas methodsFor:'building'!
rebuild
"rebuild
"
|win|
scrolledView notNil ifTrue:[
scrolledView destroySubViews
].
spec notNil ifTrue:[
(win := spec) isSymbol ifTrue:[
client isNil ifTrue:[
^ self
].
(win := client class interfaceSpecFor:spec) isNil ifTrue:[
^ self
]
].
builder isNil ifTrue:[
builder := UIBuilder new
].
builder buildFromSpec:win in:scrolledView.
self realized ifTrue:[
scrolledView realizeAllSubViews
]
]
!
releaseAllComponents
scrolledView destroySubViews.
builder := nil.
spec := nil.
client := nil.
! !
!SubCanvas methodsFor:'change & update'!
update:something with:aParameter from:changedObject
"one of my models changed its value
"
(changedObject == clientHolder or:[changedObject == specHolder]) ifTrue:[
self updateFromChannels
] ifFalse:[
super update:something with:aParameter from:changedObject.
]
!
updateFromChannels
"update canvas from channel
"
|client spec|
clientHolder isNil ifTrue:[
client := self application
] ifFalse:[
client := clientHolder value
].
specHolder isNil ifTrue:[
spec := #windowSpec
] ifFalse:[
spec := specHolder value
].
(client notNil and:[spec notNil]) ifTrue:[
self client:client spec:spec
] ifFalse:[
self client:nil
]
! !
!SubCanvas methodsFor:'initialization'!
initialize
super initialize.
self scrolledView:View new.
spec := #windowSpec.
! !
!SubCanvas methodsFor:'queries'!
application
"return the application, under which this view was opened,
"
client notNil ifTrue:[
^ client
].
^ super application
! !
!SubCanvas class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libwidg2/SubCanvas.st,v 1.5 1997-10-15 10:31:52 ca Exp $'
! !