ApplicationModel subclass:#UIPropertyView
instanceVariableNames:'window specClass aspects modified modifiedHolder'
classVariableNames:''
poolDictionaries:''
category:'Interface-UIPainter'
!
UIPropertyView subclass:#Dimension
instanceVariableNames:'noteBook forView selection layoutTypes'
classVariableNames:''
poolDictionaries:''
privateIn:UIPropertyView
!
UIPropertyView subclass:#Specification
instanceVariableNames:'specEdited specChannel'
classVariableNames:''
poolDictionaries:''
privateIn:UIPropertyView
!
!UIPropertyView class methodsFor:'documentation'!
documentation
"
provides tools to the UIPainter accessing and manipulation properties
and/or layouts.
[see also:]
UIBuilder
"
! !
!UIPropertyView class methodsFor:'instance creation'!
for:aTool in:aTopview
|cls appl|
cls := Smalltalk classNamed:(self name asString, '::', aTool asString).
appl := cls new.
appl origin:0.0@0.0 corner:1.0@1.0 in:aTopview.
^ appl
!
in:aTopview
|appl|
appl := self new.
appl origin:0.0@0.0 corner:1.0@1.0 in:aTopview.
^ appl
! !
!UIPropertyView methodsFor:'accessing'!
buildFromSpec:aSpec
|state subViews backGroundColor v|
aSpec ~= specClass ifTrue:[
window destroySubViews.
aSpec notNil ifTrue:[
v := builder buildFromSpec:aSpec in:window.
window allViewBackground:(self viewBackground).
window realizeAllSubViews.
]
].
specClass := aSpec.
self modified:false
!
modified
"returns modifying state
"
^ modified
!
modified:aState
"set modifying state
"
modified := aState.
modifiedHolder notNil ifTrue:[
modifiedHolder value ~~ modified ifTrue:[
modifiedHolder value:modified
]
]
!
modifiedHolder
"returns the value holder set to true in case of modifying attributes
"
^ modifiedHolder
!
modifiedHolder:aValueHolder
"set the value holder set to true in case of modifying attributes
"
modifiedHolder notNil ifTrue:[
modifiedHolder removeDependent:self.
].
(modifiedHolder := aValueHolder) notNil ifTrue:[
modifiedHolder addDependent:self.
modifiedHolder setValue:modified.
].
! !
!UIPropertyView methodsFor:'accessing hierarchy'!
lower
"bring window to back
"
self window back
!
raise
"bring window to front
"
self window raise
!
viewBackground
^ window viewBackground
!
viewBackground:aColor
window viewBackground:aColor
!
window
"returns window application is running in
"
^ window
! !
!UIPropertyView methodsFor:'bindings'!
aspectFor:aKey
"returns aspect for a key or nil
"
aspects notNil ifTrue:[
^ aspects at:aKey ifAbsent:nil
].
^ super aspectFor:aKey
!
aspects
"returned monitored aspects
"
^ aspects
!
aspects:aListOfAspects
"set aspects to be monitored
"
(aspects := aListOfAspects) notNil ifTrue:[
aspects do:[:el | el addDependent:self ].
].
self modified:false.
! !
!UIPropertyView methodsFor:'change & update'!
update:something with:someArgument from:someone
"any attribute changed its state in the current specification
"
someone == modifiedHolder ifTrue:[
modified := modifiedHolder value
] ifFalse:[
self modified:true
]
! !
!UIPropertyView methodsFor:'initialization'!
closeRequest
modifiedHolder notNil ifTrue:[
modifiedHolder removeDependent:self.
modifiedHolder := nil.
].
super closeRequest
!
initialize
super initialize.
modified := false.
!
origin:anOrigin corner:aCorner in:aTopview
window := SimpleView origin:anOrigin corner:aCorner in:aTopview
! !
!UIPropertyView::Dimension 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::Dimension andSelector:#specificationAlignmentOrigin
UIPropertyView::Dimension new openInterface:#specificationAlignmentOrigin
"
<resource: #canvas>
^
#(#FullSpec
#'window:'
#(#WindowSpec
#'name:' 'uIPainterView'
#'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
#'label:' 'unnamed'
#'bounds:' #(#Rectangle 0 0 250 365)
)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#LabelSpec
#'name:' 'label2'
#'layout:' #(#AlignmentOrigin 49 0 68 0 1 0)
#'label:' 'top'
#'adjust:' #right
)
#(#LabelSpec
#'name:' 'label3'
#'layout:' #(#Point 58 13)
#'label:' 'relative'
)
#(#LabelSpec
#'name:' 'label4'
#'layout:' #(#Point 154 14)
#'label:' 'offset'
)
#(#LabelSpec
#'name:' 'label5'
#'layout:' #(#AlignmentOrigin 63 0 140 0 1 0)
#'label:' 'align H'
#'adjust:' #right
)
#(#LabelSpec
#'name:' 'label6'
#'layout:' #(#AlignmentOrigin 63 0 166 0 1 0)
#'label:' 'align V'
#'adjust:' #right
)
#(#InputFieldSpec
#'name:' 'editField1'
#'layout:' #(#LayoutFrame 58 0 41 0 115 0 59 0)
#'model:' #leftFraction
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField2'
#'layout:' #(#LayoutFrame 58 0 68 0 115 0 86 0)
#'model:' #topFraction
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField5'
#'layout:' #(#LayoutFrame 68 0 140 0 125 0 158 0)
#'model:' #leftAlignmentFraction
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField6'
#'layout:' #(#LayoutFrame 68 0 166 0 125 0 184 0)
#'model:' #topAlignmentFraction
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField3'
#'layout:' #(#LayoutFrame 154 0 41 0 212 0 59 0)
#'model:' #leftOffset
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField4'
#'layout:' #(#LayoutFrame 154 0 68 0 212 0 86 0)
#'model:' #topOffset
#'tabable:' true
#'type:' #numberOrNil
)
#(#ActionButtonSpec
#'name:' 'button1'
#'layout:' #(#LayoutFrame 119 0 41 0 138 0 59 0)
#'label:' ''
#'model:' #makeRelativeLeft
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button2'
#'layout:' #(#LayoutFrame 119 0 68 0 138 0 86 0)
#'label:' ''
#'model:' #makeRelativeTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button3'
#'layout:' #(#LayoutFrame 217 0 41 0 236 0 59 0)
#'label:' ''
#'model:' #makeOffsetLeft
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button4'
#'layout:' #(#LayoutFrame 217 0 68 0 236 0 86 0)
#'label:' ''
#'model:' #makeOffsetTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button8'
#'layout:' #(#LayoutFrame 119 0 102 0 138 0 120 0)
#'label:' ''
#'model:' #makeRelativeLeftTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button9'
#'layout:' #(#LayoutFrame 217 0 102 0 236 0 120 0)
#'label:' ''
#'model:' #makeOffsetLeftTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#LabelSpec
#'name:' 'label7'
#'layout:' #(#AlignmentOrigin 49 0 102 0 1 0)
#'label:' 'all'
#'adjust:' #right
)
#(#LabelSpec
#'name:' 'label1'
#'layout:' #(#AlignmentOrigin 49 0 41 0 1 0)
#'label:' 'left'
#'adjust:' #right
)
#(#DividerSpec
#'name:' 'separator1'
#'layout:' #(#Rectangle 154 142 203 153)
#'orientation:' #horizontal
)
#(#DividerSpec
#'name:' 'separator2'
#'layout:' #(#Rectangle 154 173 203 184)
#'orientation:' #horizontal
)
#(#DividerSpec
#'name:' 'separator3'
#'layout:' #(#Rectangle 145 152 155 173)
#'orientation:' #vertical
)
#(#DividerSpec
#'name:' 'separator4'
#'layout:' #(#Rectangle 203 152 213 173)
#'orientation:' #vertical
)
#(#ActionButtonSpec
#'name:' 'alignBR'
#'layout:' #(#Rectangle 201 172 213 184)
#'label:' ''
#'model:' #makeAlignBottomRight
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'alignTL'
#'layout:' #(#Rectangle 145 141 157 153)
#'label:' ''
#'model:' #makeAlignTopLeft
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'alignTR'
#'layout:' #(#Rectangle 201 141 213 153)
#'label:' ''
#'model:' #makeAlignTopRight
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'alignBL'
#'layout:' #(#Rectangle 145 171 157 183)
#'label:' ''
#'model:' #makeAlignBottomLeft
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'alignTC'
#'layout:' #(#Rectangle 173 141 185 153)
#'label:' ''
#'model:' #makeAlignTopCenter
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'alignBC'
#'layout:' #(#Rectangle 173 172 185 184)
#'label:' ''
#'model:' #makeAlignBottomCenter
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'alignLC'
#'layout:' #(#Rectangle 145 156 157 168)
#'label:' ''
#'model:' #makeAlignLeftCenter
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'alignRC'
#'layout:' #(#Rectangle 201 156 213 168)
#'label:' ''
#'model:' #makeAlignRightCenter
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'alignC'
#'layout:' #(#Rectangle 173 156 185 168)
#'label:' ''
#'model:' #makeAlignCenter
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
)
)
)
!
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::Dimension andSelector:#specificationExtent
UIPropertyView::Dimension new openInterface:#specificationExtent
"
<resource: #canvas>
^
#(#FullSpec
#'window:'
#(#WindowSpec
#'name:' 'uIPainterView'
#'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
#'label:' 'unnamed'
#'bounds:' #(#Rectangle 0 0 224 251)
)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#LabelSpec
#'name:' 'label1'
#'layout:' #(#AlignmentOrigin 99 0 45 0 1 0)
#'label:' 'horizontal:'
#'adjust:' #left
)
#(#LabelSpec
#'name:' 'label2'
#'layout:' #(#AlignmentOrigin 99 0 72 0 1 0)
#'label:' 'vertical:'
#'adjust:' #left
)
#(#InputFieldSpec
#'name:' 'editField1'
#'layout:' #(#LayoutFrame 104 0 45 0 197 0 63 0)
#'model:' #leftOffset
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField2'
#'layout:' #(#LayoutFrame 104 0 72 0 197 0 90 0)
#'model:' #rightOffset
#'tabable:' true
#'type:' #numberOrNil
)
#(#LabelSpec
#'name:' 'extentLabel'
#'layout:' #(#LayoutFrame 9 0 20 0 63 0 37 0)
#'label:' 'Extent:'
)
)
)
)
!
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::Dimension andSelector:#specificationLayoutFrame
UIPropertyView::Dimension new openInterface:#specificationLayoutFrame
"
<resource: #canvas>
^
#(#FullSpec
#'window:'
#(#WindowSpec
#'name:' 'uIPainterView'
#'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
#'label:' 'unnamed'
#'bounds:' #(#Rectangle 0 0 238 291)
)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#LabelSpec
#'name:' 'label left'
#'layout:' #(#AlignmentOrigin 60 0 43 0 1 0)
#'label:' 'left'
)
#(#LabelSpec
#'name:' 'label top'
#'layout:' #(#AlignmentOrigin 60 0 71 0 1 0)
#'label:' 'top'
)
#(#LabelSpec
#'name:' 'label right'
#'layout:' #(#AlignmentOrigin 60 0 99 0 1 0)
#'label:' 'right'
)
#(#LabelSpec
#'name:' 'label bottom'
#'layout:' #(#AlignmentOrigin 60 0 127 0 1 0)
#'label:' 'bottom'
)
#(#LabelSpec
#'name:' 'label relative'
#'layout:' #(#Point 65 14)
#'label:' 'relative'
)
#(#LabelSpec
#'name:' 'label offset'
#'layout:' #(#Point 159 14)
#'label:' 'offset'
)
#(#LabelSpec
#'name:' 'label all relative'
#'layout:' #(#AlignmentOrigin 60 0 161 0 1 0)
#'label:' 'all'
)
#(#InputFieldSpec
#'name:' 'relative E1'
#'layout:' #(#LayoutFrame 65 0 43 0 113 0 61 0)
#'model:' #leftFraction
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'relative E2'
#'layout:' #(#LayoutFrame 65 0 71 0 113 0 89 0)
#'model:' #topFraction
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'relative E3'
#'layout:' #(#LayoutFrame 65 0 99 0 113 0 117 0)
#'model:' #rightFraction
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'relative E4'
#'layout:' #(#LayoutFrame 65 0 127 0 113 0 145 0)
#'model:' #bottomFraction
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'offset E1'
#'layout:' #(#LayoutFrame 159 0 43 0 210 0 61 0)
#'model:' #leftOffset
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'offset E2'
#'layout:' #(#LayoutFrame 159 0 71 0 210 0 89 0)
#'model:' #topOffset
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'offset E3'
#'layout:' #(#LayoutFrame 159 0 99 0 210 0 117 0)
#'model:' #rightOffset
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'offset E4'
#'layout:' #(#LayoutFrame 159 0 127 0 210 0 145 0)
#'model:' #bottomOffset
#'type:' #numberOrNil
)
#(#ActionButtonSpec
#'name:' 'relative B1'
#'layout:' #(#LayoutFrame 117 0 43 0 136 0 61 0)
#'label:' ' '
#'model:' #makeRelativeLeft
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'relative B2'
#'layout:' #(#LayoutFrame 117 0 71 0 136 0 89 0)
#'label:' ' '
#'model:' #makeRelativeTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'relative B3'
#'layout:' #(#LayoutFrame 117 0 99 0 136 0 117 0)
#'label:' ' '
#'model:' #makeRelativeRight
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'relative B4'
#'layout:' #(#LayoutFrame 117 0 127 0 136 0 145 0)
#'label:' ' '
#'model:' #makeRelativeBottom
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'relative BAll'
#'layout:' #(#LayoutFrame 117 0 161 0 136 0 179 0)
#'label:' ' '
#'model:' #makeRelativeAll
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'offset B1'
#'layout:' #(#LayoutFrame 214 0 43 0 233 0 61 0)
#'label:' ''
#'model:' #makeOffsetLeft
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'offset B2'
#'layout:' #(#LayoutFrame 214 0 71 0 233 0 89 0)
#'label:' ''
#'model:' #makeOffsetTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'offset B3'
#'layout:' #(#LayoutFrame 214 0 99 0 233 0 117 0)
#'label:' ''
#'model:' #makeOffsetRight
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'offset B4'
#'layout:' #(#LayoutFrame 214 0 127 0 233 0 145 0)
#'label:' ''
#'model:' #makeOffsetBottom
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'offset BAll'
#'layout:' #(#LayoutFrame 214 0 161 0 233 0 179 0)
#'label:' ' '
#'model:' #makeOffsetAll
#'isTriggerOnDown:' false
#'autoRepeat:' 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::Dimension andSelector:#specificationLayoutOrigin
UIPropertyView::Dimension new openInterface:#specificationLayoutOrigin
"
<resource: #canvas>
^
#(#FullSpec
#'window:'
#(#WindowSpec
#'name:' 'uIPainterView'
#'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
#'label:' 'unnamed'
#'bounds:' #(#Rectangle 0 0 238 303)
)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#LabelSpec
#'name:' 'label1'
#'layout:' #(#AlignmentOrigin 52 0 44 0 1 0)
#'label:' 'left'
)
#(#LabelSpec
#'name:' 'label2'
#'layout:' #(#AlignmentOrigin 52 0 71 0 1 0)
#'label:' 'top'
)
#(#LabelSpec
#'name:' 'label3'
#'layout:' #(#Point 57 12)
#'label:' 'relative'
)
#(#LabelSpec
#'name:' 'label4'
#'layout:' #(#Point 154 13)
#'label:' 'offset'
)
#(#InputFieldSpec
#'name:' 'editField1'
#'layout:' #(#LayoutFrame 57 0 44 0 114 0 62 0)
#'model:' #leftFraction
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField2'
#'layout:' #(#LayoutFrame 57 0 71 0 114 0 89 0)
#'model:' #topFraction
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField3'
#'layout:' #(#LayoutFrame 154 0 44 0 212 0 62 0)
#'model:' #leftOffset
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField4'
#'layout:' #(#LayoutFrame 154 0 71 0 212 0 89 0)
#'model:' #topOffset
#'tabable:' true
#'type:' #numberOrNil
)
#(#ActionButtonSpec
#'name:' 'button1'
#'layout:' #(#LayoutFrame 119 0 44 0 138 0 62 0)
#'label:' ''
#'model:' #makeRelativeLeft
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button2'
#'layout:' #(#LayoutFrame 119 0 71 0 138 0 89 0)
#'label:' ''
#'model:' #makeRelativeTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button3'
#'layout:' #(#LayoutFrame 216 0 44 0 235 0 62 0)
#'label:' ''
#'model:' #makeOffsetLeft
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button4'
#'layout:' #(#LayoutFrame 216 0 71 0 235 0 89 0)
#'label:' ''
#'model:' #makeOffsetTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button8'
#'layout:' #(#LayoutFrame 119 0 103 0 138 0 121 0)
#'label:' ''
#'model:' #makeRelativeLeftTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#ActionButtonSpec
#'name:' 'button9'
#'layout:' #(#LayoutFrame 216 0 103 0 235 0 121 0)
#'label:' ''
#'model:' #makeOffsetLeftTop
#'isTriggerOnDown:' false
#'autoRepeat:' false
)
#(#LabelSpec
#'name:' 'label5'
#'layout:' #(#AlignmentOrigin 52 0 103 0 1 0)
#'label:' 'all'
)
)
)
)
!
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::Dimension andSelector:#specificationPoint
UIPropertyView::Dimension new openInterface:#specificationPoint
"
<resource: #canvas>
^
#(#FullSpec
#'window:'
#(#WindowSpec
#'name:' 'uIPainterView'
#'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
#'label:' 'unnamed'
#'bounds:' #(#Rectangle 0 0 238 303)
)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#LabelSpec
#'name:' 'label1'
#'layout:' #(#AlignmentOrigin 75 0 19 0 1 0)
#'label:' 'origin x:'
)
#(#LabelSpec
#'name:' 'label2'
#'layout:' #(#AlignmentOrigin 75 0 46 0 1 0)
#'label:' 'origin y:'
)
#(#InputFieldSpec
#'name:' 'editField1'
#'layout:' #(#LayoutFrame 77 0 19 0 170 0 37 0)
#'model:' #absLeft
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField2'
#'layout:' #(#LayoutFrame 77 0 46 0 170 0 64 0)
#'model:' #absTop
#'tabable:' true
#'type:' #numberOrNil
)
)
)
)
!
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::Dimension andSelector:#specificationRectangle
UIPropertyView::Dimension new openInterface:#specificationRectangle
"
<resource: #canvas>
^
#(#FullSpec
#'window:'
#(#WindowSpec
#'name:' 'uIPainterView'
#'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
#'label:' 'unnamed'
#'bounds:' #(#Rectangle 0 0 238 303)
)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#LabelSpec
#'name:' 'label1'
#'layout:' #(#AlignmentOrigin 80 0 19 0 1 0)
#'label:' 'origin x:'
#'adjust:' #left
)
#(#LabelSpec
#'name:' 'label2'
#'layout:' #(#AlignmentOrigin 80 0 46 0 1 0)
#'label:' 'origin y:'
#'adjust:' #left
)
#(#InputFieldSpec
#'name:' 'editField1'
#'layout:' #(#LayoutFrame 81 0 19 0 174 0 37 0)
#'model:' #leftOffset
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField2'
#'layout:' #(#LayoutFrame 81 0 46 0 174 0 64 0)
#'model:' #topOffset
#'tabable:' true
#'type:' #numberOrNil
)
#(#LabelSpec
#'name:' 'label4'
#'layout:' #(#AlignmentOrigin 80 0 74 0 1 0)
#'label:' 'corner x:'
#'adjust:' #left
)
#(#LabelSpec
#'name:' 'label5'
#'layout:' #(#AlignmentOrigin 80 0 101 0 1 0)
#'label:' 'corner y:'
#'adjust:' #left
)
#(#InputFieldSpec
#'name:' 'editField3'
#'layout:' #(#LayoutFrame 81 0 74 0 174 0 92 0)
#'model:' #rightOffset
#'tabable:' true
#'type:' #numberOrNil
)
#(#InputFieldSpec
#'name:' 'editField4'
#'layout:' #(#LayoutFrame 81 0 101 0 174 0 119 0)
#'model:' #bottomOffset
#'tabable:' true
#'type:' #numberOrNil
)
)
)
)
! !
!UIPropertyView::Dimension methodsFor:'accessing'!
forView
"get the view the layout derives from
"
^ forView
!
forView:aView
"set the view the layout derives from
"
forView := aView.
self update.
!
layout
"returns current layout
"
|layout|
selection notNil ifTrue:[
layout := self perform:(('get', selection asString) asSymbol).
].
^ layout
!
layoutType
"returns current layoutType
"
^ selection
!
update
"update from physical view
"
|superView|
forView notNil ifTrue:[
superView := forView superView
].
noteBook enabled:((superView isNil or:[superView specClass isLayoutContainer]) not).
self selection:(UIPainterView layoutType:forView).
! !
!UIPropertyView::Dimension methodsFor:'accessing hierarchy'!
window
^ noteBook
! !
!UIPropertyView::Dimension methodsFor:'initialization'!
initialize
"initialize channels
"
|layoutAspects|
super initialize.
layoutAspects := IdentityDictionary new.
#( bottomFraction bottomOffset
leftFraction leftOffset
topFraction topOffset
rightFraction rightOffset
leftAlignmentFraction topAlignmentFraction
absLeft absTop
)
do:[:aKey|
layoutAspects at:aKey put:(ValueHolder new)
].
self aspects:layoutAspects.
!
origin:anOrigin corner:aCorner in:aTopView
"set dimensions
"
noteBook := NoteBookView origin:anOrigin corner:aCorner in:aTopView.
window := noteBook canvas.
noteBook direction:#bottom.
noteBook useIndex:true.
layoutTypes := #( #LayoutFrame #AlignmentOrigin #LayoutOrigin #Point #Rectangle ).
noteBook list:#( 'Frame' 'Alig.Origin' 'LayoutOrigin' 'Point' 'Rectangle' ).
noteBook action:[:anIndex|
anIndex notNil ifTrue:[self selection:(layoutTypes at:anIndex)].
].
! !
!UIPropertyView::Dimension methodsFor:'layout access'!
getAlignmentOrigin
"returns current layout as alignmentOrigin
"
|layout|
layout := AlignmentOrigin new.
layout leftOffset:((aspects at:#leftOffset) value) ? 0.
layout topOffset:((aspects at:#topOffset) value) ? 0.
layout leftFraction:((aspects at:#leftFraction) value) ? 0.
layout topFraction:((aspects at:#topFraction) value) ? 0.
layout leftAlignmentFraction:((aspects at:#leftAlignmentFraction) value) ? 0.
layout topAlignmentFraction:((aspects at:#topAlignmentFraction) value) ? 0.
^ layout
!
getExtent
"returns current extent
"
^ Point x:(((aspects at:#leftOffset) value) ? 0)
y:(((aspects at:#rightOffset) value) ? 0)
!
getLayoutFrame
"returns current layout as layoutFrame
"
|layout|
layout := LayoutFrame new.
layout leftOffset:((aspects at:#leftOffset) value) ? 0.
layout rightOffset:((aspects at:#rightOffset) value) ? 0.
layout topOffset:((aspects at:#topOffset) value) ? 0.
layout bottomOffset:((aspects at:#bottomOffset) value) ? 0.
layout leftFraction:((aspects at:#leftFraction) value) ? 0.
layout rightFraction:((aspects at:#rightFraction) value) ? 0.
layout topFraction:((aspects at:#topFraction) value) ? 0.
layout bottomFraction:((aspects at:#bottomFraction) value) ? 0.
^ layout
!
getLayoutOrigin
"returns current layout as layoutOrigin
"
|layout|
layout := LayoutOrigin new.
layout leftOffset:((aspects at:#leftOffset) value) ? 0.
layout topOffset:((aspects at:#topOffset) value) ? 0.
layout leftFraction:((aspects at:#leftFraction) value) ? 0.
layout topFraction:((aspects at:#topFraction) value) ? 0.
^ layout
!
getPoint
"returns current layout as point
"
^ Point x:(((aspects at:#absLeft) value) ? 0)
y:(((aspects at:#absTop) value) ? 0)
!
getRectangle
"returns current layout as rectangle
"
^ Rectangle left:(((aspects at:#leftOffset) value) ? 0)
top:(((aspects at:#topOffset) value) ? 0)
right:(((aspects at:#rightOffset) value) ? 0)
bottom:(((aspects at:#bottomOffset) value) ? 0)
! !
!UIPropertyView::Dimension methodsFor:'layout fetch'!
fetchAlignmentOrigin
"fetch alignmentOrigin
"
|layout type extent|
type := UIPainterView layoutType:forView.
layout := forView geometryLayout.
layout isLayout ifTrue:[
(aspects at:#leftOffset) value:(layout leftOffset).
(aspects at:#leftFraction) value:(layout leftFraction).
(aspects at:#topOffset) value:(layout topOffset).
(aspects at:#topFraction) value:(layout topFraction).
type == #AlignmentOrigin ifTrue:[
(aspects at:#leftAlignmentFraction) value:(layout leftAlignmentFraction).
(aspects at:#topAlignmentFraction) value:(layout topAlignmentFraction).
^ self
]
] ifFalse:[
layout := forView computeOrigin.
(aspects at:#leftOffset) value:(layout x).
(aspects at:#leftFraction) value:0.
(aspects at:#topOffset) value:(layout y).
(aspects at:#topFraction) value:0.
].
(aspects at:#leftAlignmentFraction) value:0.
(aspects at:#topAlignmentFraction) value:0.
!
fetchExtent
"fetch extent
"
|extent|
extent := forView computeExtent.
(aspects at:#leftOffset) value:(extent x).
(aspects at:#rightOffset) value:(extent y).
!
fetchLayoutFrame
"fetch layoutFrame
"
|layout|
layout := UIPainterView asLayoutFrameFromView:forView.
(aspects at:#leftOffset) value:(layout leftOffset).
(aspects at:#leftFraction) value:(layout leftFraction).
(aspects at:#topOffset) value:(layout topOffset).
(aspects at:#topFraction) value:(layout topFraction).
(aspects at:#rightOffset) value:(layout rightOffset).
(aspects at:#bottomOffset) value:(layout bottomOffset).
(aspects at:#rightFraction) value:(layout rightFraction).
(aspects at:#bottomFraction) value:(layout bottomFraction).
!
fetchLayoutOrigin
"fetch layoutOrigin
"
|layout|
layout := UIPainterView asLayoutFrameFromView:forView.
(aspects at:#leftOffset) value:(layout leftOffset).
(aspects at:#leftFraction) value:(layout leftFraction).
(aspects at:#topOffset) value:(layout topOffset).
(aspects at:#topFraction) value:(layout topFraction).
!
fetchPoint
"fetch point
"
|origin|
origin := forView computeOrigin.
(aspects at:#absLeft) value:(origin x).
(aspects at:#absTop) value:(origin y).
!
fetchRectangle
"fetch rectangle
"
|origin corner|
origin := forView computeOrigin.
corner := forView computeCorner.
(aspects at:#leftOffset) value:(origin x).
(aspects at:#rightOffset) value:(corner x).
(aspects at:#topOffset) value:(origin y).
(aspects at:#bottomOffset) value:(corner y).
! !
!UIPropertyView::Dimension methodsFor:'layout make align'!
makeAlignBottomCenter
self makeAlignLeft:0.5 top:1
!
makeAlignBottomLeft
self makeAlignLeft:0 top:1
!
makeAlignBottomRight
self makeAlignLeft:1 top:1
!
makeAlignCenter
self makeAlignLeft:0.5 top:0.5
!
makeAlignLeft:leftAlignmentFraction top:topAlignmentFraction
|lAF tAF lO tO ext|
lAF := (aspects at:#leftAlignmentFraction) value ? 0.
tAF := (aspects at:#topAlignmentFraction) value ? 0.
ext := forView computeExtent.
(aspects at:#leftAlignmentFraction) value:leftAlignmentFraction.
(aspects at:#topAlignmentFraction) value:topAlignmentFraction.
lO := (aspects at:#leftOffset) value ? 0.
tO := (aspects at:#topOffset) value ? 0.
lO := lO + (ext x * (leftAlignmentFraction - lAF)).
tO := tO + (ext y * (topAlignmentFraction - tAF)).
(aspects at:#leftOffset) value:(lO rounded).
(aspects at:#topOffset) value:(tO rounded).
!
makeAlignLeftCenter
self makeAlignLeft:0 top:0.5
!
makeAlignRightCenter
self makeAlignLeft:1 top:0.5
!
makeAlignTopCenter
self makeAlignLeft:0.5 top:0
!
makeAlignTopLeft
self makeAlignLeft:0 top:0
!
makeAlignTopRight
self makeAlignLeft:1 top:0
! !
!UIPropertyView::Dimension methodsFor:'layout make relative/absolute'!
makeLayout:what xOrY:xOrY offset:aBool
|extent fraction offset fractSymb offsetSymb|
extent := (forView superView computeExtent) perform:xOrY.
fractSymb := (what, 'Fraction') asSymbol.
offsetSymb := (what, 'Offset') asSymbol.
fraction := (aspects at:fractSymb) value.
offset := (aspects at:offsetSymb) value.
aBool ifTrue:[
offset := offset + ((fraction * extent) asInteger).
fraction := 0.
] ifFalse:[
fraction := (fraction + (offset / extent)) asFloat.
(fraction > 1.0) ifTrue:[ fraction := 1.0 ].
(fraction < 0.0) ifTrue:[ fraction := 0 ].
offset := 0.
].
(aspects at:offsetSymb) value:offset.
(aspects 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::Dimension methodsFor:'selection'!
selection
^ selection
!
selection:aLayoutType
|spec idx|
selection == aLayoutType ifFalse:[
(selection := aLayoutType) notNil ifTrue:[
self perform:(('fetch', selection asString) asSymbol).
spec := ('specification', selection asString) asSymbol.
spec := self class perform:spec.
].
self buildFromSpec:spec.
] ifTrue:[
selection notNil ifTrue:[
self perform:(('fetch', selection asString) asSymbol).
self modified:false.
]
].
idx := layoutTypes findFirst:[:type| type == aLayoutType ].
noteBook setSelection:idx.
! !
!UIPropertyView::Specification methodsFor:'accessing'!
specEdited
"gets current edit specification
"
^ specEdited
!
specEdited:aSpec
"sets current edit specification
"
|aspects|
self modified:false.
aSpec isNil ifTrue:[
specChannel := nil.
specEdited := nil.
] ifFalse:[
specEdited class == aSpec class ifTrue:[
specEdited := aSpec.
specChannel value:specEdited.
^ self modified:false.
].
specEdited := aSpec.
aspects := IdentityDictionary new.
specChannel := specEdited asValue.
specEdited class addBindingsTo:aspects for:specEdited channel:specChannel
].
self aspects:aspects.
self buildFromSpec:nil.
! !
!UIPropertyView::Specification methodsFor:'action'!
reload
"reload specification
"
specChannel notNil ifTrue:[
specChannel value:specEdited.
self modified:false.
]
! !
!UIPropertyView class methodsFor:'documentation'!
version
^ '$Header$'
! !