UIObjectView.st
changeset 59 0a2b2ff030a0
parent 58 668eb9eae2ac
child 60 7542ab7fbbfe
--- a/UIObjectView.st	Fri Feb 21 20:33:57 1997 +0100
+++ b/UIObjectView.st	Tue Feb 25 14:15:56 1997 +0100
@@ -1,18 +1,3 @@
-ObjectView subclass:#UIObjectView
-	instanceVariableNames:'inputView testMode undoHistory copiedExtent actionData
-		createClass clipChildren'
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Interface-UIPainter'
-!
-
-Object subclass:#UndoHistory
-	instanceVariableNames:'history transaction enabled'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:UIObjectView
-!
-
 Object subclass:#Transaction
 	instanceVariableNames:'type text actions'
 	classVariableNames:''
@@ -20,1966 +5,6 @@
 	privateIn:UIObjectView::UndoHistory
 !
 
-
-!UIObjectView class methodsFor:'defaults'!
-
-defaultGrid
-    ^ 4 @ 4
-
-!
-
-gridShown
-    ^ false
-
-!
-
-handleSize
-    "size of blob drawn for handles"
-    ^ 4
-
-!
-
-hitDelta
-    ^ 4
-
-! !
-
-!UIObjectView methodsFor:'accessing'!
-
-gridParameters
-    "used by defineGrid, and in a separate method for
-     easier redefinition in subclasses. 
-     Returns the grid parameters in an array of 7 elements,
-     which control the appearance of the grid-pattern.
-     the elements are:
-
-        bigStepH        number of pixels horizontally between 2 major steps
-        bigStepV        number of pixels vertically between 2 major steps
-        littleStepH     number of pixels horizontally between 2 minor steps
-        littleStepV     number of pixels vertically between 2 minor steps
-        gridAlignH      number of pixels for horizontal grid align (pointer snap)
-        gridAlignV      number of pixels for vertical grid align (pointer snap)
-        docBounds       true, if document boundary should be shown
-
-     if littleStepH/V are nil, only bigSteps are drawn.
-    "
-
-    ^ #(10 10 nil nil 10 10 false)
-
-
-!
-
-hideGrid
-    gridShown ifTrue:[
-        self withSelectionHiddenDo:[
-            super hideGrid
-        ]
-    ]
-
-
-!
-
-showGrid
-    self withSelectionHiddenDo:[
-        super showGrid
-    ]
-
-    "Modified: 5.9.1995 / 12:47:46 / claus"
-
-
-!
-
-testMode
-    "returns testMode
-    "
-    ^ testMode
-
-
-!
-
-testMode:aBoolean
-    "change testMode
-    "
-    (aBoolean == testMode) ifFalse:[
-        testMode := aBoolean.
-
-        testMode ifTrue:[
-            self unselect.
-            inputView unrealize
-        ] ifFalse:[
-            inputView raise.
-            inputView realize
-        ]
-    ]
-
-
-! !
-
-!UIObjectView methodsFor:'blocked'!
-
-addObject:anObject
-    "add the argument, anObject to the contents - with redraw"
-
-    self halt
-
-!
-
-addObjectWithoutRedraw:anObject
-    "add the argument, anObject to the contents - with redraw"
-
-    self halt
-
-! !
-
-!UIObjectView methodsFor:'event handling'!
-
-elementChanged:aView 
-    "some element has been changed - kludge to force a resizing
-     operation (for child layout recomputation) in its superView"
-
-    aView superView sizeChanged:nil.
-    self changed:#any.
-
-
-!
-
-elementChangedLayout:aView 
-    "some element has been changed - kludge to force a resizing
-     operation (for child layout recomputation) in its superView"
-
-    aView superView sizeChanged:nil.
-    self changed:#layout.
-
-
-!
-
-exposeX:x y:y width:w height:h
-    "handle an expose event from device; redraw selection
-    "
-    super exposeX:x y:y width:w height:h.
-    self selectionDo:[:v | self showSelected:v]
-
-
-!
-
-keyPress:key x:x y:y
-    <resource: #keyboard ( #InspectIt #Delete #BackSpace #Cut) >
-
-    key == #InspectIt ifTrue:[
-        ^ self inspectSelection
-    ].
-
-    (key == #Cut or:[key == #Delete or:[key == #BackSpace]]) ifTrue: [
-        ^ self deleteSelection
-    ].
-
-    super keyPress:key x:x y:y
-
-
-!
-
-processEvent:anEvent
-    "catch expose events for components, and redraw its handles after
-     the redraw when this happens
-    "
-    |view|
-
-    selection notNil ifTrue:[
-        anEvent type == #damage ifTrue:[
-            view := anEvent view.
-            (selection == view
-            or:[selection isCollection
-                and:[selection includes:view]]) ifTrue:[
-                    self showSelected:view
-            ]
-        ]
-    ].
-    ^ false.
-
-
-!
-
-sizeChanged:how
-    self withSelectionHiddenDo:[
-        super sizeChanged:how
-    ]
-
-
-! !
-
-!UIObjectView methodsFor:'initialization'!
-
-initialize
-    super initialize.
-
-    "funny: since I do not want the created widgets to get pointer
-     events, I put an InputView on top of them, which catches those events
-     and passes them back to me - have to take care, that this inputView
-     is always on top
-    "
-    inputView := InputView origin:0.0@0.0 extent:1.0@1.0 in:self.
-
-    inputView eventReceiver:self.
-    inputView enableButtonEvents.
-    inputView enableButtonMotionEvents.
-
-    self setDefaultActions.
-
-    undoHistory  := UndoHistory new.
-    testMode     := false.
-    clipChildren := true.
-
-    (self class gridShown) ifTrue:[
-        super showGrid
-    ].
-
-!
-
-realize
-    super realize.
-    self windowGroup postEventHook:self
-
-! !
-
-!UIObjectView methodsFor:'misc'!
-
-cursor:aCursor
-    inputView realized ifTrue:[
-        inputView cursor:aCursor
-    ].
-    super cursor:aCursor
-
-
-!
-
-invertOutlineOf:anObject
-    |wasClipped delta|
-
-    (wasClipped := clipChildren) ifTrue:[
-        self clippedByChildren:(clipChildren := false).
-    ].
-    delta := (anObject originRelativeTo:self) - anObject origin.
-
-    self xoring:[
-        self displayRectangle:((anObject origin + delta) extent:anObject extent).
-    ].
-
-    wasClipped ifTrue:[
-        self clippedByChildren:(clipChildren := true).
-    ].
-
-    "Modified: 5.9.1995 / 12:25:25 / claus"
-
-
-!
-
-setDefaultActions
-
-    pressAction      := [:pressPoint | self startSelectOrMove:pressPoint].
-    shiftPressAction := [:pressPoint | self startSelectMoreOrMove:pressPoint].
-    motionAction     := [:movePoint  | nil].
-    releaseAction    := [nil].
-    keyPressAction   := nil.
-
-    self cursor:Cursor normal.
-
-!
-
-showDragging:something offset:anOffset
-    "drag around a View"
-
-    |top|
-
-    self forEach:something do:[:anObject |
-        self drawRectangle:((anObject origin + anOffset) extent:(anObject extent))
-    ]
-
-! !
-
-!UIObjectView methodsFor:'object creation'!
-
-actionCreate:anObject frame:aFrame delta:aDelta
-    "create and initialize action data
-    "
-    |extent x y selectors values|
-
-"minimum extent
-"
-    extent := self extent.
-    x := extent x // 3.
-    y := extent y // 3.
-    extent := anObject preferredExtent.
-
-    (extent x > x) ifTrue:[extent x:x].
-    (extent y > y) ifTrue:[extent y:y].
-
-"setup structure
-"
-    selectors := #( object frame delta vertical horizontal minExtent ).
-    values    := Array new:(selectors size).
-
-    values at:1 put:anObject.
-    values at:2 put:aFrame.
-    values at:3 put:aDelta.
-    values at:4 put:(self isVerticalResizable:anObject).
-    values at:5 put:(self isHorizontalResizable:anObject).
-    values at:6 put:extent.
-
-    actionData := Structure newWith:selectors values:values.
-
-
-"can change cursor dependent on vertical/horizontal resizing
-"
-    oldCursor := cursor.
-    self cursor:(Cursor leftHand).
-
-
-
-!
-
-createWidgetWithClass:aClass
-    "prepare to create new widgets
-    "
-    createClass := aClass.
-    pressAction := [:pressPoint | self startCreate:pressPoint].
-    self cursor:Cursor origin.
-
-
-!
-
-doDragCreate:aPoint
-    "do a widget create drag
-    "
-    |frame object extent minimum|
-
-    frame   := actionData frame.
-    frame corner:((self alignToGrid:aPoint) - (actionData delta)).
-
-    object  := actionData object.
-    minimum := actionData minExtent.
-    extent  := frame extent.
-
-    ((extent x < minimum x) or:[actionData horizontal not]) ifTrue:[
-        extent x:(minimum x)
-    ].
-
-    ((extent y < minimum y) or:[actionData vertical not]) ifTrue:[
-        extent y:(minimum y)
-    ].
-
-    frame extent:extent.
-
-    self invertOutlineOf:object.
-    object origin:(frame origin) extent:(frame extent).
-    self invertOutlineOf:object.
-!
-
-endCreate
-    "end a widget create drag
-    "
-    |layout x y|
-
-    self invertOutlineOf:(actionData object).
-    inputView raise.
-
-    layout := (actionData object) bounds asLayout.
-    (actionData object) geometryLayout:layout.
-
-    self changed:#tree.
-    self select:(actionData object).
-    actionData := nil.
-
-    self setDefaultActions.
-
-!
-
-setupCreatedObject:anObject
-    self subclassResponsibility
-!
-
-startCreate:aPoint
-    "start a widget create
-    "
-    |widget object start frame delta|
-
-    (createClass isNil or:[self numberOfSelections > 1]) ifTrue:[
-        self unselect.
-      ^ self setDefaultActions.
-    ].
-
-    motionAction  := [:movePoint| self doDragCreate:movePoint].
-    releaseAction := [ self endCreate].
-
-    widget := self singleSelection.
-
-    (     widget notNil
-     and:[(self isPoint:aPoint containedIn:widget)
-     and:[self supportsSubComponents:widget]]
-    ) ifFalse:[
-        self unselect.
-        widget := self.
-    ].
-
-    object := createClass new.
-    widget addSubView:object.
-
-    start := self alignToGrid:aPoint.
-    delta := widget originRelativeTo:self.
-    frame := Rectangle origin:(start - delta) corner:start.
-
-    object origin:(frame origin).
-    self setupCreatedObject:object.
-    object realize.
-
-    self actionCreate:object frame:frame delta:delta.
-    self invertOutlineOf:object.
-
-
-! !
-
-!UIObjectView methodsFor:'object moving'!
-
-doObjectMove:aPoint
-    "move selection
-    "
-    movedObject notNil ifTrue:[
-        movedObject keysAndValuesDo:[:nr :aView|
-            self invertOutlineOf:aView.
-            self moveObject:aView to:(aPoint - (moveDelta at:nr)).
-            self invertOutlineOf:aView.
-        ]
-    ]
-
-!
-
-endObjectMove
-    "cleanup after object move"
-
-    movedObject notNil ifTrue:[
-        movedObject do:[:aView|
-            self invertOutlineOf:aView
-        ].
-
-        movedObject do:[:aView|
-            self showSelected:aView
-        ].
-        movedObject size == 1 ifTrue:[
-            selection := movedObject at:1
-        ] ifFalse:[
-            selection := movedObject
-        ].
-
-        movedObject := nil.
-        self setDefaultActions.
-        self changed:#layout.
-    ].
-!
-
-moveObject:anObject to:aPoint
-    "move anObject to newOrigin, aPoint
-    "
-    |dX dY org delta|
-
-    anObject notNil ifTrue:[
-        org := anObject computeOrigin.
-
-        delta := aPoint - org.
-        delta := (self alignToGrid:aPoint) - org.
-        dX := delta x.
-        dY := delta y.
-
-        undoHistory disabledTransitionDo:[
-            self shiftLayout:anObject top:dY bottom:dY left:dX right:dX
-        ]
-    ]
-
-!
-
-startObjectMoveAt:aPoint
-
-    self startObjectMove:selection at:aPoint.
-
-    selection isCollection ifTrue:[
-        movedObject := selection
-    ] ifFalse:[
-        movedObject := Array with:selection
-    ].
-    super unselect.
-
-    moveDelta := movedObject collect:[:aView|
-        aPoint - aView computeOrigin
-    ].
-
-    self transaction:#move objects:movedObject do:[:aView|
-        self invertOutlineOf:aView.
-        self undoBlockPositionChanged:aView
-    ].
-
-!
-
-startSelectMoreOrMove:aPoint
-    "add/remove to/from selection"
-
-    |anObject|
-
-    testMode ifTrue:[^ self].
-
-    anObject := self findObjectAt:aPoint.
-    anObject notNil ifTrue:[
-        (self isSelected:anObject) ifTrue:[
-            self removeFromSelection:anObject
-        ] ifFalse:[
-            self addToSelection:anObject
-        ]
-    ]
-!
-
-startSelectOrMove:aPoint
-    "a button is pressed at a point
-    "
-    |anObject b|
-
-    testMode ifTrue:[^ self].
-
-    "if there is one object selected and point hits a handle, start a resize
-    "
-    anObject := self singleSelection.
-
-    anObject notNil ifTrue:[
-        b := self whichHandleOf:anObject isHitBy:aPoint.
-
-        (b notNil and:[b ~~ #view]) ifTrue:[
-            ^ self startResizeBorder:b of:anObject.
-        ]
-    ].
-
-    anObject := self findObjectAt:aPoint.
-
-    "nothing is selected
-    "
-    anObject isNil ifTrue:[
-        ^ self unselect
-    ].
-
-    (self isSelected:anObject) ifFalse:[
-        super unselect.
-        self select:anObject.
-    ].
-
-    (self numberOfSelections ~~ 1) ifTrue:[
-        releaseAction := [
-            self setDefaultActions.
-            self select:anObject
-        ]
-    ] ifFalse:[
-        releaseAction := [self setDefaultActions]
-    ].
-
-    "prepare move operation for an object
-    "
-    motionAction := [:movePoint|
-        (aPoint dist:movePoint) > 4.0 ifTrue:[
-            self startObjectMoveAt:aPoint
-        ]
-    ].
-! !
-
-!UIObjectView methodsFor:'object resize'!
-
-actionResize:anObject selector:aSelector
-    "create and initialize action for resize
-    "
-    |selector delta|
-
-    delta    := anObject container originRelativeTo:self.
-    selector := ('resize:', aSelector, ':') asSymbol.
-
-    actionData := Structure with:(#object->anObject)
-                            with:(#selector->selector)
-                            with:(#delta->delta).
-
-"can change cursor dependent on vertical/horizontal resizing
-"
-    oldCursor := cursor.
-    self cursor:(Cursor leftHand).
-
-
-
-!
-
-doDragResize:aPoint
-    "do a widget resize drag"
-
-    |p object|
-
-    object := actionData object.
-
-    self invertOutlineOf:object.
-    p := (self alignToGrid:aPoint) - (actionData delta).
-    self perform:(actionData selector) with:object with:p.
-    object geometryLayout:(object geometryLayout).
-    self invertOutlineOf:object
-
-!
-
-endResize
-    "cleanup after object resize"
-
-    self invertOutlineOf:(actionData object).
-    self setDefaultActions.
-    self select:(actionData object).
-    actionData := nil
-
-    "Modified: 5.9.1995 / 17:11:17 / claus"
-
-!
-
-startResizeBorder:b of:selection
-    "resize selected view
-    "
-    |object|
-
-    object := self singleSelection.
-
-    (object geometryLayout) isNil ifTrue:[
-        ^ self setDefaultActions.
-    ].
-
-    self actionResize:object selector:b.
-
-    self transaction:#extent selectionDo:[:aView|
-        self undoBlockDimensionChanged:aView
-    ].
-    super unselect.
-
-    motionAction  := [:movePoint | self doDragResize:movePoint].
-    releaseAction := [self endResize].
-    self invertOutlineOf:object
-! !
-
-!UIObjectView methodsFor:'private handles'!
-
-handlesOf:aComponent do:aBlock
-    |delta layout vertical horizontal|
-
-    layout := aComponent geometryLayout.
-    delta  := (aComponent originRelativeTo:self) - aComponent origin.
-
-    (layout isLayout not or:[layout isLayoutFrame]) ifTrue:[
-        vertical   := self isVerticalResizable:aComponent.
-        horizontal := self isHorizontalResizable:aComponent.
-    ] ifFalse:[
-        vertical   := false.
-        horizontal := false.
-    ].
-
-    horizontal ifTrue:[
-        aBlock value:(aComponent leftCenter   + delta) value:#left.
-        aBlock value:(aComponent rightCenter  + delta) value:#right.
-    ].
-
-    vertical ifTrue:[
-        aBlock value:(aComponent topCenter    + delta) value:#top.
-        aBlock value:(aComponent bottomCenter + delta) value:#bottom.
-    ].
-
-    (horizontal and:[vertical]) ifTrue:[
-        aBlock value:(aComponent origin     + delta) value:#origin.
-        aBlock value:(aComponent corner     + delta) value:#corner.
-        aBlock value:(aComponent topRight   + delta) value:#topRight.
-        aBlock value:(aComponent bottomLeft + delta) value:#bottomLeft.
-    ] ifFalse:[
-        aBlock value:(aComponent origin     + delta) value:#view.
-        aBlock value:(aComponent corner     + delta) value:#view.
-        aBlock value:(aComponent topRight   + delta) value:#view.
-        aBlock value:(aComponent bottomLeft + delta) value:#view.
-    ].
-
-!
-
-showSelected:aComponent
-    |wasClipped delta oldPaint|
-
-    self paint:Color black.
-
-    (wasClipped := clipChildren) ifTrue:[
-        self clippedByChildren:(clipChildren := false). 
-    ].
-
-    self handlesOf:aComponent do:[:pnt :what |
-        what == #view ifTrue:[self displayRectangle:(pnt - (4@4) extent:7@7)]
-                     ifFalse:[self    fillRectangle:(pnt - (4@4) extent:7@7)]
-    ].
-
-    wasClipped ifTrue:[
-        self clippedByChildren:(clipChildren := true).
-    ].
-    self paint:oldPaint.
-!
-
-showUnselected:aComponent
-    |wasClipped delta r oldPaint|
-
-    r := aComponent origin extent:8@8.
-
-    (wasClipped := clipChildren) ifTrue:[
-        self clippedByChildren:(clipChildren := false). 
-    ].
-
-    self handlesOf:aComponent do:[:pnt :what |
-        self clearRectangle:(pnt - (4@4) extent:7@7).
-    ].
-
-    wasClipped ifTrue:[
-        self clippedByChildren:(clipChildren := true). 
-    ].
-
-    "/ must redraw all components which are affected b the handles
-
-    r := (aComponent originRelativeTo:self) - (4@4)
-             extent:(aComponent extent + (4@4)).
-
-    subViews do:[:anotherComponent |
-        |absOrg absFrame|
-
-        anotherComponent ~~ inputView ifTrue:[
-            absOrg := anotherComponent originRelativeTo:self.
-            absFrame := absOrg extent:(anotherComponent extent).
-            (absFrame intersects:r) ifTrue:[
-                anotherComponent withAllSubViewsDo:[:v |
-                    v clear.
-                    v exposeX:0 y:0 width:9999 height:9999.
-                ]
-            ]
-        ]
-    ]
-
-!
-
-whichHandleOf:aView isHitBy:aPoint
-    |bounds|
-
-    self handlesOf:aView do:[:pnt :what |
-        ((pnt - (4@4) extent:7@7) containsPoint:aPoint) ifTrue:[
-            ^ what
-        ].
-    ].
-
-    ^ nil
-
-    "Modified: 5.9.1995 / 14:39:34 / claus"
-
-! !
-
-!UIObjectView methodsFor:'private resizing-subviews'!
-
-resize:aView bottom:aPoint
-
-    undoHistory disabledTransitionDo:[
-        self shiftLayout:aView top:0 bottom:((aPoint y) - (aView computeCorner y))
-    ]
-!
-
-resize:aView bottomLeft:aPoint
-
-    undoHistory disabledTransitionDo:[
-        self shiftLayout:aView top:0
-                            bottom:((aPoint y) - (aView computeCorner y))
-                              left:((aPoint x) - (aView computeOrigin x))
-                             right:0
-
-    ]
-
-
-!
-
-resize:aView corner:aPoint
-    |delta|
-
-    delta := aPoint - aView computeCorner.
-
-    undoHistory disabledTransitionDo:[
-        self shiftLayout:aView top:0 bottom:(delta y) left:0 right:(delta x)
-    ]
-!
-
-resize:aView left:aPoint
-
-    undoHistory disabledTransitionDo:[
-        self shiftLayout:aView left:((aPoint x) - (aView computeOrigin x)) right:0
-    ]
-
-!
-
-resize:aView origin:aPoint
-    |delta|
-
-    delta := aPoint - aView computeOrigin.
-
-    undoHistory disabledTransitionDo:[
-        self shiftLayout:aView top:(delta y) bottom:0 left:(delta x) right:0
-    ]
-
-!
-
-resize:aView right:aPoint
-
-    undoHistory disabledTransitionDo:[
-        self shiftLayout:aView left:0 right:((aPoint x) - (aView computeCorner x))
-    ]
-!
-
-resize:aView top:aPoint
-
-    undoHistory disabledTransitionDo:[
-        self shiftLayout:aView top:((aPoint y) - (aView computeOrigin y)) bottom:0
-    ]
-!
-
-resize:aView topRight:aPoint
-
-    undoHistory disabledTransitionDo:[
-        self shiftLayout:aView top:((aPoint y) - (aView computeOrigin y))
-                            bottom:0
-                              left:0
-                             right:((aPoint x) - (aView computeCorner x))
-
-    ]
-
-! !
-
-!UIObjectView methodsFor:'private shift-layout'!
-
-shiftLayout:aView left:l right:r
-    "shift layout for a view; in case of an open transaction, the undo
-     action is registered
-    "
-    self shiftLayout:aView top:0 bottom:0 left:l right:r
-
-!
-
-shiftLayout:aView top:t bottom:b
-    "shift layout for a view; in case of an open transaction, the undo
-     action is registered
-    "
-    self shiftLayout:aView top:t bottom:b left:0 right:0
-
-
-!
-
-shiftLayout:aView top:t bottom:b left:l right:r
-    "shift layout for a view; in case of an open transaction, the undo
-     action is registered
-    "
-    |layout|
-
-    layout := aView geometryLayout.
-
-    layout isLayout ifTrue:[
-        self undoBlockPositionChanged:aView.
-
-        layout leftOffset:(layout leftOffset + l)
-                topOffset:(layout topOffset  + t).
-
-        layout isLayoutFrame ifTrue:[
-            layout bottomOffset:(layout bottomOffset + b).
-            layout  rightOffset:(layout rightOffset  + r).
-        ].
-        aView geometryLayout:layout.
-    ] ifFalse:[
-        |pixelOrigin|
-
-        self undoBlockPositionChanged:aView.
-
-        pixelOrigin := aView pixelOrigin.
-        pixelOrigin := pixelOrigin + (l@t).
-        aView pixelOrigin:pixelOrigin
-    ]
-
-
-! !
-
-!UIObjectView methodsFor:'searching'!
-
-findObjectAt:aPoint
-    "find the origin/corner of the currentWidget
-    "
-    |view viewId lastId point|
-
-    viewId := rootView id.
-    point  := aPoint + (device translatePoint:0@0 from:(self id) to:viewId).
-
-    inputView lower.
-
-    [viewId notNil] whileTrue:[
-        lastId := viewId.
-        viewId := device viewIdFromPoint:point in:lastId
-    ].
-
-    inputView raise.
-
-    view := device viewFromId:lastId.
-
-    view ~~ inputView ifTrue:[^ view]
-                     ifFalse:[^ nil]
-
-
-!
-
-isPoint:aPoint containedIn:aView
-    "checks whether a point is covered by a view.
-    "
-    |p|
-
-    p := device translatePoint:aPoint from:inputView id to:aView id.
-
-    (p x >= 0 and:[p y >= 0]) ifTrue:[
-        p := aView extent - p.
-
-        (p x >= 0 and:[p y >= 0]) ifTrue:[
-            ^ true
-        ]
-    ].
-    ^ false
-!
-
-whichBorderOf:aView isHitBy:aPoint
-    |p r bw org|
-
-    bw := aView borderWidth.
-    p := aPoint - (aView superView originRelativeTo:self).
-
-    r := Rectangle origin:(aView origin)
-                   extent:(aView width @ bw).
-    (r containsPoint:p) ifTrue:[^ #top:].
-
-    r origin:(aView left @ (aView bottom + bw)) extent:(aView width @ bw).
-    (r containsPoint:p) ifTrue:[^ #bottom:].
-
-    r top:(aView top).
-    r extent:(bw @ aView height).
-    (r containsPoint:p) ifTrue:[^ #left:].
-
-    r origin:((aView right + bw) @ aView top).
-    (r containsPoint:p) ifTrue:[^ #right:].
-
-    ^ nil
-
-
-! !
-
-!UIObjectView methodsFor:'selections'!
-
-addToSelection:something
-    (self canSelect:something) ifTrue:[
-        super addToSelection:something.
-        self changed:#selection.
-    ]
-!
-
-inspectSelection
-    self singleSelectionDo:[:aView |
-        aView inspect
-    ]
-!
-
-numberOfSelections
-    "return the number of selected entries"
-
-    |sz|
-
-    selection isNil ifTrue:[^ 0].
-
-    selection isCollection ifTrue:[^ selection size]
-                          ifFalse:[^ 1 ]
-!
-
-removeFromSelection:something
-    super removeFromSelection:something.
-    self changed:#selection
-
-!
-
-select:something
-    (self canSelect:something) ifTrue:[
-        super select:something.
-        self changed:#selection
-    ]
-
-!
-
-selection
-    ^ selection
-
-
-!
-
-selectionHiddenDo:aBlock
-    "apply block to every object in selection"
-
-    self selectionDo:[:aView |
-        self showUnselected:aView.
-    ].
-    device flush.
-    aBlock value.
-    self selectionDo:[:aView |
-        self showSelected:aView
-    ]
-
-
-!
-
-singleSelection
-    "returns single selection or nil
-    "
-    selection isCollection ifFalse:[
-        ^ selection
-    ].
-    selection size == 1 ifTrue:[ ^ selection at:1]
-                       ifFalse:[ ^ nil].
-!
-
-singleSelectionDo:aBlock
-    |view|
-
-    (view := self singleSelection) notNil ifTrue:[
-        aBlock value:view
-    ]
-!
-
-unselect
-    selection notNil ifTrue:[
-        super unselect.
-        self changed:#selection
-    ]
-
-!
-
-withSelectionHiddenDo:aBlock
-    "evaluate aBlock while selection is hidden"
-
-    |sel|
-
-    selection isNil ifTrue:[
-        aBlock value
-    ] ifFalse:[
-        sel := selection.
-        super unselect.
-        aBlock value.
-        super select:sel
-    ]
-
-    "Modified: 6.9.1995 / 01:46:16 / claus"
-
-
-! !
-
-!UIObjectView methodsFor:'testing'!
-
-canMove:something
-    ^ true
-
-
-!
-
-canPaste:something
-    "returns true if something could be paste
-    "
-    something notNil ifTrue:[
-        something isCollection ifTrue:[
-            something notEmpty ifTrue:[
-                ^ (something at:1) isKindOf:UISpecification
-            ]
-        ] ifFalse:[
-            ^ something isKindOf:UISpecification
-        ]
-    ].
-    ^ false
-
-!
-
-canSelect:something
-    ^ (testMode not and:[something ~~ selection])
-
-!
-
-hasUndos
-    "returns true if undoHistory not empty
-    "
-    ^ undoHistory notEmpty
-!
-
-isHorizontalResizable:aComponent
-    ^ self subclassResponsibility
-
-
-!
-
-isVerticalResizable:aComponent
-    ^ self subclassResponsibility
-
-
-!
-
-supportsSubComponents:something
-    "returns true if somrthing supports subcomponents
-    "
-    |specClass|
-
-    something notNil ifTrue:[
-        something isCollection ifFalse:[
-            specClass := something specClass
-        ] ifTrue:[
-            something size == 1 ifTrue:[
-                specClass := (something at:1) specClass
-            ]
-        ].
-        specClass notNil ifTrue:[
-            ^ specClass basicNew supportsSubComponents
-        ]
-    ].
-    ^ false
-! !
-
-!UIObjectView methodsFor:'transaction & undo'!
-
-transaction:aType objects:something do:aOneArgBlock
-    "opens a transaction and evaluates a block within the transaction; the
-     argument to the block is a view from derived from something
-    "
-    self subclassResponsibility
-
-
-!
-
-transaction:aType selectionDo:aOneArgBlock
-    "opens a transaction and evaluates a block within the transaction; the
-     argument to the block is a view from the selection
-    "
-    self transaction:aType objects:selection do:aOneArgBlock
-
-
-!
-
-undoBlockDimensionChanged:aView
-
-    undoHistory isTransactionOpen ifTrue:[
-        |layout|
-
-        layout := aView geometryLayout copy.
-
-        undoHistory addUndoBlock:[
-            aView geometryLayout:layout.
-            aView superView sizeChanged:nil.
-        ]
-    ]
-
-!
-
-undoBlockPositionChanged:aView
-
-    undoHistory isTransactionOpen ifTrue:[
-        |layout|
-
-        layout := aView geometryLayout copy.
-        layout isNil ifFalse:[
-            undoHistory addUndoBlock:[aView geometryLayout:layout]
-        ] ifTrue:[
-            layout := aView pixelOrigin.
-            undoHistory addUndoBlock:[aView pixelOrigin:layout]
-        ]
-    ]
-
-!
-
-undoDeleteAll
-    "delete total undo history
-    "
-    undoHistory reinitialize
-!
-
-undoLast
-    self undoLast:1
-!
-
-undoLast:n
-
-    self unselect.
-    undoHistory undoLast:n.
-    self changed:#tree
-
-
-! !
-
-!UIObjectView methodsFor:'user actions - dimension'!
-
-copyExtent
-    |object|
-
-    object := self singleSelection.
-
-    object notNil ifTrue:[
-        copiedExtent := object computeExtent
-    ] ifFalse:[
-        self warn:'exactly one element must be selected'.
-    ]
-
-
-
-!
-
-pasteExtent
-    copiedExtent notNil ifTrue:[
-        self transition:#extent dimensionDo:[:v|
-            self resize:v corner:(v computeOrigin + copiedExtent)
-        ]    
-    ]    
-!
-
-pasteHeight
-    copiedExtent notNil ifTrue:[
-        self transition:'paste height' dimensionDo:[:v|
-            self resize:v bottom:(v computeOrigin + copiedExtent)
-        ]    
-    ]    
-
-!
-
-pasteWidth
-    copiedExtent notNil ifTrue:[
-        self transition:'paste width' dimensionDo:[:v|
-            self resize:v right:(v computeOrigin + copiedExtent)
-        ]    
-    ]    
-
-!
-
-setDimension:aLayout
-    |type|
-
-    aLayout isLayout ifTrue:[
-        aLayout isLayoutFrame ifTrue:[
-            type := #layoutFrame
-        ] ifFalse:[
-            aLayout isAlignmentOrigin ifTrue:[
-                type := #layoutAlignOrigin.
-            ] ifFalse:[
-                type := #layoutOrigin
-            ]
-        ]
-    ] ifFalse:[
-        type := #layout
-    ].
-
-    self transition:type dimensionDo:[:v| v geometryLayout:(aLayout copy)]    
-
-!
-
-setToDefaultExtent
-    self transition:#extent dimensionDo:[:v|
-        self resize:v corner:(v computeOrigin + (v preferredExtent))
-    ]    
-
-!
-
-setToDefaultHeight
-    self transition:'default height' dimensionDo:[:v|
-        self resize:v bottom:(v computeOrigin + (v preferredExtent))
-    ]    
-
-!
-
-setToDefaultWidth
-    self transition:'default width' dimensionDo:[:v|
-        self resize:v right:(v computeOrigin + (v preferredExtent))
-    ]    
-
-!
-
-transition:aType dimensionDo:aOneArgBlock
-    "change dimension within a transaction for the selected elements by evaluating
-     the block with the argument a view.
-    "
-    self selectionHiddenDo:[
-        self transaction:aType selectionDo:[:aView|
-            self undoBlockDimensionChanged:aView.
-            aOneArgBlock value:aView.
-            aView superView sizeChanged:nil
-        ].
-        self changed:#layout
-    ]
-! !
-
-!UIObjectView methodsFor:'user actions - move'!
-
-moveSelectionDown:aNumber
-    |gridY|
-
-    gridAlign notNil ifTrue:[
-        gridY := gridAlign y.
-    ].
-
-    self selectionHiddenDo:[
-        self transaction:#move selectionDo:[:aView|
-            |n d|
-
-            n := aNumber.
-
-            aligning ifTrue:[
-                d := ((aView computeCorner y) \\ gridY).
-                n := n * gridY.
-
-                d ~~ 0 ifTrue:[
-                    n := n - d + 1.
-                ]
-            ].
-            self shiftLayout:aView top:n bottom:n
-        ].
-        self changed:#layout
-    ]
-
-
-!
-
-moveSelectionLeft:aNumber
-    "move selection left
-    "
-    |gridX|
-
-    gridAlign notNil ifTrue:[
-        gridX := gridAlign x.
-    ].
-
-    self selectionHiddenDo:[
-        self transaction:#move selectionDo:[:aView|
-            |n d|
-
-            n := aNumber.
-
-            aligning ifTrue:[
-                d := ((aView computeOrigin x) \\ gridX).
-                d ~~ 0 ifTrue:[
-                    n := n-1.
-                ].
-                n := (n * gridX) + d.
-            ].
-            n := n negated.
-            self shiftLayout:aView left:n right:n
-
-        ].
-        self changed:#layout
-    ]
-!
-
-moveSelectionRight:aNumber
-    "move selection right
-    "
-    |gridX|
-
-    gridAlign notNil ifTrue:[
-        gridX := gridAlign x.
-    ].
-
-    self selectionHiddenDo:[
-        self transaction:#move selectionDo:[:aView|
-            |n d|
-
-            n := aNumber.
-
-            aligning ifTrue:[
-                d := ((aView computeCorner x) \\ gridX).
-                n := n * gridX.
-
-                d ~~ 0 ifTrue:[
-                    n := n - d + 1.
-                ]
-            ].
-            self shiftLayout:aView left:n right:n
-
-        ].
-        self changed:#layout
-    ]
-!
-
-moveSelectionUp:aNumber
-    "move selection up
-    "
-    |gridY|
-
-    gridAlign notNil ifTrue:[
-        gridY := gridAlign y.
-    ].
-
-    self selectionHiddenDo:[
-        self transaction:#move selectionDo:[:aView|
-            |n d|
-
-            n := aNumber.
-
-            aligning ifTrue:[
-                d := ((aView computeOrigin x) \\ gridY).
-                d ~~ 0 ifTrue:[
-                    n := n-1.
-                ].
-                n := (n * gridY) + d.
-            ].
-            n := n negated.
-            self shiftLayout:aView top:n bottom:n
-        ].
-        self changed:#layout
-    ]
-
-
-! !
-
-!UIObjectView methodsFor:'user actions - position'!
-
-alignSelectionBottom
-    |bmost delta layout|
-
-    selection notNil ifTrue:[
-        self selectionHiddenDo:[
-            self numberOfSelections > 1 ifTrue:[
-                bmost := (selection at:1) computeCorner y.
-
-                self transaction:#align selectionDo:[:v|
-                    (delta := bmost - (v computeCorner y)) ~~ 0 ifTrue:[
-                        self shiftLayout:v top:delta bottom:delta.
-                    ]
-                ]
-            ] ifFalse:[
-                layout := selection geometryLayout.
-
-                (layout isLayout and:[layout isLayoutFrame]) ifFalse:[
-                    ^ self
-                ].
-
-                self transaction:#layout selectionDo:[:aView|
-                    self undoBlockDimensionChanged:aView.
-                    layout := aView geometryLayout.
-                    layout bottomOffset:0.
-                    layout bottomFraction:1.0.
-                    aView geometryLayout:layout.
-                ]
-            ]
-        ].
-        self changed:#layout
-    ]
-
-
-
-!
-
-alignSelectionCenterHor
-    |view center|
-
-    selection notNil ifTrue:[
-        self selectionHiddenDo:[
-            view := self singleSelection.
-
-            view notNil ifTrue:[
-                view   := view superView.
-                center := view computeExtent
-            ] ifFalse:[
-                view   := selection at:1.
-                center := view computeCorner + view computeOrigin.
-            ].
-            center := center x // 2.
-
-            self transaction:#align selectionDo:[:v|
-                |newX oldX delta|
-
-                oldX  := v computeOrigin x.
-                newX  := center - ((v computeCorner x - oldX) // 2).
-                delta := newX - oldX.
-
-                self shiftLayout:v left:delta right:delta
-            ].
-            self changed:#layout
-        ]
-    ]
-
-
-
-!
-
-alignSelectionCenterVer
-    |view center|
-
-    selection notNil ifTrue:[
-        self selectionHiddenDo:[
-            view := self singleSelection.
-
-            view notNil ifTrue:[
-                view   := view superView.
-                center := view computeExtent
-            ] ifFalse:[
-                view   := selection at:1.
-                center := view computeCorner + view computeOrigin.
-            ].
-            center := center y // 2.
-
-            self transaction:#align selectionDo:[:v|
-                |newY oldY delta|
-
-                oldY  := v computeOrigin y.
-                newY  := center - ((v computeCorner y - oldY) // 2).
-                delta := newY - oldY.
-
-                self shiftLayout:v top:delta bottom:delta
-            ].
-            self changed:#layout
-        ]
-    ]
-!
-
-alignSelectionLeft
-    |lmost delta layout|
-
-    selection notNil ifTrue:[
-        self selectionHiddenDo:[
-            self numberOfSelections > 1 ifTrue:[
-                lmost := (selection at:1) computeOrigin x.
-
-                self transaction:#align selectionDo:[:v|
-                    (delta := lmost - (v computeOrigin x)) ~~ 0 ifTrue:[
-                        self shiftLayout:v left:delta right:delta
-                    ]
-                ]
-            ] ifFalse:[
-                self transaction:#layout selectionDo:[:aView|
-                    layout := aView geometryLayout.
-
-                    layout isLayout ifTrue:[
-                        self undoBlockDimensionChanged:aView.
-                        layout leftOffset:0.
-                        layout leftFraction:0.0.
-                        aView geometryLayout:layout.
-                    ]
-                ]
-            ]
-        ].
-        self changed:#layout
-    ]
-!
-
-alignSelectionLeftAndRight
-    |lmost rmost layout|
-
-    selection notNil ifTrue:[
-        self selectionHiddenDo:[
-            self numberOfSelections > 1 ifTrue:[
-                lmost := (selection at:1) computeOrigin x.
-                rmost := (selection at:1) computeCorner x.
-
-                self transaction:#align selectionDo:[:v|
-                    self shiftLayout:v left:(lmost - (v computeOrigin x))
-                                     right:(rmost - (v computeCorner x))
-                ]
-            ] ifFalse:[
-                self transaction:#layout selectionDo:[:aView|
-                    layout := aView geometryLayout.
-
-                    layout isLayout ifTrue:[
-                        self undoBlockDimensionChanged:aView.
-                        layout leftOffset:0.
-                        layout leftFraction:0.0.
-
-                        (layout isLayout and:[layout isLayoutFrame]) ifTrue:[
-                            layout rightOffset:0.
-                            layout rightFraction:1.0.
-                        ].
-                        aView geometryLayout:layout.
-                    ]
-                ]
-            ]
-        ].
-        self changed:#layout
-    ]
-!
-
-alignSelectionRight
-    |rmost delta layout|
-
-    selection notNil ifTrue:[
-        self selectionHiddenDo:[
-            self numberOfSelections > 1 ifTrue:[
-                rmost := (selection at:1) computeCorner x.
-
-                self transaction:#align selectionDo:[:v|
-                    (delta := rmost - (v computeCorner x)) ~~ 0 ifTrue:[
-                        self shiftLayout:v left:delta right:delta
-                    ]
-                ]
-            ] ifFalse:[
-                layout := selection geometryLayout.
-
-                (layout isLayout and:[layout isLayoutFrame]) ifFalse:[
-                    ^ self
-                ].
-
-                self transaction:#layout selectionDo:[:aView|
-                    self undoBlockDimensionChanged:aView.
-                    layout := aView geometryLayout.
-                    layout rightOffset:0.
-                    layout rightFraction:1.0.
-                    aView geometryLayout:layout.
-                ]
-            ]
-        ].
-        self changed:#layout
-    ]
-!
-
-alignSelectionTop
-    |tmost delta layout|
-
-    selection notNil ifTrue:[
-        self selectionHiddenDo:[
-            self numberOfSelections > 1 ifTrue:[
-                tmost := (selection at:1) computeOrigin y.
-
-                self transaction:#align selectionDo:[:v|
-                    (delta := tmost - (v computeOrigin y)) ~~ 0 ifTrue:[
-                        self shiftLayout:v top:delta bottom:delta
-                    ]
-                ]
-            ] ifFalse:[
-                self transaction:#layout selectionDo:[:aView|
-                    layout := aView geometryLayout.
-
-                    layout isLayout ifTrue:[
-                        self undoBlockDimensionChanged:aView.
-                        layout topOffset:0.
-                        layout topFraction:0.0.
-                        aView geometryLayout:layout.
-                    ]
-                ]
-            ]
-        ].
-        self changed:#layout
-    ]
-
-!
-
-alignSelectionTopAndBottom
-    |tmost bmost layout|
-
-    selection notNil ifTrue:[
-        self selectionHiddenDo:[
-            self numberOfSelections > 1 ifTrue:[
-                tmost := (selection at:1) computeOrigin y.
-                bmost := (selection at:1) computeCorner y.
-
-                self transaction:#align selectionDo:[:v|
-                    self shiftLayout:v top:(tmost - (v computeOrigin y))
-                                    bottom:(bmost - (v computeCorner y))
-                ]
-            ] ifFalse:[
-                self transaction:#layout selectionDo:[:aView|
-                    layout := aView geometryLayout.
-
-                    layout isLayout ifTrue:[
-                        self undoBlockDimensionChanged:aView.
-                        layout topOffset:0.
-                        layout topFraction:0.0.
-
-                        (layout isLayout and:[layout isLayoutFrame]) ifTrue:[
-                            layout bottomOffset:0.
-                            layout bottomFraction:1.0.
-                        ].
-                        aView geometryLayout:layout.
-                    ]
-                ]
-            ]
-        ].
-        self changed:#layout
-    ]
-!
-
-centerSelection:aOneArgBlockXorY orientation:orientation
-    "center selection horizontal or vertical dependant on the block result( x or y).
-     The argument to the block is the point.
-    "
-    |superview min max delta val|
-
-    self selectionHiddenDo:[
-        max := 0.
-
-        self selectionDo:[:aView |
-            superview isNil ifTrue:[
-                superview := aView superView
-            ] ifFalse:[
-                (aView superView == superview) ifFalse:[
-                    ^ self notify:'views must have same superview'.
-                ]
-            ].
-            val := aOneArgBlockXorY value:(aView computeOrigin).    
-
-            min isNil ifTrue:[min := val]
-                     ifFalse:[min := min min:val].
-
-            val := aOneArgBlockXorY value:(aView computeCorner).
-            max := max max:val.
-        ].
-
-        val := aOneArgBlockXorY value:(superview computeExtent).
-        max := (min + val - max) // 2.
-
-        max == min ifFalse:[
-            delta := max - min.
-
-            self transaction:#center selectionDo:[:v|
-                orientation == #y ifTrue:[
-                    self shiftLayout:v top:delta bottom:delta
-                ] ifFalse:[
-                    self shiftLayout:v left:delta right:delta
-                ]
-            ].
-            self changed:#layout
-        ]
-    ]
-
-
-!
-
-centerSelectionHor
-    "center selection horizontal
-    "
-    self centerSelection:[:aPoint| aPoint x] orientation:#x
-
-
-!
-
-centerSelectionVer
-    "center selection vertical
-    "
-    self centerSelection:[:aPoint| aPoint y] orientation:#y
-!
-
-spreadSelectionHor
-    |sumWidths min max viewsInOrder topsInOrder count space|
-
-    (self numberOfSelections > 1) ifFalse:[
-        ^ self
-    ].
-
-    self selectionHiddenDo:[
-        count := 0.
-        sumWidths := 0.
-        max := 0.
-
-        self selectionDo:[:aView |
-            sumWidths := sumWidths + aView width.
-
-            min isNil ifTrue:[min := aView left]
-                     ifFalse:[min := min min:(aView left)].
-
-            max := max max:(aView right).
-            count := count + 1
-        ].
-        viewsInOrder := Array withAll:selection.
-        topsInOrder  := viewsInOrder collect:[:aView | aView left].
-        topsInOrder sortWith:viewsInOrder.
-
-        space := (((max - min) - sumWidths) / (count - 1)) rounded asInteger.
-
-        self transaction:#spread objects:viewsInOrder do:[:aView|
-            |delta|
-
-            delta := min - aView computeOrigin x.
-            self shiftLayout:aView left:delta right:delta.
-            min := min + aView computeExtent x + space
-        ].
-        self changed:#layout
-    ]
-
-!
-
-spreadSelectionVer
-    |sumHeights min max viewsInOrder topsInOrder count space|
-
-    (self numberOfSelections > 1) ifFalse:[
-        ^ self
-    ].
-
-    self selectionHiddenDo:[
-        count := 0.
-        sumHeights := 0.
-        max := 0.
-
-        self selectionDo:[:aView |
-            sumHeights := sumHeights + aView height.
-
-            min isNil ifTrue:[min := aView top]
-                     ifFalse:[min := min min:(aView top)].
-
-            max   := max max:(aView bottom).
-            count := count + 1
-        ].
-        viewsInOrder := Array withAll:selection.
-        topsInOrder  := viewsInOrder collect:[:aView|aView top].
-        topsInOrder sortWith:viewsInOrder.
-
-        space := (((max - min) - sumHeights) / (count - 1)) rounded asInteger.
-
-        self transaction:#spread objects:viewsInOrder do:[:aView|
-            |delta|
-
-            delta := min - aView computeOrigin y.
-            self shiftLayout:aView top:delta bottom:delta.
-            min := min + aView height + space
-        ].
-        self changed:#layout
-    ]
-! !
-
-!UIObjectView::UndoHistory class methodsFor:'constants'!
-
-maxHistorySize
-    "returns maximum size of history before removing oldest
-     record
-    "
-    ^ 50
-
-
-! !
-
-!UIObjectView::UndoHistory class methodsFor:'instance creation'!
-
-new
-    ^ self basicNew initialize
-
-
-! !
-
-!UIObjectView::UndoHistory methodsFor:'accessing'!
-
-historySize
-    ^ history size
-! !
-
-!UIObjectView::UndoHistory methodsFor:'initialization'!
-
-initialize
-    super initialize.
-    self  reinitialize.
-
-
-!
-
-reinitialize
-    "reinitialize all attributes
-    "
-    history     := OrderedCollection new.
-    transaction := nil.
-    enabled     := true.
-
-
-! !
-
-!UIObjectView::UndoHistory methodsFor:'menu'!
-
-popupMenu
-    "returns a submenu for undo
-    "
-    |labels|
-
-    labels := OrderedCollection new:(history size).
-    history reverseDo:[:aRecord| labels add:(aRecord asString) ].
-
-    ^ PopUpMenu labels:labels selectors:#undoLast:.
-
-! !
-
-!UIObjectView::UndoHistory methodsFor:'testing'!
-
-isEmpty
-    "returns true if undo history is empty
-    "
-    ^ history isEmpty
-
-
-!
-
-isTransactionOpen
-    ^ (enabled and:[transaction notNil])
-!
-
-notEmpty
-    "returns true if undo history is not empty
-    "
-    ^ history notEmpty
-
-
-! !
-
-!UIObjectView::UndoHistory methodsFor:'transaction'!
-
-addUndoBlock:anUndoBlock
-    "undo block to restore changes; add block to current transaction
-    "
-    self isTransactionOpen ifTrue:[
-        transaction add:anUndoBlock
-    ]
-
-
-!
-
-disabledTransitionDo:aBlock
-    "disable transitions during evaluating the block
-    "
-    |oldState|
-
-    oldState := enabled.
-    enabled  := false.
-    aBlock value.
-    enabled  := oldState.
-!
-
-transaction:aType do:aBlock
-    self transaction:aType text:nil do:aBlock
-!
-
-transaction:aType text:aTextOrNil do:aBlock
-    "open a transaction; perform the block; at least close the transaction
-    "
-    (enabled and:[transaction isNil]) ifTrue:[
-        transaction := Transaction type:aType text:aTextOrNil.
-
-        aBlock value.
-
-        transaction isEmpty ifFalse:[
-            history addLast:transaction.
-            history size > (self class maxHistorySize) ifTrue:[history removeFirst]
-        ].
-        transaction := nil
-
-    ] ifFalse:[
-        aBlock value
-    ]
-! !
-
-!UIObjectView::UndoHistory methodsFor:'undo'!
-
-undoLast:nTransactions
-    "undo last n transactions; an open transaction will be closed;
-     transactions during undo are disabled
-    "
-    |n|
-
-    transaction := nil.
-    n := nTransactions min:(history size).
-
-    n ~~ 0 ifTrue:[
-        enabled := false.
-        n timesRepeat:[ (history removeLast) undo ].
-        enabled := true.
-    ]
-
-
-! !
-
 !UIObjectView::UndoHistory::Transaction class methodsFor:'instance creation'!
 
 type:aType text:aTextOrNil
@@ -1997,7 +22,7 @@
 
     string := type asString.
 
-    text notNil ifTrue:[^ string, '  ', text ]
+    text notNil ifTrue:[^ string, '    ', text ]
                ifFalse:[^ string ]
 !
 
@@ -2073,8 +98,3 @@
     ^ actions notNil
 ! !
 
-!UIObjectView class methodsFor:'documentation'!
-
-version
-    ^ '$Header$'
-! !