so far so good ...
ApplicationModel subclass:#UIPropertyView
instanceVariableNames:'builderView modified propertyFrame propertyList propertySpecs
currentView currentSpec propertyAspects layoutAspects layoutType
specBeingEdited userSelectedProperty currentSpecChannel'
classVariableNames:''
poolDictionaries:''
category:'Interface-UIPainter'
!
!UIPropertyView class methodsFor:'instance creation'!
in:aTopView builder:aBuilderView
|application|
application := self new.
application in:aTopView builder:aBuilderView.
^ application
! !
!UIPropertyView class methodsFor:'constants'!
titleOfLayoutMenu
^ 'Dimension'
! !
!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: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)
)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#LabelSpec
#'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 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 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 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 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 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
#'immediateAccept:' false
#'acceptOnLeave:' true
#'acceptOnReturn:' true
#'acceptOnTab:' 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
#'immediateAccept:' false
#'acceptOnLeave:' true
#'acceptOnReturn:' true
#'acceptOnTab:' 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
#'immediateAccept:' false
#'acceptOnLeave:' true
#'acceptOnReturn:' true
#'acceptOnTab:' 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
#'immediateAccept:' false
#'acceptOnLeave:' true
#'acceptOnReturn:' true
#'acceptOnTab:' 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
#'immediateAccept:' false
#'acceptOnLeave:' true
#'acceptOnReturn:' true
#'acceptOnTab:' 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
#'immediateAccept:' false
#'acceptOnLeave:' true
#'acceptOnReturn:' true
#'acceptOnTab:' true
#'acceptOnLostFocus:' true
#'hasBorder:' false
)
#(#ActionButtonSpec
#'name:' 'button1'
#'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 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 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 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:' '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:' '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
)
#(#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
)
)
)
)
!
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: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 238 303)
)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#LabelSpec
#'name:' 'label1'
#'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 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
#'immediateAccept:' false
#'acceptOnLeave:' true
#'acceptOnReturn:' true
#'acceptOnTab:' 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
#'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
#'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
#'immediateAccept:' false
#'acceptOnLeave:' true
#'acceptOnReturn:' true
#'acceptOnTab:' 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
#'immediateAccept:' false
#'acceptOnLeave:' true
#'acceptOnReturn:' true
#'acceptOnTab:' true
#'acceptOnLostFocus:' true
#'hasBorder:' false
)
#(#ActionButtonSpec
#'name:' 'button1'
#'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 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 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 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:' '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
)
)
)
)
!
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
)
#(#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:'event handling'!
builderViewChanged:what
"something changed in the builder view
"
|slices list prevSpecClass|
(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
].
currentView := builderView singleSelection.
propertyAspects := nil.
currentView isNil ifTrue:[
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 modified:false.
].
prevSpecClass := specBeingEdited class.
specBeingEdited := (builderView generateSpecFor:currentView) first.
( (specBeingEdited class == prevSpecClass)
and:[currentSpecChannel notNil]
) ifTrue:[
"can keep current specifications plus current property selection
"
self reload.
^ self.
].
propertyList selectionIndex:nil.
propertyAspects := IdentityDictionary new.
propertySpecs := OrderedCollection new.
slices := currentView specClass slices.
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.
self modified:false.
!
modified:aState
"change state of modification flag
"
aState ~~ modified ifTrue:[
(modified := aState) ifTrue:[
(builder componentAt:#cancelButton) enable.
(builder componentAt:#applyButton) enable.
] ifFalse:[
(builder componentAt:#cancelButton) disable.
(builder componentAt:#applyButton) disable.
].
]
!
propertySelectionChanged
"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).
"/ currentView isNil ifTrue:[
"/ currentView := receiver
"/ ].
^ self showSpec:nil
].
index := propertyList selectionIndex.
userSelectedProperty := sel.
index > propertySpecs size ifTrue:[ "/ one of my specifications
(sel == self class titleOfLayoutMenu) ifTrue:[
^ self showAndFetchLayout
]
] ifFalse:[
spec := currentView specClass perform:(propertySpecs at:index).
].
self showSpec:spec.
!
update:something with:aParameter from:changedObject
"any attribute changed its state in the current specification
"
self modified:true
! !
!UIPropertyView methodsFor:'initialization'!
in:aTopView builder:aBuilderView
"setup property view in topview and that the builder view
"
|menu y cancelButton applyButton panel|
super initialize.
self initializeLayoutAspects.
builderView := aBuilderView.
menu := PopUpList label:'properties' in:aTopView.
menu defaultLabel:'properties'.
propertyFrame := View in:aTopView.
panel := HorizontalPanelView in:aTopView.
cancelButton := Button abortButtonIn:panel.
applyButton := Button okButtonIn:panel.
propertyList := SelectionInList new.
propertyList list:#( ).
propertyList selectionIndexHolder onChangeSend:#propertySelectionChanged
to:self.
menu model:propertyList.
y := menu preferredExtent y.
menu origin:0.0@0.0 corner:1.0@y.
propertyFrame origin:0.0@y corner:1.0@1.0.
panel origin:0.0@1.0 corner:1.0@1.0.
y := panel preferredExtent y.
propertyFrame bottomInset:y.
panel topInset:(y negated).
builder componentAt:#cancelButton put:cancelButton.
builder componentAt:#applyButton put:applyButton.
cancelButton action:[ self cancel ].
applyButton action:[ self apply ].
modified := true.
self modified:false.
!
initializeLayoutAspects
"initialize all layout aspects
"
layoutAspects := IdentityDictionary new.
#( bottomFraction bottomOffset
leftFraction leftOffset
topFraction topOffset
rightFraction rightOffset
leftAlignmentFraction topAlignmentFraction
)
do:[:aChannel|
layoutAspects at:aChannel put:(ValueHolder new).
].
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:[
aspect := propertyAspects at:aKey ifAbsent:nil.
aspect notNil ifTrue:[
^ aspect
]
].
^ layoutAspects at:aKey ifAbsent:[super aspectFor:aKey]
!
showSpec:aSpec
"switch to specification
"
currentSpec ~= aSpec ifTrue:[
propertyFrame destroySubViews.
aSpec notNil ifTrue:[
builder buildFromSpec:aSpec in:propertyFrame.
propertyFrame realizeAllSubViews
]
].
currentSpec := aSpec.
! !
!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:[
layoutType notNil ifTrue:[
self perform:(('write', layoutType asString) asSymbol)
]
]
]
!
cancel
"cancel all changes and read back attributes from current view
"
modified ifTrue:[
specBeingEdited := (builderView generateSpecFor:currentView) first.
self reload
].
!
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'!
layoutType
^ layoutType
!
layoutType:something
|spec|
layoutType ~~ something ifTrue:[
layoutType := something.
layoutType notNil ifTrue:[
self modified:true.
spec := ('specification', layoutType asString) asSymbol.
spec := self class perform:spec.
].
self showSpec:spec
].
!
layoutTypeList
^ #( #LayoutFrame #AlignmentOrigin #LayoutOrigin #Point #Rectangle )
!
selectedLayoutType
^ layoutType
!
showAndFetchLayout
"fetch and show layout specification assigned to current view
"
|type|
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)
]
].
self layoutType:type.
modified := false.
! !
!UIPropertyView methodsFor:'private layout fetch'!
fetchAlignmentOrigin
"fetch alignmentOrigin
"
|aLayout|
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).
(layoutAspects at:#leftAlignmentFraction) value:(aLayout leftAlignmentFraction).
(layoutAspects at:#topAlignmentFraction) value:(aLayout topAlignmentFraction).
!
fetchExtent
|extent|
extent := currentView extent.
(layoutAspects at:#leftOffset) value:(extent x).
(layoutAspects at:#rightOffset) value:(extent y).
!
fetchLayoutFrame
"fetch layoutFrame
"
|aLayout|
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).
(layoutAspects at:#rightOffset) value:(aLayout rightOffset).
(layoutAspects at:#bottomOffset) value:(aLayout bottomOffset).
(layoutAspects at:#rightFraction) value:(aLayout rightFraction).
(layoutAspects at:#bottomFraction) value:(aLayout bottomFraction).
!
fetchLayoutOrigin
"fetch layoutOrigin
"
|aLayout|
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).
!
fetchPoint
"fetch point
"
|e x y p|
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).
!
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.
!
writeExtent
|extent|
extent := Point x:(((layoutAspects at:#leftOffset) value) ? 0)
y:(((layoutAspects at:#rightOffset) value) ? 0).
builderView setExtent:extent
!
writeLayoutFrame
"write back as layoutFrame
"
|layout|
layout := LayoutFrame new.
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.
builderView setDimension:layout
!
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'!
makeLayout:what xOrY:xOrY offset:aBool
|layout extent fraction offset fractSymb offsetSymb|
currentView isNil ifTrue:[
^ self
].
layout := currentView geometryLayout.
layout isLayout ifFalse:[
^ self
].
fractSymb := (what, 'Fraction') asSymbol.
offsetSymb := (what, 'Offset') asSymbol.
( (layout respondsTo:fractSymb)
and:[layout respondsTo:offsetSymb]
) ifTrue:[
fraction := layout perform:fractSymb.
offset := layout perform:offsetSymb.
extent := (currentView superView computeExtent) perform:xOrY.
aBool ifTrue:[
offset := offset + ((fraction * extent) asInteger).
(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 ].
(layoutAspects at:offsetSymb) value:0.
(layoutAspects at:fractSymb) value:fraction.
]
]
!
makeOffsetAll
self makeOffsetLeft.
self makeOffsetTop.
self makeOffsetRight.
self makeOffsetBottom.
!
makeOffsetBottom
self makeLayout:'bottom' xOrY:#y offset:true.
!
makeOffsetLeft
self makeLayout:'left' xOrY:#x offset:true.
!
makeOffsetLeftTop
self makeOffsetLeft.
self makeOffsetTop.
!
makeOffsetRight
self makeLayout:'right' xOrY:#x offset:true.
!
makeOffsetTop
self makeLayout:'top' xOrY:#y offset:true.
!
makeRelativeAll
self makeRelativeLeft.
self makeRelativeTop.
self makeRelativeRight.
self makeRelativeBottom.
!
makeRelativeBottom
self makeLayout:'bottom' xOrY:#y offset:false.
!
makeRelativeLeft
self makeLayout:'left' xOrY:#x offset:false.
!
makeRelativeLeftTop
self makeRelativeLeft.
self makeRelativeTop.
!
makeRelativeRight
self makeLayout:'right' xOrY:#x offset:false.
!
makeRelativeTop
self makeLayout:'top' xOrY:#y offset:false.
! !
!UIPropertyView methodsFor:'queries'!
isLayoutSpec
"returns true if current menu is a layout specification
"
^ propertyList selection == self class titleOfLayoutMenu
! !
!UIPropertyView class methodsFor:'documentation'!
version
^ '$Header$'
! !