SubCanvas.st
author ca
Wed, 15 Oct 1997 12:31:52 +0200
changeset 557 7cf5f021983d
parent 554 c32ed45bfc6e
child 609 ad75d5f13ca1
permissions -rw-r--r--
add method: #updateFromChannels
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
ScrollableView subclass:#SubCanvas
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
     2
	instanceVariableNames:'builder spec client clientHolder specHolder'
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
	classVariableNames:''
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	poolDictionaries:''
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	category:'Views-Basic'
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
!
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
!SubCanvas methodsFor:'accessing'!
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    11
builder
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    12
    "return the value of the instance variable 'builder' (automatically generated)"
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    14
    ^ builder!
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    16
client
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    17
    "return the value of the instance variable 'client' (automatically generated)"
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    19
    ^ client!
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
client:anApplicationModel
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
    "release existing components and generate new components from
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
     the applications windowSpec."
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
    ^ self client:anApplicationModel spec:#windowSpec
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
!
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    28
client:anApplication spec:aWindowSpecOrSelector
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
    "release existing components and generate new components from
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
     the applications windowSpec."
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    32
    |aBuilder|
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    34
    (anApplication notNil and:[anApplication respondsTo:#builder]) ifTrue:[
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    35
        aBuilder := anApplication builder
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
    ] ifFalse:[
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    37
        aBuilder := UIBuilder new
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
    ].
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    39
  ^ self client:anApplication spec:aWindowSpecOrSelector builder:aBuilder
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
!
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    42
client:anApplication spec:aWindowSpecOrSpecSymbol builder:aBuilder
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    "release existing components and generate new components from
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
     the given windowSpec, using the given builder."
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    46
    builder  := aBuilder.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    47
    spec     := aWindowSpecOrSpecSymbol.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    48
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    49
    "/ check for master application
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    50
    (anApplication notNil and:[anApplication masterApplication isNil]) ifTrue:[
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    51
        client := nil.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    52
        client := self application.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    53
        client ~~ anApplication ifTrue:[
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    54
            anApplication masterApplication:client
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    55
        ]
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    56
    ].
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    57
    client := anApplication.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    58
    self rebuild.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    59
  ^ builder
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    60
!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    61
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    62
spec
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    63
    "return the value of the instance variable 'spec' (automatically generated)"
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    64
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    65
    ^ spec!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    66
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    67
spec:something
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    68
    "set the value of the instance variable 'spec' (automatically generated)"
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    69
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    70
    spec := something.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    71
    self rebuild.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    72
! !
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    73
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    74
!SubCanvas methodsFor:'accessing channels'!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    75
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    76
clientHolder
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    77
    ^ clientHolder
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    78
!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    79
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    80
clientHolder:aValueHolder
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    81
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    82
    clientHolder notNil ifTrue:[
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    83
        clientHolder removeDependent:self
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    84
    ].
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    85
    (clientHolder := aValueHolder) notNil ifTrue:[
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    86
        clientHolder addDependent:self
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    87
    ].
557
7cf5f021983d add method:
ca
parents: 554
diff changeset
    88
    self updateFromChannels
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    89
!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    90
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    91
specHolder
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    92
    ^ specHolder
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    93
!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    94
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    95
specHolder:aValueHolder
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    96
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    97
    specHolder notNil ifTrue:[
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    98
        specHolder removeDependent:self
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
    99
    ].
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   100
    (specHolder := aValueHolder) notNil ifTrue:[
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   101
        specHolder addDependent:self
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   102
    ].
557
7cf5f021983d add method:
ca
parents: 554
diff changeset
   103
    self updateFromChannels
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   104
! !
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   105
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   106
!SubCanvas methodsFor:'building'!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   107
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   108
rebuild
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   109
    "rebuild
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   110
    "
554
c32ed45bfc6e bug fixes for spec derived from channel
ca
parents: 553
diff changeset
   111
    |win|
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    scrolledView notNil ifTrue:[
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
        scrolledView destroySubViews
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    ].
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    spec notNil ifTrue:[
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   118
        (win := spec) isSymbol ifTrue:[
554
c32ed45bfc6e bug fixes for spec derived from channel
ca
parents: 553
diff changeset
   119
            client isNil ifTrue:[
c32ed45bfc6e bug fixes for spec derived from channel
ca
parents: 553
diff changeset
   120
                ^ self
553
3535a0682ac7 spec channel changed: if client is nil, try
ca
parents: 503
diff changeset
   121
            ].
554
c32ed45bfc6e bug fixes for spec derived from channel
ca
parents: 553
diff changeset
   122
            (win := client class interfaceSpecFor:spec) isNil ifTrue:[
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   123
                ^ self
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   124
            ]
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   125
        ].
554
c32ed45bfc6e bug fixes for spec derived from channel
ca
parents: 553
diff changeset
   126
        builder isNil ifTrue:[
c32ed45bfc6e bug fixes for spec derived from channel
ca
parents: 553
diff changeset
   127
            builder := UIBuilder new
c32ed45bfc6e bug fixes for spec derived from channel
ca
parents: 553
diff changeset
   128
        ].
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   129
        builder buildFromSpec:win in:scrolledView.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   130
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   131
        self realized ifTrue:[
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   132
            scrolledView realizeAllSubViews
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   133
        ]
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   134
    ]
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   135
!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   136
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   137
releaseAllComponents
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   138
    scrolledView destroySubViews.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   139
    builder := nil.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   140
    spec    := nil.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   141
    client  := nil.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   142
! !
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   143
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   144
!SubCanvas methodsFor:'change & update'!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   145
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   146
update:something with:aParameter from:changedObject
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   147
    "one of my models changed its value
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   148
    "
557
7cf5f021983d add method:
ca
parents: 554
diff changeset
   149
    (changedObject == clientHolder or:[changedObject == specHolder]) ifTrue:[
7cf5f021983d add method:
ca
parents: 554
diff changeset
   150
        self updateFromChannels
7cf5f021983d add method:
ca
parents: 554
diff changeset
   151
    ] ifFalse:[
7cf5f021983d add method:
ca
parents: 554
diff changeset
   152
        super update:something with:aParameter from:changedObject.
7cf5f021983d add method:
ca
parents: 554
diff changeset
   153
    ]
7cf5f021983d add method:
ca
parents: 554
diff changeset
   154
7cf5f021983d add method:
ca
parents: 554
diff changeset
   155
!
7cf5f021983d add method:
ca
parents: 554
diff changeset
   156
7cf5f021983d add method:
ca
parents: 554
diff changeset
   157
updateFromChannels
7cf5f021983d add method:
ca
parents: 554
diff changeset
   158
    "update canvas from channel
7cf5f021983d add method:
ca
parents: 554
diff changeset
   159
    "
7cf5f021983d add method:
ca
parents: 554
diff changeset
   160
    |client spec|
7cf5f021983d add method:
ca
parents: 554
diff changeset
   161
7cf5f021983d add method:
ca
parents: 554
diff changeset
   162
    clientHolder isNil ifTrue:[
7cf5f021983d add method:
ca
parents: 554
diff changeset
   163
        client := self application
7cf5f021983d add method:
ca
parents: 554
diff changeset
   164
    ] ifFalse:[
7cf5f021983d add method:
ca
parents: 554
diff changeset
   165
        client := clientHolder value
554
c32ed45bfc6e bug fixes for spec derived from channel
ca
parents: 553
diff changeset
   166
    ].
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   167
557
7cf5f021983d add method:
ca
parents: 554
diff changeset
   168
    specHolder isNil ifTrue:[
7cf5f021983d add method:
ca
parents: 554
diff changeset
   169
        spec := #windowSpec
7cf5f021983d add method:
ca
parents: 554
diff changeset
   170
    ] ifFalse:[
7cf5f021983d add method:
ca
parents: 554
diff changeset
   171
        spec := specHolder value
7cf5f021983d add method:
ca
parents: 554
diff changeset
   172
    ].
7cf5f021983d add method:
ca
parents: 554
diff changeset
   173
    (client notNil and:[spec notNil]) ifTrue:[
7cf5f021983d add method:
ca
parents: 554
diff changeset
   174
        self client:client spec:spec
7cf5f021983d add method:
ca
parents: 554
diff changeset
   175
    ] ifFalse:[
7cf5f021983d add method:
ca
parents: 554
diff changeset
   176
        self client:nil
7cf5f021983d add method:
ca
parents: 554
diff changeset
   177
    ]
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   178
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   179
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   180
! !
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   181
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   182
!SubCanvas methodsFor:'initialization'!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   183
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   184
initialize
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   185
    super initialize.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   186
    self scrolledView:View new.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   187
    spec := #windowSpec.
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   188
! !
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   189
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   190
!SubCanvas methodsFor:'queries'!
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   191
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   192
application
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   193
    "return the application, under which this view was opened,
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   194
    "
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   195
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   196
    client notNil ifTrue:[
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   197
        ^ client
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
    ].
503
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   199
    ^ super application
0a3ef2d34d9d add application holder
ca
parents: 455
diff changeset
   200
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
! !
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
!SubCanvas class methodsFor:'documentation'!
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
version
557
7cf5f021983d add method:
ca
parents: 554
diff changeset
   206
    ^ '$Header: /cvs/stx/stx/libwidg2/SubCanvas.st,v 1.5 1997-10-15 10:31:52 ca Exp $'
455
860d66c9f047 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
! !