diff -r b51a9d465386 -r cd77d04c9a0a VariablePanelController.st --- a/VariablePanelController.st Wed Aug 23 20:01:26 2000 +0200 +++ b/VariablePanelController.st Wed Aug 23 22:54:19 2000 +0200 @@ -127,7 +127,7 @@ buttonPress:button x:bx y:by "button was pressed - setup resizing if a handle is hit " - |handleView hindex| + |handleView hindex isMin isMax layout| ((button == 1) or:[button == #select]) ifFalse:[ self pointerLeave:0. @@ -144,6 +144,7 @@ ) ifFalse:[ ^ self ]. + view grabPointerWithCursor:(view cursor). handleView := view subViews at:movedHandle. @@ -161,11 +162,19 @@ saveCursor notNil ifTrue:[ "there is a snap under the cursor; redraw selected" + view snapMode == #both ifTrue:[ + layout := view snapLayoutAt:movedHandle. + view orientation == #vertical ifTrue:[ + isMax := bx > (layout right - (layout width//3)). + isMin := bx < (layout left + (layout width//3)). + ] ifFalse:[ + isMax := by > (layout bottom - (layout height//3)). + isMin := by < (layout top + (layout height//3)). + ]. + handleView objectAttributeAt:#snapPart put:(isMin ifTrue:[#left] ifFalse:[ isMax ifTrue:[#right] ifFalse:[#middle]]). + ]. view drawSnapAt:movedHandle ] - - - ! buttonRelease:button x:bx y:by @@ -183,14 +192,16 @@ resizeMode notNil ifTrue:[ resizeMode == #active ifTrue:[ - aboveView := view subViews at:movedHandle. - aboveView objectAttributeAt:#vpext put:(aboveView relativeCorner). + (view snapMode == #both) ifFalse:[ + aboveView := view subViews at:movedHandle. + aboveView objectAttributeAt:#vpext put:(aboveView relativeCorner). + ]. self doResize ] ifFalse:[ ( (layout := view snapLayoutAt:movedHandle) notNil and:[layout containsPointX:bx y:by] ) ifTrue:[ - self doSnapPressed + self doSnapPressedX:bx y:by ]. ]. ]. @@ -364,26 +375,58 @@ ! -doSnapPressed +doSnapPressedX:x y:y "perform the snap press " - |layout handle curRCorner prvRCorner isVertical newPos mode| + |layout handle curRCorner prvRCorner isVertical newPos mode isMax isMin doRememberPosition| (mode := view snapMode) isNil ifTrue:[^ self]. layout := view snapLayoutAt:movedHandle. handle := view subViews at:movedHandle. isVertical := view orientation == #vertical. + curRCorner := handle relativeCorner. prvRCorner := handle objectAttributeAt:#vpext. - (view snapAtIndexWillGrow:movedHandle) ifFalse:[ - (prvRCorner isNil or:[mode ~~ #max]) ifTrue:[newPos := 0] "set extent to min" - ] ifTrue:[ - (prvRCorner isNil or:[mode ~~ #min]) ifTrue:[newPos := 99999] "set extent to max" + isMax := isMin := false. + mode == #both ifTrue:[ + isVertical ifTrue:[ + isMax := x > (layout right - (layout width//3)). + isMin := x < (layout left + (layout width//3)). + ] ifFalse:[ + isMax := y > (layout bottom - (layout height//3)). + isMin := y < (layout top + (layout height//3)). + ]. + handle objectAttributeAt:#snapPart put:(isMin ifTrue:[#left] ifFalse:[ isMax ifTrue:[#right] ifFalse:[#middle]]). + doRememberPosition := (isMin or:[isMax]) and:[prvRCorner isNil]. + ] ifFalse:[ + isMax := view snapAtIndexWillGrow:movedHandle. + isMin := isMax not. + isMax ifTrue:[ + isMax := prvRCorner isNil or:[mode ~~ #min] + ] ifFalse:[ + isMin := prvRCorner isNil or:[mode ~~ #max] + ]. + doRememberPosition := true. + ]. + + isMax ifTrue:[ + newPos := 99999 "set extent to max" + ] ifFalse:[ + isMin ifTrue:[ + newPos := 0 "set extent to min" + ] ifFalse:[ + newPos := nil "restore previous extent" + ] ]. newPos isNil ifTrue:[ + prvRCorner isNil ifTrue:[ + "/ nothing to do + ^ self + ]. + "restore previous extent" newPos := isVertical ifTrue:[view height * prvRCorner y] ifFalse:[view width * prvRCorner x]. @@ -399,12 +442,20 @@ ]. newPos := self checkedHandleMovementX:newPos y:newPos. ]. + + mode == #both ifTrue:[ + handle objectAttributeAt:#vpext put:nil. "clear previous corner" + doRememberPosition := false. + ]. + ] ifFalse:[ newPos := self checkedHandleMovementX:newPos y:newPos ]. (newPos - prevPos) abs < 2 ifFalse:[ - handle objectAttributeAt:#vpext put:curRCorner. "save previous corner" + doRememberPosition ifTrue:[ + handle objectAttributeAt:#vpext put:curRCorner. "save previous corner" + ]. prevPos := newPos. self doResize. ] @@ -413,7 +464,7 @@ !VariablePanelController class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libwidg/VariablePanelController.st,v 1.27 2000-08-19 17:12:59 cg Exp $' + ^ '$Header: /cvs/stx/stx/libwidg/VariablePanelController.st,v 1.28 2000-08-23 20:54:12 cg Exp $' ! !