# HG changeset patch # User ca # Date 857121750 -3600 # Node ID 0e8573b4329a9047a630f2377a41bee77fd9fa42 # Parent 85ef247db6b19fa856913d145ce75f1ca7d675da so far so good ... diff -r 85ef247db6b1 -r 0e8573b4329a UIPainterTreeView.st --- 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. ] ]. ! ! diff -r 85ef247db6b1 -r 0e8573b4329a UIPainterView.st --- 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 + " 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 ]. ! ! diff -r 85ef247db6b1 -r 0e8573b4329a UIPropertyView.st --- 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 " + ^ - + #(#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 " + ^ - + #(#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 - " - - - ^ - - #(#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 + " + + + + ^ + + #(#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 + " + + + + ^ + + #(#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 + " + + + + ^ + + #(#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 + " + + - + ^ + + #(#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 ! !