FileSelectionBrowser.st
changeset 592 0383cd70fe79
parent 589 e754379e9e58
child 594 75baf3968708
--- a/FileSelectionBrowser.st	Thu Feb 05 16:13:20 1998 +0100
+++ b/FileSelectionBrowser.st	Thu Feb 05 16:50:03 1998 +0100
@@ -133,11 +133,11 @@
           #'window:' 
            #(#WindowSpec
               #'name:' 'File Selection Browser'
-              #'layout:' #(#LayoutFrame 40 0 584 0 538 0 890 0)
+              #'layout:' #(#LayoutFrame 197 0 172 0 695 0 478 0)
               #'label:' 'File Selection Browser'
               #'min:' #(#Point 10 10)
               #'max:' #(#Point 1152 900)
-              #'bounds:' #(#Rectangle 40 584 539 891)
+              #'bounds:' #(#Rectangle 197 172 696 479)
               #'usePreferredExtent:' false
           )
           #'component:' 
@@ -159,17 +159,23 @@
                                    #(
                                      #(#FileSelectionTreeSpec
                                         #'name:' 'directoryTreeView'
-                                        #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+                                        #'layout:' #(#LayoutFrame 0 0.0 25 0.0 0 1.0 0 1.0)
                                         #'model:' #selectionOfDirectory
                                         #'hasHorizontalScrollBar:' true
                                         #'hasVerticalScrollBar:' true
                                         #'miniScrollerHorizontal:' true
-                                        #'showRoot:' false
+                                        #'showDirectoryIndicatorForRoot:' false
                                         #'showDirectoryIndicator:' true
                                         #'valueChangeSelector:' #readDirectory
                                         #'hierarchicalList:' #rootOfDirectory
                                         #'itemClass:' 'Directory'
                                     )
+                                     #(#InputFieldSpec
+                                        #'name:' 'directoryInputField'
+                                        #'layout:' #(#LayoutFrame 0 0.0 1 0 0 1.0 23 0)
+                                        #'model:' #selectionOfDirectory
+                                        #'immediateAccept:' false
+                                    )
                                   )
                               )
                           )
@@ -207,8 +213,6 @@
               )
           )
       )
-
-    "Modified: / 5.2.1998 / 12:25:27 / cg"
 ! !
 
 !FileSelectionBrowser methodsFor:'accessing'!
@@ -237,6 +241,12 @@
 
 !FileSelectionBrowser methodsFor:'accessing - views'!
 
+directoryInputField
+
+    ^builder componentAt: #directoryInputField
+
+!
+
 directoryTreeView
 
     ^builder componentAt: #directoryTreeView
@@ -285,12 +295,12 @@
 
 readDirectory
 
-    |dir|
-    directoryView directory: 
-        (dir := (self directoryTreeView model list at:
-        self directoryTreeView model selection) contents name);   
-        readDirectory.
-    directory isNil ifTrue: [self class lastSelection: dir]
+    self directoryTreeView selection notNil 
+    ifTrue: 
+    [
+        directoryView directory: self selectionOfDirectory value; readDirectory.
+        directory isNil ifTrue: [self class lastSelection: self selectionOfDirectory value]
+    ]
 ! !
 
 !FileSelectionBrowser methodsFor:'startup / release'!
@@ -316,8 +326,6 @@
                 constructString:(self valueOfFileName value ? '')
     ].
     ^ nil
-
-    "Modified: / 28.1.1998 / 15:21:40 / stefan"
 !
 
 postBuildWith:aBuilder
@@ -329,7 +337,29 @@
     self valueOfFileName value: (
         ((self valueOfFileName value ? 'unknown') readStream upTo: $.), '.',
         (fileFilter copy reverse readStream upTo: $.) reverse)].
-    self directoryTreeView selectPathname: directory ? self class lastSelection.
+    self directoryTreeView selectPathname: directory ? self class lastSelection ? '/'.
+
+    self directoryInputField entryCompletionBlock: 
+    [:f|
+       |completedDirectory|
+       (completedDirectory := Filename 
+            filenameCompletionFor: self directoryInputField contents
+            directory:directory 
+            directoriesOnly:true 
+            filesOnly:false 
+            ifMultiple:
+            [:dir | 
+                self directoryTreeView selection notNil ifTrue: [
+                    self directoryTreeView nodeAt: self directoryTreeView selection expand:true]
+            ]) asFilename exists
+        ifTrue:
+        [
+            self directoryInputField contents: completedDirectory.
+            self directoryTreeView selectPathname: completedDirectory.
+            self readDirectory
+        ]
+        ifFalse: [self directoryInputField flash]
+    ].
 
     ^super postBuildWith:aBuilder
 ! !