UILayoutTool.st
changeset 163 dff48b7ca574
child 184 700f2ee9911e
equal deleted inserted replaced
162:d3f0d5dd53b1 163:dff48b7ca574
       
     1 "
       
     2  COPYRIGHT (c) 1995 by eXept Software AG
       
     3               All Rights Reserved
       
     4 
       
     5  This software is furnished under a license and may be used
       
     6  only in accordance with the terms of that license and with the
       
     7  inclusion of the above copyright notice.   This software may not
       
     8  be provided or otherwise made available to, or used by, any
       
     9  other person.  No title to or ownership of the software is
       
    10  hereby transferred.
       
    11 "
       
    12 
       
    13 
       
    14 
       
    15 
       
    16 ApplicationModel subclass:#UILayoutTool
       
    17 	instanceVariableNames:'modifiedHolder aspects selection layoutView'
       
    18 	classVariableNames:''
       
    19 	poolDictionaries:''
       
    20 	category:'Interface-UIPainter'
       
    21 !
       
    22 
       
    23 ApplicationModel subclass:#LayoutOrigin
       
    24 	instanceVariableNames:''
       
    25 	classVariableNames:''
       
    26 	poolDictionaries:''
       
    27 	privateIn:UILayoutTool
       
    28 !
       
    29 
       
    30 ApplicationModel subclass:#Rectangle
       
    31 	instanceVariableNames:''
       
    32 	classVariableNames:''
       
    33 	poolDictionaries:''
       
    34 	privateIn:UILayoutTool
       
    35 !
       
    36 
       
    37 ApplicationModel subclass:#Point
       
    38 	instanceVariableNames:''
       
    39 	classVariableNames:''
       
    40 	poolDictionaries:''
       
    41 	privateIn:UILayoutTool
       
    42 !
       
    43 
       
    44 ApplicationModel subclass:#LayoutFrame
       
    45 	instanceVariableNames:''
       
    46 	classVariableNames:''
       
    47 	poolDictionaries:''
       
    48 	privateIn:UILayoutTool
       
    49 !
       
    50 
       
    51 ApplicationModel subclass:#AlignmentOrigin
       
    52 	instanceVariableNames:''
       
    53 	classVariableNames:''
       
    54 	poolDictionaries:''
       
    55 	privateIn:UILayoutTool
       
    56 !
       
    57 
       
    58 ApplicationModel subclass:#Extent
       
    59 	instanceVariableNames:''
       
    60 	classVariableNames:''
       
    61 	poolDictionaries:''
       
    62 	privateIn:UILayoutTool
       
    63 !
       
    64 
       
    65 !UILayoutTool class methodsFor:'documentation'!
       
    66 
       
    67 copyright
       
    68 "
       
    69  COPYRIGHT (c) 1995 by eXept Software AG
       
    70               All Rights Reserved
       
    71 
       
    72  This software is furnished under a license and may be used
       
    73  only in accordance with the terms of that license and with the
       
    74  inclusion of the above copyright notice.   This software may not
       
    75  be provided or otherwise made available to, or used by, any
       
    76  other person.  No title to or ownership of the software is
       
    77  hereby transferred.
       
    78 "
       
    79 
       
    80 
       
    81 
       
    82 !
       
    83 
       
    84 documentation
       
    85 "
       
    86     used by the UIPainter to manipulate the layout of the selected component
       
    87 
       
    88     [author:]
       
    89         Claus Atzkern
       
    90 
       
    91     [see also:]
       
    92         UIPainter
       
    93         UIHelpTool
       
    94         UISpecificationTool
       
    95 "
       
    96 
       
    97 
       
    98 ! !
       
    99 
       
   100 !UILayoutTool class methodsFor:'constants'!
       
   101 
       
   102 label
       
   103     ^ 'Layout'
       
   104 ! !
       
   105 
       
   106 !UILayoutTool class methodsFor:'interface specs'!
       
   107 
       
   108 slices
       
   109     ^ #(
       
   110         ( 'Frame'          LayoutFrame)
       
   111         ( 'Origin'         LayoutOrigin)
       
   112         ( 'Alig.Origin'    AlignmentOrigin)
       
   113         ( 'Point'          Point)
       
   114         ( 'Rectangle'      Rectangle)
       
   115         ( 'Extent'         Extent)
       
   116        ) 
       
   117 
       
   118 !
       
   119 
       
   120 windowSpec
       
   121     "this window spec was automatically generated by the ST/X UIPainter"
       
   122 
       
   123     "do not manually edit this - the painter/builder may not be able to
       
   124      handle the specification if its corrupted."
       
   125 
       
   126     "
       
   127      UIPainter new openOnClass:UILayoutTool andSelector:#windowSpec
       
   128      UILayoutTool new openInterface:#windowSpec
       
   129     "
       
   130     "UILayoutTool open"
       
   131 
       
   132     <resource: #canvas>
       
   133 
       
   134     ^
       
   135      
       
   136        #(#FullSpec
       
   137           #'window:' 
       
   138            #(#WindowSpec
       
   139               #'name:' 'uIPainterView'
       
   140               #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
       
   141               #'label:' 'unnamed canvas'
       
   142               #'bounds:' #(#Rectangle 0 0 300 300)
       
   143           )
       
   144           #'component:' 
       
   145            #(#SpecCollection
       
   146               #'collection:' 
       
   147                #(
       
   148                  #(#NoteBookViewSpec
       
   149                     #'name:' 'NoteBook'
       
   150                     #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
       
   151                     #'tabable:' true
       
   152                     #'menu:' #noteBookList
       
   153                     #'enableChannel:' #enableChannel
       
   154                     #'style:' 
       
   155                      #(#FontDescription
       
   156                         #helvetica #medium
       
   157                         #roman #'10'
       
   158                     )
       
   159                     #'model:' #noteBookModel
       
   160                     #'tabWidget:' #Window
       
   161                     #'direction:' #bottom
       
   162 "/                    #'useIndex:' true
       
   163                     #'canvas:' #noteBookView
       
   164                 )
       
   165               )
       
   166           )
       
   167       )
       
   168 ! !
       
   169 
       
   170 !UILayoutTool methodsFor:'accessing'!
       
   171 
       
   172 layout
       
   173     "returns configued layout or nil
       
   174     "
       
   175     |appl|
       
   176 
       
   177     (appl := self noteBookView application) notNil ifTrue:[
       
   178         ^ appl layout
       
   179     ].
       
   180   ^ nil
       
   181 !
       
   182 
       
   183 layoutType
       
   184     "returns current layout type or nil
       
   185     "
       
   186     |slice|
       
   187 
       
   188     (slice := self selectedSlice) notNil ifTrue:[
       
   189         ^ slice last
       
   190     ].
       
   191   ^ nil
       
   192 !
       
   193 
       
   194 layoutView
       
   195     "returns current edited view
       
   196     "
       
   197     ^ layoutView
       
   198 !
       
   199 
       
   200 layoutView:aView
       
   201     "change current edited view
       
   202     "
       
   203     |type name list|
       
   204 
       
   205     layoutView := aView.
       
   206 
       
   207     (type := UIPainterView layoutType:layoutView) notNil ifTrue:[
       
   208         self class slices findFirst:[:e|
       
   209             e last == type ifTrue:[name := e first. true]
       
   210         ].
       
   211         type == #Extent ifTrue:[
       
   212             list := Array with:name
       
   213         ] ifFalse:[
       
   214             list := self class slices collect:[:e| e first ].
       
   215             list removeLast.
       
   216         ].
       
   217     ].
       
   218     self noteBookList  value:list.
       
   219     self noteBookModel value:name.
       
   220     self update.
       
   221 !
       
   222 
       
   223 modifiedHolder:aValueHolder
       
   224     "set the value holder set to true in case of modifying attributes
       
   225     "
       
   226     modifiedHolder notNil ifTrue:[
       
   227         modifiedHolder removeDependent:self. 
       
   228     ].
       
   229 
       
   230     (modifiedHolder := aValueHolder) notNil ifTrue:[
       
   231         modifiedHolder addDependent:self.
       
   232     ].
       
   233 
       
   234 !
       
   235 
       
   236 update
       
   237     "update from view
       
   238     "
       
   239     |view appl|
       
   240 
       
   241     selection notNil ifTrue:[
       
   242         (view := self layoutView) notNil ifTrue:[
       
   243             (appl := self noteBookView application) notNil ifTrue:[
       
   244                 appl fetch:view
       
   245             ]
       
   246         ]
       
   247     ].
       
   248         
       
   249 ! !
       
   250 
       
   251 !UILayoutTool methodsFor:'aspects'!
       
   252 
       
   253 aspectFor:aKey
       
   254     "returns aspect for a key or nil
       
   255     "
       
   256   ^ aspects at:aKey ifAbsent:[ super aspectFor:aKey ]
       
   257 
       
   258 
       
   259 !
       
   260 
       
   261 noteBookList
       
   262     "returns list of tab labels
       
   263     "
       
   264     |holder|
       
   265 
       
   266     (holder := builder bindingAt:#noteBookList) isNil ifTrue:[
       
   267         holder := nil asValue.
       
   268         builder aspectAt:#noteBookList put:holder
       
   269     ].
       
   270   ^ holder
       
   271 !
       
   272 
       
   273 noteBookModel
       
   274     "automatically generated by UIPainter ..."
       
   275 
       
   276     |holder|
       
   277 
       
   278     (holder := builder bindingAt:#noteBookModel) isNil ifTrue:[
       
   279         holder := AspectAdaptor new subject:self; forAspect:#selection.
       
   280         builder aspectAt:#noteBookModel put:holder.
       
   281     ].
       
   282     ^ holder
       
   283 !
       
   284 
       
   285 noteBookView
       
   286     "automatically generated by UIPainter ...
       
   287     "
       
   288     |holder|
       
   289 
       
   290     (holder := builder bindingAt:#noteBookView) isNil ifTrue:[
       
   291         holder := SubCanvas new.
       
   292         builder aspectAt:#noteBookView put:holder
       
   293     ].
       
   294   ^ holder
       
   295 ! !
       
   296 
       
   297 !UILayoutTool methodsFor:'change & update'!
       
   298 
       
   299 update:something with:aParameter from:changedObject
       
   300     "one of my models changed its value
       
   301     "
       
   302     changedObject ~~ modifiedHolder ifTrue:[
       
   303         modifiedHolder value ~~ true ifTrue:[
       
   304             modifiedHolder isNil ifFalse:[
       
   305                 modifiedHolder value:true
       
   306             ]
       
   307         ]
       
   308     ]
       
   309 
       
   310 ! !
       
   311 
       
   312 !UILayoutTool methodsFor:'converting absolute'!
       
   313 
       
   314 absolute:what xOrY:xOrY
       
   315     |extent fraction offset fractSymb offsetSymb|
       
   316 
       
   317     extent     := (self layoutView superView computeExtent) perform:xOrY.
       
   318     fractSymb  := (what, 'Fraction') asSymbol.
       
   319     offsetSymb := (what,   'Offset') asSymbol.
       
   320     fraction   := (self aspectFor:fractSymb)  value.
       
   321     offset     := (self aspectFor:offsetSymb) value.
       
   322     offset     := offset + ((fraction * extent) asInteger).
       
   323 
       
   324     (self aspectFor:offsetSymb) value:offset.
       
   325     (self aspectFor:fractSymb)  value:0.
       
   326 
       
   327 
       
   328 
       
   329 !
       
   330 
       
   331 absoluteBottom
       
   332     self absolute:'bottom' xOrY:#y
       
   333 
       
   334 !
       
   335 
       
   336 absoluteLeft
       
   337     self absolute:'left' xOrY:#x
       
   338 
       
   339 !
       
   340 
       
   341 absoluteRight
       
   342     self absolute:'right' xOrY:#x
       
   343 
       
   344 !
       
   345 
       
   346 absoluteTop
       
   347     self absolute:'top' xOrY:#y
       
   348 
       
   349 ! !
       
   350 
       
   351 !UILayoutTool methodsFor:'converting relative'!
       
   352 
       
   353 relative:what xOrY:xOrY
       
   354     |extent fraction offset fractSymb offsetSymb|
       
   355 
       
   356     extent     := (self layoutView superView computeExtent) perform:xOrY.
       
   357     fractSymb  := (what, 'Fraction') asSymbol.
       
   358     offsetSymb := (what,   'Offset') asSymbol.
       
   359     fraction   := (self aspectFor:fractSymb)  value.
       
   360     offset     := (self aspectFor:offsetSymb) value.
       
   361     fraction   := (fraction + (offset / extent)) asFloat.
       
   362 
       
   363     (fraction > 1.0) ifTrue:[ fraction := 1.0 ].
       
   364     (fraction < 0.0) ifTrue:[ fraction := 0 ].
       
   365 
       
   366     (self aspectFor:offsetSymb) value:0.
       
   367     (self aspectFor:fractSymb)  value:fraction.
       
   368 
       
   369 
       
   370 
       
   371 !
       
   372 
       
   373 relativeBottom
       
   374     self relative:'bottom' xOrY:#y
       
   375 
       
   376 
       
   377 !
       
   378 
       
   379 relativeLeft
       
   380     self relative:'left' xOrY:#x
       
   381 
       
   382 !
       
   383 
       
   384 relativeRight
       
   385     self relative:'right' xOrY:#x
       
   386 
       
   387 !
       
   388 
       
   389 relativeTop
       
   390     self relative:'top' xOrY:#y
       
   391 
       
   392 ! !
       
   393 
       
   394 !UILayoutTool methodsFor:'initialization'!
       
   395 
       
   396 initialize
       
   397     "initialize channels
       
   398     "
       
   399     super initialize.
       
   400 
       
   401     aspects  := IdentityDictionary new.
       
   402 
       
   403     #(  bottomFraction          bottomOffset
       
   404         leftFraction            leftOffset
       
   405         topFraction             topOffset
       
   406         rightFraction           rightOffset
       
   407         leftAlignmentFraction   topAlignmentFraction
       
   408     )
       
   409 
       
   410     do:[:aKey||holder|
       
   411         holder := ValueHolder new.
       
   412         holder addDependent:self.
       
   413         aspects at:aKey put:holder.
       
   414     ].
       
   415 
       
   416 
       
   417 
       
   418 
       
   419 ! !
       
   420 
       
   421 !UILayoutTool methodsFor:'selection'!
       
   422 
       
   423 selectedSlice
       
   424     "returns slice assigned to selection or nil
       
   425     "
       
   426     selection notNil ifTrue:[
       
   427         self class slices do:[:aSlice|
       
   428             aSlice first = selection ifTrue:[
       
   429                 ^ aSlice
       
   430             ]
       
   431         ]
       
   432     ].
       
   433     ^ nil
       
   434 
       
   435 !
       
   436 
       
   437 selection
       
   438     ^ selection
       
   439 !
       
   440 
       
   441 selection:aSelection
       
   442     |appl view slice|
       
   443 
       
   444     selection = aSelection ifFalse:[
       
   445         (selection := aSelection) notNil ifTrue:[
       
   446             slice := self selectedSlice.
       
   447             appl  := slice last asString.
       
   448             appl := Smalltalk classNamed:(self class name asString, '::', appl).
       
   449             appl := appl new.
       
   450             appl masterApplication:self.
       
   451         ].
       
   452         self noteBookView client:appl
       
   453     ].
       
   454     self update
       
   455 ! !
       
   456 
       
   457 !UILayoutTool::LayoutOrigin class methodsFor:'interface specs'!
       
   458 
       
   459 windowSpec
       
   460     "this window spec was automatically generated by the ST/X UIPainter"
       
   461 
       
   462     "do not manually edit this - the painter/builder may not be able to
       
   463      handle the specification if its corrupted."
       
   464 
       
   465     "
       
   466      UIPainter new openOnClass:UILayoutTool::LayoutOrigin andSelector:#windowSpec
       
   467      UILayoutTool::LayoutOrigin new openInterface:#windowSpec
       
   468     "
       
   469     "UILayoutTool::LayoutOrigin open"
       
   470 
       
   471     <resource: #canvas>
       
   472 
       
   473     ^
       
   474      
       
   475        #(#FullSpec
       
   476           #'window:' 
       
   477            #(#WindowSpec
       
   478               #'name:' 'uIPainterView'
       
   479               #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
       
   480               #'label:' 'unnamed'
       
   481               #'bounds:' #(#Rectangle 0 0 258 93)
       
   482           )
       
   483           #'component:' 
       
   484            #(#SpecCollection
       
   485               #'collection:' 
       
   486                #(
       
   487                  #(#LabelSpec
       
   488                     #'name:' 'labelRelative'
       
   489                     #'layout:' #(#Point 57 12)
       
   490                     #'label:' 'relative'
       
   491                 )
       
   492                  #(#LabelSpec
       
   493                     #'name:' 'labelAbsolute'
       
   494                     #'layout:' #(#Point 154 13)
       
   495                     #'label:' 'absolute'
       
   496                 )
       
   497                  #(#LabelSpec
       
   498                     #'name:' 'labelLeft'
       
   499                     #'layout:' #(#AlignmentOrigin 52 0 44 0 1 0)
       
   500                     #'label:' 'left'
       
   501                 )
       
   502                  #(#InputFieldSpec
       
   503                     #'name:' 'fieldLeftFraction'
       
   504                     #'layout:' #(#LayoutFrame 57 0 44 0 114 0 62 0)
       
   505                     #'tabable:' true
       
   506                     #'model:' #leftFraction
       
   507                     #'type:' #numberOrNil
       
   508                 )
       
   509                  #(#ActionButtonSpec
       
   510                     #'name:' 'actionRelativeLeft'
       
   511                     #'layout:' #(#LayoutFrame 119 0 44 0 138 0 62 0)
       
   512                     #'label:' ''
       
   513                     #'model:' #relativeLeft
       
   514                 )
       
   515                  #(#InputFieldSpec
       
   516                     #'name:' 'fieldLeftOffset'
       
   517                     #'layout:' #(#LayoutFrame 154 0 44 0 212 0 62 0)
       
   518                     #'tabable:' true
       
   519                     #'model:' #leftOffset
       
   520                     #'type:' #numberOrNil
       
   521                 )
       
   522                  #(#ActionButtonSpec
       
   523                     #'name:' 'actionAbsoluteLeft'
       
   524                     #'layout:' #(#LayoutFrame 216 0 44 0 235 0 62 0)
       
   525                     #'label:' ''
       
   526                     #'model:' #absoluteLeft
       
   527                 )
       
   528                  #(#LabelSpec
       
   529                     #'name:' 'labelTop'
       
   530                     #'layout:' #(#AlignmentOrigin 52 0 71 0 1 0)
       
   531                     #'label:' 'top'
       
   532                 )
       
   533                  #(#InputFieldSpec
       
   534                     #'name:' 'fieldTopFraction'
       
   535                     #'layout:' #(#LayoutFrame 57 0 71 0 114 0 89 0)
       
   536                     #'tabable:' true
       
   537                     #'model:' #topFraction
       
   538                     #'type:' #numberOrNil
       
   539                 )
       
   540                  #(#ActionButtonSpec
       
   541                     #'name:' 'actionRelativeTop'
       
   542                     #'layout:' #(#LayoutFrame 119 0 71 0 138 0 89 0)
       
   543                     #'label:' ''
       
   544                     #'model:' #relativeTop
       
   545                 )
       
   546                  #(#InputFieldSpec
       
   547                     #'name:' 'fieldTopOffset'
       
   548                     #'layout:' #(#LayoutFrame 154 0 71 0 212 0 89 0)
       
   549                     #'tabable:' true
       
   550                     #'model:' #topOffset
       
   551                     #'type:' #numberOrNil
       
   552                 )
       
   553                  #(#ActionButtonSpec
       
   554                     #'name:' 'actionAbsoluteTop'
       
   555                     #'layout:' #(#LayoutFrame 216 0 71 0 235 0 89 0)
       
   556                     #'label:' ''
       
   557                     #'model:' #absoluteTop
       
   558                 )
       
   559               )
       
   560           )
       
   561       )
       
   562 ! !
       
   563 
       
   564 !UILayoutTool::LayoutOrigin methodsFor:'accessing'!
       
   565 
       
   566 fetch:aView
       
   567     "fetch layoutOrigin
       
   568     "
       
   569     |layout|
       
   570 
       
   571     layout  := UIPainterView asLayoutFrameFromView:aView.
       
   572 
       
   573     (self aspectFor:#leftOffset)   value:(layout leftOffset).
       
   574     (self aspectFor:#leftFraction) value:(layout leftFraction).
       
   575     (self aspectFor:#topOffset)    value:(layout topOffset).
       
   576     (self aspectFor:#topFraction)  value:(layout topFraction).
       
   577 
       
   578 
       
   579 !
       
   580 
       
   581 layout
       
   582     "returns current layout as layoutOrigin
       
   583     "
       
   584     |layout|
       
   585 
       
   586     layout  := Smalltalk::LayoutOrigin new.
       
   587 
       
   588     layout   leftOffset:((self aspectFor:#leftOffset)   value) ? 0.
       
   589     layout    topOffset:((self aspectFor:#topOffset)    value) ? 0.
       
   590     layout leftFraction:((self aspectFor:#leftFraction) value) ? 0.
       
   591     layout  topFraction:((self aspectFor:#topFraction)  value) ? 0.
       
   592 
       
   593   ^ layout
       
   594 
       
   595 ! !
       
   596 
       
   597 !UILayoutTool::Rectangle class methodsFor:'interface specs'!
       
   598 
       
   599 windowSpec
       
   600     "this window spec was automatically generated by the ST/X UIPainter"
       
   601 
       
   602     "do not manually edit this - the painter/builder may not be able to
       
   603      handle the specification if its corrupted."
       
   604 
       
   605     "
       
   606      UIPainter new openOnClass:UILayoutTool::Rectangle andSelector:#windowSpec
       
   607      UILayoutTool::Rectangle new openInterface:#windowSpec
       
   608     "
       
   609     "UILayoutTool::Rectangle open"
       
   610 
       
   611     <resource: #canvas>
       
   612 
       
   613     ^
       
   614      
       
   615        #(#FullSpec
       
   616           #'window:' 
       
   617            #(#WindowSpec
       
   618               #'name:' 'uIPainterView'
       
   619               #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
       
   620               #'label:' 'unnamed'
       
   621               #'bounds:' #(#Rectangle 0 0 224 146)
       
   622           )
       
   623           #'component:' 
       
   624            #(#SpecCollection
       
   625               #'collection:' 
       
   626                #(
       
   627                  #(#UISubSpecification
       
   628                     #'name:' 'subSpecification'
       
   629                     #'layout:' #(#LayoutOrigin 0 0 0 0)
       
   630                     #'majorKey:' #'UILayoutTool::Point'
       
   631                     #'minorKey:' #windowSpec
       
   632                 )
       
   633                  #(#LabelSpec
       
   634                     #'name:' 'labelCornerX'
       
   635                     #'layout:' #(#AlignmentOrigin 75 0 74 0 1 0)
       
   636                     #'label:' 'corner x:'
       
   637                     #'adjust:' #left
       
   638                 )
       
   639                  #(#InputFieldSpec
       
   640                     #'name:' 'fieldCornerX'
       
   641                     #'layout:' #(#LayoutFrame 77 0 74 0 170 0 92 0)
       
   642                     #'tabable:' true
       
   643                     #'model:' #rightOffset
       
   644                     #'type:' #numberOrNil
       
   645                 )
       
   646                  #(#LabelSpec
       
   647                     #'name:' 'labelCornerY'
       
   648                     #'layout:' #(#AlignmentOrigin 75 0 101 0 1 0)
       
   649                     #'label:' 'corner y:'
       
   650                     #'adjust:' #left
       
   651                 )
       
   652                  #(#InputFieldSpec
       
   653                     #'name:' 'fieldCornerY'
       
   654                     #'layout:' #(#LayoutFrame 77 0 101 0 170 0 119 0)
       
   655                     #'tabable:' true
       
   656                     #'model:' #bottomOffset
       
   657                     #'type:' #numberOrNil
       
   658                 )
       
   659               )
       
   660           )
       
   661       )
       
   662 ! !
       
   663 
       
   664 !UILayoutTool::Rectangle methodsFor:'accessing'!
       
   665 
       
   666 fetch:aView
       
   667     "fetch rectangle
       
   668     "
       
   669     |origin corner|
       
   670 
       
   671     origin := aView computeOrigin.
       
   672     corner := aView computeCorner.
       
   673 
       
   674     (self aspectFor:#leftOffset)   value:(origin x).
       
   675     (self aspectFor:#rightOffset)  value:(corner x).
       
   676     (self aspectFor:#topOffset)    value:(origin y).
       
   677     (self aspectFor:#bottomOffset) value:(corner y).
       
   678 
       
   679 
       
   680 !
       
   681 
       
   682 layout
       
   683     "returns current layout as rectangle
       
   684     "
       
   685   ^ Smalltalk::Rectangle left:(((self aspectFor:#leftOffset)   value) ? 0)
       
   686                           top:(((self aspectFor:#topOffset)    value) ? 0)
       
   687                         right:(((self aspectFor:#rightOffset)  value) ? 0)
       
   688                        bottom:(((self aspectFor:#bottomOffset) value) ? 0)
       
   689 
       
   690 
       
   691 ! !
       
   692 
       
   693 !UILayoutTool::Point class methodsFor:'interface specs'!
       
   694 
       
   695 windowSpec
       
   696     "this window spec was automatically generated by the ST/X UIPainter"
       
   697 
       
   698     "do not manually edit this - the painter/builder may not be able to
       
   699      handle the specification if its corrupted."
       
   700 
       
   701     "
       
   702      UIPainter new openOnClass:UILayoutTool::Point andSelector:#windowSpec
       
   703      UILayoutTool::Point new openInterface:#windowSpec
       
   704     "
       
   705     "UILayoutTool::Point open"
       
   706 
       
   707     <resource: #canvas>
       
   708 
       
   709     ^
       
   710      
       
   711        #(#FullSpec
       
   712           #'window:' 
       
   713            #(#WindowSpec
       
   714               #'name:' 'uIPainterView'
       
   715               #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
       
   716               #'label:' 'unnamed'
       
   717               #'bounds:' #(#Rectangle 0 0 194 66)
       
   718           )
       
   719           #'component:' 
       
   720            #(#SpecCollection
       
   721               #'collection:' 
       
   722                #(
       
   723                  #(#LabelSpec
       
   724                     #'name:' 'labelOriginX'
       
   725                     #'layout:' #(#AlignmentOrigin 75 0 19 0 1 0)
       
   726                     #'label:' 'origin x:'
       
   727                 )
       
   728                  #(#InputFieldSpec
       
   729                     #'name:' 'fieldOriginX'
       
   730                     #'layout:' #(#LayoutFrame 77 0 19 0 170 0 37 0)
       
   731                     #'tabable:' true
       
   732                     #'model:' #leftOffset
       
   733                     #'type:' #numberOrNil
       
   734                 )
       
   735                  #(#LabelSpec
       
   736                     #'name:' 'labelOriginY'
       
   737                     #'layout:' #(#AlignmentOrigin 75 0 46 0 1 0)
       
   738                     #'label:' 'origin y:'
       
   739                 )
       
   740                  #(#InputFieldSpec
       
   741                     #'name:' 'fieldOriginY'
       
   742                     #'layout:' #(#LayoutFrame 77 0 46 0 170 0 64 0)
       
   743                     #'tabable:' true
       
   744                     #'model:' #topOffset
       
   745                     #'type:' #numberOrNil
       
   746                 )
       
   747               )
       
   748           )
       
   749       )
       
   750 ! !
       
   751 
       
   752 !UILayoutTool::Point methodsFor:'accessing'!
       
   753 
       
   754 fetch:aView
       
   755     "fetch point
       
   756     "
       
   757     |origin|
       
   758 
       
   759     origin  := aView computeOrigin.
       
   760 
       
   761     (self aspectFor:#leftOffset) value:(origin x).
       
   762     (self aspectFor:#topOffset)  value:(origin y).
       
   763 
       
   764 
       
   765 !
       
   766 
       
   767 layout
       
   768     "returns current layout as point
       
   769     "
       
   770   ^ Smalltalk::Point x:(((self aspectFor:#leftOffset) value) ? 0)
       
   771                      y:(((self aspectFor:#topOffset)  value) ? 0)
       
   772 
       
   773 ! !
       
   774 
       
   775 !UILayoutTool::LayoutFrame class methodsFor:'interface specs'!
       
   776 
       
   777 windowSpec
       
   778     "this window spec was automatically generated by the ST/X UIPainter"
       
   779 
       
   780     "do not manually edit this - the painter/builder may not be able to
       
   781      handle the specification if its corrupted."
       
   782 
       
   783     "
       
   784      UIPainter new openOnClass:UILayoutTool::LayoutFrame andSelector:#windowSpec
       
   785      UILayoutTool::LayoutFrame new openInterface:#windowSpec
       
   786     "
       
   787     "UILayoutTool::LayoutFrame open"
       
   788 
       
   789     <resource: #canvas>
       
   790 
       
   791     ^
       
   792      
       
   793        #(#FullSpec
       
   794           #'window:' 
       
   795            #(#WindowSpec
       
   796               #'name:' 'uIPainterView'
       
   797               #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
       
   798               #'label:' 'unnamed'
       
   799               #'bounds:' #(#Rectangle 0 0 250 193)
       
   800           )
       
   801           #'component:' 
       
   802            #(#SpecCollection
       
   803               #'collection:' 
       
   804                #(
       
   805                  #(#UISubSpecification
       
   806                     #'name:' 'subLayoutSpec'
       
   807                     #'layout:' #(#LayoutOrigin 0 0 0 0)
       
   808                     #'majorKey:' #'UILayoutTool::LayoutOrigin'
       
   809                     #'minorKey:' #windowSpec
       
   810                 )
       
   811                  #(#LabelSpec
       
   812                     #'name:' 'labelRight'
       
   813                     #'layout:' #(#AlignmentOrigin 52 0 98 0 1 0)
       
   814                     #'label:' 'right'
       
   815                 )
       
   816                  #(#InputFieldSpec
       
   817                     #'name:' 'fieldRightFraction'
       
   818                     #'layout:' #(#LayoutFrame 57 0 98 0 114 0 116 0)
       
   819                     #'model:' #rightFraction
       
   820                     #'type:' #numberOrNil
       
   821                 )
       
   822                  #(#ActionButtonSpec
       
   823                     #'name:' 'actionRelativeRight'
       
   824                     #'layout:' #(#LayoutFrame 119 0 98 0 138 0 116 0)
       
   825                     #'label:' ''
       
   826                     #'model:' #relativeRight
       
   827                 )
       
   828                  #(#InputFieldSpec
       
   829                     #'name:' 'fieldRightOffset'
       
   830                     #'layout:' #(#LayoutFrame 154 0 98 0 212 0 116 0)
       
   831                     #'model:' #rightOffset
       
   832                     #'type:' #numberOrNil
       
   833                 )
       
   834                  #(#ActionButtonSpec
       
   835                     #'name:' 'actionAbsoluteRight'
       
   836                     #'layout:' #(#LayoutFrame 216 0 98 0 235 0 116 0)
       
   837                     #'label:' ''
       
   838                     #'model:' #absoluteRight
       
   839                 )
       
   840                  #(#LabelSpec
       
   841                     #'name:' 'labelBottom'
       
   842                     #'layout:' #(#AlignmentOrigin 52 0 126 0 1 0)
       
   843                     #'label:' 'bottom'
       
   844                 )
       
   845                  #(#InputFieldSpec
       
   846                     #'name:' 'fieldBottomFraction'
       
   847                     #'layout:' #(#LayoutFrame 57 0 126 0 114 0 144 0)
       
   848                     #'model:' #bottomFraction
       
   849                     #'type:' #numberOrNil
       
   850                 )
       
   851                  #(#ActionButtonSpec
       
   852                     #'name:' 'actionRelativeBottom'
       
   853                     #'layout:' #(#LayoutFrame 119 0 126 0 138 0 144 0)
       
   854                     #'label:' ''
       
   855                     #'model:' #relativeBottom
       
   856                 )
       
   857                  #(#InputFieldSpec
       
   858                     #'name:' 'fieldBottomOffset'
       
   859                     #'layout:' #(#LayoutFrame 154 0 126 0 211 0 144 0)
       
   860                     #'model:' #bottomOffset
       
   861                     #'type:' #numberOrNil
       
   862                 )
       
   863                  #(#ActionButtonSpec
       
   864                     #'name:' 'actionAbsoluteBottom'
       
   865                     #'layout:' #(#LayoutFrame 216 0 126 0 235 0 144 0)
       
   866                     #'label:' ''
       
   867                     #'model:' #absoluteBottom
       
   868                 )
       
   869               )
       
   870           )
       
   871       )
       
   872 ! !
       
   873 
       
   874 !UILayoutTool::LayoutFrame methodsFor:'accessing'!
       
   875 
       
   876 fetch:aView
       
   877     |layout|
       
   878 
       
   879     layout  := UIPainterView asLayoutFrameFromView:aView.
       
   880 
       
   881     (self aspectFor:#leftOffset)     value:(layout leftOffset).
       
   882     (self aspectFor:#leftFraction)   value:(layout leftFraction).
       
   883     (self aspectFor:#topOffset)      value:(layout topOffset).
       
   884     (self aspectFor:#topFraction)    value:(layout topFraction).
       
   885     (self aspectFor:#rightOffset)    value:(layout rightOffset).
       
   886     (self aspectFor:#bottomOffset)   value:(layout bottomOffset).
       
   887     (self aspectFor:#rightFraction)  value:(layout rightFraction).
       
   888     (self aspectFor:#bottomFraction) value:(layout bottomFraction).
       
   889 
       
   890 !
       
   891 
       
   892 layout
       
   893     "returns current layout as layoutFrame
       
   894     "
       
   895     |layout|
       
   896 
       
   897     layout  := Smalltalk::LayoutFrame new.
       
   898 
       
   899     layout     leftOffset:((self aspectFor:#leftOffset)     value) ? 0.
       
   900     layout    rightOffset:((self aspectFor:#rightOffset)    value) ? 0.
       
   901     layout      topOffset:((self aspectFor:#topOffset)      value) ? 0.
       
   902     layout   bottomOffset:((self aspectFor:#bottomOffset)   value) ? 0.
       
   903     layout   leftFraction:((self aspectFor:#leftFraction)   value) ? 0.
       
   904     layout  rightFraction:((self aspectFor:#rightFraction)  value) ? 0.
       
   905     layout    topFraction:((self aspectFor:#topFraction)    value) ? 0.
       
   906     layout bottomFraction:((self aspectFor:#bottomFraction) value) ? 0.
       
   907 
       
   908   ^ layout
       
   909 
       
   910 ! !
       
   911 
       
   912 !UILayoutTool::AlignmentOrigin class methodsFor:'interface specs'!
       
   913 
       
   914 windowSpec
       
   915     "this window spec was automatically generated by the ST/X UIPainter"
       
   916 
       
   917     "do not manually edit this - the painter/builder may not be able to
       
   918      handle the specification if its corrupted."
       
   919 
       
   920     "
       
   921      UIPainter new openOnClass:UILayoutTool::AlignmentOrigin andSelector:#windowSpec
       
   922      UILayoutTool::AlignmentOrigin new openInterface:#windowSpec
       
   923     "
       
   924     "UILayoutTool::AlignmentOrigin open"
       
   925 
       
   926     <resource: #canvas>
       
   927 
       
   928     ^
       
   929      
       
   930        #(#FullSpec
       
   931           #'window:' 
       
   932            #(#WindowSpec
       
   933               #'name:' 'uIPainterView'
       
   934               #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
       
   935               #'label:' 'AlignmentOrigin'
       
   936               #'bounds:' #(#Rectangle 0 0 268 205)
       
   937           )
       
   938           #'component:' 
       
   939            #(#SpecCollection
       
   940               #'collection:' 
       
   941                #(
       
   942                  #(#UISubSpecification
       
   943                     #'name:' 'subSpecification'
       
   944                     #'layout:' #(#LayoutOrigin 0 0 0 0)
       
   945                     #'majorKey:' #'UILayoutTool::LayoutOrigin'
       
   946                     #'minorKey:' #windowSpec
       
   947                 )
       
   948                  #(#LabelSpec
       
   949                     #'name:' 'label5'
       
   950                     #'layout:' #(#AlignmentOrigin 84 0 106 0 1 0)
       
   951                     #'label:' 'align H'
       
   952                     #'adjust:' #right
       
   953                 )
       
   954                  #(#LabelSpec
       
   955                     #'name:' 'label6'
       
   956                     #'layout:' #(#AlignmentOrigin 84 0 132 0 1 0)
       
   957                     #'label:' 'align V'
       
   958                     #'adjust:' #right
       
   959                 )
       
   960                  #(#InputFieldSpec
       
   961                     #'name:' 'editField5'
       
   962                     #'layout:' #(#LayoutFrame 89 0 106 0 146 0 124 0)
       
   963                     #'tabable:' true
       
   964                     #'model:' #leftAlignmentFraction
       
   965                     #'type:' #numberOrNil
       
   966                 )
       
   967                  #(#InputFieldSpec
       
   968                     #'name:' 'editField6'
       
   969                     #'layout:' #(#LayoutFrame 89 0 132 0 146 0 150 0)
       
   970                     #'tabable:' true
       
   971                     #'model:' #topAlignmentFraction
       
   972                     #'type:' #numberOrNil
       
   973                 )
       
   974                  #(#DividerSpec
       
   975                     #'name:' 'separator1'
       
   976                     #'layout:' #(#Rectangle 175 111 224 114)
       
   977                     #'orientation:' #horizontal
       
   978                 )
       
   979                  #(#DividerSpec
       
   980                     #'name:' 'separator2'
       
   981                     #'layout:' #(#Rectangle 175 143 224 146)
       
   982                     #'orientation:' #horizontal
       
   983                 )
       
   984                  #(#DividerSpec
       
   985                     #'name:' 'separator3'
       
   986                     #'layout:' #(#Rectangle 171 118 174 139)
       
   987                     #'orientation:' #vertical
       
   988                 )
       
   989                  #(#DividerSpec
       
   990                     #'name:' 'separator4'
       
   991                     #'layout:' #(#Rectangle 226 118 229 139)
       
   992                     #'orientation:' #vertical
       
   993                 )
       
   994                  #(#ActionButtonSpec
       
   995                     #'name:' 'alignBottomRight'
       
   996                     #'layout:' #(#Rectangle 222 138 234 150)
       
   997                     #'label:' ''
       
   998                     #'model:' #alignBottomRight
       
   999                 )
       
  1000                  #(#ActionButtonSpec
       
  1001                     #'name:' 'alignTopLeft'
       
  1002                     #'layout:' #(#Rectangle 166 107 178 119)
       
  1003                     #'label:' ''
       
  1004                     #'model:' #alignTopLeft
       
  1005                 )
       
  1006                  #(#ActionButtonSpec
       
  1007                     #'name:' 'alignTopRight'
       
  1008                     #'layout:' #(#Rectangle 222 107 234 119)
       
  1009                     #'label:' ''
       
  1010                     #'model:' #alignTopRight
       
  1011                 )
       
  1012                  #(#ActionButtonSpec
       
  1013                     #'name:' 'alignBottomLeft'
       
  1014                     #'layout:' #(#Rectangle 166 137 178 149)
       
  1015                     #'label:' ''
       
  1016                     #'model:' #alignBottomLeft
       
  1017                 )
       
  1018                  #(#ActionButtonSpec
       
  1019                     #'name:' 'alignTopCenter'
       
  1020                     #'layout:' #(#Rectangle 194 107 206 119)
       
  1021                     #'label:' ''
       
  1022                     #'model:' #alignTopCenter
       
  1023                 )
       
  1024                  #(#ActionButtonSpec
       
  1025                     #'name:' 'alignBottomCenter'
       
  1026                     #'layout:' #(#Rectangle 194 138 206 150)
       
  1027                     #'label:' ''
       
  1028                     #'model:' #alignBottomCenter
       
  1029                 )
       
  1030                  #(#ActionButtonSpec
       
  1031                     #'name:' 'alignLeftCenter'
       
  1032                     #'layout:' #(#Rectangle 166 122 178 134)
       
  1033                     #'label:' ''
       
  1034                     #'model:' #alignLeftCenter
       
  1035                 )
       
  1036                  #(#ActionButtonSpec
       
  1037                     #'name:' 'alignRightCenter'
       
  1038                     #'layout:' #(#Rectangle 222 122 234 134)
       
  1039                     #'label:' ''
       
  1040                     #'model:' #alignRightCenter
       
  1041                 )
       
  1042                  #(#ActionButtonSpec
       
  1043                     #'name:' 'alignCenter'
       
  1044                     #'layout:' #(#Rectangle 194 122 206 134)
       
  1045                     #'label:' ''
       
  1046                     #'model:' #alignCenter
       
  1047                 )
       
  1048               )
       
  1049           )
       
  1050       )
       
  1051 ! !
       
  1052 
       
  1053 !UILayoutTool::AlignmentOrigin methodsFor:'accessing'!
       
  1054 
       
  1055 fetch:aView
       
  1056     "fetch alignmentOrigin
       
  1057     "
       
  1058     |layout type extent|
       
  1059 
       
  1060     type   := UIPainterView layoutType:aView.
       
  1061     layout := aView geometryLayout.
       
  1062 
       
  1063     layout isLayout ifTrue:[
       
  1064         (self aspectFor:#leftOffset)   value:(layout leftOffset).
       
  1065         (self aspectFor:#leftFraction) value:(layout leftFraction).
       
  1066         (self aspectFor:#topOffset)    value:(layout topOffset).
       
  1067         (self aspectFor:#topFraction)  value:(layout topFraction).
       
  1068 
       
  1069         type == #AlignmentOrigin ifTrue:[
       
  1070             (self aspectFor:#leftAlignmentFraction) value:(layout leftAlignmentFraction).
       
  1071             (self aspectFor:#topAlignmentFraction)  value:(layout topAlignmentFraction).
       
  1072           ^ self
       
  1073         ]
       
  1074     ] ifFalse:[
       
  1075         layout := aView computeOrigin.
       
  1076 
       
  1077         (self aspectFor:#leftOffset)   value:(layout x).
       
  1078         (self aspectFor:#leftFraction) value:0.
       
  1079         (self aspectFor:#topOffset)    value:(layout y).
       
  1080         (self aspectFor:#topFraction)  value:0.
       
  1081     ].
       
  1082     (self aspectFor:#leftAlignmentFraction) value:0.
       
  1083     (self aspectFor:#topAlignmentFraction)  value:0.
       
  1084 
       
  1085 
       
  1086 !
       
  1087 
       
  1088 layout
       
  1089     "returns current layout as alignmentOrigin
       
  1090     "
       
  1091     |layout|
       
  1092 
       
  1093     layout  := Smalltalk::AlignmentOrigin new.
       
  1094 
       
  1095     layout   leftOffset:((self aspectFor:#leftOffset)   value) ? 0.
       
  1096     layout    topOffset:((self aspectFor:#topOffset)    value) ? 0.
       
  1097     layout leftFraction:((self aspectFor:#leftFraction) value) ? 0.
       
  1098     layout  topFraction:((self aspectFor:#topFraction)  value) ? 0.
       
  1099 
       
  1100     layout leftAlignmentFraction:((self aspectFor:#leftAlignmentFraction) value) ? 0.
       
  1101     layout  topAlignmentFraction:((self aspectFor:#topAlignmentFraction)  value) ? 0.
       
  1102 
       
  1103   ^ layout
       
  1104 ! !
       
  1105 
       
  1106 !UILayoutTool::AlignmentOrigin methodsFor:'alignment'!
       
  1107 
       
  1108 alignBottomCenter
       
  1109     self makeAlignLeft:0.5 top:1
       
  1110 
       
  1111 
       
  1112 !
       
  1113 
       
  1114 alignBottomLeft
       
  1115     self makeAlignLeft:0 top:1
       
  1116 
       
  1117 
       
  1118 !
       
  1119 
       
  1120 alignBottomRight
       
  1121     self makeAlignLeft:1 top:1
       
  1122 
       
  1123 
       
  1124 !
       
  1125 
       
  1126 alignCenter
       
  1127     self makeAlignLeft:0.5 top:0.5
       
  1128 
       
  1129 
       
  1130 !
       
  1131 
       
  1132 alignLeftCenter
       
  1133     self makeAlignLeft:0 top:0.5
       
  1134 
       
  1135 
       
  1136 !
       
  1137 
       
  1138 alignRightCenter
       
  1139     self makeAlignLeft:1 top:0.5
       
  1140 
       
  1141 
       
  1142 !
       
  1143 
       
  1144 alignTopCenter
       
  1145     self makeAlignLeft:0.5 top:0
       
  1146 
       
  1147 
       
  1148 !
       
  1149 
       
  1150 alignTopLeft
       
  1151     self makeAlignLeft:0 top:0
       
  1152 
       
  1153 
       
  1154 !
       
  1155 
       
  1156 alignTopRight
       
  1157     self makeAlignLeft:1 top:0
       
  1158 
       
  1159 
       
  1160 !
       
  1161 
       
  1162 makeAlignLeft:leftAlignmentFraction top:topAlignmentFraction
       
  1163     |lAF tAF lO tO ext|
       
  1164 
       
  1165     lAF     := (self aspectFor:#leftAlignmentFraction) value ? 0.
       
  1166     tAF     := (self aspectFor:#topAlignmentFraction)  value ? 0.
       
  1167     ext     := (self aspectFor:#layoutView) computeExtent.
       
  1168 
       
  1169     (self aspectFor:#leftAlignmentFraction) value:leftAlignmentFraction.
       
  1170     (self aspectFor:#topAlignmentFraction)  value:topAlignmentFraction.
       
  1171 
       
  1172     lO := (self aspectFor:#leftOffset) value ? 0.
       
  1173     tO := (self aspectFor:#topOffset)  value ? 0.
       
  1174 
       
  1175     lO := lO + (ext x * (leftAlignmentFraction - lAF)).
       
  1176     tO := tO + (ext y * (topAlignmentFraction  - tAF)).
       
  1177 
       
  1178     (self aspectFor:#leftOffset) value:(lO rounded).
       
  1179     (self aspectFor:#topOffset)  value:(tO rounded).
       
  1180 
       
  1181 !
       
  1182 
       
  1183 makeAlignTopRight
       
  1184     self makeAlignLeft:1 top:0
       
  1185 
       
  1186 
       
  1187 ! !
       
  1188 
       
  1189 !UILayoutTool::Extent class methodsFor:'interface specs'!
       
  1190 
       
  1191 windowSpec
       
  1192     "this window spec was automatically generated by the ST/X UIPainter"
       
  1193 
       
  1194     "do not manually edit this - the painter/builder may not be able to
       
  1195      handle the specification if its corrupted."
       
  1196 
       
  1197     "
       
  1198      UIPainter new openOnClass:UILayoutTool::Extent andSelector:#windowSpec
       
  1199      UILayoutTool::Extent new openInterface:#windowSpec
       
  1200     "
       
  1201     "UILayoutTool::Extent open"
       
  1202 
       
  1203     <resource: #canvas>
       
  1204 
       
  1205     ^
       
  1206      
       
  1207        #(#FullSpec
       
  1208           #'window:' 
       
  1209            #(#WindowSpec
       
  1210               #'name:' 'uIPainterView'
       
  1211               #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
       
  1212               #'label:' 'unnamed'
       
  1213               #'bounds:' #(#Rectangle 0 0 226 86)
       
  1214           )
       
  1215           #'component:' 
       
  1216            #(#SpecCollection
       
  1217               #'collection:' 
       
  1218                #(
       
  1219                  #(#LabelSpec
       
  1220                     #'name:' 'labelHorizontal'
       
  1221                     #'layout:' #(#AlignmentOrigin 73 0 25 0 1 0)
       
  1222                     #'label:' 'horizontal:'
       
  1223                     #'adjust:' #left
       
  1224                 )
       
  1225                  #(#InputFieldSpec
       
  1226                     #'name:' 'fieldLeftOffset'
       
  1227                     #'layout:' #(#LayoutFrame 78 0 25 0 171 0 43 0)
       
  1228                     #'tabable:' true
       
  1229                     #'model:' #leftOffset
       
  1230                     #'type:' #numberOrNil
       
  1231                 )
       
  1232                  #(#LabelSpec
       
  1233                     #'name:' 'labelVertical'
       
  1234                     #'layout:' #(#AlignmentOrigin 73 0 52 0 1 0)
       
  1235                     #'label:' 'vertical:'
       
  1236                     #'adjust:' #left
       
  1237                 )
       
  1238                  #(#InputFieldSpec
       
  1239                     #'name:' 'fieldRightOffset'
       
  1240                     #'layout:' #(#LayoutFrame 78 0 52 0 171 0 70 0)
       
  1241                     #'tabable:' true
       
  1242                     #'model:' #rightOffset
       
  1243                     #'type:' #numberOrNil
       
  1244                 )
       
  1245               )
       
  1246           )
       
  1247       )
       
  1248 ! !
       
  1249 
       
  1250 !UILayoutTool::Extent methodsFor:'accessing'!
       
  1251 
       
  1252 fetch:aView
       
  1253     "fetch extent
       
  1254     "
       
  1255     |extent|
       
  1256 
       
  1257     extent  := aView computeExtent.
       
  1258 
       
  1259     (self aspectFor:#leftOffset)  value:(extent x).
       
  1260     (self aspectFor:#rightOffset) value:(extent y).
       
  1261 
       
  1262 
       
  1263 !
       
  1264 
       
  1265 layout
       
  1266     "returns current extent
       
  1267     "
       
  1268   ^ Smalltalk::Point x:(((self aspectFor:#leftOffset)   value) ? 0)
       
  1269                      y:(((self aspectFor:#rightOffset)  value) ? 0)
       
  1270 
       
  1271 ! !
       
  1272 
       
  1273 !UILayoutTool class methodsFor:'documentation'!
       
  1274 
       
  1275 version
       
  1276     ^ '$Header$'
       
  1277 ! !