improved class name completion routine
authortz
Mon, 26 Jan 1998 15:59:20 +0100
changeset 477 857d4289a2bd
parent 476 05adf036c0ac
child 478 7ba29987cc0d
improved class name completion routine
ResourceSelectionBrowser.st
--- a/ResourceSelectionBrowser.st	Mon Jan 26 13:53:41 1998 +0100
+++ b/ResourceSelectionBrowser.st	Mon Jan 26 15:59:20 1998 +0100
@@ -12,7 +12,8 @@
 
 
 SelectionBrowser subclass:#ResourceSelectionBrowser
-	instanceVariableNames:'resourceMethod resourceClass resourceSuperclass resourceTypes'
+	instanceVariableNames:'resourceMethod resourceClass resourceSuperclass resourceTypes
+		allClasses'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Advanced-Tools'
@@ -87,11 +88,11 @@
           #'window:' 
            #(#WindowSpec
               #'name:' 'Resource Browser'
-              #'layout:' #(#LayoutFrame 195 0 357 0 606 0 656 0)
+              #'layout:' #(#LayoutFrame 315 0 311 0 726 0 610 0)
               #'label:' 'Resource Browser'
               #'min:' #(#Point 400 300)
               #'max:' #(#Point 1152 864)
-              #'bounds:' #(#Rectangle 195 357 607 657)
+              #'bounds:' #(#Rectangle 315 311 727 611)
               #'usePreferredExtent:' false
           )
           #'component:' 
@@ -147,6 +148,7 @@
                                         #'miniScrollerHorizontal:' true
                                         #'dataList:' #listOfResources
                                         #'useIndex:' false
+                                        #'has3Dsepartors:' true
                                         #'doubleClickSelector:' #resourceDoubleClicked
                                         #'valueChangeSelector:' #resourceSelected
                                         #'verticalSpacing:' 1
@@ -154,7 +156,6 @@
                                          #(
                                            #(#DataSetColumnSpec
                                               #'width:' 20
-                                              #'height:' 24
                                               #'printSelector:' #'iconOn:'
                                               #'canSelect:' false
                                           )
@@ -277,6 +278,7 @@
         |clsName|
         resourceTypes isNil ifTrue: [resourceTypes := #(canvas menu image fileImage)].
         clsName := self listOfClassesView list at: anIndex.
+        self valueOfClassName value: clsName.
         self class lastSelection: clsName.
         self listOfResources contents:
             ((Smalltalk at: clsName) 
@@ -304,12 +306,30 @@
 postBuildWith:aBuilder
 
     |classSelection classSelectionBlock|
-
+    allClasses := Smalltalk allClasses asArray.
     classSelection := self class lastSelection ? resourceClass ? #Object.
-    classSelectionBlock := [:cls|
-    self listOfClassesView selectFromListOfNames: 
-            (((Smalltalk at: cls asSymbol ifAbsent: [Object]))
-                withAllSuperclasses reverse collect: [:cls| cls name asString])].
+    classSelectionBlock := 
+    [:clsPattern|                                  
+        |foundClass classes|         
+        ((foundClass := Smalltalk at: clsPattern asSymbol) isNil or:
+        [foundClass name ~= clsPattern])
+        ifTrue:
+        [
+            classes := allClasses select: [:cls| cls name size >= clsPattern size].
+            1 to: clsPattern size do: 
+            [:i|    
+                 classes := classes select: [:cls| (cls name at: i) == (clsPattern at: i)].
+            ].    
+            foundClass := classes at: 1 ifAbsent: [nil] 
+        ].
+        foundClass notNil
+        ifTrue:
+        [
+            self listOfClassesView selectFromListOfNames: (foundClass 
+                withAllSuperclasses reverse collect: [:cls| cls name asString])
+        ].
+        self valueOfClassName value: clsPattern
+    ].
     classSelectionBlock value: classSelection.
     self valueOfClassName value: classSelection.
     self classNameInputField entryCompletionBlock:
@@ -317,9 +337,7 @@
         |what|
         what := Smalltalk classnameCompletion: value withoutSpaces.
         self classNameInputField contents:what first.
-        (what at:2) size ~~ 1 ifTrue:[
-            Display beep
-        ].
+        (what at:2) size ~~ 1 ifTrue:[Display beep].
         classSelectionBlock value: self classNameInputField contents
     ].
     ^super postBuildWith:aBuilder