UIBuilder.st
author Claus Gittinger <cg@exept.de>
Sun, 29 Oct 1995 20:36:22 +0100
changeset 109 9e1383121df4
parent 100 0300e64bb883
child 114 e577a2f332d0
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
88
claus
parents: 86
diff changeset
     1
"
claus
parents: 86
diff changeset
     2
 COPYRIGHT (c) 1995 by Claus Gittinger
100
claus
parents: 96
diff changeset
     3
	      All Rights Reserved
88
claus
parents: 86
diff changeset
     4
claus
parents: 86
diff changeset
     5
 This software is furnished under a license and may be used
claus
parents: 86
diff changeset
     6
 only in accordance with the terms of that license and with the
claus
parents: 86
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
claus
parents: 86
diff changeset
     8
 be provided or otherwise made available to, or used by, any
claus
parents: 86
diff changeset
     9
 other person.  No title to or ownership of the software is
claus
parents: 86
diff changeset
    10
 hereby transferred.
claus
parents: 86
diff changeset
    11
"
claus
parents: 86
diff changeset
    12
100
claus
parents: 96
diff changeset
    13
'From Smalltalk/X, Version:2.10.7 on 7-sep-1995 at 10:06:32 pm'                 !
66
claus
parents:
diff changeset
    14
100
claus
parents: 96
diff changeset
    15
WindowBuilder subclass:#UIBuilder
claus
parents: 96
diff changeset
    16
	 instanceVariableNames:'view currentMenuSelector menuAspect spec'
66
claus
parents:
diff changeset
    17
	 classVariableNames:'Verbose'
claus
parents:
diff changeset
    18
	 poolDictionaries:''
80
claus
parents: 75
diff changeset
    19
	 category:'Interface-Support-UI'
66
claus
parents:
diff changeset
    20
!
claus
parents:
diff changeset
    21
claus
parents:
diff changeset
    22
!UIBuilder class methodsFor:'documentation'!
claus
parents:
diff changeset
    23
88
claus
parents: 86
diff changeset
    24
version
claus
parents: 86
diff changeset
    25
"
100
claus
parents: 96
diff changeset
    26
$Header: /cvs/stx/stx/libview2/UIBuilder.st,v 1.8 1995-09-09 02:30:09 claus Exp $
88
claus
parents: 86
diff changeset
    27
"
claus
parents: 86
diff changeset
    28
!
claus
parents: 86
diff changeset
    29
66
claus
parents:
diff changeset
    30
documentation
claus
parents:
diff changeset
    31
"
claus
parents:
diff changeset
    32
    this class will (eventually) allow parsing windowSpecs as
claus
parents:
diff changeset
    33
    created by ST-80's UIPainter, and thereby allow to run applications
claus
parents:
diff changeset
    34
    built with this tool.
claus
parents:
diff changeset
    35
    It was created to allow execution of PD applications which were
claus
parents:
diff changeset
    36
    written using that tool (and more and more are appearing ...).
claus
parents:
diff changeset
    37
claus
parents:
diff changeset
    38
    The class is not completed yet and certainly not bug free.
claus
parents:
diff changeset
    39
    Also, it is not quaranteed that all winSpecs are understood.
claus
parents:
diff changeset
    40
"
100
claus
parents: 96
diff changeset
    41
!
claus
parents: 96
diff changeset
    42
claus
parents: 96
diff changeset
    43
copyright
claus
parents: 96
diff changeset
    44
"
claus
parents: 96
diff changeset
    45
 COPYRIGHT (c) 1995 by Claus Gittinger
claus
parents: 96
diff changeset
    46
	      All Rights Reserved
claus
parents: 96
diff changeset
    47
claus
parents: 96
diff changeset
    48
 This software is furnished under a license and may be used
claus
parents: 96
diff changeset
    49
 only in accordance with the terms of that license and with the
claus
parents: 96
diff changeset
    50
 inclusion of the above copyright notice.   This software may not
claus
parents: 96
diff changeset
    51
 be provided or otherwise made available to, or used by, any
claus
parents: 96
diff changeset
    52
 other person.  No title to or ownership of the software is
claus
parents: 96
diff changeset
    53
 hereby transferred.
claus
parents: 96
diff changeset
    54
"
66
claus
parents:
diff changeset
    55
! !
claus
parents:
diff changeset
    56
claus
parents:
diff changeset
    57
!UIBuilder class methodsFor:'initialization'!
claus
parents:
diff changeset
    58
claus
parents:
diff changeset
    59
initialize
claus
parents:
diff changeset
    60
    Verbose := false    "/ debugging flag
claus
parents:
diff changeset
    61
! !
claus
parents:
diff changeset
    62
86
claus
parents: 80
diff changeset
    63
!UIBuilder methodsFor:'accessing'!
claus
parents: 80
diff changeset
    64
claus
parents: 80
diff changeset
    65
menuAspect
claus
parents: 80
diff changeset
    66
    ^ menuAspect
claus
parents: 80
diff changeset
    67
! !
claus
parents: 80
diff changeset
    68
66
claus
parents:
diff changeset
    69
!UIBuilder methodsFor:'operation'!
claus
parents:
diff changeset
    70
100
claus
parents: 96
diff changeset
    71
buildFromSpec:aSpecArray in:aView
claus
parents: 96
diff changeset
    72
    |m spec|
86
claus
parents: 80
diff changeset
    73
100
claus
parents: 96
diff changeset
    74
    spec := UISpecification from:aSpecArray.
claus
parents: 96
diff changeset
    75
claus
parents: 96
diff changeset
    76
    view := spec buildViewFor:self in:aView.
86
claus
parents: 80
diff changeset
    77
claus
parents: 80
diff changeset
    78
    menuAspect notNil ifTrue:[
100
claus
parents: 96
diff changeset
    79
        m := self componentAt:menuAspect.
claus
parents: 96
diff changeset
    80
        m notNil ifTrue:[
claus
parents: 96
diff changeset
    81
            m := m value.
claus
parents: 96
diff changeset
    82
            m notNil ifTrue:[
claus
parents: 96
diff changeset
    83
                m receiver:application.
claus
parents: 96
diff changeset
    84
                topView add:m.
claus
parents: 96
diff changeset
    85
                view topInset:(m heightIncludingBorder).
claus
parents: 96
diff changeset
    86
            ]
claus
parents: 96
diff changeset
    87
        ]
86
claus
parents: 80
diff changeset
    88
    ].
claus
parents: 80
diff changeset
    89
66
claus
parents:
diff changeset
    90
    ^ topView
claus
parents:
diff changeset
    91
100
claus
parents: 96
diff changeset
    92
    "Modified: 5.9.1995 / 21:48:09 / claus"
66
claus
parents:
diff changeset
    93
!
claus
parents:
diff changeset
    94
100
claus
parents: 96
diff changeset
    95
buildFromSpec:aSpecArray
claus
parents: 96
diff changeset
    96
    |m spec|
claus
parents: 96
diff changeset
    97
claus
parents: 96
diff changeset
    98
"/ old:
claus
parents: 96
diff changeset
    99
"/    self readSpec:aSpecArray.
claus
parents: 96
diff changeset
   100
claus
parents: 96
diff changeset
   101
    spec := UISpecification from:aSpecArray.
claus
parents: 96
diff changeset
   102
    topView := view := spec buildViewFor:self.
claus
parents: 96
diff changeset
   103
claus
parents: 96
diff changeset
   104
    menuAspect notNil ifTrue:[
claus
parents: 96
diff changeset
   105
        m := self componentAt:menuAspect.
claus
parents: 96
diff changeset
   106
        m notNil ifTrue:[
claus
parents: 96
diff changeset
   107
            m := m value.
claus
parents: 96
diff changeset
   108
            m notNil ifTrue:[
claus
parents: 96
diff changeset
   109
                m receiver:application.
claus
parents: 96
diff changeset
   110
                topView add:m.
claus
parents: 96
diff changeset
   111
                view topInset:(m heightIncludingBorder).
claus
parents: 96
diff changeset
   112
            ]
claus
parents: 96
diff changeset
   113
        ]
86
claus
parents: 80
diff changeset
   114
    ].
claus
parents: 80
diff changeset
   115
100
claus
parents: 96
diff changeset
   116
    ^ topView
66
claus
parents:
diff changeset
   117
100
claus
parents: 96
diff changeset
   118
    "Modified: 5.9.1995 / 21:43:29 / claus"
claus
parents: 96
diff changeset
   119
! !
86
claus
parents: 80
diff changeset
   120
100
claus
parents: 96
diff changeset
   121
!UIBuilder methodsFor:'private arg parsing'!
66
claus
parents:
diff changeset
   122
100
claus
parents: 96
diff changeset
   123
getLayoutFrame:spec
claus
parents: 96
diff changeset
   124
    "called for #(LayoutFrame absOrgX relOrgX absOrgY relOrgY absCornX relCornX absCornY relCornY)"
claus
parents: 96
diff changeset
   125
    "             1           2       3       4        5      6        7        8        9"
86
claus
parents: 80
diff changeset
   126
100
claus
parents: 96
diff changeset
   127
    ^ LayoutFrame new fromLiteralArrayEncoding:spec.
86
claus
parents: 80
diff changeset
   128
100
claus
parents: 96
diff changeset
   129
"/    ^ Array with:#layoutFrame
claus
parents: 96
diff changeset
   130
"/            with:((spec at:2) @ (spec at:4))     "/ org inset
claus
parents: 96
diff changeset
   131
"/            with:((spec at:6) @ (spec at:8))     "/ corner inset
claus
parents: 96
diff changeset
   132
"/            with:((spec at:3) @ (spec at:5))     "/ rel org
claus
parents: 96
diff changeset
   133
"/            with:((spec at:7) @ (spec at:9))     "/ rel corn 
66
claus
parents:
diff changeset
   134
claus
parents:
diff changeset
   135
!
claus
parents:
diff changeset
   136
100
claus
parents: 96
diff changeset
   137
getArg:spec
claus
parents: 96
diff changeset
   138
    "take something like #(Point 50 100) and return the value"
86
claus
parents: 80
diff changeset
   139
100
claus
parents: 96
diff changeset
   140
    |what|
86
claus
parents: 80
diff changeset
   141
100
claus
parents: 96
diff changeset
   142
    what := spec at:1.
claus
parents: 96
diff changeset
   143
    ^ self perform:('get' , what , ':') asSymbol with:spec
86
claus
parents: 80
diff changeset
   144
!
claus
parents: 80
diff changeset
   145
100
claus
parents: 96
diff changeset
   146
getRectangle:spec
claus
parents: 96
diff changeset
   147
    "called for #(Rectangle x y)"
86
claus
parents: 80
diff changeset
   148
100
claus
parents: 96
diff changeset
   149
    ^ Array with:#rectangle
claus
parents: 96
diff changeset
   150
	    with:(((spec at:2) @ (spec at:3)) corner:((spec at:4) @ (spec at:5)))
86
claus
parents: 80
diff changeset
   151
!
claus
parents: 80
diff changeset
   152
100
claus
parents: 96
diff changeset
   153
getPoint:spec
claus
parents: 96
diff changeset
   154
    "called for #(Point x y)"
66
claus
parents:
diff changeset
   155
100
claus
parents: 96
diff changeset
   156
    ^ Array with:#point 
claus
parents: 96
diff changeset
   157
	    with:((spec at:2) @ (spec at:3))
66
claus
parents:
diff changeset
   158
!
claus
parents:
diff changeset
   159
100
claus
parents: 96
diff changeset
   160
getLayoutOrigin:spec
claus
parents: 96
diff changeset
   161
    "called for #(LayoutOrigin xInset relX yInset relY)"
66
claus
parents:
diff changeset
   162
100
claus
parents: 96
diff changeset
   163
    ^ LayoutOrigin new fromLiteralArrayEncoding:spec.
claus
parents: 96
diff changeset
   164
"/    ^ Array with:#layoutOrigin
claus
parents: 96
diff changeset
   165
"/            with:((spec at:3) @ (spec at:5))     "/ rels
claus
parents: 96
diff changeset
   166
"/            with:((spec at:2) @ (spec at:4))     "/ insets
66
claus
parents:
diff changeset
   167
!
claus
parents:
diff changeset
   168
100
claus
parents: 96
diff changeset
   169
getCompositeSpec:spec
claus
parents: 96
diff changeset
   170
    "called for #(CompositeSpec layout: #(orgx orgy cornx corny)"
claus
parents: 96
diff changeset
   171
claus
parents: 96
diff changeset
   172
    |layout|
66
claus
parents:
diff changeset
   173
100
claus
parents: 96
diff changeset
   174
    (spec at:2) == #layout: ifTrue:[
claus
parents: 96
diff changeset
   175
	layout := spec at:3.
claus
parents: 96
diff changeset
   176
	(layout at:1) == #Rectangle ifTrue:[
claus
parents: 96
diff changeset
   177
	    ^ Rectangle
claus
parents: 96
diff changeset
   178
		    origin:(layout at:2) @ (layout at:3)
claus
parents: 96
diff changeset
   179
		    corner:(layout at:4) @ (layout at:5)
claus
parents: 96
diff changeset
   180
	].
66
claus
parents:
diff changeset
   181
    ].
100
claus
parents: 96
diff changeset
   182
    self halt:'unimplemented'.
66
claus
parents:
diff changeset
   183
!
claus
parents:
diff changeset
   184
100
claus
parents: 96
diff changeset
   185
getAlignmentOrigin:spec
claus
parents: 96
diff changeset
   186
    "called for #(AlignmentOrigin ?x ?relX ?x ?y ?relY ?y)"
66
claus
parents:
diff changeset
   187
100
claus
parents: 96
diff changeset
   188
    ^ AlignmentOrigin new fromLiteralArrayEncoding:spec.
claus
parents: 96
diff changeset
   189
"/    ^ Array with:#alignmentOrigin
claus
parents: 96
diff changeset
   190
"/            with:((spec at:2) @ (spec at:5))     "/ ?
claus
parents: 96
diff changeset
   191
"/            with:((spec at:3) @ (spec at:6))     "/ rels ?
claus
parents: 96
diff changeset
   192
"/            with:((spec at:4) @ (spec at:7))     "/ insets ?
66
claus
parents:
diff changeset
   193
!
claus
parents:
diff changeset
   194
100
claus
parents: 96
diff changeset
   195
getLookPreferences:spec
claus
parents: 96
diff changeset
   196
    "called for #(LookPreferences setForegroundColor: (...) setBackgroundColor: (...) ...)"
66
claus
parents:
diff changeset
   197
100
claus
parents: 96
diff changeset
   198
    |coll|
66
claus
parents:
diff changeset
   199
100
claus
parents: 96
diff changeset
   200
    coll := OrderedCollection new.
claus
parents: 96
diff changeset
   201
    2 to:spec size by:2 do:[:index |
claus
parents: 96
diff changeset
   202
	coll add: 
claus
parents: 96
diff changeset
   203
	    (Array with:(spec at:index)
claus
parents: 96
diff changeset
   204
		  with:(self getArg:(spec at:index+1)))
claus
parents: 96
diff changeset
   205
    ].
claus
parents: 96
diff changeset
   206
    ^ coll.
66
claus
parents:
diff changeset
   207
!
claus
parents:
diff changeset
   208
100
claus
parents: 96
diff changeset
   209
getColorValue:spec
claus
parents: 96
diff changeset
   210
    "called for #(ColorValue #sym)
claus
parents: 96
diff changeset
   211
	     or #(ColorValue red green blue)"
66
claus
parents:
diff changeset
   212
100
claus
parents: 96
diff changeset
   213
    |clr arg|
66
claus
parents:
diff changeset
   214
100
claus
parents: 96
diff changeset
   215
    (arg := spec at:2) isSymbol ifTrue:[
claus
parents: 96
diff changeset
   216
	(Color respondsTo:arg) ifTrue:[
claus
parents: 96
diff changeset
   217
	    ^ Color perform:arg
claus
parents: 96
diff changeset
   218
	].
claus
parents: 96
diff changeset
   219
	^ Color name:arg asString ifIllegal:[Color black]
claus
parents: 96
diff changeset
   220
    ].
claus
parents: 96
diff changeset
   221
    arg isInteger ifTrue:[
claus
parents: 96
diff changeset
   222
	^ ColorValue scaledRed:arg
claus
parents: 96
diff changeset
   223
		     scaledGreen:(spec at:3)
claus
parents: 96
diff changeset
   224
		     scaledBlue:(spec at:4)
claus
parents: 96
diff changeset
   225
    ].
claus
parents: 96
diff changeset
   226
    ^ ColorValue red:arg
claus
parents: 96
diff changeset
   227
		 green:(spec at:3)
claus
parents: 96
diff changeset
   228
		 blue:(spec at:4)
66
claus
parents:
diff changeset
   229
claus
parents:
diff changeset
   230
claus
parents:
diff changeset
   231
! !
claus
parents:
diff changeset
   232
claus
parents:
diff changeset
   233
!UIBuilder methodsFor:'private spec attribute parsing'!
claus
parents:
diff changeset
   234
claus
parents:
diff changeset
   235
yCollection:args view:aView frame:frameView
claus
parents:
diff changeset
   236
    args do:[:aSpec |
claus
parents:
diff changeset
   237
	self readSpec:aSpec view:aView frame:frameView.
claus
parents:
diff changeset
   238
    ].
claus
parents:
diff changeset
   239
!
claus
parents:
diff changeset
   240
claus
parents:
diff changeset
   241
yLayout:args view:aView frame:frameView
claus
parents:
diff changeset
   242
    |value r org corn orgInset cornInset what|
claus
parents:
diff changeset
   243
claus
parents:
diff changeset
   244
    value := self getArg:args.
100
claus
parents: 96
diff changeset
   245
    value isLayout ifTrue:[
claus
parents: 96
diff changeset
   246
	frameView geometryLayout:value.
claus
parents: 96
diff changeset
   247
	^ self
claus
parents: 96
diff changeset
   248
    ].
66
claus
parents:
diff changeset
   249
claus
parents:
diff changeset
   250
    what := value at:1.
claus
parents:
diff changeset
   251
    what == #point ifTrue:[
claus
parents:
diff changeset
   252
	Verbose ifTrue:[frameView print. ' ' print. 'origin: ' print. (value at:2) printNL].
claus
parents:
diff changeset
   253
	frameView origin:(value at:2).
claus
parents:
diff changeset
   254
	^ self
claus
parents:
diff changeset
   255
    ].
claus
parents:
diff changeset
   256
    what == #rectangle ifTrue:[
claus
parents:
diff changeset
   257
	r := value at:2.
claus
parents:
diff changeset
   258
	Verbose ifTrue:[
claus
parents:
diff changeset
   259
	    frameView print. ' ' print. 'origin: ' print. r origin print.
claus
parents:
diff changeset
   260
			     ' corner: ' print. r corner printNL.
claus
parents:
diff changeset
   261
	].
claus
parents:
diff changeset
   262
	frameView origin:r origin corner:r corner.
claus
parents:
diff changeset
   263
	^ self
claus
parents:
diff changeset
   264
    ].
claus
parents:
diff changeset
   265
    what == #layoutOrigin ifTrue:[
claus
parents:
diff changeset
   266
	"/ #layoutOrigin relOrg orgInset
claus
parents:
diff changeset
   267
	org := value at:2.       "/ relative origin
claus
parents:
diff changeset
   268
	org := org x asFloat @ org y asFloat.
claus
parents:
diff changeset
   269
	orgInset := self fixExtentFor:(value at:3).
claus
parents:
diff changeset
   270
	Verbose ifTrue:[
claus
parents:
diff changeset
   271
	    frameView print. ' ' print. 'origin: ' print. org printNL
claus
parents:
diff changeset
   272
	].
claus
parents:
diff changeset
   273
	frameView origin:org.
claus
parents:
diff changeset
   274
	frameView 
claus
parents:
diff changeset
   275
	      leftInset:orgInset x;
claus
parents:
diff changeset
   276
	      topInset:orgInset y.
claus
parents:
diff changeset
   277
	^ self
claus
parents:
diff changeset
   278
    ].
claus
parents:
diff changeset
   279
    what == #layoutFrame ifTrue:[
claus
parents:
diff changeset
   280
	"/ #layoutFrame orgInset cornInset relOrg relCorner
claus
parents:
diff changeset
   281
claus
parents:
diff changeset
   282
	org := value at:4.       "/ relative origin
claus
parents:
diff changeset
   283
	orgInset := self fixExtentFor:(value at:2).
claus
parents:
diff changeset
   284
claus
parents:
diff changeset
   285
	org := org x asFloat @ org y asFloat.
claus
parents:
diff changeset
   286
"/        org = (0@0) ifTrue:[
claus
parents:
diff changeset
   287
"/            org := value at:2    "/ absolute origin
claus
parents:
diff changeset
   288
"/        ].
claus
parents:
diff changeset
   289
claus
parents:
diff changeset
   290
	corn := value at:5.      "/ relative corner
claus
parents:
diff changeset
   291
	cornInset := self fixExtentFor:(value at:3).
claus
parents:
diff changeset
   292
	corn := corn x asFloat @ corn y asFloat.
claus
parents:
diff changeset
   293
"/        corn = (0@0) ifTrue:[
claus
parents:
diff changeset
   294
"/            corn := value at:3   "/ absolute corner
claus
parents:
diff changeset
   295
"/        ].
claus
parents:
diff changeset
   296
	Verbose ifTrue:[
claus
parents:
diff changeset
   297
	    frameView print. ' ' print. 'origin: ' print. org print.
claus
parents:
diff changeset
   298
			     ' corner: ' print. corn printNL.
claus
parents:
diff changeset
   299
	].
claus
parents:
diff changeset
   300
	frameView origin:org corner:corn.
claus
parents:
diff changeset
   301
	frameView leftInset:orgInset x;
claus
parents:
diff changeset
   302
	      topInset:orgInset y;
claus
parents:
diff changeset
   303
	      rightInset:cornInset x negated;
claus
parents:
diff changeset
   304
	      bottomInset:cornInset y negated.
claus
parents:
diff changeset
   305
	frameView sizeFixed:true.
claus
parents:
diff changeset
   306
	^ self
claus
parents:
diff changeset
   307
    ].
claus
parents:
diff changeset
   308
    what == #alignmentOrigin ifTrue:[
claus
parents:
diff changeset
   309
	org := value at:3.       "/ relative origin
claus
parents:
diff changeset
   310
	org = (0@0) ifTrue:[
claus
parents:
diff changeset
   311
	    org := value at:2    "/ absolute origin
claus
parents:
diff changeset
   312
	].
claus
parents:
diff changeset
   313
	Verbose ifTrue:[frameView print. ' ' print. 'origin: ' print. org printNL].
claus
parents:
diff changeset
   314
	frameView origin:org.
claus
parents:
diff changeset
   315
	^ self
claus
parents:
diff changeset
   316
    ].
claus
parents:
diff changeset
   317
claus
parents:
diff changeset
   318
    self halt:'unimplemented'.
claus
parents:
diff changeset
   319
!
claus
parents:
diff changeset
   320
100
claus
parents: 96
diff changeset
   321
yBounds:args view:aView frame:frameView
claus
parents: 96
diff changeset
   322
    |value r|
claus
parents: 96
diff changeset
   323
claus
parents: 96
diff changeset
   324
    value := self getArg:args.
claus
parents: 96
diff changeset
   325
    (value at:1) == #rectangle ifTrue:[
claus
parents: 96
diff changeset
   326
	r := value at:2.
claus
parents: 96
diff changeset
   327
	aView origin:r origin corner:r corner.
claus
parents: 96
diff changeset
   328
	^ self
claus
parents: 96
diff changeset
   329
    ].
claus
parents: 96
diff changeset
   330
    self halt:'unimplemented'.
claus
parents: 96
diff changeset
   331
!
claus
parents: 96
diff changeset
   332
claus
parents: 96
diff changeset
   333
yMultipleSelections:args view:aView frame:frameView
claus
parents: 96
diff changeset
   334
    args == true ifTrue:[
claus
parents: 96
diff changeset
   335
	aView multipleSelectOk:true
claus
parents: 96
diff changeset
   336
    ]
claus
parents: 96
diff changeset
   337
!
claus
parents: 96
diff changeset
   338
claus
parents: 96
diff changeset
   339
yComponent:args view:aView frame:frameView
claus
parents: 96
diff changeset
   340
    |v|
claus
parents: 96
diff changeset
   341
claus
parents: 96
diff changeset
   342
    args isSymbol ifTrue:[
claus
parents: 96
diff changeset
   343
	v := application perform:args.
claus
parents: 96
diff changeset
   344
	v origin:0.0@0.0 corner:1.0@1.0.
claus
parents: 96
diff changeset
   345
	aView addSubView:v
claus
parents: 96
diff changeset
   346
    ] ifFalse:[
claus
parents: 96
diff changeset
   347
"/        v := View origin:0.0@0.0 corner:1.0@1.0 in:aView.
claus
parents: 96
diff changeset
   348
"/        self readSpec:args view:v frame:frameView.
claus
parents: 96
diff changeset
   349
	self readSpec:args view:aView frame:frameView.
claus
parents: 96
diff changeset
   350
    ]
claus
parents: 96
diff changeset
   351
!
claus
parents: 96
diff changeset
   352
claus
parents: 96
diff changeset
   353
XXyMultipleSelections:args view:aView
claus
parents: 96
diff changeset
   354
    aView multipleSelectOk:args
claus
parents: 96
diff changeset
   355
!
claus
parents: 96
diff changeset
   356
claus
parents: 96
diff changeset
   357
yColors:args view:aView frame:frameView
claus
parents: 96
diff changeset
   358
    |value|
claus
parents: 96
diff changeset
   359
claus
parents: 96
diff changeset
   360
    value := self getArg:args.
claus
parents: 96
diff changeset
   361
    self halt:'unimplemented'.
claus
parents: 96
diff changeset
   362
!
claus
parents: 96
diff changeset
   363
claus
parents: 96
diff changeset
   364
yName:args view:aView frame:frameView
claus
parents: 96
diff changeset
   365
    self componentAt:args put:aView
claus
parents: 96
diff changeset
   366
!
claus
parents: 96
diff changeset
   367
claus
parents: 96
diff changeset
   368
yCompositeSpec:args view:aView frame:frameView
claus
parents: 96
diff changeset
   369
    |value r|
claus
parents: 96
diff changeset
   370
claus
parents: 96
diff changeset
   371
    self doSpec:args for:aView.
claus
parents: 96
diff changeset
   372
"
claus
parents: 96
diff changeset
   373
    value := self getArg:args.
claus
parents: 96
diff changeset
   374
    (value at:1) == #rectangle ifTrue:[
claus
parents: 96
diff changeset
   375
	r := value at:2.
claus
parents: 96
diff changeset
   376
	aView origin:r origin corner:r corner.
claus
parents: 96
diff changeset
   377
	^ self
claus
parents: 96
diff changeset
   378
    ].
claus
parents: 96
diff changeset
   379
claus
parents: 96
diff changeset
   380
self halt.
claus
parents: 96
diff changeset
   381
"
claus
parents: 96
diff changeset
   382
!
claus
parents: 96
diff changeset
   383
claus
parents: 96
diff changeset
   384
yDefaultable:args view:aView frame:frameView
claus
parents: 96
diff changeset
   385
    'defaultable ignored' printNL
claus
parents: 96
diff changeset
   386
!
claus
parents: 96
diff changeset
   387
66
claus
parents:
diff changeset
   388
yFlags:args view:aView frame:frameView
100
claus
parents: 96
diff changeset
   389
    'flags: ' print. args print. ' for ' print. aView print. ' ignored' printNL
claus
parents: 96
diff changeset
   390
"
claus
parents: 96
diff changeset
   391
32 : initially disabled
claus
parents: 96
diff changeset
   392
16 : initially invisible
claus
parents: 96
diff changeset
   393
 8 : border
claus
parents: 96
diff changeset
   394
 4 : menuBar
claus
parents: 96
diff changeset
   395
 2 : hScroll
claus
parents: 96
diff changeset
   396
 1 : vScroll
claus
parents: 96
diff changeset
   397
"
claus
parents: 96
diff changeset
   398
claus
parents: 96
diff changeset
   399
    "Modified: 2.9.1995 / 15:44:15 / claus"
66
claus
parents:
diff changeset
   400
!
claus
parents:
diff changeset
   401
claus
parents:
diff changeset
   402
yIsDefault:args view:aView frame:frameView
claus
parents:
diff changeset
   403
    aView isReturnButton:args
claus
parents:
diff changeset
   404
!
claus
parents:
diff changeset
   405
claus
parents:
diff changeset
   406
yMin:args view:aView frame:frameView
claus
parents:
diff changeset
   407
    |value|
claus
parents:
diff changeset
   408
claus
parents:
diff changeset
   409
    value := self getArg:args.
claus
parents:
diff changeset
   410
    (value at:1) == #point ifTrue:[
claus
parents:
diff changeset
   411
	aView minExtent:(value at:2).
claus
parents:
diff changeset
   412
	^ self
claus
parents:
diff changeset
   413
    ].
claus
parents:
diff changeset
   414
    self halt:'unimplemented'.
claus
parents:
diff changeset
   415
!
claus
parents:
diff changeset
   416
claus
parents:
diff changeset
   417
yModel:args view:aView frame:frameView
claus
parents:
diff changeset
   418
    |model|
claus
parents:
diff changeset
   419
claus
parents:
diff changeset
   420
    (aspects notNil and:[aspects includesKey:args]) ifTrue:[
claus
parents:
diff changeset
   421
	model := aspects at:args
claus
parents:
diff changeset
   422
    ] ifFalse:[
86
claus
parents: 80
diff changeset
   423
	(aView isMemberOf:Button) ifTrue:[
claus
parents: 80
diff changeset
   424
	    model := application.
claus
parents: 80
diff changeset
   425
	    aView aspect:nil.
claus
parents: 80
diff changeset
   426
	    aView changeMessage:args.
claus
parents: 80
diff changeset
   427
	] ifFalse:[
claus
parents: 80
diff changeset
   428
	    model := application perform:args.
claus
parents: 80
diff changeset
   429
	].
66
claus
parents:
diff changeset
   430
    ].
claus
parents:
diff changeset
   431
    aView model:model.
claus
parents:
diff changeset
   432
!
claus
parents:
diff changeset
   433
claus
parents:
diff changeset
   434
yIsOpaque:args view:aView frame:frameView
claus
parents:
diff changeset
   435
    'isOpaque ignored' printNL.
claus
parents:
diff changeset
   436
!
claus
parents:
diff changeset
   437
claus
parents:
diff changeset
   438
yIsReadOnly:args view:aView frame:frameView
claus
parents:
diff changeset
   439
    args ifTrue:[
claus
parents:
diff changeset
   440
	aView readOnly
claus
parents:
diff changeset
   441
    ]
claus
parents:
diff changeset
   442
!
claus
parents:
diff changeset
   443
claus
parents:
diff changeset
   444
yMax:args view:aView frame:frameView
claus
parents:
diff changeset
   445
    |value|
claus
parents:
diff changeset
   446
claus
parents:
diff changeset
   447
    value := self getArg:args.
claus
parents:
diff changeset
   448
    (value at:1) == #point ifTrue:[
claus
parents:
diff changeset
   449
	aView maxExtent:(value at:2).
claus
parents:
diff changeset
   450
	^ self
claus
parents:
diff changeset
   451
    ].
claus
parents:
diff changeset
   452
    self halt:'unimplemented'.
claus
parents:
diff changeset
   453
!
claus
parents:
diff changeset
   454
claus
parents:
diff changeset
   455
yMenu:args view:aView frame:frameView
86
claus
parents: 80
diff changeset
   456
    menuAspect := args
66
claus
parents:
diff changeset
   457
!
claus
parents:
diff changeset
   458
claus
parents:
diff changeset
   459
yOrientation:args view:aView frame:frameView
claus
parents:
diff changeset
   460
    'orientation ignored' printNL.
claus
parents:
diff changeset
   461
!
claus
parents:
diff changeset
   462
claus
parents:
diff changeset
   463
ySelectionStyle:args view:aView frame:frameView
claus
parents:
diff changeset
   464
    'selectionStyle ignored' printNL.
claus
parents:
diff changeset
   465
claus
parents:
diff changeset
   466
!
claus
parents:
diff changeset
   467
claus
parents:
diff changeset
   468
yTabable:args view:aView frame:frameView
claus
parents:
diff changeset
   469
    args == true ifTrue:[
claus
parents:
diff changeset
   470
	focusSequence isNil ifTrue:[
claus
parents:
diff changeset
   471
	    focusSequence := OrderedCollection new.
claus
parents:
diff changeset
   472
	].
claus
parents:
diff changeset
   473
	focusSequence add:aView.
claus
parents:
diff changeset
   474
	'tabable element added' printNL.
claus
parents:
diff changeset
   475
    ]
claus
parents:
diff changeset
   476
!
claus
parents:
diff changeset
   477
100
claus
parents: 96
diff changeset
   478
yWindow:args view:aView frame:frameView
claus
parents: 96
diff changeset
   479
    self readSpec:args view:aView frame:frameView.
claus
parents: 96
diff changeset
   480
!
claus
parents: 96
diff changeset
   481
66
claus
parents:
diff changeset
   482
yStart:args view:aView frame:frameView
86
claus
parents: 80
diff changeset
   483
    (aView isKindOf:Scroller) ifTrue:[
claus
parents: 80
diff changeset
   484
	aView start:args.
claus
parents: 80
diff changeset
   485
	^ self
claus
parents: 80
diff changeset
   486
    ].
66
claus
parents:
diff changeset
   487
    'start ignored' printNL.
claus
parents:
diff changeset
   488
!
claus
parents:
diff changeset
   489
claus
parents:
diff changeset
   490
yStep:args view:aView frame:frameView
claus
parents:
diff changeset
   491
    'step ignored' printNL.
claus
parents:
diff changeset
   492
claus
parents:
diff changeset
   493
!
claus
parents:
diff changeset
   494
86
claus
parents: 80
diff changeset
   495
yStop:args view:aView frame:frameView
claus
parents: 80
diff changeset
   496
    (aView isKindOf:Scroller) ifTrue:[
claus
parents: 80
diff changeset
   497
	aView stop:args.
claus
parents: 80
diff changeset
   498
	^ self
claus
parents: 80
diff changeset
   499
    ].
claus
parents: 80
diff changeset
   500
    'stop ignored' printNL.
66
claus
parents:
diff changeset
   501
!
claus
parents:
diff changeset
   502
86
claus
parents: 80
diff changeset
   503
ySubmenu:aSpec view:menu frame:frameView
claus
parents: 80
diff changeset
   504
    |items lines selectors labels|
claus
parents: 80
diff changeset
   505
claus
parents: 80
diff changeset
   506
    aSpec first ~~ #Menu ifTrue:[
claus
parents: 80
diff changeset
   507
	self halt.
claus
parents: 80
diff changeset
   508
    ].
claus
parents: 80
diff changeset
   509
    items := (aSpec at:2).
claus
parents: 80
diff changeset
   510
    lines := aSpec at:3.
claus
parents: 80
diff changeset
   511
    selectors := aSpec at:4.
66
claus
parents:
diff changeset
   512
86
claus
parents: 80
diff changeset
   513
    "collect labels & selectors"
claus
parents: 80
diff changeset
   514
    labels := OrderedCollection new.
claus
parents: 80
diff changeset
   515
    items do:[:item |
claus
parents: 80
diff changeset
   516
	item first ~~ #MenuItem ifTrue:[
claus
parents: 80
diff changeset
   517
	    self halt
claus
parents: 80
diff changeset
   518
	].
claus
parents: 80
diff changeset
   519
	(item at:2) ~~ #'label:' ifTrue:[
claus
parents: 80
diff changeset
   520
	    self halt
claus
parents: 80
diff changeset
   521
	].
claus
parents: 80
diff changeset
   522
	labels add:(item at:3).
claus
parents: 80
diff changeset
   523
    ].
claus
parents: 80
diff changeset
   524
claus
parents: 80
diff changeset
   525
    menu at:currentMenuSelector
claus
parents: 80
diff changeset
   526
	putLabels:labels
claus
parents: 80
diff changeset
   527
	selectors:selectors
claus
parents: 80
diff changeset
   528
	receiver:nil.
claus
parents: 80
diff changeset
   529
!
claus
parents: 80
diff changeset
   530
66
claus
parents:
diff changeset
   531
yStyle:args view:aView frame:frameView
claus
parents:
diff changeset
   532
    'name ignored' printNL.
claus
parents:
diff changeset
   533
claus
parents:
diff changeset
   534
!
claus
parents:
diff changeset
   535
claus
parents:
diff changeset
   536
yType:args view:aView frame:frameView
86
claus
parents: 80
diff changeset
   537
    (aView isMemberOf:EditField) ifTrue:[
claus
parents: 80
diff changeset
   538
	args == #number ifTrue:[
claus
parents: 80
diff changeset
   539
	    aView converter:(PrintConverter new initForNumber).
claus
parents: 80
diff changeset
   540
	    ^ self
claus
parents: 80
diff changeset
   541
	]
claus
parents: 80
diff changeset
   542
    ].
claus
parents: 80
diff changeset
   543
66
claus
parents:
diff changeset
   544
    'type ignored' printNL.
100
claus
parents: 96
diff changeset
   545
!
claus
parents: 96
diff changeset
   546
claus
parents: 96
diff changeset
   547
doesNotUnderstand:aMessage
claus
parents: 96
diff changeset
   548
    |rest sel|
claus
parents: 96
diff changeset
   549
claus
parents: 96
diff changeset
   550
    ((sel := aMessage selector) startsWith:'y') ifTrue:[
claus
parents: 96
diff changeset
   551
        rest := sel copyFrom:2 to:(sel indexOf:$:).
claus
parents: 96
diff changeset
   552
        rest at:1 put:(rest at:1) asLowercase.
claus
parents: 96
diff changeset
   553
        rest := rest asSymbolIfInterned.
claus
parents: 96
diff changeset
   554
        rest notNil ifTrue:[
claus
parents: 96
diff changeset
   555
            (aMessage arguments at:2) perform:rest with:(aMessage arguments at:1).
claus
parents: 96
diff changeset
   556
            ^ self.
claus
parents: 96
diff changeset
   557
        ]
claus
parents: 96
diff changeset
   558
    ].
claus
parents: 96
diff changeset
   559
    super doesNotUnderstand:aMessage
claus
parents: 96
diff changeset
   560
claus
parents: 96
diff changeset
   561
    "Modified: 5.9.1995 / 21:13:16 / claus"
66
claus
parents:
diff changeset
   562
! !
claus
parents:
diff changeset
   563
100
claus
parents: 96
diff changeset
   564
!UIBuilder methodsFor:'private spec component parsing'!
66
claus
parents:
diff changeset
   565
100
claus
parents: 96
diff changeset
   566
xLabelSpec:aSpec view:aView
claus
parents: 96
diff changeset
   567
    |l|
66
claus
parents:
diff changeset
   568
100
claus
parents: 96
diff changeset
   569
    l := Label in:aView.
claus
parents: 96
diff changeset
   570
    self fixFontFor:l.
claus
parents: 96
diff changeset
   571
    self doSpec:aSpec for:l 
66
claus
parents:
diff changeset
   572
100
claus
parents: 96
diff changeset
   573
!
claus
parents: 96
diff changeset
   574
claus
parents: 96
diff changeset
   575
xSpecCollection:aSpec view:aView
claus
parents: 96
diff changeset
   576
    self doSpec:aSpec for:aView
claus
parents: 96
diff changeset
   577
66
claus
parents:
diff changeset
   578
!
claus
parents:
diff changeset
   579
100
claus
parents: 96
diff changeset
   580
xInputFieldSpec:aSpec view:aView
claus
parents: 96
diff changeset
   581
    |l|
66
claus
parents:
diff changeset
   582
100
claus
parents: 96
diff changeset
   583
    l := EditField in:aView.
claus
parents: 96
diff changeset
   584
    self fixFontFor:l.
claus
parents: 96
diff changeset
   585
    l aspect:#value; change:#value:.
claus
parents: 96
diff changeset
   586
    self doSpec:aSpec for:l 
claus
parents: 96
diff changeset
   587
!
claus
parents: 96
diff changeset
   588
claus
parents: 96
diff changeset
   589
xActionButtonSpec:aSpec view:aView
claus
parents: 96
diff changeset
   590
    |b|
claus
parents: 96
diff changeset
   591
claus
parents: 96
diff changeset
   592
    b := Button in:aView.
claus
parents: 96
diff changeset
   593
    self fixFontFor:b.
claus
parents: 96
diff changeset
   594
    self doSpec:aSpec for:b 
66
claus
parents:
diff changeset
   595
!
claus
parents:
diff changeset
   596
100
claus
parents: 96
diff changeset
   597
xFullSpec:aSpec
claus
parents: 96
diff changeset
   598
    topView isNil ifTrue:[
claus
parents: 96
diff changeset
   599
	topView := StandardSystemView new.
claus
parents: 96
diff changeset
   600
	topView controller:(ApplicationController new).
claus
parents: 96
diff changeset
   601
	topView application:application.
claus
parents: 96
diff changeset
   602
    ].
claus
parents: 96
diff changeset
   603
claus
parents: 96
diff changeset
   604
    view := View new.
claus
parents: 96
diff changeset
   605
    self doSpec:aSpec for:view.
claus
parents: 96
diff changeset
   606
claus
parents: 96
diff changeset
   607
    topView extent:(view extent).
claus
parents: 96
diff changeset
   608
    view origin:0.0@0.0 corner:1.0@1.0.
claus
parents: 96
diff changeset
   609
    topView add:view.
claus
parents: 96
diff changeset
   610
claus
parents: 96
diff changeset
   611
    ^ topView
claus
parents: 96
diff changeset
   612
!
claus
parents: 96
diff changeset
   613
claus
parents: 96
diff changeset
   614
xWindowSpec:aSpec view:aView
claus
parents: 96
diff changeset
   615
    self doSpec:aSpec for:aView
66
claus
parents:
diff changeset
   616
claus
parents:
diff changeset
   617
!
claus
parents:
diff changeset
   618
100
claus
parents: 96
diff changeset
   619
xSubCanvasSpec:aSpec view:aView
claus
parents: 96
diff changeset
   620
    |v|
66
claus
parents:
diff changeset
   621
100
claus
parents: 96
diff changeset
   622
    v := SubCanvas in:aView.
claus
parents: 96
diff changeset
   623
    v origin:0.0@0.0 corner:1.0@1.0.
claus
parents: 96
diff changeset
   624
    self doSpec:aSpec for:v
claus
parents: 96
diff changeset
   625
claus
parents: 96
diff changeset
   626
    "Modified: 2.9.1995 / 15:26:15 / claus"
66
claus
parents:
diff changeset
   627
!
claus
parents:
diff changeset
   628
100
claus
parents: 96
diff changeset
   629
xMenu:aSpec
claus
parents: 96
diff changeset
   630
    |items numItems unknown prevCurrent labels|
claus
parents: 96
diff changeset
   631
claus
parents: 96
diff changeset
   632
    topView := PullDownMenu new.
claus
parents: 96
diff changeset
   633
claus
parents: 96
diff changeset
   634
    items := aSpec at:2.
claus
parents: 96
diff changeset
   635
    numItems := (aSpec at:3) at:1.
claus
parents: 96
diff changeset
   636
    unknown := (aSpec at:4).
claus
parents: 96
diff changeset
   637
claus
parents: 96
diff changeset
   638
    prevCurrent := currentMenuSelector.
66
claus
parents:
diff changeset
   639
100
claus
parents: 96
diff changeset
   640
    "precollect labels ..."
claus
parents: 96
diff changeset
   641
    labels := OrderedCollection new.
claus
parents: 96
diff changeset
   642
    items do:[:item |
claus
parents: 96
diff changeset
   643
	(item at:1) ~~ #MenuItem ifTrue:[
claus
parents: 96
diff changeset
   644
	    self halt
claus
parents: 96
diff changeset
   645
	].
claus
parents: 96
diff changeset
   646
	(item at:2) ~~ #'label:' ifTrue:[
claus
parents: 96
diff changeset
   647
	    self halt
claus
parents: 96
diff changeset
   648
	].
claus
parents: 96
diff changeset
   649
	labels add:(item at:3)
claus
parents: 96
diff changeset
   650
    ].
claus
parents: 96
diff changeset
   651
claus
parents: 96
diff changeset
   652
    topView labels:labels.
claus
parents: 96
diff changeset
   653
claus
parents: 96
diff changeset
   654
    items with:(1 to:numItems) do:[:item :index |
claus
parents: 96
diff changeset
   655
	currentMenuSelector := index.
claus
parents: 96
diff changeset
   656
	self doSpec:item for:topView.
claus
parents: 96
diff changeset
   657
    ].
claus
parents: 96
diff changeset
   658
claus
parents: 96
diff changeset
   659
    currentMenuSelector := prevCurrent.
claus
parents: 96
diff changeset
   660
    ^ topView
66
claus
parents:
diff changeset
   661
!
claus
parents:
diff changeset
   662
100
claus
parents: 96
diff changeset
   663
xPopUpMenu:aSpec
claus
parents: 96
diff changeset
   664
    |menu values|
66
claus
parents:
diff changeset
   665
100
claus
parents: 96
diff changeset
   666
    menu := PopUpMenu 
claus
parents: 96
diff changeset
   667
		labels:(aSpec at:2).
claus
parents: 96
diff changeset
   668
    values := Array new:((aSpec at:2) size).
66
claus
parents:
diff changeset
   669
100
claus
parents: 96
diff changeset
   670
    (aSpec at:4) keysAndValuesDo:[:index :item |
claus
parents: 96
diff changeset
   671
	((item size > 0)
claus
parents: 96
diff changeset
   672
	and:[(item at:1) == #PopUpMenu]) ifTrue:[
claus
parents: 96
diff changeset
   673
	    menu subMenuAt:index put:(self xPopUpMenu:item)
claus
parents: 96
diff changeset
   674
	] ifFalse:[
claus
parents: 96
diff changeset
   675
	    values at:index put:item
claus
parents: 96
diff changeset
   676
	]
66
claus
parents:
diff changeset
   677
    ].
100
claus
parents: 96
diff changeset
   678
claus
parents: 96
diff changeset
   679
    menu values:values.
claus
parents: 96
diff changeset
   680
    ^ menu
claus
parents: 96
diff changeset
   681
!
claus
parents: 96
diff changeset
   682
claus
parents: 96
diff changeset
   683
xSequenceViewSpec:aSpec view:aView
claus
parents: 96
diff changeset
   684
    |f s|
claus
parents: 96
diff changeset
   685
claus
parents: 96
diff changeset
   686
    f := ScrollableView for:SelectionInListView in:aView.
claus
parents: 96
diff changeset
   687
    s := f scrolledView.
claus
parents: 96
diff changeset
   688
    self doSpec:aSpec for:s frame:f.
66
claus
parents:
diff changeset
   689
!
claus
parents:
diff changeset
   690
100
claus
parents: 96
diff changeset
   691
xScrollerSpec:aSpec view:aView
claus
parents: 96
diff changeset
   692
    |s idx orientation|
claus
parents: 96
diff changeset
   693
claus
parents: 96
diff changeset
   694
    idx := aSpec indexOf:#orientation:.
claus
parents: 96
diff changeset
   695
    idx == 0 ifTrue:[
claus
parents: 96
diff changeset
   696
	orientation := #vertical
claus
parents: 96
diff changeset
   697
    ] ifFalse:[
claus
parents: 96
diff changeset
   698
	orientation := aSpec at:(idx + 1)
claus
parents: 96
diff changeset
   699
    ].
claus
parents: 96
diff changeset
   700
    orientation == #horizontal ifTrue:[
claus
parents: 96
diff changeset
   701
	s := HorizontalScroller in:aView
claus
parents: 96
diff changeset
   702
    ] ifFalse:[
claus
parents: 96
diff changeset
   703
	s := Scroller in:aView
claus
parents: 96
diff changeset
   704
    ].
claus
parents: 96
diff changeset
   705
    self doSpec:aSpec for:s 
claus
parents: 96
diff changeset
   706
!
claus
parents: 96
diff changeset
   707
claus
parents: 96
diff changeset
   708
xProgressIndicatorSpec:aSpec view:aView
claus
parents: 96
diff changeset
   709
    |s|
claus
parents: 96
diff changeset
   710
claus
parents: 96
diff changeset
   711
    s := ProgressIndicator in:aView.
claus
parents: 96
diff changeset
   712
    self doSpec:aSpec for:s 
claus
parents: 96
diff changeset
   713
!
66
claus
parents:
diff changeset
   714
100
claus
parents: 96
diff changeset
   715
xSliderSpec:aSpec view:aView
claus
parents: 96
diff changeset
   716
    |s idx orientation|
66
claus
parents:
diff changeset
   717
100
claus
parents: 96
diff changeset
   718
    idx := aSpec indexOf:#orientation:.
claus
parents: 96
diff changeset
   719
    idx == 0 ifTrue:[
claus
parents: 96
diff changeset
   720
	orientation := #vertical
claus
parents: 96
diff changeset
   721
    ] ifFalse:[
claus
parents: 96
diff changeset
   722
	orientation := aSpec at:(idx + 1)
claus
parents: 96
diff changeset
   723
    ].
claus
parents: 96
diff changeset
   724
    orientation == #horizontal ifTrue:[
claus
parents: 96
diff changeset
   725
	s := HorizontalSlider in:aView
claus
parents: 96
diff changeset
   726
    ] ifFalse:[
claus
parents: 96
diff changeset
   727
	s := Slider in:aView
claus
parents: 96
diff changeset
   728
    ].
claus
parents: 96
diff changeset
   729
    self doSpec:aSpec for:s 
claus
parents: 96
diff changeset
   730
!
claus
parents: 96
diff changeset
   731
claus
parents: 96
diff changeset
   732
xCompositeSpecCollection:aSpec view:aView
claus
parents: 96
diff changeset
   733
    |v|
claus
parents: 96
diff changeset
   734
claus
parents: 96
diff changeset
   735
"/ 'compositeSpecCollection ignored' printNL.
claus
parents: 96
diff changeset
   736
"/ ^ self.
claus
parents: 96
diff changeset
   737
    v := View in:aView.
claus
parents: 96
diff changeset
   738
    self doSpec:aSpec for:v 
66
claus
parents:
diff changeset
   739
claus
parents:
diff changeset
   740
!
claus
parents:
diff changeset
   741
100
claus
parents: 96
diff changeset
   742
xArbitraryComponentSpec:aSpec view:aView
claus
parents: 96
diff changeset
   743
    |v|
66
claus
parents:
diff changeset
   744
100
claus
parents: 96
diff changeset
   745
    v := View in:aView.
claus
parents: 96
diff changeset
   746
"/    v := Label label:'ArbitraryView' in:aView.
claus
parents: 96
diff changeset
   747
    v origin:0.0@0.0 corner:1.0@1.0.
claus
parents: 96
diff changeset
   748
    v level:-1.
claus
parents: 96
diff changeset
   749
    self doSpec:aSpec for:v
claus
parents: 96
diff changeset
   750
claus
parents: 96
diff changeset
   751
    "Modified: 2.9.1995 / 15:26:03 / claus"
claus
parents: 96
diff changeset
   752
!
66
claus
parents:
diff changeset
   753
100
claus
parents: 96
diff changeset
   754
xCheckBoxSpec:aSpec view:aView
claus
parents: 96
diff changeset
   755
    |b|
claus
parents: 96
diff changeset
   756
claus
parents: 96
diff changeset
   757
    b := CheckBox in:aView.
claus
parents: 96
diff changeset
   758
    self fixFontFor:b.
claus
parents: 96
diff changeset
   759
    self doSpec:aSpec for:b 
claus
parents: 96
diff changeset
   760
claus
parents: 96
diff changeset
   761
!
claus
parents: 96
diff changeset
   762
claus
parents: 96
diff changeset
   763
xTableViewSpec:aSpec view:aView
claus
parents: 96
diff changeset
   764
    |l|
claus
parents: 96
diff changeset
   765
claus
parents: 96
diff changeset
   766
    'tableView ignored' printNL.
claus
parents: 96
diff changeset
   767
    l := Label label:'TableView' in:aView.
claus
parents: 96
diff changeset
   768
    l level:-1.
claus
parents: 96
diff changeset
   769
    self doSpec:aSpec for:l 
66
claus
parents:
diff changeset
   770
!
claus
parents:
diff changeset
   771
100
claus
parents: 96
diff changeset
   772
xGroupBoxSpec:aSpec view:aView
claus
parents: 96
diff changeset
   773
    |l|
claus
parents: 96
diff changeset
   774
claus
parents: 96
diff changeset
   775
    l := FramedBox in:aView.
claus
parents: 96
diff changeset
   776
    self doSpec:aSpec for:l 
claus
parents: 96
diff changeset
   777
!
claus
parents: 96
diff changeset
   778
claus
parents: 96
diff changeset
   779
xDividerSpec:aSpec view:aView
claus
parents: 96
diff changeset
   780
    |l|
66
claus
parents:
diff changeset
   781
100
claus
parents: 96
diff changeset
   782
    l := View in:aView.
claus
parents: 96
diff changeset
   783
    self doSpec:aSpec for:l 
claus
parents: 96
diff changeset
   784
!
claus
parents: 96
diff changeset
   785
claus
parents: 96
diff changeset
   786
xFramedBoxSpec:aSpec view:aView
claus
parents: 96
diff changeset
   787
    |v|
claus
parents: 96
diff changeset
   788
claus
parents: 96
diff changeset
   789
    v := FramedBox in:aView.
claus
parents: 96
diff changeset
   790
    self doSpec:aSpec for:v
66
claus
parents:
diff changeset
   791
100
claus
parents: 96
diff changeset
   792
    "Modified: 5.9.1995 / 21:05:38 / claus"
claus
parents: 96
diff changeset
   793
!
claus
parents: 96
diff changeset
   794
claus
parents: 96
diff changeset
   795
xVerticalPanelViewSpec:aSpec view:aView
claus
parents: 96
diff changeset
   796
    |v|
claus
parents: 96
diff changeset
   797
claus
parents: 96
diff changeset
   798
    v := VerticalPanelView in:aView.
claus
parents: 96
diff changeset
   799
    self doSpec:aSpec for:v
66
claus
parents:
diff changeset
   800
100
claus
parents: 96
diff changeset
   801
    "Modified: 5.9.1995 / 21:06:19 / claus"
claus
parents: 96
diff changeset
   802
!
66
claus
parents:
diff changeset
   803
100
claus
parents: 96
diff changeset
   804
xHorizontalPanelViewSpec:aSpec view:aView
claus
parents: 96
diff changeset
   805
    |v|
claus
parents: 96
diff changeset
   806
claus
parents: 96
diff changeset
   807
    v := HorizontalPanelView in:aView.
claus
parents: 96
diff changeset
   808
    self doSpec:aSpec for:v
claus
parents: 96
diff changeset
   809
claus
parents: 96
diff changeset
   810
    "Modified: 5.9.1995 / 21:06:25 / claus"
66
claus
parents:
diff changeset
   811
! !
claus
parents:
diff changeset
   812
claus
parents:
diff changeset
   813
!UIBuilder methodsFor:'private spec parsing'!
claus
parents:
diff changeset
   814
claus
parents:
diff changeset
   815
doSpec:aSpec for:aView
claus
parents:
diff changeset
   816
    ^ self doSpec:aSpec for:aView frame:aView
claus
parents:
diff changeset
   817
!
claus
parents:
diff changeset
   818
claus
parents:
diff changeset
   819
readSpec:aSpec
claus
parents:
diff changeset
   820
    |what|
claus
parents:
diff changeset
   821
claus
parents:
diff changeset
   822
    what := aSpec first.
claus
parents:
diff changeset
   823
    ^ self perform:('x' , what , ':') asSymbol with:aSpec
claus
parents:
diff changeset
   824
!
claus
parents:
diff changeset
   825
claus
parents:
diff changeset
   826
doSpec:aSpec for:aView frame:frame 
claus
parents:
diff changeset
   827
    |state selector args argsToRead|
claus
parents:
diff changeset
   828
claus
parents:
diff changeset
   829
    argsToRead := 0.
claus
parents:
diff changeset
   830
    args := #().
claus
parents:
diff changeset
   831
    aSpec from:2 to:(aSpec size) do:[:element |
claus
parents:
diff changeset
   832
	argsToRead > 1 ifTrue:[
claus
parents:
diff changeset
   833
	    self halt.
claus
parents:
diff changeset
   834
	] ifFalse:[
claus
parents:
diff changeset
   835
	    argsToRead == 1 ifTrue:[
claus
parents:
diff changeset
   836
		args := element.
claus
parents:
diff changeset
   837
		argsToRead := argsToRead - 1
claus
parents:
diff changeset
   838
	    ] ifFalse:[
claus
parents:
diff changeset
   839
		selector := element.
claus
parents:
diff changeset
   840
		argsToRead := selector numArgs.
claus
parents:
diff changeset
   841
	    ].
claus
parents:
diff changeset
   842
	].
claus
parents:
diff changeset
   843
	argsToRead == 0 ifTrue:[
claus
parents:
diff changeset
   844
	    self doSingleSpec:selector args:args for:aView frame:frame
claus
parents:
diff changeset
   845
	]
claus
parents:
diff changeset
   846
    ]
claus
parents:
diff changeset
   847
!
claus
parents:
diff changeset
   848
claus
parents:
diff changeset
   849
readSpec:aSpec view:aView frame:frameView
claus
parents:
diff changeset
   850
    |what|
claus
parents:
diff changeset
   851
claus
parents:
diff changeset
   852
    what := aSpec first.
claus
parents:
diff changeset
   853
    self perform:('x' , what , ':view:') asSymbol with:aSpec with:aView
claus
parents:
diff changeset
   854
!
claus
parents:
diff changeset
   855
claus
parents:
diff changeset
   856
doSingleSpec:selector args:args for:aView frame:frame
claus
parents:
diff changeset
   857
    Verbose ifTrue:[
claus
parents:
diff changeset
   858
	'doSingle (' print. aView print. ' -> ' print. selector print.
claus
parents:
diff changeset
   859
	' ' print. args printString printNL.
claus
parents:
diff changeset
   860
    ].
claus
parents:
diff changeset
   861
claus
parents:
diff changeset
   862
    self perform:('y' , selector asString asUppercaseFirst , 'view:frame:') asSymbol 
claus
parents:
diff changeset
   863
	    with:args
claus
parents:
diff changeset
   864
	    with:aView
claus
parents:
diff changeset
   865
	    with:frame.
claus
parents:
diff changeset
   866
100
claus
parents: 96
diff changeset
   867
!
claus
parents: 96
diff changeset
   868
claus
parents: 96
diff changeset
   869
add:aSpec
claus
parents: 96
diff changeset
   870
    self readSpec:aSpec
66
claus
parents:
diff changeset
   871
! !
claus
parents:
diff changeset
   872
claus
parents:
diff changeset
   873
!UIBuilder methodsFor:'private special kludges'!
claus
parents:
diff changeset
   874
claus
parents:
diff changeset
   875
fixFontFor:aComponent
claus
parents:
diff changeset
   876
    "since ST-80 seems to use a smaller default font,
claus
parents:
diff changeset
   877
     and component sizes are often given in pixels in winSpecs,
75
claus
parents: 69
diff changeset
   878
     make the font smaller for less ugly looking elements."
66
claus
parents:
diff changeset
   879
claus
parents:
diff changeset
   880
"/   aComponent font:(aComponent font size:8)
claus
parents:
diff changeset
   881
!
claus
parents:
diff changeset
   882
claus
parents:
diff changeset
   883
fixExtentFor:aPoint
claus
parents:
diff changeset
   884
    ^ aPoint "/ (aPoint * (1 @ 1.5)) truncated
claus
parents:
diff changeset
   885
! !
claus
parents:
diff changeset
   886
100
claus
parents: 96
diff changeset
   887
UIBuilder initialize!