UILayoutTool.st
changeset 1447 bf034d910b27
parent 1409 176ae89e0b31
child 1581 d7afe06ebbae
--- a/UILayoutTool.st	Tue Jan 09 20:59:05 2001 +0100
+++ b/UILayoutTool.st	Wed Jan 10 15:31:39 2001 +0100
@@ -30,6 +30,20 @@
 	privateIn:UILayoutTool
 !
 
+UILayoutTool::AnyLayout subclass:#AlignmentOrigin
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:UILayoutTool
+!
+
+UILayoutTool::AnyLayout subclass:#Extent
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:UILayoutTool
+!
+
 UILayoutTool::AnyLayout subclass:#LayoutFrame
 	instanceVariableNames:''
 	classVariableNames:''
@@ -37,7 +51,7 @@
 	privateIn:UILayoutTool
 !
 
-UILayoutTool::AnyLayout subclass:#AlignmentOrigin
+UILayoutTool::AnyLayout subclass:#LayoutOrigin
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -51,13 +65,6 @@
 	privateIn:UILayoutTool
 !
 
-UILayoutTool::AnyLayout subclass:#Extent
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:UILayoutTool
-!
-
 UILayoutTool::AnyLayout subclass:#Rectangle
 	instanceVariableNames:''
 	classVariableNames:''
@@ -65,13 +72,6 @@
 	privateIn:UILayoutTool
 !
 
-UILayoutTool::AnyLayout subclass:#LayoutOrigin
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:UILayoutTool
-!
-
 !UILayoutTool class methodsFor:'documentation'!
 
 copyright
@@ -943,7 +943,8 @@
         ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
 <@BP@I@N$L*P*)BZ''8*@@(@B''8*P&)B*$L*PC)@@<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'<@C0@O@N<L;0;/C>??;??/?>??;0?/C.<L;0C/@@<@@b') ; yourself); yourself]!
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'<@C0@O@N<L;0;/C>??;??/?>??;0?/C.<L;0C/@@<@@b') ; yourself); yourself]
+!
 
 imageAbsXFromRight
     "This resource specification was automatically generated
@@ -961,7 +962,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool imageAbsXFromRight'
-        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@<@BW@IT0%UBU$IT_%@@T@AT_%YBUTIT0%0BP@I@@<b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@<@C7@O\0=7C7<O_?=??7??_?=?C7\O\0=0C0@O@@<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@<@BW@IT0%UBU$IT_%@@T@AT_%YBUTIT0%0BP@I@@<b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@<@C7@O\0=7C7<O_?=??7??_?=?C7\O\0=0C0@O@@<b') ; yourself); yourself]
+!
 
 imageAbsY
     "This resource specification was automatically generated
@@ -979,7 +981,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool imageAbsY'
-        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A?''<BP@I@@$@BPA98D@ HD@P O''0 AC?<@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??????????<C0@O@@<@C0A?8G? O<@_ O?0??C?<@@@b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A?''<BP@I@@$@BPA98D@ HD@P O''0 AC?<@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??????????<C0@O@@<@C0A?8G? O<@_ O?0??C?<@@@b') ; yourself); yourself]
+!
 
 imageAbsYFromBottom
     "This resource specification was automatically generated
@@ -997,7 +1000,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool imageAbsYFromBottom'
-        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@??B@DO''0DH@ PD@ ^^@I@@$@BP@I@?''>@@X@A??<b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@??C?<O?0G8@?0G? _>@O@@<@C0@O@??????????<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@??B@DO''0DH@ PD@ ^^@I@@$@BP@I@?''>@@X@A??<b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@??C?<O?0G8@?0G? _>@O@@<@C0@O@??????????<b') ; yourself); yourself]
+!
 
 imageFractX
     "This resource specification was automatically generated
@@ -1018,7 +1022,8 @@
         ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
 <@>PBY@I&A&TJYII$X&@@X@A$X&RRYP)&A&PBY@I<@<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'<@?0C?@O>A?<O?9????????????>_?0?>A?0C?@O<@<b') ; yourself); yourself]!
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'<@?0C?@O>A?<O?9????????????>_?0?>A?0C?@O<@<b') ; yourself); yourself]
+!
 
 imageFractY
     "This resource specification was automatically generated
@@ -1036,7 +1041,583 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::AnyLayout imageFractY'
-        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A?''<PB@ PAB@BP@I@AB@HDA@H?''>@@X@A??<b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??????????<_>@?0A>@C0@O@A>@O<A?8??????????<b') ; yourself); yourself]! !
+        ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A?''<PB@ PAB@BP@I@AB@HDA@H?''>@@X@A??<b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??????????<_>@?0A>@C0@O@A>@O<A?8??????????<b') ; yourself); yourself]
+! !
+
+!UILayoutTool::AlignmentOrigin class methodsFor:'help specs'!
+
+helpSpec
+    "This resource specification was automatically generated
+     by the UIHelpTool of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIHelpTool may not be able to read the specification."
+
+    "
+     UIHelpTool openOnClass:UILayoutTool::AlignmentOrigin    
+    "
+
+    <resource: #help>
+
+    ^super helpSpec addPairsFrom:#(
+
+#alignBottomCenter
+'Aligns the selected widget bottomCenter to location.'
+
+#alignBottomLeft
+'Aligns the selected widget bottomLeft to location.'
+
+#alignBottomRight
+'Aligns the selected widget bottomRight to location.'
+
+#alignCenter
+'Aligns the selected widget center to location.'
+
+#alignHorizontal
+'Horizontal inset to the location point of the selected widget.'
+
+#alignLeftCenter
+'Aligns the selected widget leftCenter to location.'
+
+#alignRightCenter
+'Aligns the selected widget rightCenter to location.'
+
+#alignTopCenter
+'Aligns the selected widget topCenter to location.'
+
+#alignTopLeft
+'Aligns the selected widget topLeft to location.'
+
+#alignTopRight
+'Aligns the selected widget topRight to location.'
+
+#alignVertical
+'Vertical inset to the location point of the widget.'
+
+)
+! !
+
+!UILayoutTool::AlignmentOrigin class methodsFor:'interface specs'!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:UILayoutTool::AlignmentOrigin andSelector:#windowSpec
+     UILayoutTool::AlignmentOrigin new openInterface:#windowSpec
+     UILayoutTool::AlignmentOrigin open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpec
+        #window: 
+       #(#WindowSpec
+          #label: 'UILayoutTool-AlignmentOrigin'
+          #name: 'UILayoutTool-AlignmentOrigin'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1152 900)
+          #bounds: #(#Rectangle 42 231 447 438)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #(
+           #(#UISubSpecification
+              #name: 'layoutOriginSpec'
+              #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 111 0)
+              #majorKey: #UILayoutTool
+              #minorKey: #layoutOriginSpec
+            )
+           #(#FramedBoxSpec
+              #label: 'Alignment'
+              #name: 'FramedBox'
+              #layout: #(#LayoutFrame 1 0.0 113 0 0 1.0 208 0)
+              #labelPosition: #topLeft
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#LabelSpec
+                    #label: 'Horizontal:'
+                    #name: 'alignHLabel'
+                    #layout: #(#AlignmentOrigin 88 0 17 0 1 0)
+                    #adjust: #right
+                  )
+                 #(#InputFieldSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'leftAlignmentFractionField'
+                    #layout: #(#LayoutFrame 90 0 14 0 147 0 36 0)
+                    #activeHelpKey: #alignHorizontal
+                    #tabable: true
+                    #model: #leftAlignmentFraction
+                    #group: #inputGroup
+                    #type: #numberOrNil
+                    #acceptOnLostFocus: true
+                    #acceptChannel: #acceptChannel
+                    #modifiedChannel: #modifiedChannel
+                    #acceptOnPointerLeave: false
+                  )
+                 #(#LabelSpec
+                    #label: 'Vertical:'
+                    #name: 'alignVLabel'
+                    #layout: #(#AlignmentOrigin 88 0 43 0 1 0)
+                    #adjust: #right
+                  )
+                 #(#InputFieldSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'topAlignmentFractionField'
+                    #layout: #(#LayoutFrame 90 0 40 0 147 0 62 0)
+                    #activeHelpKey: #alignVertical
+                    #tabable: true
+                    #model: #topAlignmentFraction
+                    #group: #inputGroup
+                    #type: #numberOrNil
+                    #acceptOnLostFocus: true
+                    #acceptChannel: #acceptChannel
+                    #modifiedChannel: #modifiedChannel
+                    #acceptOnPointerLeave: false
+                  )
+                 #(#DividerSpec
+                    #name: 'separator1'
+                    #layout: #(#LayoutFrame 204 0 19 0 245 0 22 0)
+                  )
+                 #(#DividerSpec
+                    #name: 'separator2'
+                    #layout: #(#LayoutFrame 204 0 55 0 245 0 58 0)
+                  )
+                 #(#DividerSpec
+                    #name: 'separator3'
+                    #layout: #(#LayoutFrame 196 0 28 0 199 0 50 0)
+                    #orientation: #vertical
+                  )
+                 #(#DividerSpec
+                    #name: 'separator4'
+                    #layout: #(#LayoutFrame 250 0 28 0 253 0 50 0)
+                    #orientation: #vertical
+                  )
+                 #(#ActionButtonSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'alignTopLeft'
+                    #layout: #(#LayoutFrame 190 0 14 0 204 0 28 0)
+                    #activeHelpKey: #alignTopLeft
+                    #tabable: true
+                    #model: #alignTopLeft
+                  )
+                 #(#ActionButtonSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'alignTopCenter'
+                    #layout: #(#LayoutFrame 217 0 14 0 231 0 28 0)
+                    #activeHelpKey: #alignTopCenter
+                    #tabable: true
+                    #model: #alignTopCenter
+                  )
+                 #(#ActionButtonSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'alignTopRight'
+                    #layout: #(#LayoutFrame 245 0 14 0 259 0 28 0)
+                    #activeHelpKey: #alignTopRight
+                    #tabable: true
+                    #model: #alignTopRight
+                  )
+                 #(#ActionButtonSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'alignLeftCenter'
+                    #layout: #(#LayoutFrame 190 0 32 0 204 0 46 0)
+                    #activeHelpKey: #alignLeftCenter
+                    #tabable: true
+                    #model: #alignLeftCenter
+                  )
+                 #(#ActionButtonSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'alignCenter'
+                    #layout: #(#LayoutFrame 217 0 32 0 231 0 46 0)
+                    #activeHelpKey: #alignCenter
+                    #tabable: true
+                    #model: #alignCenter
+                  )
+                 #(#ActionButtonSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'alignRightCenter'
+                    #layout: #(#LayoutFrame 245 0 32 0 259 0 46 0)
+                    #activeHelpKey: #alignRightCenter
+                    #tabable: true
+                    #model: #alignRightCenter
+                  )
+                 #(#ActionButtonSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'alignBottomLeft'
+                    #layout: #(#LayoutFrame 190 0 50 0 204 0 64 0)
+                    #activeHelpKey: #alignBottomLeft
+                    #tabable: true
+                    #model: #alignBottomLeft
+                  )
+                 #(#ActionButtonSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'alignBottomCenter'
+                    #layout: #(#LayoutFrame 217 0 50 0 231 0 64 0)
+                    #activeHelpKey: #alignBottomCenter
+                    #tabable: true
+                    #model: #alignBottomCenter
+                  )
+                 #(#ActionButtonSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'alignBottomRight'
+                    #layout: #(#LayoutFrame 245 0 50 0 259 0 64 0)
+                    #activeHelpKey: #alignBottomRight
+                    #tabable: true
+                    #model: #alignBottomRight
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+! !
+
+!UILayoutTool::AlignmentOrigin methodsFor:'accessing'!
+
+fetch:aView spec:aSpec
+    "fetch alignmentOrigin
+    "
+    |layout type 
+     leftAlignmentFractionHolder topAlignmentFractionHolder
+     leftOffsetHolder leftFractionHolder topOffsetHolder topFractionHolder|
+
+    type   := UIPainterView layoutType:aView.
+    layout := aView geometryLayout.
+
+    leftOffsetHolder := (self aspectFor:#leftOffset).
+    leftFractionHolder := (self aspectFor:#leftFraction).
+    topOffsetHolder := (self aspectFor:#topOffset).
+    topFractionHolder := (self aspectFor:#topFraction).
+    leftAlignmentFractionHolder := (self aspectFor:#leftAlignmentFraction).
+    topAlignmentFractionHolder := (self aspectFor:#topAlignmentFraction).
+
+    layout isLayout ifTrue:[
+        leftOffsetHolder   value:(layout leftOffset).
+        leftFractionHolder value:(layout leftFraction).
+        topOffsetHolder    value:(layout topOffset).
+        topFractionHolder  value:(layout topFraction).
+
+        type == #AlignmentOrigin ifTrue:[
+            leftAlignmentFractionHolder value:(layout leftAlignmentFraction).
+            topAlignmentFractionHolder  value:(layout topAlignmentFraction).
+          ^ self
+        ]
+    ] ifFalse:[
+        layout := aView computeOrigin.
+
+        leftOffsetHolder   value:(layout x).
+        leftFractionHolder value:0.
+        topOffsetHolder    value:(layout y).
+        topFractionHolder  value:0.
+    ].
+    leftAlignmentFractionHolder value:0.
+    topAlignmentFractionHolder  value:0.
+
+
+!
+
+layout
+    "returns current layout as alignmentOrigin
+    "
+    |layout|
+
+    layout  := Smalltalk::AlignmentOrigin new.
+
+    layout   leftOffset:((self aspectFor:#leftOffset)   value) ? 0.
+    layout    topOffset:((self aspectFor:#topOffset)    value) ? 0.
+    layout leftFraction:((self aspectFor:#leftFraction) value) ? 0.
+    layout  topFraction:((self aspectFor:#topFraction)  value) ? 0.
+
+    layout leftAlignmentFraction:((self aspectFor:#leftAlignmentFraction) value) ? 0.
+    layout  topAlignmentFraction:((self aspectFor:#topAlignmentFraction)  value) ? 0.
+
+  ^ layout
+! !
+
+!UILayoutTool::AlignmentOrigin methodsFor:'alignment'!
+
+alignBottomCenter
+    self makeAlignLeft:0.5 top:1
+
+
+!
+
+alignBottomLeft
+    self makeAlignLeft:0 top:1
+
+
+!
+
+alignBottomRight
+    self makeAlignLeft:1 top:1
+
+
+!
+
+alignCenter
+    self makeAlignLeft:0.5 top:0.5
+
+
+!
+
+alignLeftCenter
+    self makeAlignLeft:0 top:0.5
+
+
+!
+
+alignRightCenter
+    self makeAlignLeft:1 top:0.5
+
+
+!
+
+alignTopCenter
+    self makeAlignLeft:0.5 top:0
+
+
+!
+
+alignTopLeft
+    self makeAlignLeft:0 top:0
+
+
+!
+
+alignTopRight
+    self makeAlignLeft:1 top:0
+
+
+!
+
+makeAlignLeft:leftAlignmentFraction top:topAlignmentFraction
+    |lAF tAF lO tO ext lAHolder tAHolder lOHolder tOHolder|
+
+    lAF     := (lAHolder := self aspectFor:#leftAlignmentFraction) value ? 0.
+    tAF     := (tAHolder := self aspectFor:#topAlignmentFraction)  value ? 0.
+    ext     := (self aspectFor:#layoutView) computeExtent.
+
+    lAHolder value:leftAlignmentFraction.
+    tAHolder  value:topAlignmentFraction.
+
+    lO := (lOHolder := self aspectFor:#leftOffset) value ? 0.
+    tO := (tOHolder := self aspectFor:#topOffset)  value ? 0.
+
+    lO := lO + (ext x * (leftAlignmentFraction - lAF)).
+    tO := tO + (ext y * (topAlignmentFraction  - tAF)).
+
+    lOHolder value:(lO rounded).
+    tOHolder value:(tO rounded).
+
+!
+
+makeAlignTopRight
+    self makeAlignLeft:1 top:0
+
+
+! !
+
+!UILayoutTool::Extent class methodsFor:'help specs'!
+
+helpSpec
+    "This resource specification was automatically generated
+     by the UIHelpTool of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIHelpTool may not be able to read the specification."
+
+    "
+     UIHelpTool openOnClass:UILayoutTool::Extent    
+    "
+
+    <resource: #help>
+
+    ^super helpSpec addPairsFrom:#(
+
+#hrzExtent
+'Horizontal extent of the selected widget.'
+
+#vrtExtent
+'Vertical extent of the selected widget.'
+
+)
+! !
+
+!UILayoutTool::Extent class methodsFor:'interface specs'!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:UILayoutTool::Extent andSelector:#windowSpec
+     UILayoutTool::Extent new openInterface:#windowSpec
+     UILayoutTool::Extent open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpec
+        #window: 
+       #(#WindowSpec
+          #label: 'UILayoutTool-Extent'
+          #name: 'UILayoutTool-Extent'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1152 900)
+          #bounds: #(#Rectangle 506 24 832 173)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #(
+           #(#FramedBoxSpec
+              #label: 'Extent'
+              #name: 'FramedBox'
+              #layout: #(#LayoutFrame 0 0.0 6 0.0 0 1.0 137 0)
+              #labelPosition: #topLeft
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#LabelSpec
+                    #label: 'Width:'
+                    #name: 'labelWidth'
+                    #layout: #(#AlignmentOrigin 89 0 24 0 1 0.5)
+                    #adjust: #right
+                  )
+                 #(#InputFieldSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'fieldLeftOffset'
+                    #layout: #(#LayoutFrame 90 0 13 0 140 0 35 0)
+                    #activeHelpKey: #hrzExtent
+                    #enableChannel: #notUsingDefaultExtent
+                    #tabable: true
+                    #model: #leftOffset
+                    #group: #inputGroup
+                    #type: #numberOrNil
+                    #acceptOnLostFocus: true
+                    #acceptChannel: #acceptChannel
+                    #modifiedChannel: #modifiedChannel
+                    #acceptOnPointerLeave: false
+                  )
+                 #(#LabelSpec
+                    #label: 'Height:'
+                    #name: 'labelHeight'
+                    #layout: #(#AlignmentOrigin 89 0 49 0 1 0.5)
+                    #adjust: #right
+                  )
+                 #(#InputFieldSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #name: 'fieldRightOffset'
+                    #layout: #(#LayoutFrame 90 0 38 0 140 0 60 0)
+                    #activeHelpKey: #vrtExtent
+                    #enableChannel: #notUsingDefaultExtent
+                    #tabable: true
+                    #model: #rightOffset
+                    #group: #inputGroup
+                    #type: #numberOrNil
+                    #acceptOnLostFocus: true
+                    #acceptChannel: #acceptChannel
+                    #modifiedChannel: #modifiedChannel
+                    #acceptOnPointerLeave: false
+                  )
+                 #(#CheckBoxSpec
+                    #attributes: 
+                   #(#tabable
+                      true
+                    )
+                    #label: 'Use Widgets Default Extent'
+                    #name: 'useDefaultExtentCheckBox'
+                    #layout: #(#Point 5 74)
+                    #enableChannel: #defaultExtentEnabled
+                    #tabable: true
+                    #model: #useDefaultExtent
+                    #translateLabel: true
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+! !
+
+!UILayoutTool::Extent methodsFor:'accessing'!
+
+fetch:aView spec:aSpec
+    "fetch extent
+    "
+    |extent|
+
+    extent  := aView computeExtent.
+
+    (self aspectFor:#leftOffset)  value:(extent x).
+    (self aspectFor:#rightOffset) value:(extent y).
+
+    (self aspectFor:#useDefaultExtent) value:aSpec useDefaultExtent 
+!
+
+layout
+    "returns current extent
+    "
+  ^ Smalltalk::Point x:(((self aspectFor:#leftOffset)   value) ? 0)
+                     y:(((self aspectFor:#rightOffset)  value) ? 0)
+
+! !
 
 !UILayoutTool::LayoutFrame class methodsFor:'help specs'!
 
@@ -1148,7 +1729,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setBottomFixPartIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H"H"@BH"H @!!DQD@DQDR@BDQDP@QDQH@H"H"@BH"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@X@A @F@@X@A @G???????????????<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H"H"@BH"H @!!DQD@DQDR@BDQDP@QDQH@H"H"@BH"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@X@A @F@@X@A @G???????????????<b') ; yourself); yourself]
+!
 
 setBottomHalfIcon
     "This resource specification was automatically generated
@@ -1166,7 +1748,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setBottomHalfIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"H"H"H"H"@BDQDQDQDQH@HQDQDQDQD @!!DQDQDQDR@BDQDQDQDQH@H"H"H"H"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@X@A @F@@_????????????????????<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"H"H"H"H"@BDQDQDQDQH@HQDQDQDQD @!!DQDQDQDR@BDQDQDQDQH@H"H"H"H"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@X@A @F@@_????????????????????<b') ; yourself); yourself]
+!
 
 setBottomLeftQuarterIcon
     "This resource specification was automatically generated
@@ -1184,7 +1767,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setBottomLeftQuarterIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H"H"@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@H"H"@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@X@A @G?@_<A?0G?@_<A?0G?@_<A??<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@H"H"@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@H"H"@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@X@A @G?@_<A?0G?@_<A?0G?@_<A??<b') ; yourself); yourself]
+!
 
 setBottomRightQuarterIcon
     "This resource specification was automatically generated
@@ -1202,7 +1786,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setBottomRightQuarterIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BH"H"@@@@@@HQDQH@@@@@@!!DQD @@@@@BDQDR@@@@@@HQDQH@@@@@@"H"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@X@A @F@@XG? _>A?8G? _>A?8G???<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BH"H"@@@@@@HQDQH@@@@@@!!DQD @@@@@BDQDR@@@@@@HQDQH@@@@@@"H"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@X@A @F@@XG? _>A?8G? _>A?8G???<b') ; yourself); yourself]
+!
 
 setHorizontalFixPartIcon
     "This resource specification was automatically generated
@@ -1222,7 +1807,8 @@
         constantNamed:#'UILayoutTool::LayoutFrame setHorizontalFixPartIcon'
         ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"H"H@H"H"@BDQDP@QDQH@HQDQ@ADQD @"H"H@H"H"@@@@@@@@@@@@@@
-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@_???????????????8@A @F@@X@A??<b') ; yourself); yourself]!
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@@X@A @F@@_???????????????8@A @F@@X@A??<b') ; yourself); yourself]
+!
 
 setLeftFixPartIcon
     "This resource specification was automatically generated
@@ -1242,7 +1828,8 @@
         constantNamed:#'UILayoutTool::LayoutFrame setLeftFixPartIcon'
         ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
 @@@@@@@@@@@BH"@@@@@@@@HQH@@@@@@@@!!D @@@@@@@BDR@@@@@@@@HQH@@@@@@@@!!D @@@@@@@@@@@@@@@@@@@@@@@@@@@@@!!D @@@@@@@BDR@@@@@@@@HQ
-H@@@@@@@@!!D @@@@@@@BDR@@@@@@@@H"H@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???<@_0A?@G<@_0A?@G<@_0A?@G<@_0A?@G<@_0A??<b') ; yourself); yourself]!
+H@@@@@@@@!!D @@@@@@@BDR@@@@@@@@H"H@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???<@_0A?@G<@_0A?@G<@_0A?@G<@_0A?@G<@_0A??<b') ; yourself); yourself]
+!
 
 setLeftHalfIcon
     "This resource specification was automatically generated
@@ -1260,7 +1847,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setLeftHalfIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@BH"H @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@H"H"@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'????@_<A?0G?@_<A?0G?@_<A?0G?@_<A?0G?@_<A??<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@BH"H @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@H"H"@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'????@_<A?0G?@_<A?0G?@_<A?0G?@_<A?0G?@_<A??<b') ; yourself); yourself]
+!
 
 setRightFixPartIcon
     "This resource specification was automatically generated
@@ -1280,7 +1868,8 @@
         constantNamed:#'UILayoutTool::LayoutFrame setRightFixPartIcon'
         ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
 @@@@@@@@@@@@@@@@@@H"H@@@@@@@@!!D @@@@@@@BDR@@@@@@@@HQH@@@@@@@@!!D @@@@@@@BDR@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BDR@@@@@@@@HQH@@@
-@@@@@!!D @@@@@@@BDR@@@@@@@@HQH@@@@@@@@"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@O8@? C>@O8@? C>@O8@? C>@O8@? C>@O8@???<b') ; yourself); yourself]!
+@@@@@!!D @@@@@@@BDR@@@@@@@@HQH@@@@@@@@"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@O8@? C>@O8@? C>@O8@? C>@O8@? C>@O8@???<b') ; yourself); yourself]
+!
 
 setRightHalfIcon
     "This resource specification was automatically generated
@@ -1298,7 +1887,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setRightHalfIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@"H"H@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BH"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@?8C? O>@?8C? O>@?8C? O>@?8C? O>@?8C???<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@"H"H@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BH"H @@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@?8C? O>@?8C? O>@?8C? O>@?8C? O>@?8C???<b') ; yourself); yourself]
+!
 
 setToRightQuarterIcon
     "This resource specification was automatically generated
@@ -1316,7 +1906,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setToRightQuarterIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@"H"H@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@?8C? O>@?8C? O>@?8C? @F@@X@A @F@@X@A??<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@"H"H@@@@@@BDQD @@@@@@HQDR@@@@@@@!!DQH@@@@@@BDQD @@@@@@HQDR@@@@@@@"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>@?8C? O>@?8C? O>@?8C? @F@@X@A @F@@X@A??<b') ; yourself); yourself]
+!
 
 setTopFixPartIcon
     "This resource specification was automatically generated
@@ -1334,7 +1925,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setTopFixPartIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@BH"H @"H"H@HQDQ@ADQD @!!DQD@DQDR@BH"H @"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???????????????? @F@@X@A @F@@X@A @F@@X@A??<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@BH"H @"H"H@HQDQ@ADQD @!!DQD@DQDR@BH"H @"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???????????????? @F@@X@A @F@@X@A @F@@X@A??<b') ; yourself); yourself]
+!
 
 setTopHalfIcon
     "This resource specification was automatically generated
@@ -1352,7 +1944,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setTopHalfIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@BH"H"H"H"H@HQDQDQDQD @!!DQDQDQDR@BDQDQDQDQH@HQDQDQDQD @"H"H"H"H"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?????????????????????8@A @F@@X@A @F@@X@A??<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@BH"H"H"H"H@HQDQDQDQD @!!DQDQDQDR@BDQDQDQDQH@HQDQDQDQD @"H"H"H"H"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'?????????????????????8@A @F@@X@A @F@@X@A??<b') ; yourself); yourself]
+!
 
 setTopLeftQuarterIcon
     "This resource specification was automatically generated
@@ -1370,7 +1963,8 @@
 
     ^Icon
         constantNamed:#'UILayoutTool::LayoutFrame setTopLeftQuarterIcon'
-        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@BH"H"@@@@@@HQDQH@@@@@@!!DQD @@@@@BDQDR@@@@@@HQDQH@@@@@@"H"H @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???? _>A?8G? _>A?8G? X@A @F@@X@A @F@@X@A??<b') ; yourself); yourself]!
+        ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@BH"H"@@@@@@HQDQH@@@@@@!!DQD @@@@@BDQDR@@@@@@HQDQH@@@@@@"H"H @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???? _>A?8G? _>A?8G? X@A @F@@X@A @F@@X@A??<b') ; yourself); yourself]
+!
 
 setVerticalFixPartIcon
     "This resource specification was automatically generated
@@ -1390,7 +1984,8 @@
         constantNamed:#'UILayoutTool::LayoutFrame setVerticalFixPartIcon'
         ifAbsentPut:[(Depth4Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
 @@@@@@@@@@@@@@@"H @@@@@@@BDR@@@@@@@@HQH@@@@@@@@!!D @@@@@@@BDR@@@@@@@@HQH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@HQH@@@@@@@@!!D @@@@@@
-@BDR@@@@@@@@HQH@@@@@@@@!!D @@@@@@@BH"@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>G8X_!!!!>FG8X_!!!!>FG8X_!!!!>FG8X_!!!!>FG8X_!!??<b') ; yourself); yourself]! !
+@BDR@@@@@@@@HQH@@@@@@@@!!D @@@@@@@BH"@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??>G8X_!!!!>FG8X_!!!!>FG8X_!!!!>FG8X_!!!!>FG8X_!!??<b') ; yourself); yourself]
+! !
 
 !UILayoutTool::LayoutFrame class methodsFor:'interface specs'!
 
@@ -1843,8 +2438,8 @@
 
 setRightFixPartFrame
     self
-        setFrameLeft:1   offset:0 
-        right:1          offset:-30 
+        setFrameLeft:1   offset:-30 
+        right:1          offset:0 
         top:0            offset:0 
         bottom:1         offset:0
 !
@@ -1897,60 +2492,7 @@
         bottom:1       offset:0
 ! !
 
-!UILayoutTool::AlignmentOrigin class methodsFor:'help specs'!
-
-helpSpec
-    "This resource specification was automatically generated
-     by the UIHelpTool of ST/X."
-
-    "Do not manually edit this!! If it is corrupted,
-     the UIHelpTool may not be able to read the specification."
-
-    "
-     UIHelpTool openOnClass:UILayoutTool::AlignmentOrigin    
-    "
-
-    <resource: #help>
-
-    ^super helpSpec addPairsFrom:#(
-
-#alignBottomCenter
-'Aligns the selected widget bottomCenter to location.'
-
-#alignBottomLeft
-'Aligns the selected widget bottomLeft to location.'
-
-#alignBottomRight
-'Aligns the selected widget bottomRight to location.'
-
-#alignCenter
-'Aligns the selected widget center to location.'
-
-#alignHorizontal
-'Horizontal inset to the location point of the selected widget.'
-
-#alignLeftCenter
-'Aligns the selected widget leftCenter to location.'
-
-#alignRightCenter
-'Aligns the selected widget rightCenter to location.'
-
-#alignTopCenter
-'Aligns the selected widget topCenter to location.'
-
-#alignTopLeft
-'Aligns the selected widget topLeft to location.'
-
-#alignTopRight
-'Aligns the selected widget topRight to location.'
-
-#alignVertical
-'Vertical inset to the location point of the widget.'
-
-)
-! !
-
-!UILayoutTool::AlignmentOrigin class methodsFor:'interface specs'!
+!UILayoutTool::LayoutOrigin class methodsFor:'interface specs'!
 
 windowSpec
     "This resource specification was automatically generated
@@ -1960,356 +2502,71 @@
      the UIPainter may not be able to read the specification."
 
     "
-     UIPainter new openOnClass:UILayoutTool::AlignmentOrigin andSelector:#windowSpec
-     UILayoutTool::AlignmentOrigin new openInterface:#windowSpec
-     UILayoutTool::AlignmentOrigin open
+     UIPainter new openOnClass:UILayoutTool::LayoutOrigin andSelector:#windowSpec
+     UILayoutTool::LayoutOrigin new openInterface:#windowSpec
+     UILayoutTool::LayoutOrigin open
     "
 
     <resource: #canvas>
 
-    ^ 
-     #(#FullSpec
-        #name: #windowSpec
-        #window: 
-       #(#WindowSpec
-          #label: 'UILayoutTool-AlignmentOrigin'
-          #name: 'UILayoutTool-AlignmentOrigin'
-          #min: #(#Point 10 10)
-          #max: #(#Point 1152 900)
-          #bounds: #(#Rectangle 42 231 447 438)
-        )
-        #component: 
-       #(#SpecCollection
-          #collection: #(
-           #(#UISubSpecification
-              #name: 'layoutOriginSpec'
-              #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 111 0)
-              #majorKey: #UILayoutTool
-              #minorKey: #layoutOriginSpec
-            )
-           #(#FramedBoxSpec
-              #label: 'Alignment'
-              #name: 'FramedBox'
-              #layout: #(#LayoutFrame 1 0.0 113 0 0 1.0 208 0)
-              #labelPosition: #topLeft
-              #component: 
-             #(#SpecCollection
-                #collection: #(
-                 #(#LabelSpec
-                    #label: 'Horizontal:'
-                    #name: 'alignHLabel'
-                    #layout: #(#AlignmentOrigin 88 0 17 0 1 0)
-                    #adjust: #right
-                  )
-                 #(#InputFieldSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'leftAlignmentFractionField'
-                    #layout: #(#LayoutFrame 90 0 14 0 147 0 36 0)
-                    #activeHelpKey: #alignHorizontal
-                    #tabable: true
-                    #model: #leftAlignmentFraction
-                    #group: #inputGroup
-                    #type: #numberOrNil
-                    #acceptOnLostFocus: true
-                    #acceptChannel: #acceptChannel
-                    #modifiedChannel: #modifiedChannel
-                    #acceptOnPointerLeave: false
-                  )
-                 #(#LabelSpec
-                    #label: 'Vertical:'
-                    #name: 'alignVLabel'
-                    #layout: #(#AlignmentOrigin 88 0 43 0 1 0)
-                    #adjust: #right
-                  )
-                 #(#InputFieldSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'topAlignmentFractionField'
-                    #layout: #(#LayoutFrame 90 0 40 0 147 0 62 0)
-                    #activeHelpKey: #alignVertical
-                    #tabable: true
-                    #model: #topAlignmentFraction
-                    #group: #inputGroup
-                    #type: #numberOrNil
-                    #acceptOnLostFocus: true
-                    #acceptChannel: #acceptChannel
-                    #modifiedChannel: #modifiedChannel
-                    #acceptOnPointerLeave: false
-                  )
-                 #(#DividerSpec
-                    #name: 'separator1'
-                    #layout: #(#LayoutFrame 204 0 19 0 245 0 22 0)
-                  )
-                 #(#DividerSpec
-                    #name: 'separator2'
-                    #layout: #(#LayoutFrame 204 0 55 0 245 0 58 0)
-                  )
-                 #(#DividerSpec
-                    #name: 'separator3'
-                    #layout: #(#LayoutFrame 196 0 28 0 199 0 50 0)
-                    #orientation: #vertical
-                  )
-                 #(#DividerSpec
-                    #name: 'separator4'
-                    #layout: #(#LayoutFrame 250 0 28 0 253 0 50 0)
-                    #orientation: #vertical
-                  )
-                 #(#ActionButtonSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'alignTopLeft'
-                    #layout: #(#LayoutFrame 190 0 14 0 204 0 28 0)
-                    #activeHelpKey: #alignTopLeft
-                    #tabable: true
-                    #model: #alignTopLeft
-                  )
-                 #(#ActionButtonSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'alignTopCenter'
-                    #layout: #(#LayoutFrame 217 0 14 0 231 0 28 0)
-                    #activeHelpKey: #alignTopCenter
-                    #tabable: true
-                    #model: #alignTopCenter
-                  )
-                 #(#ActionButtonSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'alignTopRight'
-                    #layout: #(#LayoutFrame 245 0 14 0 259 0 28 0)
-                    #activeHelpKey: #alignTopRight
-                    #tabable: true
-                    #model: #alignTopRight
-                  )
-                 #(#ActionButtonSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'alignLeftCenter'
-                    #layout: #(#LayoutFrame 190 0 32 0 204 0 46 0)
-                    #activeHelpKey: #alignLeftCenter
-                    #tabable: true
-                    #model: #alignLeftCenter
-                  )
-                 #(#ActionButtonSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'alignCenter'
-                    #layout: #(#LayoutFrame 217 0 32 0 231 0 46 0)
-                    #activeHelpKey: #alignCenter
-                    #tabable: true
-                    #model: #alignCenter
-                  )
-                 #(#ActionButtonSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'alignRightCenter'
-                    #layout: #(#LayoutFrame 245 0 32 0 259 0 46 0)
-                    #activeHelpKey: #alignRightCenter
-                    #tabable: true
-                    #model: #alignRightCenter
-                  )
-                 #(#ActionButtonSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'alignBottomLeft'
-                    #layout: #(#LayoutFrame 190 0 50 0 204 0 64 0)
-                    #activeHelpKey: #alignBottomLeft
-                    #tabable: true
-                    #model: #alignBottomLeft
-                  )
-                 #(#ActionButtonSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'alignBottomCenter'
-                    #layout: #(#LayoutFrame 217 0 50 0 231 0 64 0)
-                    #activeHelpKey: #alignBottomCenter
-                    #tabable: true
-                    #model: #alignBottomCenter
-                  )
-                 #(#ActionButtonSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'alignBottomRight'
-                    #layout: #(#LayoutFrame 245 0 50 0 259 0 64 0)
-                    #activeHelpKey: #alignBottomRight
-                    #tabable: true
-                    #model: #alignBottomRight
-                  )
-                 )
-               
+    ^
+     
+       #(#FullSpec
+          #window: 
+           #(#WindowSpec
+              #name: 'UILayoutTool-LayoutOrigin'
+              #layout: #(#LayoutFrame 290 0 420 0 647 0 565 0)
+              #label: 'UILayoutTool-LayoutOrigin'
+              #min: #(#Point 10 10)
+              #max: #(#Point 1152 900)
+              #bounds: #(#Rectangle 290 420 648 566)
+              #usePreferredExtent: false
+          )
+          #component: 
+           #(#SpecCollection
+              #collection: 
+               #(
+                 #(#UISubSpecification
+                    #name: 'layoutOriginSpec'
+                    #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 110 0)
+                    #majorKey: #UILayoutTool
+                    #minorKey: #layoutOriginSpec
+                )
               )
-            )
-           )
-         
-        )
+          )
       )
 ! !
 
-!UILayoutTool::AlignmentOrigin methodsFor:'accessing'!
+!UILayoutTool::LayoutOrigin methodsFor:'accessing'!
 
 fetch:aView spec:aSpec
-    "fetch alignmentOrigin
+    "fetch layoutOrigin
     "
-    |layout type 
-     leftAlignmentFractionHolder topAlignmentFractionHolder
-     leftOffsetHolder leftFractionHolder topOffsetHolder topFractionHolder|
-
-    type   := UIPainterView layoutType:aView.
-    layout := aView geometryLayout.
-
-    leftOffsetHolder := (self aspectFor:#leftOffset).
-    leftFractionHolder := (self aspectFor:#leftFraction).
-    topOffsetHolder := (self aspectFor:#topOffset).
-    topFractionHolder := (self aspectFor:#topFraction).
-    leftAlignmentFractionHolder := (self aspectFor:#leftAlignmentFraction).
-    topAlignmentFractionHolder := (self aspectFor:#topAlignmentFraction).
-
-    layout isLayout ifTrue:[
-        leftOffsetHolder   value:(layout leftOffset).
-        leftFractionHolder value:(layout leftFraction).
-        topOffsetHolder    value:(layout topOffset).
-        topFractionHolder  value:(layout topFraction).
-
-        type == #AlignmentOrigin ifTrue:[
-            leftAlignmentFractionHolder value:(layout leftAlignmentFraction).
-            topAlignmentFractionHolder  value:(layout topAlignmentFraction).
-          ^ self
-        ]
-    ] ifFalse:[
-        layout := aView computeOrigin.
-
-        leftOffsetHolder   value:(layout x).
-        leftFractionHolder value:0.
-        topOffsetHolder    value:(layout y).
-        topFractionHolder  value:0.
-    ].
-    leftAlignmentFractionHolder value:0.
-    topAlignmentFractionHolder  value:0.
+    |layout|
+
+    layout  := UIPainterView asLayoutFrameFromView:aView.
+
+    (self aspectFor:#leftOffset)   value:(layout leftOffset).
+    (self aspectFor:#leftFraction) value:(layout leftFraction).
+    (self aspectFor:#topOffset)    value:(layout topOffset).
+    (self aspectFor:#topFraction)  value:(layout topFraction).
 
 
 !
 
 layout
-    "returns current layout as alignmentOrigin
+    "returns current layout as layoutOrigin
     "
     |layout|
 
-    layout  := Smalltalk::AlignmentOrigin new.
+    layout  := Smalltalk::LayoutOrigin new.
 
     layout   leftOffset:((self aspectFor:#leftOffset)   value) ? 0.
     layout    topOffset:((self aspectFor:#topOffset)    value) ? 0.
     layout leftFraction:((self aspectFor:#leftFraction) value) ? 0.
     layout  topFraction:((self aspectFor:#topFraction)  value) ? 0.
 
-    layout leftAlignmentFraction:((self aspectFor:#leftAlignmentFraction) value) ? 0.
-    layout  topAlignmentFraction:((self aspectFor:#topAlignmentFraction)  value) ? 0.
-
   ^ layout
-! !
-
-!UILayoutTool::AlignmentOrigin methodsFor:'alignment'!
-
-alignBottomCenter
-    self makeAlignLeft:0.5 top:1
-
-
-!
-
-alignBottomLeft
-    self makeAlignLeft:0 top:1
-
-
-!
-
-alignBottomRight
-    self makeAlignLeft:1 top:1
-
-
-!
-
-alignCenter
-    self makeAlignLeft:0.5 top:0.5
-
-
-!
-
-alignLeftCenter
-    self makeAlignLeft:0 top:0.5
-
-
-!
-
-alignRightCenter
-    self makeAlignLeft:1 top:0.5
-
-
-!
-
-alignTopCenter
-    self makeAlignLeft:0.5 top:0
-
-
-!
-
-alignTopLeft
-    self makeAlignLeft:0 top:0
-
-
-!
-
-alignTopRight
-    self makeAlignLeft:1 top:0
-
-
-!
-
-makeAlignLeft:leftAlignmentFraction top:topAlignmentFraction
-    |lAF tAF lO tO ext lAHolder tAHolder lOHolder tOHolder|
-
-    lAF     := (lAHolder := self aspectFor:#leftAlignmentFraction) value ? 0.
-    tAF     := (tAHolder := self aspectFor:#topAlignmentFraction)  value ? 0.
-    ext     := (self aspectFor:#layoutView) computeExtent.
-
-    lAHolder value:leftAlignmentFraction.
-    tAHolder  value:topAlignmentFraction.
-
-    lO := (lOHolder := self aspectFor:#leftOffset) value ? 0.
-    tO := (tOHolder := self aspectFor:#topOffset)  value ? 0.
-
-    lO := lO + (ext x * (leftAlignmentFraction - lAF)).
-    tO := tO + (ext y * (topAlignmentFraction  - tAF)).
-
-    lOHolder value:(lO rounded).
-    tOHolder value:(tO rounded).
-
-!
-
-makeAlignTopRight
-    self makeAlignLeft:1 top:0
-
 
 ! !
 
@@ -2381,165 +2638,6 @@
 
 ! !
 
-!UILayoutTool::Extent class methodsFor:'help specs'!
-
-helpSpec
-    "This resource specification was automatically generated
-     by the UIHelpTool of ST/X."
-
-    "Do not manually edit this!! If it is corrupted,
-     the UIHelpTool may not be able to read the specification."
-
-    "
-     UIHelpTool openOnClass:UILayoutTool::Extent    
-    "
-
-    <resource: #help>
-
-    ^super helpSpec addPairsFrom:#(
-
-#hrzExtent
-'Horizontal extent of the selected widget.'
-
-#vrtExtent
-'Vertical extent of the selected widget.'
-
-)
-! !
-
-!UILayoutTool::Extent class methodsFor:'interface specs'!
-
-windowSpec
-    "This resource specification was automatically generated
-     by the UIPainter of ST/X."
-
-    "Do not manually edit this!! If it is corrupted,
-     the UIPainter may not be able to read the specification."
-
-    "
-     UIPainter new openOnClass:UILayoutTool::Extent andSelector:#windowSpec
-     UILayoutTool::Extent new openInterface:#windowSpec
-     UILayoutTool::Extent open
-    "
-
-    <resource: #canvas>
-
-    ^ 
-     #(#FullSpec
-        #name: #windowSpec
-        #window: 
-       #(#WindowSpec
-          #label: 'UILayoutTool-Extent'
-          #name: 'UILayoutTool-Extent'
-          #min: #(#Point 10 10)
-          #max: #(#Point 1152 900)
-          #bounds: #(#Rectangle 506 24 832 173)
-        )
-        #component: 
-       #(#SpecCollection
-          #collection: #(
-           #(#FramedBoxSpec
-              #label: 'Extent'
-              #name: 'FramedBox'
-              #layout: #(#LayoutFrame 0 0.0 6 0.0 0 1.0 137 0)
-              #labelPosition: #topLeft
-              #component: 
-             #(#SpecCollection
-                #collection: #(
-                 #(#LabelSpec
-                    #label: 'Width:'
-                    #name: 'labelWidth'
-                    #layout: #(#AlignmentOrigin 89 0 24 0 1 0.5)
-                    #adjust: #right
-                  )
-                 #(#InputFieldSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'fieldLeftOffset'
-                    #layout: #(#LayoutFrame 90 0 13 0 140 0 35 0)
-                    #activeHelpKey: #hrzExtent
-                    #enableChannel: #notUsingDefaultExtent
-                    #tabable: true
-                    #model: #leftOffset
-                    #group: #inputGroup
-                    #type: #numberOrNil
-                    #acceptOnLostFocus: true
-                    #acceptChannel: #acceptChannel
-                    #modifiedChannel: #modifiedChannel
-                    #acceptOnPointerLeave: false
-                  )
-                 #(#LabelSpec
-                    #label: 'Height:'
-                    #name: 'labelHeight'
-                    #layout: #(#AlignmentOrigin 89 0 49 0 1 0.5)
-                    #adjust: #right
-                  )
-                 #(#InputFieldSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #name: 'fieldRightOffset'
-                    #layout: #(#LayoutFrame 90 0 38 0 140 0 60 0)
-                    #activeHelpKey: #vrtExtent
-                    #enableChannel: #notUsingDefaultExtent
-                    #tabable: true
-                    #model: #rightOffset
-                    #group: #inputGroup
-                    #type: #numberOrNil
-                    #acceptOnLostFocus: true
-                    #acceptChannel: #acceptChannel
-                    #modifiedChannel: #modifiedChannel
-                    #acceptOnPointerLeave: false
-                  )
-                 #(#CheckBoxSpec
-                    #attributes: 
-                   #(#tabable
-                      true
-                    )
-                    #label: 'Use Widgets Default Extent'
-                    #name: 'useDefaultExtentCheckBox'
-                    #layout: #(#Point 5 74)
-                    #enableChannel: #defaultExtentEnabled
-                    #tabable: true
-                    #model: #useDefaultExtent
-                    #translateLabel: true
-                  )
-                 )
-               
-              )
-            )
-           )
-         
-        )
-      )
-! !
-
-!UILayoutTool::Extent methodsFor:'accessing'!
-
-fetch:aView spec:aSpec
-    "fetch extent
-    "
-    |extent|
-
-    extent  := aView computeExtent.
-
-    (self aspectFor:#leftOffset)  value:(extent x).
-    (self aspectFor:#rightOffset) value:(extent y).
-
-    (self aspectFor:#useDefaultExtent) value:aSpec useDefaultExtent 
-!
-
-layout
-    "returns current extent
-    "
-  ^ Smalltalk::Point x:(((self aspectFor:#leftOffset)   value) ? 0)
-                     y:(((self aspectFor:#rightOffset)  value) ? 0)
-
-! !
-
 !UILayoutTool::Rectangle class methodsFor:'interface specs'!
 
 windowSpec
@@ -2664,84 +2762,6 @@
 
 ! !
 
-!UILayoutTool::LayoutOrigin class methodsFor:'interface specs'!
-
-windowSpec
-    "This resource specification was automatically generated
-     by the UIPainter of ST/X."
-
-    "Do not manually edit this!! If it is corrupted,
-     the UIPainter may not be able to read the specification."
-
-    "
-     UIPainter new openOnClass:UILayoutTool::LayoutOrigin andSelector:#windowSpec
-     UILayoutTool::LayoutOrigin new openInterface:#windowSpec
-     UILayoutTool::LayoutOrigin open
-    "
-
-    <resource: #canvas>
-
-    ^
-     
-       #(#FullSpec
-          #window: 
-           #(#WindowSpec
-              #name: 'UILayoutTool-LayoutOrigin'
-              #layout: #(#LayoutFrame 290 0 420 0 647 0 565 0)
-              #label: 'UILayoutTool-LayoutOrigin'
-              #min: #(#Point 10 10)
-              #max: #(#Point 1152 900)
-              #bounds: #(#Rectangle 290 420 648 566)
-              #usePreferredExtent: false
-          )
-          #component: 
-           #(#SpecCollection
-              #collection: 
-               #(
-                 #(#UISubSpecification
-                    #name: 'layoutOriginSpec'
-                    #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 110 0)
-                    #majorKey: #UILayoutTool
-                    #minorKey: #layoutOriginSpec
-                )
-              )
-          )
-      )
-! !
-
-!UILayoutTool::LayoutOrigin methodsFor:'accessing'!
-
-fetch:aView spec:aSpec
-    "fetch layoutOrigin
-    "
-    |layout|
-
-    layout  := UIPainterView asLayoutFrameFromView:aView.
-
-    (self aspectFor:#leftOffset)   value:(layout leftOffset).
-    (self aspectFor:#leftFraction) value:(layout leftFraction).
-    (self aspectFor:#topOffset)    value:(layout topOffset).
-    (self aspectFor:#topFraction)  value:(layout topFraction).
-
-
-!
-
-layout
-    "returns current layout as layoutOrigin
-    "
-    |layout|
-
-    layout  := Smalltalk::LayoutOrigin new.
-
-    layout   leftOffset:((self aspectFor:#leftOffset)   value) ? 0.
-    layout    topOffset:((self aspectFor:#topOffset)    value) ? 0.
-    layout leftFraction:((self aspectFor:#leftFraction) value) ? 0.
-    layout  topFraction:((self aspectFor:#topFraction)  value) ? 0.
-
-  ^ layout
-
-! !
-
 !UILayoutTool class methodsFor:'documentation'!
 
 version