--- a/FileSelectionBox.st Thu Jan 18 01:11:18 1996 +0100
+++ b/FileSelectionBox.st Thu Jan 18 22:28:46 1996 +0100
@@ -37,21 +37,36 @@
"
this class implements file selection boxes. Instances show a list of
files, and perform an action block with the selected pathname as
- argument when ok is clicked.
+ argument when ok is clicked. It is also possible, to open the box
+ without action and ask it afterward if it has been left with ok
+ (i.e. the ST-80 way, asking 'aBox accepted ifTrue:[...]')
There is an optional PatternField, which shows itself when a pattern
is defined (i.e. if there is no pattern, it is hidden).
- If there is a pattern, only files matching the pattern will be shown in
- the list (and directories).
+ If there is a pattern, only files matching the pattern are shown in
+ the list. Directories are not affected by the patternField.
In addition, there is an optional matchBlock (actually this is defined
- in the FileSelectionList). Only filenames for which this matchblock
- returns true will be presented.
+ in the FileSelectionList). Only names for which this matchblock
+ returns true will be presented. The matchBlock affects both regular files
+ and names of directories. The argument passed to the matchBlock is the full
+ pathname.
+
+ All of the actual work is done in the fileList; see the documentation
+ of FileSelectionList for more options
+ (you can access a boxes fileList via 'aBox>>listView' and get access to all
+ of those fancy settings)
+ For example, by accessing the list, it is possible to hide all directories
+ ('aBox listView ignoreDirectories:true'), to hide the parentDirectory alone
+ ('aBox listView ignoreParentDirectory') and to turn off the marking
+ of subdirectories ('aBox listView markSubdirectories:false').
"
!
examples
"
+ simple standard queries
+
very simple:
|name|
@@ -73,16 +88,18 @@
Transcript showCr:name
- more detailed setup:
- FileSelectionBox new openModal
+ more detailed setup
setting title:
|box|
box := FileSelectionBox new.
box title:'Which file ?'.
- box open
+ box open.
+ box accepted ifTrue:[
+ Transcript showCr:'you selected: ' , box
+ ]
setting a matchpattern:
@@ -110,6 +127,57 @@
box matchBlock:[:name | OperatingSystem isDirectory:name].
box open
+ dont show the parent directory:
+
+ |box|
+ box := FileSelectionBox new.
+ box title:'Which directory ?'.
+ box listView ignoreParentDirectory:true.
+ box open
+
+ dont show any directory:
+
+ |box|
+ box := FileSelectionBox new.
+ box title:'Which file ?'.
+ box listView ignoreDirectories:true.
+ box open
+
+ dont show any directory or hidden file:
+ (notice the basename extraction - we are not interrested in the full pathName)
+
+ |box|
+ box := FileSelectionBox new.
+ box title:'Which file ?'.
+ box listView ignoreDirectories:true.
+ box matchBlock:[:name | (name asFilename baseName startsWith:'.') not].
+ box open
+
+ dont allow direct filename entry:
+ (i.e. avoid the user choosing files from other directories)
+
+ |box|
+ box := FileSelectionBox new.
+ box title:'Which one ?'.
+ box enterField beInvisible.
+ box open.
+ box accepted ifTrue:[
+ Transcript showCr:'path is ' , box pathName
+ ].
+
+ combined with above directory ignoring,
+ this limits selection of files from a single directory:
+
+ |box|
+ box := FileSelectionBox new.
+ box title:'Which file ?'.
+ box enterField beInvisible.
+ box listView ignoreDirectories:true.
+ box open.
+ box accepted ifTrue:[
+ Transcript showCr:'path is ' , box pathName
+ ].
+
finally, an action:
|box|
@@ -119,6 +187,44 @@
box matchBlock:[:name | OperatingSystem isDirectory:name].
box action:[:name | Transcript showCr:name].
box open
+
+ concrete examples:
+
+ only show files beginning with lowercase characters
+ and ending in '.c':
+
+ |box|
+ box := FileSelectionBox new.
+ box title:'Which directory ?'.
+ box matchBlock:[:name |
+ box pathName asFilename isDirectory
+ or:[name first isLowercase
+ and:[name endsWith:'.c']]
+ ].
+ box open.
+ box accepted ifTrue:[
+ Transcript showCr:'full path: ' , box pathName.
+ Transcript showCr:'files name: ' , box fileName.
+ Transcript showCr:'directory : ' , box directory.
+ ]
+
+ somewhat wierd example:
+ only show files, if the directory we are in begins with 'lib':
+
+ |box|
+ box := FileSelectionBox new.
+ box title:'Which directory ?'.
+ box pattern:'l*'.
+ box matchBlock:[:name |
+ box directory asString beginsWith:'lib'
+ ].
+ box open
+ box accepted ifTrue:[
+ Transcript showCr:'full path: ' , box pathName.
+ Transcript showCr:'files name: ' , box fileName.
+ Transcript showCr:'directory : ' , box directory.
+ ]
+
"
! !
@@ -198,6 +304,24 @@
!FileSelectionBox methodsFor:'accessing'!
+pathName
+ "same as contents - return the full pathname of the selected file,
+ or the pathname of the directory if nothing has been entered"
+
+ ^ self contents
+!
+
+fileName
+ "if some filename has been entered, return it (without the directory path)
+ otherwise, return nil"
+
+ |string|
+
+ string := super contents.
+ string isNil ifTrue:[^ nil].
+ ^ self pathName
+!
+
contents
"return the current entered value (i.e. the enterFields string).
redefined to return the full pathname."
@@ -215,6 +339,12 @@
^ (selectionList directory pathName asFilename construct:string) asString
!
+directory
+ "return the directory which is currently shown"
+
+ ^ selectionList directory
+!
+
directory:directoryName
"change the directory shown in the list."
@@ -453,5 +583,5 @@
!FileSelectionBox class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg/FileSelectionBox.st,v 1.26 1995-12-07 22:09:55 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg/FileSelectionBox.st,v 1.27 1996-01-18 21:28:46 cg Exp $'
! !