author | Claus Gittinger <cg@exept.de> |
Thu, 27 Feb 2020 16:08:38 +0100 | |
changeset 4457 | 8c328436fba9 |
parent 4331 | 8ce1534313cc |
permissions | -rw-r--r-- |
4331 | 1 |
"{ Encoding: utf8 }" |
2 |
||
88 | 3 |
" |
4 |
COPYRIGHT (c) 1995 by Claus Gittinger |
|
734 | 5 |
All Rights Reserved |
88 | 6 |
|
7 |
This software is furnished under a license and may be used |
|
8 |
only in accordance with the terms of that license and with the |
|
9 |
inclusion of the above copyright notice. This software may not |
|
10 |
be provided or otherwise made available to, or used by, any |
|
11 |
other person. No title to or ownership of the software is |
|
12 |
hereby transferred. |
|
13 |
" |
|
1389 | 14 |
"{ Package: 'stx:libview2' }" |
15 |
||
3471 | 16 |
"{ NameSpace: Smalltalk }" |
17 |
||
100 | 18 |
WindowBuilder subclass:#UIBuilder |
734 | 19 |
instanceVariableNames:'view currentMenuSelector spec specStack composite lastComponent |
1324 | 20 |
compositeView menuBar isEditing showDefaults isSubBuilder' |
1032 | 21 |
classVariableNames:'' |
223 | 22 |
poolDictionaries:'' |
2361 | 23 |
category:'Interface-Framework' |
66 | 24 |
! |
25 |
||
26 |
!UIBuilder class methodsFor:'documentation'! |
|
27 |
||
125 | 28 |
copyright |
29 |
" |
|
30 |
COPYRIGHT (c) 1995 by Claus Gittinger |
|
734 | 31 |
All Rights Reserved |
125 | 32 |
|
33 |
This software is furnished under a license and may be used |
|
34 |
only in accordance with the terms of that license and with the |
|
35 |
inclusion of the above copyright notice. This software may not |
|
36 |
be provided or otherwise made available to, or used by, any |
|
37 |
other person. No title to or ownership of the software is |
|
38 |
hereby transferred. |
|
39 |
" |
|
88 | 40 |
! |
41 |
||
66 | 42 |
documentation |
43 |
" |
|
775 | 44 |
this class allows parsing windowSpecs as created by ST/X's |
45 |
UIPainter and should be able to handle most of ST-80's specs. |
|
46 |
(and thereby allow to run applications built with this tool). |
|
47 |
However, it is not guaranteed that all of ST-80's winSpecs are understood. |
|
48 |
||
734 | 49 |
It also provides some rudimentary support for building interfaces |
50 |
programatically, by using #newComposite .. #add: .. #endComposite. |
|
51 |
This has been added for ST80-compatibility - we do not recommend using |
|
52 |
that for new ST/X programs. |
|
775 | 53 |
Those were added to allow execution of some PD applications. |
54 |
The programatic building protocol is not complete and certainly not bug free. |
|
223 | 55 |
|
373 | 56 |
Notice: |
775 | 57 |
some of this class was implemented using protocol information |
734 | 58 |
from alpha testers, literature and by reading public domain code |
373 | 59 |
- it may not be complete or compatible to |
60 |
the corresponding ST-80 class. |
|
61 |
If you encounter any incompatibilities, please forward a note |
|
62 |
describing the incompatibility verbal (i.e. no code) to the ST/X team. |
|
63 |
||
775 | 64 |
[instance variables:] |
65 |
view <View> |
|
66 |
temporary - holds the view being built |
|
67 |
when creating components using the |
|
68 |
programmatic building interface. |
|
69 |
||
70 |
currentMenuSelector not yet used |
|
71 |
||
72 |
spec <UISpec> |
|
73 |
temporary - holds the spec being parsed |
|
74 |
when creating components using the |
|
75 |
programmatic building interface. |
|
76 |
||
77 |
specStack <Collection> |
|
78 |
temporary - holds the spec-stack when |
|
79 |
creating composites using newComposite/ |
|
80 |
endComposite, |
|
81 |
while creating components using the |
|
82 |
programmatic building interface. |
|
83 |
||
84 |
composite <SpecCollection> |
|
85 |
temporary - holds the current composite |
|
86 |
when using newComposite/ endComposite, |
|
87 |
while creating components using the |
|
88 |
programmatic building interface. |
|
89 |
||
90 |
lastComponent <View> |
|
91 |
temporary - holds the last component |
|
92 |
being built, |
|
93 |
when creating components using the |
|
94 |
programmatic building interface. |
|
95 |
||
96 |
compositeView <View> |
|
97 |
temporary - holds the current composites |
|
98 |
view, when creating components using the |
|
99 |
programmatic building interface. |
|
100 |
||
101 |
menuBar not yet used |
|
102 |
||
103 |
isEditing <Boolean> |
|
104 |
flag which is set when an interface is built |
|
105 |
by the UIPainter (as opposed to being built |
|
106 |
for the application). |
|
3703 | 107 |
Changes the way aspects are acquired, |
775 | 108 |
(actually, no models are created/set) |
109 |
to prevent false building when no |
|
110 |
real applicationModel is present. |
|
111 |
(as is the case when the painter builds |
|
112 |
components). |
|
113 |
||
223 | 114 |
[author:] |
115 |
Claus Gittinger |
|
66 | 116 |
" |
117 |
! ! |
|
118 |
||
119 |
!UIBuilder class methodsFor:'initialization'! |
|
120 |
||
121 |
initialize |
|
122 |
Verbose := false "/ debugging flag |
|
123 |
! ! |
|
124 |
||
1763 | 125 |
!UIBuilder methodsFor:'Compatibility-VW'! |
734 | 126 |
|
127 |
wrapper |
|
128 |
"ST/X has no wrappers - return the view here" |
|
129 |
||
1207 | 130 |
^ view ? window |
734 | 131 |
|
132 |
"Created: / 3.3.1997 / 18:28:31 / cg" |
|
133 |
"Modified: / 31.10.1997 / 18:42:52 / cg" |
|
134 |
! ! |
|
135 |
||
86 | 136 |
!UIBuilder methodsFor:'accessing'! |
137 |
||
751 | 138 |
isEditing |
2368 | 139 |
"true if building from a GUI builder resource ( UIPainter, ... ), |
140 |
false if building for the real thing. |
|
141 |
If true, no models or actions should be set (no application is running)" |
|
142 |
||
751 | 143 |
^ isEditing ? false |
144 |
! |
|
145 |
||
3861 | 146 |
isEditing:aBoolean |
751 | 147 |
"true if build from a GUI builder resource ( UIPainter, ... ); if true, no |
148 |
models or actions should be set (no application is running) |
|
149 |
" |
|
3861 | 150 |
isEditing := aBoolean |
151 |
||
152 |
"Modified (format): / 04-02-2017 / 21:34:52 / cg" |
|
751 | 153 |
! |
154 |
||
1324 | 155 |
isSubBuilder |
1325 | 156 |
"return true, if this uiBuilder is for a subCanvas (i.e. a subApp) |
157 |
as opposed to a topApp builder" |
|
158 |
||
1324 | 159 |
^ isSubBuilder ? false |
160 |
||
161 |
"Created: / 29.1.2000 / 16:31:31 / cg" |
|
1325 | 162 |
"Modified: / 31.1.2000 / 15:03:09 / cg" |
1324 | 163 |
! |
164 |
||
165 |
isSubBuilder:aBoolean |
|
1325 | 166 |
"set/clear the flag, which states that this uiBuilder is for a subCanvas (i.e. a subApp) |
167 |
as opposed to a topApp builder. The default is false." |
|
168 |
||
1324 | 169 |
isSubBuilder := aBoolean |
170 |
||
171 |
"Created: / 29.1.2000 / 16:31:19 / cg" |
|
1325 | 172 |
"Modified: / 31.1.2000 / 15:03:37 / cg" |
1324 | 173 |
! |
174 |
||
721
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
175 |
menuBar |
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
176 |
"return the value of the instance variable 'menuBar' (automatically generated)" |
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
177 |
|
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
178 |
^ menuBar |
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
179 |
|
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
180 |
"Created: / 27.10.1997 / 16:30:12 / cg" |
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
181 |
! |
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
182 |
|
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
183 |
menuBar:something |
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
184 |
"set the value of the instance variable 'menuBar' (automatically generated)" |
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
185 |
|
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
186 |
menuBar := something. |
1246 | 187 |
self keyboardProcessor menuBar:menuBar. |
721
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
188 |
|
1889d708a951
provide a handle to the applications menuBar
Claus Gittinger <cg@exept.de>
parents:
667
diff
changeset
|
189 |
"Created: / 27.10.1997 / 16:30:13 / cg" |
863 | 190 |
! |
191 |
||
192 |
showDefaults |
|
193 |
"returns true if the builder is in editing mode and the building |
|
194 |
components will build a default contents |
|
195 |
" |
|
196 |
self isEditing ifTrue:[ |
|
197 |
^ showDefaults ? false |
|
198 |
]. |
|
199 |
^ false |
|
200 |
||
201 |
! |
|
202 |
||
203 |
showDefaults:aBool |
|
204 |
"true if the builder is in editing mode and the building |
|
205 |
components will build a default contents |
|
206 |
" |
|
207 |
showDefaults := aBool |
|
1145 | 208 |
! |
209 |
||
210 |
spec |
|
211 |
"return the current spec" |
|
212 |
||
213 |
^ spec |
|
1204 | 214 |
! |
215 |
||
216 |
spec:aSpec |
|
217 |
"set the current spec" |
|
218 |
||
219 |
spec := aSpec |
|
1970 | 220 |
! |
221 |
||
222 |
view |
|
223 |
||
224 |
^view |
|
225 |
! |
|
226 |
||
227 |
view: something |
|
228 |
||
229 |
view := something |
|
230 |
! |
|
231 |
||
232 |
view:viewArg spec:specArg |
|
233 |
"set instance variables (automatically generated)" |
|
234 |
||
235 |
view := viewArg. |
|
236 |
spec := specArg. |
|
86 | 237 |
! ! |
238 |
||
372
6d7718f3d298
more ST-80 compatibility stuff
Claus Gittinger <cg@exept.de>
parents:
367
diff
changeset
|
239 |
!UIBuilder methodsFor:'building'! |
66 | 240 |
|
734 | 241 |
buildFromSpec:aSpecOrSpecArray |
2367
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
242 |
^ self buildWindowFromSpec:aSpecOrSpecArray |
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
243 |
! |
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
244 |
|
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
245 |
buildFromSpec:aSpecArray in:aView |
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
246 |
"build a window hierarchy according to my spec into an existing view" |
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
247 |
|
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
248 |
spec := UISpecification from:aSpecArray. |
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
249 |
^ spec buildViewFor:self in:aView. |
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
250 |
|
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
251 |
"Modified: 3.3.1997 / 18:44:02 / cg" |
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
252 |
! |
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
253 |
|
2497 | 254 |
buildViewForSpec:aSpecOrSpecArray in:aView |
2381 | 255 |
"used when building a subSpec; moved from the UISPec class to here, |
256 |
to allow different behavior in WebBuilder..." |
|
257 |
||
2497 | 258 |
|spec windowSpec| |
2381 | 259 |
|
2497 | 260 |
spec := UISpecification from:aSpecOrSpecArray. |
261 |
spec class == FullSpec ifTrue:[ |
|
262 |
spec component buildViewFor:self in:aView. |
|
263 |
(windowSpec := spec window) notNil ifTrue:[ |
|
2461 | 264 |
aView preferredExtent:(windowSpec bounds extent). |
265 |
"/ notice: this assumes, that the embedded spec's attributes are |
|
266 |
"/ used (for example: bg-color). |
|
267 |
"/ it would be a good idea to add some overwrite mechanism in |
|
268 |
"/ the UISubspecification. |
|
269 |
windowSpec setAttributesIn:aView with:self. |
|
2381 | 270 |
]. |
271 |
] ifFalse:[ |
|
2497 | 272 |
spec buildViewFor:self in:aView. |
2381 | 273 |
]. |
274 |
! |
|
275 |
||
2367
cc70db1e6d78
allow for both a window and a webPage to be built from the same spec
Claus Gittinger <cg@exept.de>
parents:
2361
diff
changeset
|
276 |
buildWindowFromSpec:aSpecOrSpecArray |
2071 | 277 |
spec := UISpecification from:aSpecOrSpecArray. |
734 | 278 |
window notNil ifTrue:[ |
2071 | 279 |
spec buildViewFor:self in:window. |
280 |
] ifFalse:[ |
|
281 |
window := spec buildViewFor:self in:nil. |
|
734 | 282 |
]. |
3944 | 283 |
(windowTitle notNil and:[window isTopView]) ifTrue:[ |
284 |
window label:windowTitle. |
|
3471 | 285 |
]. |
734 | 286 |
^ window |
3944 | 287 |
|
288 |
"Modified: / 17-03-2017 / 17:03:12 / stefan" |
|
734 | 289 |
! |
290 |
||
291 |
doFinalHookup |
|
292 |
||
293 |
"Created: 14.2.1997 / 14:52:27 / cg" |
|
294 |
! |
|
295 |
||
296 |
newSubBuilder |
|
297 |
|builder| |
|
298 |
||
299 |
builder := UIBuilder new. |
|
751 | 300 |
|
301 |
builder isEditing:isEditing. |
|
863 | 302 |
builder showDefaults:showDefaults. |
734 | 303 |
builder bindings:(self bindings). |
304 |
builder application:(self application). |
|
854 | 305 |
"/ builder applicationClass:applicationClass. |
751 | 306 |
^ builder |
2497 | 307 |
! |
308 |
||
309 |
rebuildFromSpec:aSpecOrSpecArray |
|
310 |
"remove what I have and rebuild from a possibily different spec" |
|
311 |
||
312 |
|windowBefore| |
|
313 |
||
314 |
windowBefore := self window. |
|
315 |
windowBefore notNil ifTrue:[ |
|
316 |
windowBefore destroySubViews |
|
317 |
]. |
|
318 |
"/ self buildViewForSpec:aSpecOrSpecArray in:windowBefore. |
|
319 |
self buildFromSpec:aSpecOrSpecArray in:windowBefore. |
|
320 |
windowBefore notNil ifTrue:[ |
|
321 |
windowBefore realizeAllSubViews |
|
322 |
] |
|
734 | 323 |
! ! |
324 |
||
1772 | 325 |
!UIBuilder methodsFor:'building-programatically'! |
734 | 326 |
|
367 | 327 |
add:aSpec |
4331 | 328 |
"ATTN: this adds a spec but returns the created view" |
329 |
||
1359
f40bfb94f862
allow for application to decide what type of
Claus Gittinger <cg@exept.de>
parents:
1325
diff
changeset
|
330 |
|collectedComponents appWinClass| |
478 | 331 |
|
332 |
composite notNil ifTrue:[ |
|
333 |
(collectedComponents := composite collection) isNil ifTrue:[ |
|
334 |
composite collection:(collectedComponents := OrderedCollection new). |
|
335 |
]. |
|
336 |
collectedComponents add:aSpec. |
|
337 |
view := aSpec buildViewWithLayoutFor:self in:compositeView. |
|
338 |
] ifFalse:[ |
|
339 |
spec isNil ifTrue:[ |
|
340 |
spec := FullSpec new. |
|
341 |
]. |
|
342 |
||
343 |
(aSpec isMemberOf:WindowSpec) ifTrue:[ |
|
344 |
spec window:aSpec |
|
345 |
] ifFalse:[ |
|
346 |
((aSpec isMemberOf:ComponentSpec) |
|
347 |
or:[(aSpec isMemberOf:SpecCollection)]) ifTrue:[ |
|
348 |
spec component:aSpec. |
|
349 |
||
350 |
window isNil ifTrue:[ |
|
1359
f40bfb94f862
allow for application to decide what type of
Claus Gittinger <cg@exept.de>
parents:
1325
diff
changeset
|
351 |
application notNil ifTrue:[ |
f40bfb94f862
allow for application to decide what type of
Claus Gittinger <cg@exept.de>
parents:
1325
diff
changeset
|
352 |
appWinClass := application applicationWindowClass |
f40bfb94f862
allow for application to decide what type of
Claus Gittinger <cg@exept.de>
parents:
1325
diff
changeset
|
353 |
] ifFalse:[ |
f40bfb94f862
allow for application to decide what type of
Claus Gittinger <cg@exept.de>
parents:
1325
diff
changeset
|
354 |
appWinClass := ApplicationWindow |
f40bfb94f862
allow for application to decide what type of
Claus Gittinger <cg@exept.de>
parents:
1325
diff
changeset
|
355 |
]. |
f40bfb94f862
allow for application to decide what type of
Claus Gittinger <cg@exept.de>
parents:
1325
diff
changeset
|
356 |
window := appWinClass new. |
734 | 357 |
window extent:300@300. |
478 | 358 |
]. |
359 |
aSpec buildViewWithLayoutFor:self in:window. |
|
360 |
"/ builder window displayBox |
|
361 |
composite := aSpec. |
|
362 |
compositeView := window. |
|
363 |
] ifFalse:[ |
|
364 |
spec component isNil ifTrue:[ |
|
365 |
spec component:SpecCollection new. |
|
366 |
spec component collection:OrderedCollection new. |
|
367 |
]. |
|
734 | 368 |
composite := spec component. |
369 |
window isNil ifTrue:[ |
|
965
04cadbd21aac
use new ApplicationWindow (instead of StandardSystemView)
Claus Gittinger <cg@exept.de>
parents:
917
diff
changeset
|
370 |
window := ApplicationWindow new. |
734 | 371 |
window extent:300@300. |
372 |
]. |
|
373 |
compositeView := window. |
|
478 | 374 |
spec component collection add:aSpec. |
375 |
view := aSpec buildViewWithLayoutFor:self in:compositeView. |
|
376 |
]. |
|
377 |
] |
|
378 |
]. |
|
379 |
||
380 |
lastComponent := view. |
|
367 | 381 |
^ view |
382 |
||
965
04cadbd21aac
use new ApplicationWindow (instead of StandardSystemView)
Claus Gittinger <cg@exept.de>
parents:
917
diff
changeset
|
383 |
"Modified: / 18.6.1998 / 19:09:38 / cg" |
478 | 384 |
! |
385 |
||
386 |
endComposite |
|
734 | 387 |
|entry finishedComposite finishedView| |
478 | 388 |
|
2083 | 389 |
(specStack notEmptyOrNil) ifTrue:[ |
734 | 390 |
finishedComposite := composite. |
391 |
finishedView := compositeView. |
|
392 |
||
393 |
"/ pop |
|
478 | 394 |
entry := specStack removeLast. |
395 |
composite := entry key. |
|
396 |
compositeView := entry value. |
|
734 | 397 |
|
398 |
lastComponent := finishedView. |
|
399 |
^ finishedComposite |
|
478 | 400 |
]. |
2551 | 401 |
self breakPoint:#cg. |
478 | 402 |
^ composite |
403 |
||
734 | 404 |
"Created: / 3.3.1997 / 17:17:43 / cg" |
405 |
"Modified: / 30.10.1997 / 23:28:04 / cg" |
|
478 | 406 |
! |
407 |
||
408 |
endCompositeLayout:layout |
|
734 | 409 |
composite compositeSpec isNil ifTrue:[ |
410 |
composite compositeSpec:(CompositeSpec new). |
|
411 |
]. |
|
412 |
composite compositeSpec layout:layout. |
|
479 | 413 |
compositeView layout:layout. |
478 | 414 |
self endComposite |
415 |
||
734 | 416 |
"Modified: / 30.10.1997 / 23:10:10 / cg" |
479 | 417 |
! |
418 |
||
419 |
endCompositeLayout:layout properties:props |
|
420 |
self endCompositeLayout:layout |
|
421 |
||
422 |
"Created: 3.3.1997 / 22:15:17 / cg" |
|
478 | 423 |
! |
424 |
||
425 |
newComposite |
|
426 |
|newComposite| |
|
427 |
||
734 | 428 |
"/ push the composite being built ... |
478 | 429 |
specStack isNil ifTrue:[ |
430 |
specStack := OrderedCollection new |
|
431 |
]. |
|
432 |
specStack addLast:(composite->compositeView). |
|
734 | 433 |
|
434 |
"/ start creating a new one ... |
|
478 | 435 |
newComposite := CompositeSpecCollection new. |
436 |
newComposite compositeSpec:(CompositeSpec new). |
|
4331 | 437 |
"ATTN: here, add returns the created view" |
478 | 438 |
compositeView := self add:newComposite. |
439 |
composite := newComposite. |
|
440 |
^ compositeView |
|
441 |
||
734 | 442 |
"Created: / 3.3.1997 / 17:15:36 / cg" |
443 |
"Modified: / 1.11.1997 / 02:48:44 / cg" |
|
100 | 444 |
! ! |
86 | 445 |
|
479 | 446 |
!UIBuilder methodsFor:'initialization'! |
447 |
||
448 |
setupWindowFor:aView |
|
449 |
|ext| |
|
450 |
||
451 |
window notNil ifTrue:[ |
|
452 |
ext := window extent. |
|
453 |
||
3471 | 454 |
((window isMemberOf:View) or:[window isMemberOf:SimpleView]) ifTrue:[ |
479 | 455 |
aView addSubView:window. |
456 |
]. |
|
457 |
]. |
|
458 |
||
459 |
window := aView. |
|
460 |
||
3740 | 461 |
(aView container isNil and:[spec notNil]) ifTrue:[ |
462 |
spec window setupView:window for:self |
|
479 | 463 |
]. |
464 |
||
775 | 465 |
"Modified: / 27.1.1998 / 12:27:45 / cg" |
479 | 466 |
! ! |
467 |
||
132 | 468 |
!UIBuilder class methodsFor:'documentation'! |
469 |
||
470 |
version |
|
3703 | 471 |
^ '$Header$' |
132 | 472 |
! ! |
1763 | 473 |
|
3471 | 474 |
|
100 | 475 |
UIBuilder initialize! |