--- a/SelectionInListModelView.st Tue Jan 23 13:44:26 2001 +0100
+++ b/SelectionInListModelView.st Thu Jan 25 18:35:08 2001 +0100
@@ -811,7 +811,7 @@
step := lnNr > clickLine ifTrue:[1] ifFalse:[-1].
clickLine to:lnNr by:step do:[:i|
- (self canSelectIndex:i) ifTrue:[nsel add:i].
+ ((self isInSelection:i) or:[self canSelectIndex:i forAdd:true]) ifTrue:[nsel add:i].
].
(self selectWithoutScroll:nsel redraw:true) ifFalse:[^ self].
@@ -883,20 +883,21 @@
multipleSelectOk ifTrue:[
sensor ctrlDown ifTrue:[
- (isInSelection or:[self canSelectIndex:clickLine]) ifTrue:[
+ (isInSelection or:[self canSelectIndex:clickLine forAdd:true]) ifTrue:[
self toggleSelection:clickLine.
self selectionChanged
].
^ self
].
- (self canSelectIndex:clickLine) ifFalse:[^ self].
+
+ (self canSelectIndex:clickLine forAdd:sensor shiftDown) ifFalse:[^ self].
(sensor shiftDown and:[(start := self firstInSelection) notNil]) ifTrue:[
step := clickLine < start ifTrue:[-1] ifFalse:[1].
nsel := OrderedCollection new.
start to:clickLine by:step do:[:i|
- (self canSelectIndex:i) ifTrue:[nsel add:i]
+ ((self isInSelection:i) or:[self canSelectIndex:i forAdd:true]) ifTrue:[nsel add:i]
].
(self selectWithoutScroll:nsel redraw:true) ifTrue:[
@@ -905,7 +906,7 @@
^ self
]
] ifFalse:[
- (self canSelectIndex:clickLine) ifFalse:[^ self]
+ (self canSelectIndex:clickLine forAdd:false) ifFalse:[^ self]
].
(isInSelection and:[self canDrag]) ifTrue:[
@@ -1044,7 +1045,7 @@
char := aCharacter asUppercase.
start to:stop by:aStep do:[:anIndex|
- (self canSelectIndex:anIndex) ifTrue:[
+ (self canSelectIndex:anIndex forAdd:false) ifTrue:[
lbl := self characterSearchItemStringAt:anIndex.
lbl notNil ifTrue:[
cmp := lbl string at:1 ifAbsent:nil.
@@ -1059,8 +1060,6 @@
]
].
^ 0
-
-
!
keyPress:aKey x:x y:y
@@ -1068,7 +1067,7 @@
"
<resource: #keyboard( #Return #CursorUp #CursorDown )>
- |sensor n size lineNr|
+ |sensor n size lineNr delta|
enabled ifFalse:[
^ super keyPress:aKey x:x y:y
@@ -1105,21 +1104,24 @@
lineNr == 0 ifTrue:[lineNr := size + 1].
(n := lineNr - n) <= 0 ifTrue:[n := size + n].
lineNr > size ifTrue:[lineNr := size].
-
- [self canSelectIndex:n] whileFalse:[
- (n := n - 1) == 0 ifTrue:[n := size].
- n == lineNr ifTrue:[^ self]
- ].
+ delta := -1.
] ifFalse:[
(n := lineNr + n) > size ifTrue:[n := n - size].
lineNr == 0 ifTrue:[lineNr := 1].
+ delta := 1.
+ ].
- [self canSelectIndex:n] whileFalse:[
- (n := n + 1) > size ifTrue:[n := 1].
- n == lineNr ifTrue:[^ self]
- ].
+ "/ TODO: care for shift-Down (add-to-selection)
+ [
+ self canSelectIndex:n forAdd:false
+ ] whileFalse:[
+ n := n + delta.
+ n > size ifTrue:[n := 1].
+ n == 0 ifTrue:[n := size].
+ n == lineNr ifTrue:[^ self]
].
+
self selection:n
!
@@ -1522,10 +1524,21 @@
canSelectIndex:anIndex
"return true, if the object identified by its index is selectable
"
- |item|
+ ^ self canSelectIndex:anIndex forAdd:false
+!
+
+canSelectIndex:anIndex forAdd:isForAdd
+ "return true, if the object identified by its index is selectable
+ "
+ |item isOk|
selectConditionBlock notNil ifTrue:[
- (selectConditionBlock value:anIndex) ifFalse:[
+ selectConditionBlock numArgs == 2 ifTrue:[
+ isOk := selectConditionBlock value:anIndex value:isForAdd.
+ ] ifFalse:[
+ isOk := selectConditionBlock value:anIndex.
+ ].
+ isOk ifFalse:[
^ false
]
].
@@ -1659,5 +1672,5 @@
!SelectionInListModelView class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg2/SelectionInListModelView.st,v 1.43 2001-01-10 13:20:01 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/SelectionInListModelView.st,v 1.44 2001-01-25 17:35:08 martin Exp $'
! !