--- 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 $'
! !