*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Wed, 09 Dec 2009 19:08:35 +0100
changeset 9309 f2dd5cfc678f
parent 9308 0222c2bba7d5
child 9310 504ae2e8ad0e
*** empty log message ***
Tools_SearchDialog.st
--- 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 $'
 ! !