# HG changeset patch # User ca # Date 948728068 -3600 # Node ID 3aa9dab5963364e52d8fb35476ea8aa8fe7f53da # Parent c4a9211a6ec7466bfce07be939f7d9dbb2797ce0 use the canvasHolder in Notebook diff -r c4a9211a6ec7 -r 3aa9dab59633 UILayoutTool.st --- a/UILayoutTool.st Mon Jan 24 12:02:32 2000 +0100 +++ b/UILayoutTool.st Mon Jan 24 16:34:28 2000 +0100 @@ -14,13 +14,21 @@ ApplicationModel subclass:#UILayoutTool - instanceVariableNames:'modifiedHolder aspects selection layoutView tabList layoutSpec' + instanceVariableNames:'modifiedHolder aspects selection currentTool layoutView tabList + layoutSpec toolsDictionary' classVariableNames:'' poolDictionaries:'' category:'Interface-UIPainter' ! -ApplicationModel subclass:#LayoutOrigin +ApplicationModel subclass:#LayoutFrame + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:UILayoutTool +! + +ApplicationModel subclass:#Rectangle instanceVariableNames:'' classVariableNames:'' poolDictionaries:'' @@ -34,7 +42,14 @@ privateIn:UILayoutTool ! -ApplicationModel subclass:#Rectangle +ApplicationModel subclass:#LayoutOrigin + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:UILayoutTool +! + +ApplicationModel subclass:#Extent instanceVariableNames:'' classVariableNames:'' poolDictionaries:'' @@ -48,20 +63,6 @@ privateIn:UILayoutTool ! -ApplicationModel subclass:#LayoutFrame - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:UILayoutTool -! - -ApplicationModel subclass:#Extent - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:UILayoutTool -! - !UILayoutTool class methodsFor:'documentation'! copyright @@ -447,37 +448,40 @@ - ^ - - #(#FullSpec - #window: - #(#WindowSpec - #name: 'UILayoutTool' - #layout: #(#LayoutFrame 571 0 290 0 870 0 589 0) - #label: 'UILayoutTool' - #min: #(#Point 10 10) - #max: #(#Point 1152 900) - #bounds: #(#Rectangle 571 290 871 590) - #usePreferredExtent: false - ) - #component: - #(#SpecCollection - #collection: - #( - #(#NoteBookViewSpec - #name: 'NoteBook' - #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) - #activeHelpKey: #layoutTool - #enableChannel: #enableChannel - #tabable: true - #model: #noteBookModel - #menu: #noteBookList - #style: #(#FontDescription #helvetica #medium #roman #'10') - #direction: #bottom - #canvas: #noteBookView - ) + ^ + #(#FullSpec + #name: #windowSpec + #window: + #(#WindowSpec + #label: 'UILayoutTool' + #name: 'UILayoutTool' + #min: #(#Point 10 10) + #max: #(#Point 1152 900) + #bounds: #(#Rectangle 12 22 312 322) + ) + #component: + #(#SpecCollection + #collection: #( + #(#NoteBookViewSpec + #attributes: + #(#tabable + true ) - ) + #name: 'NoteBook' + #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) + #activeHelpKey: #layoutTool + #enableChannel: #enableChannel + #tabable: true + #model: #noteBookModel + #menu: #noteBookList + #style: #(#FontDescription #helvetica #medium #roman #'10') + #direction: #bottom + #canvas: #layoutCanvasHolder + #keepCanvasAlive: true + ) + ) + + ) ) ! ! @@ -492,12 +496,8 @@ layout "returns configued layout or nil " - |appl| - - (appl := self noteBookView application) notNil ifTrue:[ - ^ appl layout - ]. - ^ nil + ^ currentTool notNil ifTrue:[currentTool layout] + ifFalse:[nil] ! layoutType @@ -569,13 +569,11 @@ update "update from view " - |view appl| + |view| - selection notNil ifTrue:[ + (selection notNil and:[currentTool notNil]) ifTrue:[ (view := layoutView) notNil ifTrue:[ - (appl := self noteBookView application) notNil ifTrue:[ - appl fetch:view spec:layoutSpec - ] + currentTool fetch:view spec:layoutSpec ] ]. @@ -591,6 +589,16 @@ ! +layoutCanvasHolder + |holder| + + (holder := builder bindingAt:#layoutCanvasHolder) isNil ifTrue:[ + holder := ValueHolder new. + builder aspectAt:#layoutCanvasHolder put:holder + ]. + ^ holder +! + notUsingDefaultExtent |holder| @@ -624,18 +632,6 @@ builder aspectAt:#noteBookModel put:holder. ]. ^ holder -! - -noteBookView - "automatically generated by UIPainter ... - " - |holder| - - (holder := builder bindingAt:#noteBookView) isNil ifTrue:[ - holder := SubCanvas new. - builder aspectAt:#noteBookView put:holder - ]. - ^ holder ! ! !UILayoutTool methodsFor:'change & update'! @@ -749,6 +745,7 @@ super initialize. aspects := IdentityDictionary new. + toolsDictionary := IdentityDictionary new. #( bottomFraction bottomOffset leftFraction leftOffset @@ -799,717 +796,39 @@ ! selection:aSelection - |appl slice sel noteBook| + |appl slice sel noteBook key view| aSelection isNumber ifTrue:[ aSelection ~~ 0 ifTrue:[sel := tabList at:aSelection] ] ifFalse:[ sel := aSelection ]. + selection = sel ifFalse:[ (selection := sel) notNil ifTrue:[ - slice := self selectedSlice. - appl := slice last asString. - appl := Smalltalk classNamed:(self class name asString, '::', appl). - appl := appl new. - appl masterApplication:self. - modifiedHolder value:true. + key := selection asSymbol. + appl := toolsDictionary at:key ifAbsent:nil. + + appl isNil ifTrue:[ + view := SimpleView new. + slice := self selectedSlice. + appl := slice last asString. + appl := Smalltalk classNamed:(self class name asString, '::', appl). + appl := appl new. + appl masterApplication:self. + appl createBuilder. + view client:appl. + appl window:view. + modifiedHolder value:true. + toolsDictionary at:key put:appl. + ] ifFalse:[ + view := appl window + ] ]. - noteBook := self noteBookView. - noteBook client:appl. - - appl notNil ifTrue:[ - noteBook scrolledView allViewBackground:(noteBook viewBackground). - ] + currentTool := appl. + self layoutCanvasHolder value:view. ]. self update - -! ! - -!UILayoutTool::LayoutOrigin class methodsFor:'interface specs'! - -windowSpec - "This resource specification was automatically generated - by the UIPainter of ST/X." - - "Do not manually edit this!! If it is corrupted, - the UIPainter may not be able to read the specification." - - " - UIPainter new openOnClass:UILayoutTool::LayoutOrigin andSelector:#windowSpec - UILayoutTool::LayoutOrigin new openInterface:#windowSpec - UILayoutTool::LayoutOrigin open - " - - - - ^ - - #(#FullSpec - #window: - #(#WindowSpec - #name: 'UILayoutTool-LayoutOrigin' - #layout: #(#LayoutFrame 290 0 420 0 647 0 565 0) - #label: 'UILayoutTool-LayoutOrigin' - #min: #(#Point 10 10) - #max: #(#Point 1152 900) - #bounds: #(#Rectangle 290 420 648 566) - #usePreferredExtent: false - ) - #component: - #(#SpecCollection - #collection: - #( - #(#UISubSpecification - #name: 'layoutOriginSpec' - #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 110 0) - #majorKey: #UILayoutTool - #minorKey: #layoutOriginSpec - ) - ) - ) - ) -! ! - -!UILayoutTool::LayoutOrigin methodsFor:'accessing'! - -fetch:aView spec:aSpec - "fetch layoutOrigin - " - |layout| - - layout := UIPainterView asLayoutFrameFromView:aView. - - (self aspectFor:#leftOffset) value:(layout leftOffset). - (self aspectFor:#leftFraction) value:(layout leftFraction). - (self aspectFor:#topOffset) value:(layout topOffset). - (self aspectFor:#topFraction) value:(layout topFraction). - - -! - -layout - "returns current layout as layoutOrigin - " - |layout| - - layout := Smalltalk::LayoutOrigin new. - - layout leftOffset:((self aspectFor:#leftOffset) value) ? 0. - layout topOffset:((self aspectFor:#topOffset) value) ? 0. - layout leftFraction:((self aspectFor:#leftFraction) value) ? 0. - layout topFraction:((self aspectFor:#topFraction) value) ? 0. - - ^ layout - -! ! - -!UILayoutTool::AlignmentOrigin class methodsFor:'help specs'! - -helpSpec - "This resource specification was automatically generated - by the UIHelpTool of ST/X." - - "Do not manually edit this!! If it is corrupted, - the UIHelpTool may not be able to read the specification." - - " - UIHelpTool openOnClass:UILayoutTool::AlignmentOrigin - " - - - - ^super helpSpec addPairsFrom:#( - -#alignBottomCenter -'Aligns the selected widget bottomCenter to location.' - -#alignBottomLeft -'Aligns the selected widget bottomLeft to location.' - -#alignBottomRight -'Aligns the selected widget bottomRight to location.' - -#alignCenter -'Aligns the selected widget center to location.' - -#alignHorizontal -'Horizontal inset to the location point of the selected widget.' - -#alignLeftCenter -'Aligns the selected widget leftCenter to location.' - -#alignRightCenter -'Aligns the selected widget rightCenter to location.' - -#alignTopCenter -'Aligns the selected widget topCenter to location.' - -#alignTopLeft -'Aligns the selected widget topLeft to location.' - -#alignTopRight -'Aligns the selected widget topRight to location.' - -#alignVertical -'Vertical inset to the location point of the widget.' - -) -! ! - -!UILayoutTool::AlignmentOrigin class methodsFor:'interface specs'! - -windowSpec - "This resource specification was automatically generated - by the UIPainter of ST/X." - - "Do not manually edit this!! If it is corrupted, - the UIPainter may not be able to read the specification." - - " - UIPainter new openOnClass:UILayoutTool::AlignmentOrigin andSelector:#windowSpec - UILayoutTool::AlignmentOrigin new openInterface:#windowSpec - UILayoutTool::AlignmentOrigin open - " - - - - ^ - #(#FullSpec - #name: #windowSpec - #window: - #(#WindowSpec - #label: 'UILayoutTool-AlignmentOrigin' - #name: 'UILayoutTool-AlignmentOrigin' - #min: #(#Point 10 10) - #max: #(#Point 1152 900) - #bounds: #(#Rectangle 42 231 447 438) - ) - #component: - #(#SpecCollection - #collection: #( - #(#UISubSpecification - #name: 'layoutOriginSpec' - #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 111 0) - #majorKey: #UILayoutTool - #minorKey: #layoutOriginSpec - ) - #(#FramedBoxSpec - #label: 'Alignment' - #name: 'FramedBox' - #layout: #(#LayoutFrame 1 0.0 113 0 0 1.0 208 0) - #labelPosition: #topLeft - #component: - #(#SpecCollection - #collection: #( - #(#LabelSpec - #label: 'Horizontal:' - #name: 'alignHLabel' - #layout: #(#AlignmentOrigin 88 0 17 0 1 0) - #adjust: #right - ) - #(#InputFieldSpec - #attributes: - #(#tabable - true - ) - #name: 'leftAlignmentFractionField' - #layout: #(#LayoutFrame 90 0 14 0 147 0 36 0) - #activeHelpKey: #alignHorizontal - #tabable: true - #model: #leftAlignmentFraction - #group: #inputGroup - #type: #numberOrNil - #acceptOnLostFocus: true - #acceptChannel: #acceptChannel - #modifiedChannel: #modifiedChannel - #acceptOnPointerLeave: false - ) - #(#LabelSpec - #label: 'Vertical:' - #name: 'alignVLabel' - #layout: #(#AlignmentOrigin 88 0 43 0 1 0) - #adjust: #right - ) - #(#InputFieldSpec - #attributes: - #(#tabable - true - ) - #name: 'topAlignmentFractionField' - #layout: #(#LayoutFrame 90 0 40 0 147 0 62 0) - #activeHelpKey: #alignVertical - #tabable: true - #model: #topAlignmentFraction - #group: #inputGroup - #type: #numberOrNil - #acceptOnLostFocus: true - #acceptChannel: #acceptChannel - #modifiedChannel: #modifiedChannel - #acceptOnPointerLeave: false - ) - #(#DividerSpec - #name: 'separator1' - #layout: #(#LayoutFrame 204 0 19 0 245 0 22 0) - ) - #(#DividerSpec - #name: 'separator2' - #layout: #(#LayoutFrame 204 0 55 0 245 0 58 0) - ) - #(#DividerSpec - #name: 'separator3' - #layout: #(#LayoutFrame 196 0 28 0 199 0 50 0) - #orientation: #vertical - ) - #(#DividerSpec - #name: 'separator4' - #layout: #(#LayoutFrame 250 0 28 0 253 0 50 0) - #orientation: #vertical - ) - #(#ActionButtonSpec - #attributes: - #(#tabable - true - ) - #name: 'alignTopLeft' - #layout: #(#LayoutFrame 190 0 14 0 204 0 28 0) - #activeHelpKey: #alignTopLeft - #tabable: true - #model: #alignTopLeft - ) - #(#ActionButtonSpec - #attributes: - #(#tabable - true - ) - #name: 'alignTopCenter' - #layout: #(#LayoutFrame 217 0 14 0 231 0 28 0) - #activeHelpKey: #alignTopCenter - #tabable: true - #model: #alignTopCenter - ) - #(#ActionButtonSpec - #attributes: - #(#tabable - true - ) - #name: 'alignTopRight' - #layout: #(#LayoutFrame 245 0 14 0 259 0 28 0) - #activeHelpKey: #alignTopRight - #tabable: true - #model: #alignTopRight - ) - #(#ActionButtonSpec - #attributes: - #(#tabable - true - ) - #name: 'alignLeftCenter' - #layout: #(#LayoutFrame 190 0 32 0 204 0 46 0) - #activeHelpKey: #alignLeftCenter - #tabable: true - #model: #alignLeftCenter - ) - #(#ActionButtonSpec - #attributes: - #(#tabable - true - ) - #name: 'alignCenter' - #layout: #(#LayoutFrame 217 0 32 0 231 0 46 0) - #activeHelpKey: #alignCenter - #tabable: true - #model: #alignCenter - ) - #(#ActionButtonSpec - #attributes: - #(#tabable - true - ) - #name: 'alignRightCenter' - #layout: #(#LayoutFrame 245 0 32 0 259 0 46 0) - #activeHelpKey: #alignRightCenter - #tabable: true - #model: #alignRightCenter - ) - #(#ActionButtonSpec - #attributes: - #(#tabable - true - ) - #name: 'alignBottomLeft' - #layout: #(#LayoutFrame 190 0 50 0 204 0 64 0) - #activeHelpKey: #alignBottomLeft - #tabable: true - #model: #alignBottomLeft - ) - #(#ActionButtonSpec - #attributes: - #(#tabable - true - ) - #name: 'alignBottomCenter' - #layout: #(#LayoutFrame 217 0 50 0 231 0 64 0) - #activeHelpKey: #alignBottomCenter - #tabable: true - #model: #alignBottomCenter - ) - #(#ActionButtonSpec - #attributes: - #(#tabable - true - ) - #name: 'alignBottomRight' - #layout: #(#LayoutFrame 245 0 50 0 259 0 64 0) - #activeHelpKey: #alignBottomRight - #tabable: true - #model: #alignBottomRight - ) - ) - - ) - ) - ) - - ) - ) -! ! - -!UILayoutTool::AlignmentOrigin methodsFor:'accessing'! - -fetch:aView spec:aSpec - "fetch alignmentOrigin - " - |layout type - leftAlignmentFractionHolder topAlignmentFractionHolder - leftOffsetHolder leftFractionHolder topOffsetHolder topFractionHolder| - - type := UIPainterView layoutType:aView. - layout := aView geometryLayout. - - leftOffsetHolder := (self aspectFor:#leftOffset). - leftFractionHolder := (self aspectFor:#leftFraction). - topOffsetHolder := (self aspectFor:#topOffset). - topFractionHolder := (self aspectFor:#topFraction). - leftAlignmentFractionHolder := (self aspectFor:#leftAlignmentFraction). - topAlignmentFractionHolder := (self aspectFor:#topAlignmentFraction). - - layout isLayout ifTrue:[ - leftOffsetHolder value:(layout leftOffset). - leftFractionHolder value:(layout leftFraction). - topOffsetHolder value:(layout topOffset). - topFractionHolder value:(layout topFraction). - - type == #AlignmentOrigin ifTrue:[ - leftAlignmentFractionHolder value:(layout leftAlignmentFraction). - topAlignmentFractionHolder value:(layout topAlignmentFraction). - ^ self - ] - ] ifFalse:[ - layout := aView computeOrigin. - - leftOffsetHolder value:(layout x). - leftFractionHolder value:0. - topOffsetHolder value:(layout y). - topFractionHolder value:0. - ]. - leftAlignmentFractionHolder value:0. - topAlignmentFractionHolder value:0. - - -! - -layout - "returns current layout as alignmentOrigin - " - |layout| - - layout := Smalltalk::AlignmentOrigin new. - - layout leftOffset:((self aspectFor:#leftOffset) value) ? 0. - layout topOffset:((self aspectFor:#topOffset) value) ? 0. - layout leftFraction:((self aspectFor:#leftFraction) value) ? 0. - layout topFraction:((self aspectFor:#topFraction) value) ? 0. - - layout leftAlignmentFraction:((self aspectFor:#leftAlignmentFraction) value) ? 0. - layout topAlignmentFraction:((self aspectFor:#topAlignmentFraction) value) ? 0. - - ^ layout -! ! - -!UILayoutTool::AlignmentOrigin methodsFor:'alignment'! - -alignBottomCenter - self makeAlignLeft:0.5 top:1 - - -! - -alignBottomLeft - self makeAlignLeft:0 top:1 - - -! - -alignBottomRight - self makeAlignLeft:1 top:1 - - -! - -alignCenter - self makeAlignLeft:0.5 top:0.5 - - -! - -alignLeftCenter - self makeAlignLeft:0 top:0.5 - - -! - -alignRightCenter - self makeAlignLeft:1 top:0.5 - - -! - -alignTopCenter - self makeAlignLeft:0.5 top:0 - - -! - -alignTopLeft - self makeAlignLeft:0 top:0 - - -! - -alignTopRight - self makeAlignLeft:1 top:0 - - -! - -makeAlignLeft:leftAlignmentFraction top:topAlignmentFraction - |lAF tAF lO tO ext lAHolder tAHolder lOHolder tOHolder| - - lAF := (lAHolder := self aspectFor:#leftAlignmentFraction) value ? 0. - tAF := (tAHolder := self aspectFor:#topAlignmentFraction) value ? 0. - ext := (self aspectFor:#layoutView) computeExtent. - - lAHolder value:leftAlignmentFraction. - tAHolder value:topAlignmentFraction. - - lO := (lOHolder := self aspectFor:#leftOffset) value ? 0. - tO := (tOHolder := self aspectFor:#topOffset) value ? 0. - - lO := lO + (ext x * (leftAlignmentFraction - lAF)). - tO := tO + (ext y * (topAlignmentFraction - tAF)). - - lOHolder value:(lO rounded). - tOHolder value:(tO rounded). - -! - -makeAlignTopRight - self makeAlignLeft:1 top:0 - - -! ! - -!UILayoutTool::Rectangle class methodsFor:'interface specs'! - -windowSpec - "This resource specification was automatically generated - by the UIPainter of ST/X." - - "Do not manually edit this!! If it is corrupted, - the UIPainter may not be able to read the specification." - - " - UIPainter new openOnClass:UILayoutTool::Rectangle andSelector:#windowSpec - UILayoutTool::Rectangle new openInterface:#windowSpec - UILayoutTool::Rectangle open - " - - - - ^ - - #(#FullSpec - #window: - #(#WindowSpec - #name: 'UILayoutTool-Rectangle' - #layout: #(#LayoutFrame 291 0 130 0 632 0 328 0) - #label: 'UILayoutTool-Rectangle' - #min: #(#Point 10 10) - #max: #(#Point 1152 900) - #bounds: #(#Rectangle 291 130 633 329) - #usePreferredExtent: false - ) - #component: - #(#SpecCollection - #collection: - #( - #(#UISubSpecification - #name: 'subSpecification' - #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 96 0) - #majorKey: #UILayoutTool - #minorKey: #layoutPointSpec - ) - #(#FramedBoxSpec - #name: 'FramedBox' - #layout: #(#LayoutFrame 1 0.0 99 0 0 1.0 194 0) - #component: - #(#SpecCollection - #collection: - #( - #(#LabelSpec - #name: 'labelCornerY' - #layout: #(#AlignmentOrigin 83 0 16 0 1 0) - #label: 'Right:' - #adjust: #left - ) - #(#InputFieldSpec - #name: 'fieldCornerX' - #layout: #(#LayoutFrame 85 0 13 0 135 0 35 0) - #activeHelpKey: #cornerX - #tabable: true - #model: #rightOffset - #group: #inputGroup - #type: #numberOrNil - #acceptOnLostFocus: true - #acceptChannel: #acceptChannel - #modifiedChannel: #modifiedChannel - ) - #(#LabelSpec - #name: 'labelCornerX' - #layout: #(#AlignmentOrigin 83 0 41 0 1 0) - #label: 'Bottom:' - #adjust: #left - ) - #(#InputFieldSpec - #name: 'fieldCornerY' - #layout: #(#LayoutFrame 85 0 38 0 135 0 60 0) - #activeHelpKey: #cornerY - #tabable: true - #model: #bottomOffset - #group: #inputGroup - #type: #numberOrNil - #acceptOnLostFocus: true - #acceptChannel: #acceptChannel - #modifiedChannel: #modifiedChannel - ) - ) - ) - #label: 'Corner' - #labelPosition: #topLeft - ) - ) - ) - ) - - "Modified: / 13.8.1998 / 19:59:16 / cg" -! ! - -!UILayoutTool::Rectangle methodsFor:'accessing'! - -fetch:aView spec:aSpec - "fetch rectangle - " - |origin corner| - - origin := aView computeOrigin. - corner := aView computeCorner. - - (self aspectFor:#leftOffset) value:(origin x). - (self aspectFor:#rightOffset) value:(corner x). - (self aspectFor:#topOffset) value:(origin y). - (self aspectFor:#bottomOffset) value:(corner y). - - -! - -layout - "returns current layout as rectangle - " - ^ Smalltalk::Rectangle left:(((self aspectFor:#leftOffset) value) ? 0) - top:(((self aspectFor:#topOffset) value) ? 0) - right:(((self aspectFor:#rightOffset) value) ? 0) - bottom:(((self aspectFor:#bottomOffset) value) ? 0) - - -! ! - -!UILayoutTool::Point class methodsFor:'interface specs'! - -windowSpec - "This resource specification was automatically generated - by the UIPainter of ST/X." - - "Do not manually edit this!! If it is corrupted, - the UIPainter may not be able to read the specification." - - " - UIPainter new openOnClass:UILayoutTool::Point andSelector:#windowSpec - UILayoutTool::Point new openInterface:#windowSpec - UILayoutTool::Point open - " - - - - ^ - - #(#FullSpec - #window: - #(#WindowSpec - #name: 'UILayoutTool-Point' - #layout: #(#LayoutFrame 324 0 410 0 618 0 547 0) - #label: 'UILayoutTool-Point' - #min: #(#Point 10 10) - #max: #(#Point 1152 900) - #bounds: #(#Rectangle 324 410 619 548) - #usePreferredExtent: false - ) - #component: - #(#SpecCollection - #collection: - #( - #(#UISubSpecification - #name: 'layoutPointSpec' - #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 100 0) - #majorKey: #UILayoutTool - #minorKey: #layoutPointSpec - ) - ) - ) - ) -! ! - -!UILayoutTool::Point methodsFor:'accessing'! - -fetch:aView spec:aSpec - "fetch point - " - |origin| - - origin := aView computeOrigin. - - (self aspectFor:#leftOffset) value:(origin x). - (self aspectFor:#topOffset) value:(origin y). - - -! - -layout - "returns current layout as point - " - ^ Smalltalk::Point x:(((self aspectFor:#leftOffset) value) ? 0) - y:(((self aspectFor:#topOffset) value) ? 0) - ! ! !UILayoutTool::LayoutFrame class methodsFor:'help specs'! @@ -2211,6 +1530,624 @@ bottom:0.5 offset:0 ! ! +!UILayoutTool::Rectangle class methodsFor:'interface specs'! + +windowSpec + "This resource specification was automatically generated + by the UIPainter of ST/X." + + "Do not manually edit this!! If it is corrupted, + the UIPainter may not be able to read the specification." + + " + UIPainter new openOnClass:UILayoutTool::Rectangle andSelector:#windowSpec + UILayoutTool::Rectangle new openInterface:#windowSpec + UILayoutTool::Rectangle open + " + + + + ^ + + #(#FullSpec + #window: + #(#WindowSpec + #name: 'UILayoutTool-Rectangle' + #layout: #(#LayoutFrame 291 0 130 0 632 0 328 0) + #label: 'UILayoutTool-Rectangle' + #min: #(#Point 10 10) + #max: #(#Point 1152 900) + #bounds: #(#Rectangle 291 130 633 329) + #usePreferredExtent: false + ) + #component: + #(#SpecCollection + #collection: + #( + #(#UISubSpecification + #name: 'subSpecification' + #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 96 0) + #majorKey: #UILayoutTool + #minorKey: #layoutPointSpec + ) + #(#FramedBoxSpec + #name: 'FramedBox' + #layout: #(#LayoutFrame 1 0.0 99 0 0 1.0 194 0) + #component: + #(#SpecCollection + #collection: + #( + #(#LabelSpec + #name: 'labelCornerY' + #layout: #(#AlignmentOrigin 83 0 16 0 1 0) + #label: 'Right:' + #adjust: #left + ) + #(#InputFieldSpec + #name: 'fieldCornerX' + #layout: #(#LayoutFrame 85 0 13 0 135 0 35 0) + #activeHelpKey: #cornerX + #tabable: true + #model: #rightOffset + #group: #inputGroup + #type: #numberOrNil + #acceptOnLostFocus: true + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + ) + #(#LabelSpec + #name: 'labelCornerX' + #layout: #(#AlignmentOrigin 83 0 41 0 1 0) + #label: 'Bottom:' + #adjust: #left + ) + #(#InputFieldSpec + #name: 'fieldCornerY' + #layout: #(#LayoutFrame 85 0 38 0 135 0 60 0) + #activeHelpKey: #cornerY + #tabable: true + #model: #bottomOffset + #group: #inputGroup + #type: #numberOrNil + #acceptOnLostFocus: true + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + ) + ) + ) + #label: 'Corner' + #labelPosition: #topLeft + ) + ) + ) + ) + + "Modified: / 13.8.1998 / 19:59:16 / cg" +! ! + +!UILayoutTool::Rectangle methodsFor:'accessing'! + +fetch:aView spec:aSpec + "fetch rectangle + " + |origin corner| + + origin := aView computeOrigin. + corner := aView computeCorner. + + (self aspectFor:#leftOffset) value:(origin x). + (self aspectFor:#rightOffset) value:(corner x). + (self aspectFor:#topOffset) value:(origin y). + (self aspectFor:#bottomOffset) value:(corner y). + + +! + +layout + "returns current layout as rectangle + " + ^ Smalltalk::Rectangle left:(((self aspectFor:#leftOffset) value) ? 0) + top:(((self aspectFor:#topOffset) value) ? 0) + right:(((self aspectFor:#rightOffset) value) ? 0) + bottom:(((self aspectFor:#bottomOffset) value) ? 0) + + +! ! + +!UILayoutTool::AlignmentOrigin class methodsFor:'help specs'! + +helpSpec + "This resource specification was automatically generated + by the UIHelpTool of ST/X." + + "Do not manually edit this!! If it is corrupted, + the UIHelpTool may not be able to read the specification." + + " + UIHelpTool openOnClass:UILayoutTool::AlignmentOrigin + " + + + + ^super helpSpec addPairsFrom:#( + +#alignBottomCenter +'Aligns the selected widget bottomCenter to location.' + +#alignBottomLeft +'Aligns the selected widget bottomLeft to location.' + +#alignBottomRight +'Aligns the selected widget bottomRight to location.' + +#alignCenter +'Aligns the selected widget center to location.' + +#alignHorizontal +'Horizontal inset to the location point of the selected widget.' + +#alignLeftCenter +'Aligns the selected widget leftCenter to location.' + +#alignRightCenter +'Aligns the selected widget rightCenter to location.' + +#alignTopCenter +'Aligns the selected widget topCenter to location.' + +#alignTopLeft +'Aligns the selected widget topLeft to location.' + +#alignTopRight +'Aligns the selected widget topRight to location.' + +#alignVertical +'Vertical inset to the location point of the widget.' + +) +! ! + +!UILayoutTool::AlignmentOrigin class methodsFor:'interface specs'! + +windowSpec + "This resource specification was automatically generated + by the UIPainter of ST/X." + + "Do not manually edit this!! If it is corrupted, + the UIPainter may not be able to read the specification." + + " + UIPainter new openOnClass:UILayoutTool::AlignmentOrigin andSelector:#windowSpec + UILayoutTool::AlignmentOrigin new openInterface:#windowSpec + UILayoutTool::AlignmentOrigin open + " + + + + ^ + #(#FullSpec + #name: #windowSpec + #window: + #(#WindowSpec + #label: 'UILayoutTool-AlignmentOrigin' + #name: 'UILayoutTool-AlignmentOrigin' + #min: #(#Point 10 10) + #max: #(#Point 1152 900) + #bounds: #(#Rectangle 42 231 447 438) + ) + #component: + #(#SpecCollection + #collection: #( + #(#UISubSpecification + #name: 'layoutOriginSpec' + #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 111 0) + #majorKey: #UILayoutTool + #minorKey: #layoutOriginSpec + ) + #(#FramedBoxSpec + #label: 'Alignment' + #name: 'FramedBox' + #layout: #(#LayoutFrame 1 0.0 113 0 0 1.0 208 0) + #labelPosition: #topLeft + #component: + #(#SpecCollection + #collection: #( + #(#LabelSpec + #label: 'Horizontal:' + #name: 'alignHLabel' + #layout: #(#AlignmentOrigin 88 0 17 0 1 0) + #adjust: #right + ) + #(#InputFieldSpec + #attributes: + #(#tabable + true + ) + #name: 'leftAlignmentFractionField' + #layout: #(#LayoutFrame 90 0 14 0 147 0 36 0) + #activeHelpKey: #alignHorizontal + #tabable: true + #model: #leftAlignmentFraction + #group: #inputGroup + #type: #numberOrNil + #acceptOnLostFocus: true + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + #acceptOnPointerLeave: false + ) + #(#LabelSpec + #label: 'Vertical:' + #name: 'alignVLabel' + #layout: #(#AlignmentOrigin 88 0 43 0 1 0) + #adjust: #right + ) + #(#InputFieldSpec + #attributes: + #(#tabable + true + ) + #name: 'topAlignmentFractionField' + #layout: #(#LayoutFrame 90 0 40 0 147 0 62 0) + #activeHelpKey: #alignVertical + #tabable: true + #model: #topAlignmentFraction + #group: #inputGroup + #type: #numberOrNil + #acceptOnLostFocus: true + #acceptChannel: #acceptChannel + #modifiedChannel: #modifiedChannel + #acceptOnPointerLeave: false + ) + #(#DividerSpec + #name: 'separator1' + #layout: #(#LayoutFrame 204 0 19 0 245 0 22 0) + ) + #(#DividerSpec + #name: 'separator2' + #layout: #(#LayoutFrame 204 0 55 0 245 0 58 0) + ) + #(#DividerSpec + #name: 'separator3' + #layout: #(#LayoutFrame 196 0 28 0 199 0 50 0) + #orientation: #vertical + ) + #(#DividerSpec + #name: 'separator4' + #layout: #(#LayoutFrame 250 0 28 0 253 0 50 0) + #orientation: #vertical + ) + #(#ActionButtonSpec + #attributes: + #(#tabable + true + ) + #name: 'alignTopLeft' + #layout: #(#LayoutFrame 190 0 14 0 204 0 28 0) + #activeHelpKey: #alignTopLeft + #tabable: true + #model: #alignTopLeft + ) + #(#ActionButtonSpec + #attributes: + #(#tabable + true + ) + #name: 'alignTopCenter' + #layout: #(#LayoutFrame 217 0 14 0 231 0 28 0) + #activeHelpKey: #alignTopCenter + #tabable: true + #model: #alignTopCenter + ) + #(#ActionButtonSpec + #attributes: + #(#tabable + true + ) + #name: 'alignTopRight' + #layout: #(#LayoutFrame 245 0 14 0 259 0 28 0) + #activeHelpKey: #alignTopRight + #tabable: true + #model: #alignTopRight + ) + #(#ActionButtonSpec + #attributes: + #(#tabable + true + ) + #name: 'alignLeftCenter' + #layout: #(#LayoutFrame 190 0 32 0 204 0 46 0) + #activeHelpKey: #alignLeftCenter + #tabable: true + #model: #alignLeftCenter + ) + #(#ActionButtonSpec + #attributes: + #(#tabable + true + ) + #name: 'alignCenter' + #layout: #(#LayoutFrame 217 0 32 0 231 0 46 0) + #activeHelpKey: #alignCenter + #tabable: true + #model: #alignCenter + ) + #(#ActionButtonSpec + #attributes: + #(#tabable + true + ) + #name: 'alignRightCenter' + #layout: #(#LayoutFrame 245 0 32 0 259 0 46 0) + #activeHelpKey: #alignRightCenter + #tabable: true + #model: #alignRightCenter + ) + #(#ActionButtonSpec + #attributes: + #(#tabable + true + ) + #name: 'alignBottomLeft' + #layout: #(#LayoutFrame 190 0 50 0 204 0 64 0) + #activeHelpKey: #alignBottomLeft + #tabable: true + #model: #alignBottomLeft + ) + #(#ActionButtonSpec + #attributes: + #(#tabable + true + ) + #name: 'alignBottomCenter' + #layout: #(#LayoutFrame 217 0 50 0 231 0 64 0) + #activeHelpKey: #alignBottomCenter + #tabable: true + #model: #alignBottomCenter + ) + #(#ActionButtonSpec + #attributes: + #(#tabable + true + ) + #name: 'alignBottomRight' + #layout: #(#LayoutFrame 245 0 50 0 259 0 64 0) + #activeHelpKey: #alignBottomRight + #tabable: true + #model: #alignBottomRight + ) + ) + + ) + ) + ) + + ) + ) +! ! + +!UILayoutTool::AlignmentOrigin methodsFor:'accessing'! + +fetch:aView spec:aSpec + "fetch alignmentOrigin + " + |layout type + leftAlignmentFractionHolder topAlignmentFractionHolder + leftOffsetHolder leftFractionHolder topOffsetHolder topFractionHolder| + + type := UIPainterView layoutType:aView. + layout := aView geometryLayout. + + leftOffsetHolder := (self aspectFor:#leftOffset). + leftFractionHolder := (self aspectFor:#leftFraction). + topOffsetHolder := (self aspectFor:#topOffset). + topFractionHolder := (self aspectFor:#topFraction). + leftAlignmentFractionHolder := (self aspectFor:#leftAlignmentFraction). + topAlignmentFractionHolder := (self aspectFor:#topAlignmentFraction). + + layout isLayout ifTrue:[ + leftOffsetHolder value:(layout leftOffset). + leftFractionHolder value:(layout leftFraction). + topOffsetHolder value:(layout topOffset). + topFractionHolder value:(layout topFraction). + + type == #AlignmentOrigin ifTrue:[ + leftAlignmentFractionHolder value:(layout leftAlignmentFraction). + topAlignmentFractionHolder value:(layout topAlignmentFraction). + ^ self + ] + ] ifFalse:[ + layout := aView computeOrigin. + + leftOffsetHolder value:(layout x). + leftFractionHolder value:0. + topOffsetHolder value:(layout y). + topFractionHolder value:0. + ]. + leftAlignmentFractionHolder value:0. + topAlignmentFractionHolder value:0. + + +! + +layout + "returns current layout as alignmentOrigin + " + |layout| + + layout := Smalltalk::AlignmentOrigin new. + + layout leftOffset:((self aspectFor:#leftOffset) value) ? 0. + layout topOffset:((self aspectFor:#topOffset) value) ? 0. + layout leftFraction:((self aspectFor:#leftFraction) value) ? 0. + layout topFraction:((self aspectFor:#topFraction) value) ? 0. + + layout leftAlignmentFraction:((self aspectFor:#leftAlignmentFraction) value) ? 0. + layout topAlignmentFraction:((self aspectFor:#topAlignmentFraction) value) ? 0. + + ^ layout +! ! + +!UILayoutTool::AlignmentOrigin methodsFor:'alignment'! + +alignBottomCenter + self makeAlignLeft:0.5 top:1 + + +! + +alignBottomLeft + self makeAlignLeft:0 top:1 + + +! + +alignBottomRight + self makeAlignLeft:1 top:1 + + +! + +alignCenter + self makeAlignLeft:0.5 top:0.5 + + +! + +alignLeftCenter + self makeAlignLeft:0 top:0.5 + + +! + +alignRightCenter + self makeAlignLeft:1 top:0.5 + + +! + +alignTopCenter + self makeAlignLeft:0.5 top:0 + + +! + +alignTopLeft + self makeAlignLeft:0 top:0 + + +! + +alignTopRight + self makeAlignLeft:1 top:0 + + +! + +makeAlignLeft:leftAlignmentFraction top:topAlignmentFraction + |lAF tAF lO tO ext lAHolder tAHolder lOHolder tOHolder| + + lAF := (lAHolder := self aspectFor:#leftAlignmentFraction) value ? 0. + tAF := (tAHolder := self aspectFor:#topAlignmentFraction) value ? 0. + ext := (self aspectFor:#layoutView) computeExtent. + + lAHolder value:leftAlignmentFraction. + tAHolder value:topAlignmentFraction. + + lO := (lOHolder := self aspectFor:#leftOffset) value ? 0. + tO := (tOHolder := self aspectFor:#topOffset) value ? 0. + + lO := lO + (ext x * (leftAlignmentFraction - lAF)). + tO := tO + (ext y * (topAlignmentFraction - tAF)). + + lOHolder value:(lO rounded). + tOHolder value:(tO rounded). + +! + +makeAlignTopRight + self makeAlignLeft:1 top:0 + + +! ! + +!UILayoutTool::LayoutOrigin class methodsFor:'interface specs'! + +windowSpec + "This resource specification was automatically generated + by the UIPainter of ST/X." + + "Do not manually edit this!! If it is corrupted, + the UIPainter may not be able to read the specification." + + " + UIPainter new openOnClass:UILayoutTool::LayoutOrigin andSelector:#windowSpec + UILayoutTool::LayoutOrigin new openInterface:#windowSpec + UILayoutTool::LayoutOrigin open + " + + + + ^ + + #(#FullSpec + #window: + #(#WindowSpec + #name: 'UILayoutTool-LayoutOrigin' + #layout: #(#LayoutFrame 290 0 420 0 647 0 565 0) + #label: 'UILayoutTool-LayoutOrigin' + #min: #(#Point 10 10) + #max: #(#Point 1152 900) + #bounds: #(#Rectangle 290 420 648 566) + #usePreferredExtent: false + ) + #component: + #(#SpecCollection + #collection: + #( + #(#UISubSpecification + #name: 'layoutOriginSpec' + #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 110 0) + #majorKey: #UILayoutTool + #minorKey: #layoutOriginSpec + ) + ) + ) + ) +! ! + +!UILayoutTool::LayoutOrigin methodsFor:'accessing'! + +fetch:aView spec:aSpec + "fetch layoutOrigin + " + |layout| + + layout := UIPainterView asLayoutFrameFromView:aView. + + (self aspectFor:#leftOffset) value:(layout leftOffset). + (self aspectFor:#leftFraction) value:(layout leftFraction). + (self aspectFor:#topOffset) value:(layout topOffset). + (self aspectFor:#topFraction) value:(layout topFraction). + + +! + +layout + "returns current layout as layoutOrigin + " + |layout| + + layout := Smalltalk::LayoutOrigin new. + + layout leftOffset:((self aspectFor:#leftOffset) value) ? 0. + layout topOffset:((self aspectFor:#topOffset) value) ? 0. + layout leftFraction:((self aspectFor:#leftFraction) value) ? 0. + layout topFraction:((self aspectFor:#topFraction) value) ? 0. + + ^ layout + +! ! + !UILayoutTool::Extent class methodsFor:'help specs'! helpSpec @@ -2370,6 +2307,74 @@ ! ! +!UILayoutTool::Point class methodsFor:'interface specs'! + +windowSpec + "This resource specification was automatically generated + by the UIPainter of ST/X." + + "Do not manually edit this!! If it is corrupted, + the UIPainter may not be able to read the specification." + + " + UIPainter new openOnClass:UILayoutTool::Point andSelector:#windowSpec + UILayoutTool::Point new openInterface:#windowSpec + UILayoutTool::Point open + " + + + + ^ + + #(#FullSpec + #window: + #(#WindowSpec + #name: 'UILayoutTool-Point' + #layout: #(#LayoutFrame 324 0 410 0 618 0 547 0) + #label: 'UILayoutTool-Point' + #min: #(#Point 10 10) + #max: #(#Point 1152 900) + #bounds: #(#Rectangle 324 410 619 548) + #usePreferredExtent: false + ) + #component: + #(#SpecCollection + #collection: + #( + #(#UISubSpecification + #name: 'layoutPointSpec' + #layout: #(#LayoutFrame 1 0.0 6 0 0 1.0 100 0) + #majorKey: #UILayoutTool + #minorKey: #layoutPointSpec + ) + ) + ) + ) +! ! + +!UILayoutTool::Point methodsFor:'accessing'! + +fetch:aView spec:aSpec + "fetch point + " + |origin| + + origin := aView computeOrigin. + + (self aspectFor:#leftOffset) value:(origin x). + (self aspectFor:#topOffset) value:(origin y). + + +! + +layout + "returns current layout as point + " + ^ Smalltalk::Point x:(((self aspectFor:#leftOffset) value) ? 0) + y:(((self aspectFor:#topOffset) value) ? 0) + +! ! + !UILayoutTool class methodsFor:'documentation'! version