so far so good ...
--- a/UIPainterTreeView.st Fri Feb 28 10:20:51 1997 +0100
+++ b/UIPainterTreeView.st Fri Feb 28 10:22:30 1997 +0100
@@ -10,8 +10,6 @@
hereby transferred.
"
-'From Smalltalk/X, Version:3.1.4 on 25-feb-1997 at 2:17:28 pm' !
-
SelectionInListView subclass:#UIPainterTreeView
instanceVariableNames:'builderView'
classVariableNames:''
@@ -79,41 +77,13 @@
!UIPainterTreeView methodsFor:'event handling'!
-selectionChanged
- "selection has changed
+builderViewChanged:what
+ "something changed in the builder view
"
- |sel|
-
- selection notNil ifTrue:[
- selection size == 1 ifTrue:[
- sel := (list at:(selection first)) string withoutSeparators
- ] ifFalse:[
- sel := OrderedCollection new.
- selection do:[:aNumber|
- aNumber ~~ 1 ifTrue:[
- sel add:((list at:aNumber) string withoutSeparators)
- ]
- ]
- ]
- ].
- builderView selectNames:sel
-
-!
-
-selectionChangedFrom:oldSelection
- "redraw master
- "
- self disableMaster:oldSelection.
- super selectionChangedFrom:oldSelection
-
-!
-
-update:something
-
- (something == #tree or:[something == #widgetName]) ifTrue:[
+ (what == #tree or:[what == #widgetName]) ifTrue:[
self updateTree
] ifFalse:[
- something ~~ #selection ifTrue:[
+ what ~~ #selection ifTrue:[
^ self
].
self disableMaster:selection.
@@ -142,6 +112,35 @@
selection isNil ifTrue:[
self setSelection:1
]
+!
+
+selectionChanged
+ "selection has changed
+ "
+ |sel|
+
+ selection notNil ifTrue:[
+ selection size == 1 ifTrue:[
+ sel := (list at:(selection first)) string withoutSeparators
+ ] ifFalse:[
+ sel := OrderedCollection new.
+ selection do:[:aNumber|
+ aNumber ~~ 1 ifTrue:[
+ sel add:((list at:aNumber) string withoutSeparators)
+ ]
+ ]
+ ]
+ ].
+ builderView selectNames:sel
+
+!
+
+selectionChangedFrom:oldSelection
+ "redraw master
+ "
+ self disableMaster:oldSelection.
+ super selectionChangedFrom:oldSelection
+
! !
!UIPainterTreeView methodsFor:'initialization'!
@@ -172,40 +171,27 @@
!
menu
- |menu noSel|
-
- noSel := builderView numberOfSelections.
+ |menu|
- menu := PopUpMenu labels:(
- resources array:#(
- 'cut'
- 'undo'
+ (menu := builderView menu) notNil ifTrue:[
+ menu addLabels:(
+ resources array:#(
'-'
- 'misc'
- )
- )
- selectors:#(
- #cut
- #undo
+ 'treeMisc'
+ )
+ )
+ selectors:#(
nil
- #misc
- )
- receiver:self.
-
- noSel == 1 ifTrue:[ menu subMenuAt:#misc put:(self menuMisc)]
- ifFalse:[ menu disable:#misc].
+ #treeMisc
+ ).
- noSel == 0 ifTrue:[ menu disable:#cut]
- ifFalse:[ menu actionAt:#cut put:[builderView deleteSelection]].
-
- builderView hasUndos ifFalse:[ menu disable:#undo]
- ifTrue:[ menu actionAt:#undo put:[builderView undoLast]].
-
-
-
- ^ menu
-
-
+ (builderView numberOfSelections) == 1 ifTrue:[
+ menu subMenuAt:#treeMisc put:(self menuMisc)
+ ] ifFalse:[
+ menu disable:#treeMisc
+ ]
+ ].
+ ^ menu
!
menuMisc
@@ -270,15 +256,15 @@
index := index - 1
].
(spView changeSequenceOrderFor:view to:index) ifTrue:[
- self update:#tree
+ self builderViewChanged:#tree
]
!
removeLayout
- builderView selectionHiddenDo:[
+ builderView withSelectionHiddenDo:[
builderView selectionDo:[:aView|
aView geometryLayout:nil.
- aView superView sizeChanged:nil
+ builderView elementChangedSize:aView.
]
].
! !
--- a/UIPainterView.st Fri Feb 28 10:20:51 1997 +0100
+++ b/UIPainterView.st Fri Feb 28 10:22:30 1997 +0100
@@ -10,8 +10,6 @@
hereby transferred.
"
-'From Smalltalk/X, Version:3.1.4 on 25-feb-1997 at 2:17:29 pm' !
-
UIObjectView subclass:#UIPainterView
instanceVariableNames:'fontPanel viewProperties superclassName className methodName
categoryName'
@@ -212,21 +210,24 @@
!
deleteSelection
- "delete the selection; not into the paste buffer (undo)
+ "delete the selection; copy the selection into the cut&paste-buffer
+ and open a transaction
"
- |text|
+ |text specs|
self numberOfSelections ~~ 0 ifTrue:[
- text := self transactionTextFor:selection.
+ specs := self generateSpecFor:selection.
+ text := self transactionTextFor:selection.
undoHistory transaction:#cut text:text do:[
super deleteSelection
].
+ self setSelection:specs
]
!
pasteBuffer
- "add the objects in the paste-buffer
+ "add the objects in the paste-buffer to the object view
"
|paste builder frame pasteOrigin pasteOffset|
@@ -237,7 +238,7 @@
frame := self singleSelection.
- (self supportsSubComponents:frame) ifFalse:[
+ (self canPasteInto:frame) ifFalse:[
frame := self
].
self unselect.
@@ -277,6 +278,7 @@
self showSelection.
self realizeAllSubViews.
inputView raise.
+ self elementChangedSize:frame.
self changed:#tree
! !
@@ -296,7 +298,7 @@
viewProperties add:props.
name := props name.
- aView specClass basicNew supportsLabel ifTrue:[
+ aView specClass supportsLabel ifTrue:[
aView label:name
].
aView name:name.
@@ -304,6 +306,8 @@
!
propertiesForNewView:aView
+ "generate property for a view and return properties
+ "
|cls props index|
cls := aView class.
@@ -348,6 +352,8 @@
!UIPainterView methodsFor:'event handling'!
keyPress:key x:x y:y
+ "any key pressed
+ "
<resource: #keyboard ( #Copy #Paste) >
key == #Copy ifTrue:[
@@ -405,7 +411,7 @@
code := ''.
viewProperties do:[:aProp |
- |modelSelector protoSpec thisCode|
+ |modelSelector menuSelector protoSpec thisCode|
(modelSelector := aProp aspectSelector) notNil ifTrue:[
(cls implements:modelSelector asSymbol) ifFalse:[
@@ -417,6 +423,15 @@
thisCode := (self generateAspectMethodFor:modelSelector spec:protoSpec inClass:cls).
].
code := code , thisCode
+ ].
+ ].
+
+ (menuSelector := aProp menuSelector) notNil ifTrue:[
+ (cls implements:menuSelector asSymbol) ifFalse:[
+ protoSpec := aProp view specClass basicNew.
+ "/ kludge ..
+ thisCode := (self generateAspectMethodFor:menuSelector spec:protoSpec inClass:cls).
+ code := code , thisCode
]
]
].
@@ -833,7 +848,7 @@
(labelSelector := props labelSelector) notNil ifTrue:[
newSpec label:labelSelector
].
- (tabable := props tabable) notNil ifTrue:[
+ (tabable := props tabable) == true ifTrue:[
newSpec tabable:tabable
].
(defaultable := props defaultable) notNil ifTrue:[
@@ -889,7 +904,7 @@
^ self
]
].
- self selectionHiddenDo:[
+ self withSelectionHiddenDo:[
group := EnterFieldGroup new.
props := GroupProperties new.
@@ -922,7 +937,7 @@
^ self
]
].
- self selectionHiddenDo:[
+ self withSelectionHiddenDo:[
group := RadioButtonGroup new.
props := GroupProperties new.
@@ -950,6 +965,8 @@
!UIPainterView methodsFor:'initialization'!
initialize
+ "setup attributes
+ "
super initialize.
superclassName := 'ApplicationModel'.
@@ -1113,6 +1130,8 @@
!UIPainterView methodsFor:'menus'!
menu
+ "returns middle-button menu dependent on the selection
+ "
|menu canPaste|
testMode ifTrue:[^ nil ].
@@ -1158,7 +1177,7 @@
)
receiver:self.
- (canPaste and:[self supportsSubComponents:selection]) ifFalse:[
+ (canPaste and:[self canPasteInto:selection]) ifFalse:[
menu disable:#pasteBuffer
].
@@ -1167,6 +1186,8 @@
menu subMenuAt:#align put:(self subMenuAlign).
^ menu
+
+
!
subMenuAlign
@@ -1186,6 +1207,7 @@
'-'
'spread horizontal'
'spread vertical'
+ '-'
'center horizontal in frame'
'center vertical in frame'
)
@@ -1202,6 +1224,7 @@
nil
spreadSelectionHor
spreadSelectionVer
+ nil
centerSelectionHor
centerSelectionVer
)
@@ -1306,12 +1329,13 @@
size:size.
f notNil ifTrue:[
- self selectionHiddenDo:[
+ self withSelectionHiddenDo:[
self selectionDo:[:aView |
aView font:f.
- self elementChanged:aView.
+ self elementChangedSize:aView.
]
- ]
+ ].
+ self changed:#any.
]
"Modified: 5.9.1995 / 12:13:27 / claus"
@@ -1327,7 +1351,7 @@
].
((aView respondsTo:#label:) and:[aView label = prop name]) ifTrue:[
- self selectionHiddenDo:[
+ self withSelectionHiddenDo:[
|layout|
layout := aView geometryLayout copy.
aView label:newName.
@@ -1391,9 +1415,10 @@
!
removeAll
- "remove the argument, anObject"
-
+ "remove all objects and properties
+ "
self unselect.
+ viewProperties := OrderedCollection new.
subViews notNil ifTrue:[
subViews copy do:[:sub |
@@ -1402,7 +1427,6 @@
]
]
].
- viewProperties := OrderedCollection new.
undoHistory reinitialize.
self changed:#tree
!
@@ -1422,7 +1446,7 @@
!
removeTreeFrom:anObject
- "remove the argument, anObject and all of its children
+ "remove the argument, anObject and all of its subviews
"
|props|
@@ -1461,7 +1485,7 @@
!
findViewWithId:aViewId
- "finds view assigned to id and returns the view or nil
+ "finds view assigned to identifier and returns the view or nil
"
|prop|
@@ -1474,7 +1498,8 @@
!UIPainterView methodsFor:'seraching property'!
propertyOf:something
-
+ "returns property assigned to group or view
+ "
^ viewProperties detect:[:p| (p view == something or:[p group == something])]
ifNone:nil
@@ -1485,12 +1510,14 @@
!
propertyOfGroup:aGroup
-
+ "returns property assigned to group
+ "
^ viewProperties detect:[:p| p group == aGroup] ifNone:nil
!
propertyOfIdentifier:anId
-
+ "returns property assigned to unique identifier
+ "
anId notNil ifTrue:[
^ viewProperties detect:[:p| p identifier == anId] ifNone:nil.
].
@@ -1498,7 +1525,8 @@
!
propertyOfName:aString
-
+ "returns property assigned to name
+ "
aString = 'self' ifFalse:[
^ viewProperties detect:[:p| p name = aString] ifNone:nil
].
@@ -1506,7 +1534,8 @@
!
propertyOfView:aView
-
+ "returns property assigned to view
+ "
(aView isNil or:[aView == self]) ifFalse:[
^ viewProperties detect:[:p| p view == aView] ifNone:nil
].
@@ -1516,7 +1545,8 @@
!UIPainterView methodsFor:'testing'!
isHorizontalResizable:aComponent
-
+ "returns true if instance is horizontal resizeable
+ "
(aComponent isKindOf:ScrollBar) ifTrue:[
^ aComponent orientation == #horizontal
].
@@ -1532,7 +1562,8 @@
!
isVerticalResizable:aComponent
-
+ "returns true if instance is vertical resizeable
+ "
(aComponent isKindOf:EditField) ifTrue:[
^ false
].
@@ -1600,6 +1631,8 @@
!UIPainterView methodsFor:'undo actions'!
undoCreate:aViewId
+ "undo method when creating or pasting an object
+ "
|view|
undoHistory addUndoBlock:[
@@ -1611,30 +1644,22 @@
!
undoLayout:aViewId
- "undo method layout
+ "undo method when changing the layout (position or dimension)
"
- |view layout|
+ |view layout extent|
(view := self findViewWithId:aViewId) notNil ifTrue:[
- layout := view geometryLayout copy.
- view := nil.
-
- layout notNil ifTrue:[
- undoHistory addUndoBlock:[
- (view := self findViewWithId:aViewId) notNil ifTrue:[
- view geometryLayout:layout
- ]
- ]
- ] ifFalse:[
- layout := view pixelOrigin.
-
- undoHistory addUndoBlock:[
- (view := self findViewWithId:aViewId) notNil ifTrue:[
- view pixelOrigin:layout
- ]
+ (layout := view geometryLayout copy) isNil ifTrue:[
+ extent := view extent copy
+ ].
+ undoHistory addUndoBlock:[
+ (view := self findViewWithId:aViewId) notNil ifTrue:[
+ layout notNil ifTrue:[view geometryLayout:layout]
+ ifFalse:[view extent:extent]
]
]
- ]
+ ].
+ view := nil
!
undoLayoutView:aView
@@ -1651,7 +1676,7 @@
!
undoRemove:aViewId
- "prepare undo method
+ "undo method when removing an object
"
|view prop spec parentId|
@@ -1659,10 +1684,8 @@
spec := (self generateSpecFor:view) first.
view := view superView.
- (self supportsSubComponents:view) ifTrue:[
- prop := self propertyOfView:view.
-
- prop notNil ifTrue:[
+ (self canPasteInto:view) ifTrue:[
+ (prop := self propertyOfView:view) notNil ifTrue:[
parentId := prop identifier
]
].
@@ -1691,7 +1714,7 @@
!
undoSpecModify:aViewId
- "undo for updateFromSpec
+ "undo method when changing the specification for an object
"
|builder view spec|
@@ -1703,7 +1726,7 @@
(view := self findViewWithId:aViewId) notNil ifTrue:[
builder := UIBuilder new.
spec setAttributesIn:view with:builder.
- view superView sizeChanged:nil
+ self elementChangedSize:view.
]
]
].
@@ -1720,7 +1743,7 @@
|props name builder|
self singleSelection notNil ifTrue:[
- self selectionHiddenDo:[
+ self withSelectionHiddenDo:[
self transaction:#specification selectionDo:[:aView|
builder := UIBuilder new.
props := self propertyOfView:aView.
@@ -1742,7 +1765,7 @@
].
aSpec setAttributesIn:aView with:builder.
- aView superView sizeChanged:nil.
+ self elementChangedSize:aView.
props tabable:aSpec tabable.
props defaultable:aSpec defaultable.
@@ -1751,9 +1774,9 @@
props changeSelector:aSpec changeSelector.
props labelSelector:aSpec labelSelector.
props menuSelector:aSpec menuSelector.
- ].
- self changed:#tree
- ]
+ ]
+ ].
+ self changed:#tree
].
! !
--- 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
! !