UIPropertyView.st
changeset 62 0e8573b4329a
parent 60 7542ab7fbbfe
child 64 6724d2091880
--- a/UIPropertyView.st	Fri Feb 28 10:20:51 1997 +0100
+++ b/UIPropertyView.st	Fri Feb 28 10:22:30 1997 +0100
@@ -1,8 +1,6 @@
-'From Smalltalk/X, Version:3.1.4 on 25-feb-1997 at 2:17:33 pm'                  !
-
 ApplicationModel subclass:#UIPropertyView
 	instanceVariableNames:'builderView modified propertyFrame propertyList propertySpecs
-		currentView currentSpec propertyAspects staticAspects
+		currentView currentSpec propertyAspects layoutAspects layoutType
 		specBeingEdited userSelectedProperty currentSpecChannel'
 	classVariableNames:''
 	poolDictionaries:''
@@ -12,11 +10,11 @@
 
 !UIPropertyView class methodsFor:'instance creation'!
 
-in:aTopView receiver:aReceiver
+in:aTopView builder:aBuilderView
     |application|
 
     application := self new.
-    application in:aTopView receiver:aReceiver.
+    application in:aTopView builder:aBuilderView.
   ^ application
 ! !
 
@@ -26,20 +24,32 @@
     ^ 'Dimension'
 ! !
 
-!UIPropertyView class methodsFor:'specifications'!
+!UIPropertyView class methodsFor:'interface specs'!
 
 specificationAlignmentOrigin
+    "this window spec was automatically generated by the ST/X UIPainter"
+
+    "do not manually edit this - the painter/builder may not be able to
+     handle the specification if its corrupted."
+
     "
-    UIPainter new openOnClass:self andSelector:#specificationAlignmentOrigin
+     UIPainter new openOnClass:UIPropertyView andSelector:#specificationAlignmentOrigin
+     UIPropertyView new openInterface:#specificationAlignmentOrigin
     "
+
     <resource: #canvas>
 
     ^
-
+     
        #(#FullSpec
+          #'name:' 'uIPainterView'
+          #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+          #'isOpaque:' true
           #'window:' 
            #(#WindowSpec
+              #'name:' 'uIPainterView'
               #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+              #'isOpaque:' true
               #'label:' 'unnamed'
               #'bounds:' #(#Rectangle 0 0 248 304)
           )
@@ -48,382 +58,341 @@
               #'collection:' 
                #(
                  #(#LabelSpec
-                    #'name:' 'label1'
-                    #'layout:' #(#LayoutFrame 5 0 42 0 48 0 60 0)
-                    #'label:' 'left'
+                    #'name:' 'label9'
+                    #'layout:' #(#LayoutFrame 5 0 7 0 48 0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'Layout:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#PopUpListSpec
+                    #'name:' 'popUpList1'
+                    #'layout:' #(#LayoutFrame 58 0.0 7 0 -12 1.0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'popup'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'model:' #layoutType
+                    #'menu:' #layoutTypeList
                 )
                  #(#LabelSpec
                     #'name:' 'label2'
-                    #'layout:' #(#LayoutFrame 5 0 69 0 48 0 87 0)
+                    #'layout:' #(#LayoutFrame 5 0 103 0 48 0 121 0)
+                    #'isOpaque:' true
                     #'label:' 'top'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
                 )
                  #(#LabelSpec
                     #'name:' 'label3'
-                    #'layout:' #(#LayoutFrame 57 0 10 0 103 0 27 0)
+                    #'layout:' #(#LayoutFrame 58 0 48 0 104 0 65 0)
+                    #'isOpaque:' true
                     #'label:' 'relative'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
                 )
                  #(#LabelSpec
                     #'name:' 'label4'
-                    #'layout:' #(#LayoutFrame 154 0 11 0 190 0 28 0)
+                    #'layout:' #(#LayoutFrame 154 0 49 0 190 0 66 0)
+                    #'isOpaque:' true
                     #'label:' 'offset'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
                 )
                  #(#LabelSpec
                     #'name:' 'label5'
-                    #'layout:' #(#LayoutFrame 5 0 96 0 48 0 114 0)
+                    #'layout:' #(#LayoutFrame 5 0 167 0 48 0 185 0)
+                    #'isOpaque:' true
                     #'label:' 'align H'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
                 )
                  #(#LabelSpec
                     #'name:' 'label6'
-                    #'layout:' #(#LayoutFrame 5 0 122 0 48 0 140 0)
+                    #'layout:' #(#LayoutFrame 5 0 193 0 48 0 211 0)
+                    #'isOpaque:' true
                     #'label:' 'align V'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField1'
+                    #'layout:' #(#LayoutFrame 58 0 76 0 115 0 94 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftFraction
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 57 0 42 0 114 0 60 0)
-                    #'model:' #leftFraction
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField2'
+                    #'layout:' #(#LayoutFrame 58 0 103 0 115 0 121 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #topFraction
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 57 0 69 0 114 0 87 0)
-                    #'model:' #topFraction
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField5'
+                    #'layout:' #(#LayoutFrame 58 0 167 0 115 0 185 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftAlignmentFraction
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 57 0 96 0 114 0 114 0)
-                    #'model:' #leftAlignmentFraction
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField6'
+                    #'layout:' #(#LayoutFrame 58 0 193 0 115 0 211 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #topAlignmentFraction
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 56 0 122 0 113 0 140 0)
-                    #'model:' #topAlignmentFraction
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField3'
+                    #'layout:' #(#LayoutFrame 154 0 76 0 212 0 94 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 154 0 42 0 212 0 60 0)
-                    #'model:' #leftOffset
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField4'
+                    #'layout:' #(#LayoutFrame 154 0 103 0 212 0 121 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #topOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 154 0 69 0 212 0 87 0)
-                    #'model:' #topOffset
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#ActionButtonSpec
                     #'name:' 'button1'
-                    #'layout:' #(#LayoutFrame 119 0 42 0 138 0 60 0)
+                    #'layout:' #(#LayoutFrame 119 0 76 0 138 0 94 0)
+                    #'isOpaque:' true
                     #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
                     #'model:' #makeRelativeLeft
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
                  #(#ActionButtonSpec
                     #'name:' 'button2'
-                    #'layout:' #(#LayoutFrame 119 0 69 0 138 0 87 0)
+                    #'layout:' #(#LayoutFrame 119 0 103 0 138 0 121 0)
+                    #'isOpaque:' true
                     #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
                     #'model:' #makeRelativeTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
                  #(#ActionButtonSpec
                     #'name:' 'button3'
-                    #'layout:' #(#LayoutFrame 216 0 42 0 235 0 60 0)
+                    #'layout:' #(#LayoutFrame 217 0 76 0 236 0 94 0)
+                    #'isOpaque:' true
                     #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
                     #'model:' #makeOffsetLeft
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
                  #(#ActionButtonSpec
                     #'name:' 'button4'
-                    #'layout:' #(#LayoutFrame 216 0 69 0 235 0 87 0)
+                    #'layout:' #(#LayoutFrame 217 0 103 0 236 0 121 0)
+                    #'isOpaque:' true
                     #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
                     #'model:' #makeOffsetTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
-
-
-               #(#ActionButtonSpec
-                  #'name:' 'button'
-                  #'layout:' #(#LayoutFrame 16 0 210 0 76 0 240 0)
-                  #'label:' 'frame'
-                  #'model:' #showLayoutFrame
+                 #(#ActionButtonSpec
+                    #'name:' 'button8'
+                    #'layout:' #(#LayoutFrame 119 0 129 0 138 0 147 0)
+                    #'isOpaque:' true
+                    #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeRelativeLeftTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
-               #(#ActionButtonSpec
-                  #'name:' 'button'
-                  #'layout:' #(#LayoutFrame 96 0 210 0 156 0 240 0)
-                  #'label:' 'origin'
-                  #'model:' #showLayoutOrigin
+                 #(#ActionButtonSpec
+                    #'name:' 'button9'
+                    #'layout:' #(#LayoutFrame 217 0 129 0 236 0 147 0)
+                    #'isOpaque:' true
+                    #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeOffsetLeftTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
-               #(#ActionButtonSpec
-                  #'name:' 'button'
-                  #'layout:' #(#LayoutFrame 176 0 210 0 236 0 240 0)
-                  #'label:' 'align'
-                  #'model:' #showAlignmentOrigin
-                  #'initiallyDisabled:' true
+                 #(#LabelSpec
+                    #'name:' 'label7'
+                    #'layout:' #(#LayoutFrame 5 0 129 0 48 0 147 0)
+                    #'isOpaque:' true
+                    #'label:' 'all'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
                 )
-
+                 #(#LabelSpec
+                    #'name:' 'label1'
+                    #'layout:' #(#LayoutFrame 5 0 76 0 48 0 94 0)
+                    #'isOpaque:' true
+                    #'label:' 'left'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
               )
           )
       )
-
-
-
 !
 
-specificationLayoutFrame
+specificationExtent
+    "this window spec was automatically generated by the ST/X UIPainter"
+
+    "do not manually edit this - the painter/builder may not be able to
+     handle the specification if its corrupted."
+
     "
-    UIPainter new openOnClass:self andSelector:#specificationLayoutFrame
+     UIPainter new openOnClass:UIPropertyView andSelector:#specificationExtent
+     UIPropertyView new openInterface:#specificationExtent
     "
+
     <resource: #canvas>
 
     ^
-
+     
        #(#FullSpec
+          #'name:' 'uIPainterView'
+          #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+          #'isOpaque:' true
           #'window:' 
            #(#WindowSpec
+              #'name:' 'uIPainterView'
               #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+              #'isOpaque:' true
               #'label:' 'unnamed'
-              #'bounds:' #(#Rectangle 0 0 300 300)
-          )
-          #'component:' 
-           #(#SpecCollection
-              #'collection:' 
-               #(
-                 #(#LabelSpec
-                    #'name:' 'label left'
-                    #'layout:' #(#LayoutFrame 12 0 39 0 53 0 57 0)
-                    #'label:' 'left'
-                )
-                 #(#LabelSpec
-                    #'name:' 'label top'
-                    #'layout:' #(#LayoutFrame 12 0 67 0 53 0 85 0)
-                    #'label:' 'top'
-                )
-                 #(#LabelSpec
-                    #'name:' 'label right'
-                    #'layout:' #(#LayoutFrame 12 0 95 0 53 0 113 0)
-                    #'label:' 'right'
-                )
-                 #(#LabelSpec
-                    #'name:' 'label bottom'
-                    #'layout:' #(#LayoutFrame 12 0 123 0 53 0 141 0)
-                    #'label:' 'bottom'
-                )
-                 #(#LabelSpec
-                    #'name:' 'label relative'
-                    #'layout:' #(#LayoutFrame 65 0 6 0 110 0 24 0)
-                    #'label:' 'relative'
-                )
-                 #(#LabelSpec
-                    #'name:' 'label offset'
-                    #'layout:' #(#LayoutFrame 159 0 6 0 190 0 24 0)
-                    #'label:' 'offset'
-                )
-                 #(#LabelSpec
-                    #'name:' 'label all relative'
-                    #'layout:' #(#LayoutFrame 12 0 157 0 53 0 175 0)
-                    #'label:' 'all'
-                )
-                 #(#LabelSpec
-                    #'name:' 'label all absolute'
-                    #'layout:' #(#LayoutFrame 159 0 157 0 210 0 175 0)
-                    #'label:' 'all'
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'relative E1'
-                    #'layout:' #(#LayoutFrame 65 0 39 0 113 0 57 0)
-                    #'model:' #leftFraction
-                    #'type:' #numberOrNil
-                    #'immediateAccept:' false
-                    #'acceptOnReturn:' true
-                    #'acceptOnTab:' true
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'relative E2'
-                    #'layout:' #(#LayoutFrame 65 0 67 0 113 0 85 0)
-                    #'model:' #topFraction
-                    #'type:' #numberOrNil
-                    #'immediateAccept:' false
-                    #'acceptOnReturn:' true
-                    #'acceptOnTab:' true
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'relative E3'
-                    #'layout:' #(#LayoutFrame 65 0 95 0 113 0 113 0)
-                    #'model:' #rightFraction
-                    #'type:' #numberOrNil
-                    #'immediateAccept:' false
-                    #'acceptOnReturn:' true
-                    #'acceptOnTab:' true
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'relative E4'
-                    #'layout:' #(#LayoutFrame 65 0 123 0 113 0 141 0)
-                    #'model:' #bottomFraction
-                    #'type:' #numberOrNil
-                    #'immediateAccept:' false
-                    #'acceptOnReturn:' true
-                    #'acceptOnTab:' true
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'offset E1'
-                    #'layout:' #(#LayoutFrame 159 0 39 0 210 0 57 0)
-                    #'model:' #leftOffset
-                    #'type:' #numberOrNil
-                    #'immediateAccept:' false
-                    #'acceptOnReturn:' true
-                    #'acceptOnTab:' true
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'offset E2'
-                    #'layout:' #(#LayoutFrame 159 0 67 0 210 0 85 0)
-                    #'model:' #topOffset
-                    #'type:' #numberOrNil
-                    #'immediateAccept:' false
-                    #'acceptOnReturn:' true
-                    #'acceptOnTab:' true
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'offset E3'
-                    #'layout:' #(#LayoutFrame 159 0 95 0 210 0 113 0)
-                    #'model:' #rightOffset
-                    #'type:' #numberOrNil
-                    #'immediateAccept:' false
-                    #'acceptOnReturn:' true
-                    #'acceptOnTab:' true
-                )
-                 #(#InputFieldSpec
-                    #'name:' 'offset E4'
-                    #'layout:' #(#LayoutFrame 159 0 123 0 210 0 141 0)
-                    #'model:' #bottomOffset
-                    #'type:' #numberOrNil
-                    #'immediateAccept:' false
-                    #'acceptOnReturn:' true
-                    #'acceptOnTab:' true
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'relative B1'
-                    #'layout:' #(#LayoutFrame 117 0 39 0 136 0 57 0)
-                    #'label:' ' '
-                    #'model:' #makeRelativeLeft
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'relative B2'
-                    #'layout:' #(#LayoutFrame 117 0 67 0 136 0 85 0)
-                    #'label:' ' '
-                    #'model:' #makeRelativeTop
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'relative B3'
-                    #'layout:' #(#LayoutFrame 117 0 95 0 136 0 113 0)
-                    #'label:' ' '
-                    #'model:' #makeRelativeRight
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'relative B4'
-                    #'layout:' #(#LayoutFrame 117 0 123 0 136 0 141 0)
-                    #'label:' ' '
-                    #'model:' #makeRelativeBottom
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'relative BAll'
-                    #'layout:' #(#LayoutFrame 117 0 157 0 136 0 175 0)
-                    #'label:' ' '
-                    #'model:' #makeRelativeAll
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'offset B1'
-                    #'layout:' #(#LayoutFrame 214 0 39 0 233 0 57 0)
-                    #'label:' ''
-                    #'model:' #makeOffsetLeft
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'offset B2'
-                    #'layout:' #(#LayoutFrame 214 0 67 0 233 0 85 0)
-                    #'label:' ''
-                    #'model:' #makeOffsetTop
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'offset B3'
-                    #'layout:' #(#LayoutFrame 214 0 95 0 233 0 113 0)
-                    #'label:' ''
-                    #'model:' #makeOffsetRight
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'offset B4'
-                    #'layout:' #(#LayoutFrame 214 0 123 0 233 0 141 0)
-                    #'label:' ''
-                    #'model:' #makeOffsetBottom
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'offset BAll'
-                    #'layout:' #(#LayoutFrame 214 0 157 0 233 0 175 0)
-                    #'label:' ' '
-                    #'model:' #makeOffsetAll
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'button'
-                    #'layout:' #(#LayoutFrame 16 0 210 0 76 0 240 0)
-                    #'label:' 'frame'
-                    #'model:' #showLayoutFrame
-                    #'initiallyDisabled:' true
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'button10'
-                    #'layout:' #(#LayoutFrame 96 0 210 0 156 0 240 0)
-                    #'label:' 'origin'
-                    #'model:' #showLayoutOrigin
-                )
-                 #(#ActionButtonSpec
-                    #'name:' 'button11'
-                    #'layout:' #(#LayoutFrame 176 0 210 0 236 0 240 0)
-                    #'label:' 'align'
-                    #'model:' #showAlignmentOrigin
-                )
-
-              )
-          )
-      )
-
-
-
-!
-
-specificationLayoutOrigin
-    "
-    UIPainter new openOnClass:self andSelector:#specificationLayoutOrigin
-    "
-    <resource: #canvas>
-
-    ^
-
-       #(#FullSpec
-          #'window:' 
-           #(#WindowSpec
-              #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
-              #'label:' 'unnamed'
-              #'bounds:' #(#Rectangle 0 0 248 304)
+              #'bounds:' #(#Rectangle 0 0 238 303)
           )
           #'component:' 
            #(#SpecCollection
@@ -431,184 +400,1171 @@
                #(
                  #(#LabelSpec
                     #'name:' 'label1'
-                    #'layout:' #(#LayoutFrame 16 0 42 0 44 0 60 0)
-                    #'label:' 'left'
+                    #'layout:' #(#LayoutFrame 16 0 62 0 79 0 79 0)
+                    #'isOpaque:' true
+                    #'label:' 'horizontal:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #left
+                    #'hasCharacterOrientedLabel:' true
                 )
                  #(#LabelSpec
                     #'name:' 'label2'
-                    #'layout:' #(#LayoutFrame 16 0 69 0 44 0 87 0)
-                    #'label:' 'top'
-                )
-                 #(#LabelSpec
-                    #'name:' 'label3'
-                    #'layout:' #(#LayoutFrame 57 0 10 0 103 0 27 0)
-                    #'label:' 'relative'
-                )
-                 #(#LabelSpec
-                    #'name:' 'label4'
-                    #'layout:' #(#LayoutFrame 154 0 11 0 190 0 28 0)
-                    #'label:' 'offset'
+                    #'layout:' #(#LayoutFrame 16 0 89 0 79 0 107 0)
+                    #'isOpaque:' true
+                    #'label:' 'vertical:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #left
+                    #'hasCharacterOrientedLabel:' true
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField1'
+                    #'layout:' #(#LayoutFrame 86 0 62 0 179 0 80 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 57 0 42 0 114 0 60 0)
-                    #'model:' #leftFraction
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField2'
+                    #'layout:' #(#LayoutFrame 86 0 89 0 179 0 107 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #rightOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 57 0 69 0 114 0 87 0)
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#LabelSpec
+                    #'name:' 'label0'
+                    #'layout:' #(#LayoutFrame 16 0 15 0 79 0 32 0)
+                    #'isOpaque:' true
+                    #'label:' 'Extent:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #left
+                    #'hasCharacterOrientedLabel:' true
+                )
+              )
+          )
+      )
+!
+
+specificationLayoutFrame
+    "this window spec was automatically generated by the ST/X UIPainter"
+
+    "do not manually edit this - the painter/builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     UIPainter new openOnClass:UIPropertyView andSelector:#specificationLayoutFrame
+     UIPropertyView new openInterface:#specificationLayoutFrame
+    "
+
+    <resource: #canvas>
+
+    ^
+     
+       #(#FullSpec
+          #'name:' 'uIPainterView'
+          #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+          #'isOpaque:' true
+          #'window:' 
+           #(#WindowSpec
+              #'name:' 'uIPainterView'
+              #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+              #'isOpaque:' true
+              #'label:' 'unnamed'
+              #'bounds:' #(#Rectangle 0 0 238 291)
+          )
+          #'component:' 
+           #(#SpecCollection
+              #'collection:' 
+               #(
+                 #(#LabelSpec
+                    #'name:' 'label0'
+                    #'layout:' #(#LayoutFrame 5 0 7 0 48 0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'Layout:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#PopUpListSpec
+                    #'name:' 'popUpList1'
+                    #'layout:' #(#LayoutFrame 58 0.0 7 0 -12 1.0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'popup'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'model:' #layoutType
+                    #'menu:' #layoutTypeList
+                )
+
+                 #(#LabelSpec
+                    #'name:' 'label left'
+                    #'layout:' #(#LayoutFrame 12 0 79 0 53 0 97 0)
+                    #'isOpaque:' true
+                    #'label:' 'left'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label top'
+                    #'layout:' #(#LayoutFrame 12 0 107 0 53 0 125 0)
+                    #'isOpaque:' true
+                    #'label:' 'top'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label right'
+                    #'layout:' #(#LayoutFrame 12 0 135 0 53 0 153 0)
+                    #'isOpaque:' true
+                    #'label:' 'right'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label bottom'
+                    #'layout:' #(#LayoutFrame 12 0 163 0 53 0 181 0)
+                    #'isOpaque:' true
+                    #'label:' 'bottom'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label relative'
+                    #'layout:' #(#LayoutFrame 65 0 50 0 110 0 68 0)
+                    #'isOpaque:' true
+                    #'label:' 'relative'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label offset'
+                    #'layout:' #(#LayoutFrame 159 0 50 0 190 0 68 0)
+                    #'isOpaque:' true
+                    #'label:' 'offset'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label all relative'
+                    #'layout:' #(#LayoutFrame 12 0 197 0 53 0 215 0)
+                    #'isOpaque:' true
+                    #'label:' 'all'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label all absolute'
+                    #'layout:' #(#LayoutFrame 159 0 197 0 210 0 215 0)
+                    #'isOpaque:' true
+                    #'label:' 'all'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'relative E1'
+                    #'layout:' #(#LayoutFrame 65 0 79 0 113 0 97 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftFraction
+                    #'isReadOnly:' false
+                    #'tabable:' false
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'relative E2'
+                    #'layout:' #(#LayoutFrame 65 0 107 0 113 0 125 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
                     #'model:' #topFraction
+                    #'isReadOnly:' false
+                    #'tabable:' false
+                    #'type:' #numberOrNil
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'relative E3'
+                    #'layout:' #(#LayoutFrame 65 0 135 0 113 0 153 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #rightFraction
+                    #'isReadOnly:' false
+                    #'tabable:' false
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'relative E4'
+                    #'layout:' #(#LayoutFrame 65 0 163 0 113 0 181 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #bottomFraction
+                    #'isReadOnly:' false
+                    #'tabable:' false
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'offset E1'
+                    #'layout:' #(#LayoutFrame 159 0 79 0 210 0 97 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftOffset
+                    #'isReadOnly:' false
+                    #'tabable:' false
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'offset E2'
+                    #'layout:' #(#LayoutFrame 159 0 107 0 210 0 125 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #topOffset
+                    #'isReadOnly:' false
+                    #'tabable:' false
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'offset E3'
+                    #'layout:' #(#LayoutFrame 159 0 135 0 210 0 153 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #rightOffset
+                    #'isReadOnly:' false
+                    #'tabable:' false
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'offset E4'
+                    #'layout:' #(#LayoutFrame 159 0 163 0 210 0 181 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #bottomOffset
+                    #'isReadOnly:' false
+                    #'tabable:' false
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'relative B1'
+                    #'layout:' #(#LayoutFrame 117 0 79 0 136 0 97 0)
+                    #'isOpaque:' true
+                    #'label:' ' '
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeRelativeLeft
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'relative B2'
+                    #'layout:' #(#LayoutFrame 117 0 107 0 136 0 125 0)
+                    #'isOpaque:' true
+                    #'label:' ' '
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeRelativeTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'relative B3'
+                    #'layout:' #(#LayoutFrame 117 0 135 0 136 0 153 0)
+                    #'isOpaque:' true
+                    #'label:' ' '
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeRelativeRight
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'relative B4'
+                    #'layout:' #(#LayoutFrame 117 0 163 0 136 0 181 0)
+                    #'isOpaque:' true
+                    #'label:' ' '
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeRelativeBottom
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'relative BAll'
+                    #'layout:' #(#LayoutFrame 117 0 197 0 136 0 215 0)
+                    #'isOpaque:' true
+                    #'label:' ' '
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeRelativeAll
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'offset B1'
+                    #'layout:' #(#LayoutFrame 214 0 79 0 233 0 97 0)
+                    #'isOpaque:' true
+                    #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeOffsetLeft
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'offset B2'
+                    #'layout:' #(#LayoutFrame 214 0 107 0 233 0 125 0)
+                    #'isOpaque:' true
+                    #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeOffsetTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'offset B3'
+                    #'layout:' #(#LayoutFrame 214 0 135 0 233 0 153 0)
+                    #'isOpaque:' true
+                    #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeOffsetRight
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'offset B4'
+                    #'layout:' #(#LayoutFrame 214 0 163 0 233 0 181 0)
+                    #'isOpaque:' true
+                    #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeOffsetBottom
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'offset BAll'
+                    #'layout:' #(#LayoutFrame 214 0 197 0 233 0 215 0)
+                    #'isOpaque:' true
+                    #'label:' ' '
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeOffsetAll
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+              )
+          )
+      )
+!
+
+specificationLayoutOrigin
+    "this window spec was automatically generated by the ST/X UIPainter"
+
+    "do not manually edit this - the painter/builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     UIPainter new openOnClass:UIPropertyView andSelector:#specificationLayoutOrigin
+     UIPropertyView new openInterface:#specificationLayoutOrigin
+    "
+
+    <resource: #canvas>
+
+    ^
+     
+       #(#FullSpec
+          #'name:' 'uIPainterView'
+          #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+          #'isOpaque:' true
+          #'window:' 
+           #(#WindowSpec
+              #'name:' 'uIPainterView'
+              #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+              #'isOpaque:' true
+              #'label:' 'unnamed'
+              #'bounds:' #(#Rectangle 0 0 238 303)
+          )
+          #'component:' 
+           #(#SpecCollection
+              #'collection:' 
+               #(
+                 #(#LabelSpec
+                    #'name:' 'label0'
+                    #'layout:' #(#LayoutFrame 5 0 7 0 48 0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'Layout:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#PopUpListSpec
+                    #'name:' 'popUpList1'
+                    #'layout:' #(#LayoutFrame 58 0.0 7 0 -12 1.0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'popup'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'model:' #layoutType
+                    #'menu:' #layoutTypeList
+                )
+
+                 #(#LabelSpec
+                    #'name:' 'label1'
+                    #'layout:' #(#LayoutFrame 16 0 82 0 44 0 100 0)
+                    #'isOpaque:' true
+                    #'label:' 'left'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label2'
+                    #'layout:' #(#LayoutFrame 16 0 109 0 44 0 127 0)
+                    #'isOpaque:' true
+                    #'label:' 'top'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label3'
+                    #'layout:' #(#LayoutFrame 57 0 50 0 103 0 67 0)
+                    #'isOpaque:' true
+                    #'label:' 'relative'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label4'
+                    #'layout:' #(#LayoutFrame 154 0 51 0 190 0 68 0)
+                    #'isOpaque:' true
+                    #'label:' 'offset'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'editField1'
+                    #'layout:' #(#LayoutFrame 57 0 82 0 114 0 100 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftFraction
+                    #'isReadOnly:' false
+                    #'tabable:' true
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'editField2'
+                    #'layout:' #(#LayoutFrame 57 0 109 0 114 0 127 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #topFraction
+                    #'isReadOnly:' false
+                    #'tabable:' true
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField3'
+                    #'layout:' #(#LayoutFrame 154 0 82 0 212 0 100 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 154 0 42 0 212 0 60 0)
-                    #'model:' #leftOffset
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#InputFieldSpec
                     #'name:' 'editField4'
+                    #'layout:' #(#LayoutFrame 154 0 109 0 212 0 127 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #topOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
                     #'type:' #numberOrNil
-                    #'layout:' #(#LayoutFrame 154 0 69 0 212 0 87 0)
-                    #'model:' #topOffset
                     #'immediateAccept:' false
+                    #'acceptOnLeave:' true
                     #'acceptOnReturn:' true
                     #'acceptOnTab:' true
-                    #tabable: true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
                 )
                  #(#ActionButtonSpec
                     #'name:' 'button1'
-                    #'layout:' #(#LayoutFrame 119 0 42 0 138 0 60 0)
+                    #'layout:' #(#LayoutFrame 119 0 82 0 138 0 100 0)
+                    #'isOpaque:' true
                     #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
                     #'model:' #makeRelativeLeft
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
                  #(#ActionButtonSpec
                     #'name:' 'button2'
-                    #'layout:' #(#LayoutFrame 119 0 69 0 138 0 87 0)
+                    #'layout:' #(#LayoutFrame 119 0 109 0 138 0 127 0)
+                    #'isOpaque:' true
                     #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
                     #'model:' #makeRelativeTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
                  #(#ActionButtonSpec
                     #'name:' 'button3'
-                    #'layout:' #(#LayoutFrame 216 0 42 0 235 0 60 0)
+                    #'layout:' #(#LayoutFrame 216 0 82 0 235 0 100 0)
+                    #'isOpaque:' true
                     #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
                     #'model:' #makeOffsetLeft
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
                  #(#ActionButtonSpec
                     #'name:' 'button4'
-                    #'layout:' #(#LayoutFrame 216 0 69 0 235 0 87 0)
+                    #'layout:' #(#LayoutFrame 216 0 109 0 235 0 127 0)
+                    #'isOpaque:' true
                     #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
                     #'model:' #makeOffsetTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
                 )
-
-
-               #(#ActionButtonSpec
-                  #'name:' 'button'
-                  #'layout:' #(#LayoutFrame 16 0 210 0 76 0 240 0)
-                  #'label:' 'frame'
-                  #'model:' #showLayoutFrame
+                 #(#ActionButtonSpec
+                    #'name:' 'button8'
+                    #'layout:' #(#LayoutFrame 119 0 135 0 138 0 153 0)
+                    #'isOpaque:' true
+                    #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeRelativeLeftTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#ActionButtonSpec
+                    #'name:' 'button9'
+                    #'layout:' #(#LayoutFrame 216 0 135 0 235 0 153 0)
+                    #'isOpaque:' true
+                    #'label:' ''
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'tabable:' false
+                    #'isDefault:' false
+                    #'defaultable:' false
+                    #'model:' #makeOffsetLeftTop
+                    #'hasCharacterOrientedLabel:' true
+                    #'isDecorated:' false
+                    #'initiallyDisabled:' false
+                )
+                 #(#LabelSpec
+                    #'name:' 'label5'
+                    #'layout:' #(#LayoutFrame 16 0 135 0 44 0 153 0)
+                    #'isOpaque:' true
+                    #'label:' 'all'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
                 )
-               #(#ActionButtonSpec
-                  #'name:' 'button'
-                  #'layout:' #(#LayoutFrame 96 0 210 0 156 0 240 0)
-                  #'label:' 'origin'
-                  #'model:' #showLayoutOrigin
-                  #'initiallyDisabled:' true
+              )
+          )
+      )
+!
+
+specificationPoint
+    "this window spec was automatically generated by the ST/X UIPainter"
+
+    "do not manually edit this - the painter/builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     UIPainter new openOnClass:UIPropertyView andSelector:#specificationPoint
+     UIPropertyView new openInterface:#specificationPoint
+    "
+
+    <resource: #canvas>
+
+    ^
+     
+       #(#FullSpec
+          #'name:' 'uIPainterView'
+          #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+          #'isOpaque:' true
+          #'window:' 
+           #(#WindowSpec
+              #'name:' 'uIPainterView'
+              #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+              #'isOpaque:' true
+              #'label:' 'unnamed'
+              #'bounds:' #(#Rectangle 0 0 238 303)
+          )
+          #'component:' 
+           #(#SpecCollection
+              #'collection:' 
+               #(
+                 #(#LabelSpec
+                    #'name:' 'label0'
+                    #'layout:' #(#LayoutFrame 16 0 7 0 67 0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'Layout:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#PopUpListSpec
+                    #'name:' 'popUpList1'
+                    #'layout:' #(#LayoutFrame 77 0.0 7 0 -68 1.0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'popup'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'model:' #layoutType
+                    #'menu:' #layoutTypeList
                 )
-               #(#ActionButtonSpec
-                  #'name:' 'button'
-                  #'layout:' #(#LayoutFrame 176 0 210 0 236 0 240 0)
-                  #'label:' 'align'
-                  #'model:' #showAlignmentOrigin
+                 #(#LabelSpec
+                    #'name:' 'label1'
+                    #'layout:' #(#LayoutFrame 16 0 62 0 67 0 79 0)
+                    #'isOpaque:' true
+                    #'label:' 'origin x:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label2'
+                    #'layout:' #(#LayoutFrame 16 0 89 0 67 0 107 0)
+                    #'isOpaque:' true
+                    #'label:' 'origin y:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
                 )
-
+                 #(#InputFieldSpec
+                    #'name:' 'editField1'
+                    #'layout:' #(#LayoutFrame 77 0 62 0 170 0 80 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'editField2'
+                    #'layout:' #(#LayoutFrame 77 0 89 0 170 0 107 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #topOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
               )
           )
       )
+!
 
+specificationRectangle
+    "this window spec was automatically generated by the ST/X UIPainter"
+
+    "do not manually edit this - the painter/builder may not be able to
+     handle the specification if its corrupted."
+
+    "
+     UIPainter new openOnClass:UIPropertyView andSelector:#specificationRectangle
+     UIPropertyView new openInterface:#specificationRectangle
+    "
+
+    <resource: #canvas>
 
-
+    ^
+     
+       #(#FullSpec
+          #'name:' 'uIPainterView'
+          #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+          #'isOpaque:' true
+          #'window:' 
+           #(#WindowSpec
+              #'name:' 'uIPainterView'
+              #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+              #'isOpaque:' true
+              #'label:' 'unnamed'
+              #'bounds:' #(#Rectangle 0 0 238 303)
+          )
+          #'component:' 
+           #(#SpecCollection
+              #'collection:' 
+               #(
+                 #(#LabelSpec
+                    #'name:' 'label0'
+                    #'layout:' #(#LayoutFrame 16 0 7 0 67 0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'Layout:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #center
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#PopUpListSpec
+                    #'name:' 'popUpList1'
+                    #'layout:' #(#LayoutFrame 77 0.0 7 0 -83 1.0 30 0)
+                    #'isOpaque:' true
+                    #'label:' 'popup'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'model:' #layoutType
+                    #'menu:' #layoutTypeList
+                )
+                 #(#LabelSpec
+                    #'name:' 'label1'
+                    #'layout:' #(#LayoutFrame 16 0 62 0 74 0 80 0)
+                    #'isOpaque:' true
+                    #'label:' 'origin x:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #left
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label2'
+                    #'layout:' #(#LayoutFrame 16 0 89 0 74 0 107 0)
+                    #'isOpaque:' true
+                    #'label:' 'origin y:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #left
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'editField1'
+                    #'layout:' #(#LayoutFrame 81 0 62 0 174 0 80 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #leftOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'editField2'
+                    #'layout:' #(#LayoutFrame 81 0 89 0 174 0 107 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #topOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#LabelSpec
+                    #'name:' 'label4'
+                    #'layout:' #(#LayoutFrame 16 0 117 0 74 0 135 0)
+                    #'isOpaque:' true
+                    #'label:' 'corner x:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #left
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#LabelSpec
+                    #'name:' 'label5'
+                    #'layout:' #(#LayoutFrame 16 0 144 0 74 0 162 0)
+                    #'isOpaque:' true
+                    #'label:' 'corner y:'
+                    #'foregroundColor:' #(#Color 0.0 0.0 0.0)
+                    #'backgroundColor:' #(#Color 66.9993 66.9993 66.9993)
+                    #'initiallyInvisible:' false
+                    #'level:' 0
+                    #'adjust:' #left
+                    #'hasCharacterOrientedLabel:' true
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'editField3'
+                    #'layout:' #(#LayoutFrame 81 0 117 0 174 0 135 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #rightOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+                 #(#InputFieldSpec
+                    #'name:' 'editField4'
+                    #'layout:' #(#LayoutFrame 81 0 144 0 174 0 162 0)
+                    #'isOpaque:' true
+                    #'initiallyDisabled:' false
+                    #'initiallyInvisible:' false
+                    #'model:' #bottomOffset
+                    #'isReadOnly:' false
+                    #'tabable:' true
+                    #'type:' #numberOrNil
+                    #'immediateAccept:' false
+                    #'acceptOnLeave:' true
+                    #'acceptOnReturn:' true
+                    #'acceptOnTab:' true
+                    #'acceptOnLostFocus:' true
+                    #'hasBorder:' false
+                )
+              )
+          )
+      )
 ! !
 
-!UIPropertyView methodsFor:'accessing'!
+!UIPropertyView methodsFor:'event handling'!
 
-update:something
-    |slices list view prevSpecClass|
+builderViewChanged:what
+    "something changed in the builder view
+    "
+    |slices list prevSpecClass|
 
-    (something == #selection or:[something == #tree]) ifFalse:[
-        (something == #layout and:[modified not and:[self isLayoutSpec]]) ifTrue:[
-            self layoutRead.
+    (what == #selection or:[what == #tree]) ifFalse:[
+        (what == #layout and:[modified not and:[self isLayoutSpec]]) ifTrue:[
+            modified := true.
+            self perform:(('fetch', layoutType asString) asSymbol).
+            modified := false.
         ].
         ^ self
     ].
-
-    view := builderView singleSelection.
-
+    currentView     := builderView singleSelection.
     propertyAspects := nil.
-    currentView     := view.
-    self modified:false.
-
 
     currentView isNil ifTrue:[
-        "/ the workView itself.
-
         propertyList selectionIndex:nil.
         currentSpecChannel := nil.
-
         propertyList list:#().
         propertySpecs := nil.
 
         "/ must setup for a WindowSpec (to allow entry of min- maxSize etc).
-"/        propertyList list:#('Basics' 'Detail').
-        ^ self
+"/      propertyList list:#('Basics' 'Detail').
+      ^ self modified:false.
     ].
 
-    prevSpecClass := specBeingEdited class.
-
+    prevSpecClass   := specBeingEdited class.
     specBeingEdited := (builderView generateSpecFor:currentView) first.
 
-    (specBeingEdited class ~~ prevSpecClass 
-    or:[currentSpecChannel isNil]) ifTrue:[
-        propertyList selectionIndex:nil.
-        propertyAspects := IdentityDictionary new.
-        propertySpecs := OrderedCollection new.
-        slices        := currentView specClass slices.
+    (    (specBeingEdited class == prevSpecClass)
+     and:[currentSpecChannel notNil]
+    ) ifTrue:[
+        "can keep current specifications plus current property selection
+        "
+        self reload.
+      ^ self.
+    ].
 
-        list := slices collect:[:slice|
-            propertySpecs add:(slice last).
-            slice first asString
-        ].
+    propertyList selectionIndex:nil.
+    propertyAspects := IdentityDictionary new.
+    propertySpecs   := OrderedCollection new.
+    slices          := currentView specClass slices.
 
-        list := list, (Array with:(self class titleOfLayoutMenu)).
+    list := slices collect:[:slice|
+        propertySpecs add:(slice last).
+        slice first asString
+    ].
+    list := list, (Array with:(self class titleOfLayoutMenu)).
 
-        currentSpecChannel := specBeingEdited asValue.
-        specBeingEdited class addBindingsTo:propertyAspects
-                                 for:specBeingEdited
-                             channel:currentSpecChannel.
-        propertyAspects do:[:anAspect | anAspect addDependent:self ].
-        propertyList list:list.
-        propertyList selection:userSelectedProperty.
-    ] ifFalse:[
-        currentSpecChannel value:specBeingEdited
-    ]
+    currentSpecChannel := specBeingEdited asValue.
+    specBeingEdited class addBindingsTo:propertyAspects
+                                    for:specBeingEdited
+                                channel:currentSpecChannel.
+    propertyAspects do:[:anAspect | anAspect addDependent:self ].
+    propertyList list:list.
+    propertyList selection:userSelectedProperty.
+    self modified:false.
 
 
-! !
 
-!UIPropertyView methodsFor:'change & update'!
+!
 
 modified:aState
      "change state of modification flag
@@ -625,11 +1581,12 @@
 !
 
 propertySelectionChanged
-    "called when the property selection changed
+    "property selection changed; switch to new property selection
     "
     |spec index sel|
 
     sel := propertyList selection.
+    self modified:false.
 
     (currentView isNil or:[sel isNil]) ifTrue:[
         "/ must setup for a WindowSpec for workView (to allow entry of min- maxSize etc).
@@ -643,7 +1600,7 @@
 
     index > propertySpecs size ifTrue:[                 "/ one of my specifications
         (sel == self class titleOfLayoutMenu) ifTrue:[
-            spec := self specificationLayout
+            ^ self showAndFetchLayout
         ]
     ] ifFalse:[
         spec := currentView specClass perform:(propertySpecs at:index).
@@ -652,16 +1609,20 @@
 !
 
 update:something with:aParameter from:changedObject
+    "any attribute changed its state in the current specification
+    "
     self modified:true
 ! !
 
 !UIPropertyView methodsFor:'initialization'!
 
-in:aTopView receiver:aBuilderView
+in:aTopView builder:aBuilderView
+    "setup property view in topview and that the builder view
+    "
     |menu y cancelButton applyButton panel|
 
     super initialize.
-    self initializeStaticAspects.
+    self initializeLayoutAspects.
 
     builderView := aBuilderView.
 
@@ -698,9 +1659,10 @@
     self modified:false.
 !
 
-initializeStaticAspects
-
-    staticAspects := IdentityDictionary new.
+initializeLayoutAspects
+    "initialize all layout aspects
+    "
+    layoutAspects := IdentityDictionary new.
 
     #(  bottomFraction          bottomOffset
         leftFraction            leftOffset
@@ -709,16 +1671,24 @@
         leftAlignmentFraction   topAlignmentFraction
     )
     do:[:aChannel|
-        staticAspects at:aChannel put:(ValueHolder new).
+        layoutAspects at:aChannel put:(ValueHolder new).
     ].
 
-    staticAspects do:[:anAspect | anAspect addDependent:self ].
+    layoutAspects do:[:anAspect | anAspect addDependent:self ].
 
+    layoutAspects at:#layoutType put:(
+        AspectAdaptor new
+                subject:self;
+                accessWith:#layoutType
+                assignWith:#layoutType:
+    ).
 ! !
 
 !UIPropertyView methodsFor:'private'!
 
 aspectFor:aKey
+    "returns aspect for a key
+    "
     |aspect|
 
     propertyAspects notNil ifTrue:[
@@ -728,11 +1698,11 @@
         ]
     ].
 
-    ^ staticAspects at:aKey ifAbsent:[super aspectFor:aKey]
+    ^ layoutAspects at:aKey ifAbsent:[super aspectFor:aKey]
 !
 
 showSpec:aSpec
-    "switch specification
+    "switch to specification
     "
     currentSpec ~= aSpec ifTrue:[
         propertyFrame destroySubViews.
@@ -743,196 +1713,278 @@
         ]
     ].
     currentSpec := aSpec.
-    self modified:false.
 ! !
 
 !UIPropertyView methodsFor:'private actions'!
 
 apply
+    "apply current changes and write back to current view
+    "
     modified ifTrue:[
         self modified:false.
 
         self isLayoutSpec ifFalse:[
             builderView updateFromSpec:specBeingEdited
         ] ifTrue:[
-            self layoutWrite
+            layoutType notNil ifTrue:[
+                self perform:(('write', layoutType asString) asSymbol)
+            ]
         ]
     ]
 
 !
 
 cancel
-    |view|
-
+    "cancel all changes and read back attributes from current view
+    "
     modified ifTrue:[
-        self modified:false.
+        specBeingEdited := (builderView generateSpecFor:currentView) first.
+        self reload
+    ].
+!
 
-        self isLayoutSpec ifFalse:[
-            currentView := nil.
-            self update:#selection
-        ] ifTrue:[
-            self layoutRead
+reload
+    "relaod all attributes from current specification and update values
+    "
+    |spec oldMod|
+
+    self modified:false.
+    modified := true.           "supress notifications"
+
+    currentSpecChannel notNil ifTrue:[
+        currentSpecChannel value:specBeingEdited.
+
+        self isLayoutSpec ifTrue:[
+            self showAndFetchLayout.
         ]
-    ]
-
+    ].
+    modified := false.
 
 ! !
 
 !UIPropertyView methodsFor:'private layout'!
 
-layoutRead
-    |layout extent|
-
-    layout := currentView geometryLayout.
-    layout isNil ifTrue:[^ self].
-    modified := true.                   "supress event notifications"
-
-    layout isLayout ifFalse:[
-        (layout isRectangle or:[layout isPoint]) ifTrue:[
-            (staticAspects at:#leftOffset)   value:(layout left).
-            (staticAspects at:#rightOffset)  value:(layout right).
+layoutType
+    ^ layoutType
+!
 
-            layout isRectangle ifTrue:[
-                (staticAspects at:#topOffset)    value:(layout top).
-                (staticAspects at:#bottomOffset) value:(layout bottom).
-            ].
-            modified := false.
-          ^ self
-        ]
-    ].
+layoutType:something
+    |spec|
 
-    (staticAspects at:#leftOffset)   value:(layout leftOffset).
-    (staticAspects at:#leftFraction) value:(layout leftFraction).
-    (staticAspects at:#topOffset)    value:(layout topOffset).
-    (staticAspects at:#topFraction)  value:(layout topFraction).
+    layoutType ~~ something ifTrue:[
+        layoutType := something.
 
-    layout isLayoutFrame ifTrue:[
-        (staticAspects at:#rightOffset)    value:(layout rightOffset).
-        (staticAspects at:#bottomOffset)   value:(layout bottomOffset).
-
-        (staticAspects at:#rightFraction)  value:(layout rightFraction).
-        (staticAspects at:#bottomFraction) value:(layout bottomFraction).
-
-        (staticAspects at:#leftAlignmentFraction) value:0.
-        (staticAspects at:#topAlignmentFraction)  value:0.
-    ] ifFalse:[
-        extent := currentView extent.
+        layoutType notNil ifTrue:[
+            self modified:true.
+            spec := ('specification', layoutType asString) asSymbol.
+            spec := self class perform:spec.
+        ].
+        self showSpec:spec
+    ].
+!
 
-        (staticAspects at:#rightOffset)    value:(layout leftOffset + extent x).
-        (staticAspects at:#bottomOffset)   value:(layout topOffset  + extent y).
-
-        (staticAspects at:#rightFraction)  value:0.
-        (staticAspects at:#bottomFraction) value:0.
-
-        layout isAlignmentOrigin ifTrue:[
-            (staticAspects at:#leftAlignmentFraction) value:(layout leftAlignmentFraction).
-            (staticAspects at:#topAlignmentFraction)  value:(layout topAlignmentFraction).
-        ] ifFalse:[
-            (staticAspects at:#leftAlignmentFraction) value:0.
-            (staticAspects at:#topAlignmentFraction)  value:0.
-        ]
-    ].
-    modified := false.
+layoutTypeList
+    ^ #( #LayoutFrame #AlignmentOrigin #LayoutOrigin #Point #Rectangle )
 
 !
 
-layoutWrite
-    |layout|
+selectedLayoutType
+    ^ layoutType
+!
+
+showAndFetchLayout
+    "fetch and show layout specification assigned to current view
+    "
+    |type|
 
-    currentView isNil ifTrue:[
-        ^ self
+    self modified:false.
+    modified := true.
+
+    currentView notNil ifTrue:[
+        type := builderView class layoutType:currentView.
+
+        type notNil ifTrue:[
+            layoutAspects do:[:aValue| aValue value:nil ].
+            self perform:(('fetch', type asString) asSymbol)
+        ]
     ].
-
-    (currentSpec == self class specificationLayoutFrame) ifTrue:[
-        layout := LayoutFrame new.
+    self layoutType:type.
+    modified := false.
 
-        layout     leftOffset:((staticAspects at:#leftOffset)     value) ? 0.
-        layout    rightOffset:((staticAspects at:#rightOffset)    value) ? 0.
-        layout      topOffset:((staticAspects at:#topOffset)      value) ? 0.
-        layout   bottomOffset:((staticAspects at:#bottomOffset)   value) ? 0.
-        layout   leftFraction:((staticAspects at:#leftFraction)   value) ? 0.
-        layout  rightFraction:((staticAspects at:#rightFraction)  value) ? 0.
-        layout    topFraction:((staticAspects at:#topFraction)    value) ? 0.
-        layout bottomFraction:((staticAspects at:#bottomFraction) value) ? 0.
+! !
+
+!UIPropertyView methodsFor:'private layout fetch'!
+
+fetchAlignmentOrigin
+    "fetch alignmentOrigin
+    "
+    |aLayout|
+
+    aLayout := currentView geometryLayout.
 
-        builderView setDimension:layout
-    ].
+    (layoutAspects at:#leftOffset)   value:(aLayout leftOffset).
+    (layoutAspects at:#leftFraction) value:(aLayout leftFraction).
+    (layoutAspects at:#topOffset)    value:(aLayout topOffset).
+    (layoutAspects at:#topFraction)  value:(aLayout topFraction).
+
+    (layoutAspects at:#leftAlignmentFraction) value:(aLayout leftAlignmentFraction).
+    (layoutAspects at:#topAlignmentFraction)  value:(aLayout topAlignmentFraction).
+!
+
+fetchExtent
+    |extent|
 
-    (currentSpec == self class specificationAlignmentOrigin) ifTrue:[
-        layout := AlignmentOrigin new.
+    extent := currentView extent.
+    (layoutAspects at:#leftOffset)  value:(extent x).
+    (layoutAspects at:#rightOffset) value:(extent y).
+!
+
+fetchLayoutFrame
+    "fetch layoutFrame
+    "
+    |aLayout|
 
-        layout   leftOffset:((staticAspects at:#leftOffset)   value) ? 0.
-        layout    topOffset:((staticAspects at:#topOffset)    value) ? 0.
-        layout leftFraction:((staticAspects at:#leftFraction) value) ? 0.
-        layout  topFraction:((staticAspects at:#topFraction)  value) ? 0.
+    aLayout := currentView geometryLayout.
 
-        layout leftAlignmentFraction:((staticAspects at:#leftAlignmentFraction) value) ? 0.
-        layout  topAlignmentFraction:((staticAspects at:#topAlignmentFraction)  value) ? 0.
+    (layoutAspects at:#leftOffset)     value:(aLayout leftOffset).
+    (layoutAspects at:#leftFraction)   value:(aLayout leftFraction).
+    (layoutAspects at:#topOffset)      value:(aLayout topOffset).
+    (layoutAspects at:#topFraction)    value:(aLayout topFraction).
+    (layoutAspects at:#rightOffset)    value:(aLayout rightOffset).
+    (layoutAspects at:#bottomOffset)   value:(aLayout bottomOffset).
+    (layoutAspects at:#rightFraction)  value:(aLayout rightFraction).
+    (layoutAspects at:#bottomFraction) value:(aLayout bottomFraction).
+!
 
-        ^ builderView setDimension:layout.
-    ].
+fetchLayoutOrigin
+    "fetch layoutOrigin
+    "
+    |aLayout|
 
-    (currentSpec == self class specificationLayoutOrigin) ifTrue:[
-        layout := LayoutOrigin new.
+    aLayout := currentView geometryLayout.
+
+    (layoutAspects at:#leftOffset)   value:(aLayout leftOffset).
+    (layoutAspects at:#leftFraction) value:(aLayout leftFraction).
+    (layoutAspects at:#topOffset)    value:(aLayout topOffset).
+    (layoutAspects at:#topFraction)  value:(aLayout topFraction).
+!
 
-        layout   leftOffset:((staticAspects at:#leftOffset)   value) ? 0.
-        layout    topOffset:((staticAspects at:#topOffset)    value) ? 0.
-        layout leftFraction:((staticAspects at:#leftFraction) value) ? 0.
-        layout  topFraction:((staticAspects at:#topFraction)  value) ? 0.
+fetchPoint
+    "fetch point
+    "
+    |e x y p|
 
-        builderView setDimension:layout.
-    ].
+    p := currentView geometryLayout.
+    x := p x.
+    y := p y.
+    e := currentView extent.
+
+    (layoutAspects at:#leftOffset)   value:x.
+    (layoutAspects at:#topOffset)    value:y.
+    (layoutAspects at:#rightOffset)  value:(x + e x).
+    (layoutAspects at:#bottomOffset) value:(y + e y).
 
 !
 
-showAlignmentOrigin
-    self switchLayoutSpec:(self class specificationAlignmentOrigin)
+fetchRectangle
+    "fetch rectangle
+    "
+    |aRectangle|
+
+    aRectangle := currentView geometryLayout.
+
+    (layoutAspects at:#leftOffset)   value:(aRectangle left).
+    (layoutAspects at:#rightOffset)  value:(aRectangle right).
+    (layoutAspects at:#topOffset)    value:(aRectangle top).
+    (layoutAspects at:#bottomOffset) value:(aRectangle bottom).
+! !
+
+!UIPropertyView methodsFor:'private layout write'!
+
+writeAlignmentOrigin
+    "write back as alignmentOrigin
+    "
+    |layout|
+
+    layout := AlignmentOrigin new.
+
+    layout   leftOffset:((layoutAspects at:#leftOffset)   value) ? 0.
+    layout    topOffset:((layoutAspects at:#topOffset)    value) ? 0.
+    layout leftFraction:((layoutAspects at:#leftFraction) value) ? 0.
+    layout  topFraction:((layoutAspects at:#topFraction)  value) ? 0.
+
+    layout leftAlignmentFraction:((layoutAspects at:#leftAlignmentFraction) value) ? 0.
+    layout  topAlignmentFraction:((layoutAspects at:#topAlignmentFraction)  value) ? 0.
+
+    builderView setDimension:layout.
 !
 
-showLayoutFrame
-    self switchLayoutSpec:(self class specificationLayoutFrame)
-!
+writeExtent
+    |extent|
 
-showLayoutOrigin
-    self switchLayoutSpec:(self class specificationLayoutOrigin)
+    extent := Point x:(((layoutAspects at:#leftOffset)   value) ? 0)
+                    y:(((layoutAspects at:#rightOffset)  value) ? 0).
+
+    builderView setExtent:extent
 !
 
-specificationLayout
-    "called from propertyChanged; returns specification assigned to
-     current view
+writeLayoutFrame
+    "write back as layoutFrame
     "
-    |layout spec|
+    |layout|
 
-    (currentView superView specClass basicNew isLayoutContainer) ifTrue:[
-        ^ nil
-    ].
-    layout := currentView geometryLayout.
+    layout := LayoutFrame new.
 
-    layout isLayout ifTrue:[
-        layout isLayoutFrame ifTrue:[
-            spec := self class specificationLayoutFrame
-        ] ifFalse:[
-            layout isAlignmentOrigin ifTrue:[
-                spec := self class specificationAlignmentOrigin
-            ] ifFalse:[
-                layout isLayoutOrigin ifTrue:[
-                    spec := self class specificationLayoutOrigin
-                ]
-            ]
-        ]
-    ].
+    layout     leftOffset:((layoutAspects at:#leftOffset)     value) ? 0.
+    layout    rightOffset:((layoutAspects at:#rightOffset)    value) ? 0.
+    layout      topOffset:((layoutAspects at:#topOffset)      value) ? 0.
+    layout   bottomOffset:((layoutAspects at:#bottomOffset)   value) ? 0.
+    layout   leftFraction:((layoutAspects at:#leftFraction)   value) ? 0.
+    layout  rightFraction:((layoutAspects at:#rightFraction)  value) ? 0.
+    layout    topFraction:((layoutAspects at:#topFraction)    value) ? 0.
+    layout bottomFraction:((layoutAspects at:#bottomFraction) value) ? 0.
 
-    spec notNil ifTrue:[
-        self layoutRead
-    ].
-  ^ spec
+    builderView setDimension:layout
 !
 
-switchLayoutSpec:aSpecification
-    self layoutRead.
-    self showSpec:aSpecification.
-    self modified:true.
+writeLayoutOrigin
+    "write back as layoutOrigin
+    "
+    |layout|
+
+    layout := LayoutOrigin new.
+
+    layout   leftOffset:((layoutAspects at:#leftOffset)   value) ? 0.
+    layout    topOffset:((layoutAspects at:#topOffset)    value) ? 0.
+    layout leftFraction:((layoutAspects at:#leftFraction) value) ? 0.
+    layout  topFraction:((layoutAspects at:#topFraction)  value) ? 0.
+
+    builderView setDimension:layout.
+
+!
 
+writePoint
+    "write back as point
+    "
+    |point|
+
+    point := Point x:(((layoutAspects at:#leftOffset) value) ? 0)
+                   y:(((layoutAspects at:#topOffset)  value) ? 0).
+
+    builderView setDimension:point
+!
+
+writeRectangle
+    "write back as rectangle
+    "
+    |rectangle|
+
+    rectangle := Rectangle left:(((layoutAspects at:#leftOffset)   value) ? 0)
+                            top:(((layoutAspects at:#topOffset)    value) ? 0)
+                          right:(((layoutAspects at:#rightOffset)  value) ? 0)
+                         bottom:(((layoutAspects at:#bottomOffset) value) ? 0).
+
+    builderView setDimension:rectangle
 ! !
 
 !UIPropertyView methodsFor:'private make layout'!
@@ -961,16 +2013,16 @@
 
         aBool ifTrue:[
             offset := offset + ((fraction * extent) asInteger).
-            (staticAspects at:offsetSymb) value:offset.
-            (staticAspects at:fractSymb)  value:0.
+            (layoutAspects at:offsetSymb) value:offset.
+            (layoutAspects at:fractSymb)  value:0.
         ] ifFalse:[
             fraction   := (fraction + (offset / extent)) asFloat.
 
             (fraction > 1.0) ifTrue:[ fraction := 1.0 ].
             (fraction < 0.0) ifTrue:[ fraction := 0.0 ].
 
-            (staticAspects at:offsetSymb) value:0.
-            (staticAspects at:fractSymb)  value:fraction.
+            (layoutAspects at:offsetSymb) value:0.
+            (layoutAspects at:fractSymb)  value:fraction.
         ]
     ]
 
@@ -995,6 +2047,11 @@
 
 !
 
+makeOffsetLeftTop
+    self makeOffsetLeft.
+    self makeOffsetTop.
+!
+
 makeOffsetRight
     self makeLayout:'right' xOrY:#x offset:true.
 
@@ -1023,6 +2080,11 @@
 
 !
 
+makeRelativeLeftTop
+    self makeRelativeLeft.
+    self makeRelativeTop.
+!
+
 makeRelativeRight
     self makeLayout:'right' xOrY:#x offset:false.
 
@@ -1036,7 +2098,7 @@
 !UIPropertyView methodsFor:'queries'!
 
 isLayoutSpec
-    "returns true if current menu is layout
+    "returns true if current menu is a layout specification
     "
     ^ propertyList selection == self class titleOfLayoutMenu
 ! !