--- a/Tools_SearchDialog.st Wed Dec 09 19:07:08 2009 +0100
+++ b/Tools_SearchDialog.st Wed Dec 09 19:08:35 2009 +0100
@@ -20,7 +20,8 @@
currentPanel searchAreas caseHolder matchHolder isMethodHolder
codeField selectorHolder defaultOpenHow withTextEntry allowFind
allowBuffer allowBrowser isSelector searchClassProtocolHolder
- searchInstanceProtocolHolder selectorOrCode'
+ searchInstanceProtocolHolder selectorOrCode listHolder
+ matchProcess'
classVariableNames:'LastCodeSearched LastCodeSearchWasMethod LastGlobalSearched
LastStringSearched LastSearchWasMatch LastSearchWasCaseSensitive
LastStringSearchArea LastCodeSearchArea'
@@ -244,7 +245,7 @@
!
setupToAskForMethodSearchTitle:title forBrowser:brwsrArg isSelector:isSelectorArg searchArea:whereDefault withCaseIgnore:withCaseIgnore withMatch:withMatch withMethodList:withMethodList allowFind:allowFindArg allowBuffer:allowBufferArg allowBrowser:allowBrowserArg withTextEntry:withTextEntryArg
- |where ns methodNameSpaces methodPackages hPanel leftVerticalPanel rightVerticalPanel|
+ |where ns methodNameSpaces methodPackages hPanel leftVerticalPanel rightVerticalPanel l|
allowFind := allowFindArg.
allowBuffer := allowBufferArg.
@@ -440,7 +441,9 @@
"/ panel has its own idea of indenting
self addVerticalSpace.
- self addHorizontalLine.
+ "/ self addHorizontalLine.
+ l := self addFilteredListOfMatchingSelectors.
+ self stickAtBottomWithVariableHeight:l.
self addButtons.
self label:(resources string:'Search').
@@ -758,6 +761,24 @@
currentPanel add:b.
!
+addFilteredListOfMatchingSelectors
+ |l|
+
+ listHolder := List new.
+
+ l := HVScrollableView for:SelectionInListView.
+ l listHolder:listHolder.
+ self addComponent:l.
+ l doubleClickAction:[
+ selectorHolder value:(l selectionValue).
+ matchHolder value:false.
+ caseHolder value:false.
+ self doAccept.
+ self okPressed.
+ ].
+ ^ l.
+!
+
addInputFieldForSelectorOrNameOrString
|sel inputField lastSearchPatterns|
@@ -784,26 +805,35 @@
selectorHolder := sel asValue.
inputField := self addComboBoxOn:selectorHolder tabable:true.
- inputField list:lastSearchPatterns .
+ inputField list:lastSearchPatterns.
inputField selectAllInitially.
+ inputField immediateAccept:true.
inputField
entryCompletionBlock:[ :contents |
|s what|
s := contents withoutSpaces.
self topView
- withWaitCursorDo:[
+ withWaitCursorDo:[
+ |best matching|
+
isSelector == #globalName ifFalse:[
what := Smalltalk selectorCompletion:s.
] ifTrue:[
what := Smalltalk globalNameCompletion:s.
].
- inputField contents:what first.
- (what at:2) size ~~ 1 ifTrue:[
+ best := what first.
+ matching := what second.
+ inputField contents:best.
+ "/ listHolder contents:matching.
+ matching size ~~ 1 ifTrue:[
browser window beep.
].
].
].
+
+ selectorHolder onChangeEvaluate:[ self updateListOfMatchingSelectorsFor:inputField contents ].
+ sel notEmptyOrNil ifTrue:[ selectorHolder changed ].
!
addTextEntryFieldForCode
@@ -1052,6 +1082,35 @@
isMethodHolder
isMethodHolder isNil ifTrue:[isMethodHolder := (LastCodeSearchWasMethod ? false) asValue].
^ isMethodHolder
+!
+
+updateListOfMatchingSelectorsFor:s
+ |p|
+
+ (p := matchProcess) notNil ifTrue:[
+ p terminate.
+ ].
+
+ matchProcess :=
+ [
+ |what matching|
+
+ [
+ isSelector == #globalName ifFalse:[
+ what := Smalltalk selectorCompletion:s.
+ ] ifTrue:[
+ what := Smalltalk globalNameCompletion:s.
+ ].
+ "/ best := what first.
+ matching := what second.
+ self sensor pushAction:[ listHolder contents:matching ].
+ ] ensure:[
+ matchProcess := nil.
+ ].
+ ] fork.
+
+
+ WindowSensor
! !
!SearchDialog methodsFor:'setup-buttons'!
@@ -1136,9 +1195,9 @@
!SearchDialog class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/Tools_SearchDialog.st,v 1.40 2009-11-18 18:02:01 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/Tools_SearchDialog.st,v 1.41 2009-12-09 18:08:35 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libtool/Tools_SearchDialog.st,v 1.40 2009-11-18 18:02:01 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/Tools_SearchDialog.st,v 1.41 2009-12-09 18:08:35 cg Exp $'
! !