# HG changeset patch # User ca # Date 857220279 -3600 # Node ID a5a7054e2b7dcadbd8bce090aa0f63f2fe876fed # Parent 407d25aca67023a698d82ce800e64a104e8d5f51 *** empty log message *** diff -r 407d25aca670 -r a5a7054e2b7d UIObjectView.st --- a/UIObjectView.st Sat Mar 01 13:43:01 1997 +0100 +++ b/UIObjectView.st Sat Mar 01 13:44:39 1997 +0100 @@ -392,6 +392,27 @@ ! +minSetOfSuperViews:aCollectionOfViews + |setOfViews setOfSuperViews| + + aCollectionOfViews isCollection ifFalse:[ + ^ aCollectionOfViews + ]. + + setOfViews := aCollectionOfViews asIdentitySet. + + setOfSuperViews := setOfViews select:[:aView| + (setOfViews detect:[:v|aView isComponentOf:v] + ifNone:nil + ) isNil + ]. + + setOfSuperViews size == 1 ifTrue:[ + ^ setOfSuperViews first + ]. + ^ setOfSuperViews asOrderedCollection +! + setDefaultActions "set default actions " @@ -694,7 +715,7 @@ " motionAction := [:movePoint| - (aPoint dist:movePoint) > 4.0 ifTrue:[ + (aPoint dist:movePoint) > 8.0 ifTrue:[ self startObjectMoveAt:aPoint ] ]. @@ -761,7 +782,7 @@ object := self singleSelection. self actionResize:object selector:b. - self transaction:#extent selectionDo:[:aView| + self transaction:#resize selectionDo:[:aView| self undoLayoutView:aView ]. super unselect. @@ -1235,8 +1256,13 @@ aBlock valueNowOrOnUnwindDo:[ selectionHiddenLevel == 1 ifTrue:[ setOfSuperViewsSizeChanged notEmpty ifTrue:[ - setOfSuperViewsSizeChanged do:[:aSuperView| - aSuperView sizeChanged:nil + |s| + s := self minSetOfSuperViews:setOfSuperViewsSizeChanged. + + s isCollection ifTrue:[ + s do:[:aSuperView|aSuperView sizeChanged:nil] + ] ifFalse:[ + s sizeChanged:nil ]. setOfSuperViewsSizeChanged := IdentitySet new ]. @@ -1414,7 +1440,7 @@ "paste the copied extent to all objects in the selection " copiedExtent notNil ifTrue:[ - self transition:#extent dimensionDo:[:v| + self transition:#pasteExtent dimensionDo:[:v| self resize:v corner:(v computeOrigin + copiedExtent) ] ] @@ -1424,7 +1450,7 @@ "paste the copied extent height to all objects in the selection " copiedExtent notNil ifTrue:[ - self transition:'paste height' dimensionDo:[:v| + self transition:#pasteHeight dimensionDo:[:v| self resize:v bottom:(v computeOrigin + copiedExtent) ] ] @@ -1435,7 +1461,7 @@ "paste the copied extent width to all objects in the selection " copiedExtent notNil ifTrue:[ - self transition:'paste width' dimensionDo:[:v| + self transition:#pasteWidth dimensionDo:[:v| self resize:v right:(v computeOrigin + copiedExtent) ] ] @@ -1454,7 +1480,7 @@ setExtent:anExtent "change extent for all selected objects " - self transition:#layout dimensionDo:[:v| + self transition:#extent dimensionDo:[:v| v geometryLayout:nil. v extent:anExtent. ]. @@ -1465,7 +1491,7 @@ setToDefaultExtent "change extent of all selected views to their default extent " - self transition:#extent dimensionDo:[:v| + self transition:#defaultExtent dimensionDo:[:v| self resize:v corner:(v computeOrigin + (v preferredExtent)) ] @@ -1474,7 +1500,7 @@ setToDefaultHeight "change height of all selected views to their default height " - self transition:'default height' dimensionDo:[:v| + self transition:#defaultHeight dimensionDo:[:v| self resize:v bottom:(v computeOrigin + (v preferredExtent)) ] @@ -1483,7 +1509,7 @@ setToDefaultWidth "change width of all selected views to their default width " - self transition:'default width' dimensionDo:[:v| + self transition:#defaultWidth dimensionDo:[:v| self resize:v right:(v computeOrigin + (v preferredExtent)) ] @@ -1517,7 +1543,7 @@ gridAlign notNil ifTrue:[gridY := gridAlign y]. self withSelectionHiddenDo:[ - self transaction:#move selectionDo:[:aView| + self transaction:#moveDown selectionDo:[:aView| |n d| n := aNumber. @@ -1547,7 +1573,7 @@ gridAlign notNil ifTrue:[gridX := gridAlign x]. self withSelectionHiddenDo:[ - self transaction:#move selectionDo:[:aView| + self transaction:#moveLeft selectionDo:[:aView| |n d| n := aNumber. @@ -1576,7 +1602,7 @@ gridAlign notNil ifTrue:[gridX := gridAlign x]. self withSelectionHiddenDo:[ - self transaction:#move selectionDo:[:aView| + self transaction:#moveRight selectionDo:[:aView| |n d| n := aNumber. @@ -1605,7 +1631,7 @@ gridAlign notNil ifTrue:[gridY := gridAlign y]. self withSelectionHiddenDo:[ - self transaction:#move selectionDo:[:aView| + self transaction:#moveUp selectionDo:[:aView| |n d| n := aNumber. @@ -1628,23 +1654,6 @@ !UIObjectView methodsFor:'user actions - position'! -alignFrameLayout:aBlock - "perform block on a frameLayout assigned to the current single selection - " - |layout| - - self transaction:#align selectionDo:[:aView| - layout := self class asLayoutFrameFromView:aView. - - layout notNil ifTrue:[ - self undoLayoutView:aView. - aBlock value:layout. - aView geometryLayout:layout. - self elementChangedSize:aView. - ] - ] -! - alignSelectionBottom "align selection to the bottom of the first object in the selection; in case of one selection the object is aligned to the bottom of its superview @@ -1656,13 +1665,13 @@ self numberOfSelections > 1 ifTrue:[ bmost := (selection at:1) computeCorner y. - self transaction:#align selectionDo:[:v| + self transaction:#alignBottom selectionDo:[:v| (delta := bmost - (v computeCorner y)) ~~ 0 ifTrue:[ self shiftLayout:v top:delta bottom:delta. ] ] ] ifFalse:[ - self alignFrameLayout:[:aLayout| + self extentToFrame:#Bottom do:[:aLayout| aLayout bottomOffset:0. aLayout bottomFraction:1.0 ] @@ -1694,7 +1703,7 @@ ]. center := center x // 2. - self transaction:#align selectionDo:[:v| + self transaction:#alignCenterHorizontal selectionDo:[:v| |newX oldX delta| oldX := v computeOrigin x. @@ -1730,7 +1739,7 @@ ]. center := center y // 2. - self transaction:#align selectionDo:[:v| + self transaction:#alignCenterVertical selectionDo:[:v| |newY oldY delta| oldY := v computeOrigin y. @@ -1755,13 +1764,13 @@ self numberOfSelections > 1 ifTrue:[ lmost := (selection at:1) computeOrigin x. - self transaction:#align selectionDo:[:v| + self transaction:#alignLeft selectionDo:[:v| (delta := lmost - (v computeOrigin x)) ~~ 0 ifTrue:[ self shiftLayout:v left:delta right:delta ] ] ] ifFalse:[ - self alignFrameLayout:[:aLayout| + self extentToFrame:#Left do:[:aLayout| aLayout leftOffset:0. aLayout leftFraction:0.0. ] @@ -1783,14 +1792,23 @@ 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)). - - self elementChangedSize:v. + self transaction:#alignLeftRight selectionDo:[:aView| + |layout| + layout := self class asLayoutFrameFromView:aView. + + layout notNil ifTrue:[ + self undoLayoutView:aView. + aView geometryLayout:layout. + + undoHistory disabledTransitionDo:[ + self shiftLayout:aView left:(lmost - (aView computeOrigin x)) + right:(rmost - (aView computeCorner x)). + ]. + self elementChangedSize:aView + ] ] ] ifFalse:[ - self alignFrameLayout:[:aLayout| + self extentToFrame:#LeftRight do:[:aLayout| aLayout leftOffset:0. aLayout leftFraction:0.0. aLayout rightOffset:0. @@ -1814,13 +1832,13 @@ self numberOfSelections > 1 ifTrue:[ rmost := (selection at:1) computeCorner x. - self transaction:#align selectionDo:[:v| + self transaction:#alignRight selectionDo:[:v| (delta := rmost - (v computeCorner x)) ~~ 0 ifTrue:[ self shiftLayout:v left:delta right:delta ] ] ] ifFalse:[ - self alignFrameLayout:[:aLayout| + self extentToFrame:#Right do:[:aLayout| aLayout rightOffset:0. aLayout rightFraction:1.0. ] @@ -1841,13 +1859,13 @@ self numberOfSelections > 1 ifTrue:[ tmost := (selection at:1) computeOrigin y. - self transaction:#align selectionDo:[:v| + self transaction:#alignTop selectionDo:[:v| (delta := tmost - (v computeOrigin y)) ~~ 0 ifTrue:[ self shiftLayout:v top:delta bottom:delta ] ] ] ifFalse:[ - self alignFrameLayout:[:aLayout| + self extentToFrame:#Top do:[:aLayout| aLayout topOffset:0. aLayout topFraction:0.0. ] @@ -1870,13 +1888,23 @@ 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)). - self elementChangedSize:v. + self transaction:#alignTopBottom selectionDo:[:aView| + |layout| + layout := self class asLayoutFrameFromView:aView. + + layout notNil ifTrue:[ + self undoLayoutView:aView. + aView geometryLayout:layout. + + undoHistory disabledTransitionDo:[ + self shiftLayout:aView top:(tmost - (aView computeOrigin y)) + bottom:(bmost - (aView computeCorner y)). + ]. + self elementChangedSize:aView + ] ] ] ifFalse:[ - self alignFrameLayout:[:aLayout| + self extentToFrame:#TopBottom do:[:aLayout| aLayout topOffset:0. aLayout topFraction:0.0. aLayout bottomOffset:0. @@ -1888,33 +1916,6 @@ ] ! -alignSingleSelection:aBlock - - |type layout| - - self withSelectionHiddenDo:[ - self transaction:#align selectionDo:[:aView| - type := self class layoutType:aView. - - type notNil ifTrue:[ - self undoLayoutView:aView. - - layout := aView layout. - - type == #LayoutFrame ifFalse:[ - layout := aView bounds asLayout - ]. - aBlock value:layout. - 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. @@ -1949,9 +1950,12 @@ max := (min + val - max) // 2. max == min ifFalse:[ + |type| + (orientation == #y) ifTrue:[type := #centerVertical] + ifFalse:[type := #centerHorizontal]. delta := max - min. - self transaction:#center selectionDo:[:v| + self transaction:type selectionDo:[:v| orientation == #y ifTrue:[ self shiftLayout:v top:delta bottom:delta ] ifFalse:[ @@ -1979,6 +1983,25 @@ self centerSelection:[:aPoint| aPoint y] orientation:#y ! +extentToFrame:toWhat do:aBlock + "align to frame (Left Right ...) and perform the block on a frameLayout + " + |layout type| + + type := ('extent', toWhat asString) asSymbol. + + self transaction:type selectionDo:[:aView| + layout := self class asLayoutFrameFromView:aView. + + layout notNil ifTrue:[ + self undoLayoutView:aView. + aBlock value:layout. + aView geometryLayout:layout. + self elementChangedSize:aView. + ] + ] +! + spreadSelectionHor "spread multiple selection horizontal " @@ -2008,7 +2031,7 @@ space := (((max - min) - sumWidths) / (count - 1)) rounded asInteger. - self transaction:#spread objects:viewsInOrder do:[:aView| + self transaction:#spreadHorizontal objects:viewsInOrder do:[:aView| |delta| delta := min - aView computeOrigin x. @@ -2049,7 +2072,7 @@ space := (((max - min) - sumHeights) / (count - 1)) rounded asInteger. - self transaction:#spread objects:viewsInOrder do:[:aView| + self transaction:#spreadVertical objects:viewsInOrder do:[:aView| |delta| delta := min - aView computeOrigin y. @@ -2062,6 +2085,12 @@ !UIObjectView methodsFor:'user actions - undo history'! +enableUndoHistory:aState + "enable or disable undo history + " + undoHistory enabled:aState +! + openUndoMenu "open undo menu " @@ -2112,8 +2141,27 @@ !UIObjectView::UndoHistory methodsFor:'accessing'! +enabled + ^ enabled +! + +enabled:aState + enabled := aState +! + historySize ^ history size +! + +lastTypeAsString + "returns type of last undo asString or nil + " + history notEmpty ifTrue:[ + ^ history last typeAsString + ]. + ^ nil + + ! ! !UIObjectView::UndoHistory methodsFor:'initialization'! @@ -2138,7 +2186,7 @@ !UIObjectView::UndoHistory methodsFor:'menu'! openUndoMenu - |list top slv hzp inset selection okButton| + |list tabs top slv hzp inset selection okButton| history isEmpty ifTrue:[ ^ self @@ -2159,10 +2207,16 @@ slv bottomInset:inset. slv := slv scrolledView. + tabs := TabulatorSpecification new. + tabs unit:#cm. + tabs positions:#(0 5). + tabs align:#(#left ##left). + list := history collect:[:aTrans||e| e := MultiColListEntry new. - e colAt:1 put:(aTrans type asString). + e colAt:1 put:(aTrans typeAsString). e colAt:2 put:(aTrans text ? ''). + e tabulatorSpecification:tabs. e ]. @@ -2279,17 +2333,6 @@ !UIObjectView::UndoHistory::Transaction methodsFor:'accessing'! -asString - "returns printable string - " - |string| - - string := type asString. - - text notNil ifTrue:[^ string, ' ', text ] - ifFalse:[^ string ] -! - text "returns text or nil assigned to transition " @@ -2306,6 +2349,32 @@ "change type assigned to transition " type := aType +! + +typeAsString + "returns type as printable string + " + |line name size sep| + + line := type asString. + size := 0. + line do:[:c| (c isUppercase) ifTrue:[size := size+1] ]. + name := String new:(line size + size). + size := 1. + sep := Character space. + + line do:[:c| + (c isUppercase) ifFalse:[ + name at:size put:c + ] ifTrue:[ + name at:size put:sep. + sep := $&. + size := size + 1. + name at:size put:(c asLowercase) + ]. + size := size + 1 + ]. + ^ name ! ! !UIObjectView::UndoHistory::Transaction methodsFor:'add & undo'! diff -r 407d25aca670 -r a5a7054e2b7d UIPainter.st --- a/UIPainter.st Sat Mar 01 13:43:01 1997 +0100 +++ b/UIPainter.st Sat Mar 01 13:44:39 1997 +0100 @@ -419,14 +419,10 @@ putLabels:(resources array:#( 'group radioButtons' 'group enterFields' - '-' - 'delete undo history' ) ) selectors:#( groupRadioButtons groupEnterFields - nil - removeUndoHistory ) receiver:workView. @@ -1024,8 +1020,10 @@ button pressAction:[ receiver notNil ifTrue:[ receiver perform:selector with:argumentToSelector - ] + ]. + receiver enableUndoHistory:false. ]. + button releaseAction:[ receiver enableUndoHistory:true ]. button autoRepeat:true. button menuHolder:self; menuMessage:#editMenu; menuPerformer:self. ] diff -r 407d25aca670 -r a5a7054e2b7d UIPainterTreeView.st --- a/UIPainterTreeView.st Sat Mar 01 13:43:01 1997 +0100 +++ b/UIPainterTreeView.st Sat Mar 01 13:44:39 1997 +0100 @@ -138,9 +138,10 @@ selectionChangedFrom:oldSelection "redraw master " - self disableMaster:oldSelection. - super selectionChangedFrom:oldSelection - + oldSelection ~= selection ifTrue:[ + self disableMaster:oldSelection. + super selectionChangedFrom:oldSelection + ] ! ! !UIPainterTreeView methodsFor:'initialization'! @@ -152,8 +153,7 @@ self multipleSelectOk:true. self action:[:aSelection| self selectionChanged ]. - - + self doubleClickAction:[:aSelection| builderView selectSubComponents]. ! ! !UIPainterTreeView methodsFor:'menu & actions'! @@ -177,7 +177,7 @@ menu addLabels:( resources array:#( '-' - 'treeMisc' + 'misc' ) ) selectors:#( @@ -198,8 +198,8 @@ |menu ispMenu| - menu := PopUpMenu labels:( resources array:#('inspect' 'ordering' 'remove layout' ) ) - selectors:#( #inspect #ordering #removeLayout ) + menu := PopUpMenu labels:( resources array:#('inspect' 'ordering' ) ) + selectors:#( #inspect #ordering ) receiver:self. ispMenu := PopUpMenu labels:( resources array:#('view' 'spec' 'property') ) @@ -258,15 +258,6 @@ (spView changeSequenceOrderFor:view to:index) ifTrue:[ self builderViewChanged:#tree ] -! - -removeLayout - builderView withSelectionHiddenDo:[ - builderView selectionDo:[:aView| - aView geometryLayout:nil. - builderView elementChangedSize:aView. - ] - ]. ! ! !UIPainterTreeView methodsFor:'redrawing'! diff -r 407d25aca670 -r a5a7054e2b7d UIPropertyView.st --- a/UIPropertyView.st Sat Mar 01 13:43:01 1997 +0100 +++ b/UIPropertyView.st Sat Mar 01 13:44:39 1997 +0100 @@ -1416,11 +1416,13 @@ modified ifTrue:[ self modified:false. - self isLayoutSpec ifFalse:[ - builderView updateFromSpec:specBeingEdited - ] ifTrue:[ - layoutType notNil ifTrue:[ - self perform:(('write', layoutType asString) asSymbol) + self isSingleSelection ifTrue:[ + self isLayoutSpec ifFalse:[ + builderView updateFromSpec:specBeingEdited + ] ifTrue:[ + layoutType notNil ifTrue:[ + self perform:(('write', layoutType asString) asSymbol) + ] ] ] ] @@ -1447,8 +1449,10 @@ currentSpecChannel notNil ifTrue:[ currentSpecChannel value:specBeingEdited. - self isLayoutSpec ifTrue:[ - self showAndFetchLayout. + self isSingleSelection ifTrue:[ + self isLayoutSpec ifTrue:[ + self showAndFetchLayout. + ] ] ]. modified := false. @@ -1892,6 +1896,18 @@ "returns true if current menu is a layout specification " ^ propertyList selection == self class titleOfLayoutMenu +! + +isMultiSelection + "returns true in case of a multiple selection + " + ^ builderView numberOfSelections > 1 +! + +isSingleSelection + "returns true in case of a single selection + " + ^ currentView notNil ! ! !UIPropertyView class methodsFor:'documentation'!