"{ Package: 'stx:libtool' }"
SimpleDialog subclass:#FileDialog
instanceVariableNames:'aspects treeBrowser enableBack enableDirectoryUp enableForward
enableHome directory pattern filterHolder initialText
doubleClickAction cancelLabelHolder okLabelHolder startFilename
result filterField filenameField viewFiles filenameLabelHolder
asLoadDialog newDirectoryVisibilityHolder multipleSelect'
classVariableNames:'LastFileSelectionDirectory'
poolDictionaries:''
category:'Interface-Tools-File'
!
!FileDialog class methodsFor:'documentation'!
documentation
"
documentation to be added.
[author:]
Martin Walser (martin@vercingetorix)
[instance variables:]
[class variables:]
[see also:]
"
!
examples
"
Starting the application:
[exBegin]
FileDialog open
[exEnd]
more examples to be added:
[exBegin]
... add code fragment for
... executable example here ...
[exEnd]
"
!
history
"Created: / 19.9.2002 / 13:05:28 / martin"
! !
!FileDialog class methodsFor:'instance creation'!
requestDirectoryName:title default:aFileName ifFail:failBlock
"same as requestFileName, but only show directories"
^ self requestDirectoryName:title
default:aFileName
ok:nil
abort:nil
version:nil
pattern:nil
fromDirectory:nil
ifFail:failBlock
whenBoxCreatedEvaluate:nil
asLoadDialog:nil.
"
FileDialog
requestDirectoryName:'which directory ?'
default:'/etc'
ifFail:'none'
"
!
requestDirectoryName:titleString default:aFileName ok:okText abort:abortText version:versionSymbol pattern:pattern fromDirectory:aDirectoryPath ifFail:failBlock whenBoxCreatedEvaluate:boxCreatedCallback asLoadDialog:aBoolean
"same as requestFileName, but only show directories"
|enteredFileName instance enteredFileNameString|
instance := self startApplicationFor:titleString
default:aFileName
ok:okText
abort:abortText
ifFail:failBlock
pattern:pattern
fromDirectory:aDirectoryPath
whenBoxCreatedEvaluate:boxCreatedCallback
asLoadDialog:aBoolean
forDirectory:true
multipleSelect:false.
enteredFileNameString := instance result.
enteredFileNameString isNil ifTrue:[
^ failBlock value
].
enteredFileName := enteredFileNameString asFilename.
enteredFileNameString := enteredFileName asString.
(enteredFileName notNil
and:[enteredFileNameString notEmpty]) ifTrue:[
versionSymbol isNil ifTrue:[ ^ enteredFileNameString].
versionSymbol == #mustBeNew ifTrue:[
"/ file may not exist
enteredFileName exists ifTrue:[^ ''].
].
versionSymbol == #new ifTrue:[
"/ file may not exist
enteredFileName exists ifTrue:[
(Dialog confirm:(self classResources string:'''%1'' exists.\\Continue anyway ?' with:enteredFileNameString) withCRs)
ifFalse:[^ ''].
].
].
versionSymbol == #mustBeOld ifTrue:[
enteredFileName exists ifFalse:[^ ''].
].
versionSymbol == #old ifTrue:[
"/ file may not exist
enteredFileName exists ifFalse:[
(self confirm:(self classResources string:'''%1'' does not exist yet.\\Continue anyway ?' with:enteredFileNameString) withCRs)
ifFalse:[^ ''].
].
].
FileSelectionBox lastFileSelectionDirectory:(enteredFileNameString).
].
^ enteredFileNameString
"
FileDialog
requestDirectoryName:'which directory ?'
default:'/etc'
ifFail:nil
"
"
FileDialog
requestDirectoryName:'which directory ?'
default:'/etc'
ok:nil
abort:nil
version:nil
pattern:nil
fromDirectory:nil
ifFail:nil
whenBoxCreatedEvaluate:nil
asLoadDialog:true
"
!
requestFileName:titleString default:defaultName ok:okText abort:abortText pattern:pattern fromDirectory:aDirectoryPathOrNil whenBoxCreatedEvaluate:boxCreatedCallback
^ self requestFileName:titleString
default:defaultName
ok:okText
abort:abortText
version:nil
ifFail:nil
pattern:pattern
fromDirectory:aDirectoryPathOrNil
whenBoxCreatedEvaluate:boxCreatedCallback
!
requestFileName:titleString default:defaultName ok:okText abort:abortText version:versionSymbol ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath whenBoxCreatedEvaluate:boxCreatedCallback
"launch a Dialog, which allows user to enter a filename.
The files presented initially are those in aDirectoryPathOrNil, or the
last fileBox directory (default: current directory) (if a nil path is given).
The box will show okText in its okButton, abortText in the abortButton.
The matchPattern is set to pattern initially.
Return the string, or nil if cancel was pressed
The version argument allows validation of the files existance;
it may be any of:
#mustBeNew - fail (return empty string) if the file exists
#new - confirm if the file exists
#mustBeOld - fail if the file does not exist
#old - confirm if the file does not exist
#any (other) - no validation
"
^ self requestFileName:titleString
default:defaultName
ok:okText
abort:abortText
version:versionSymbol
ifFail:failBlock
pattern:pattern
fromDirectory:aDirectoryPath
whenBoxCreatedEvaluate:boxCreatedCallback
asLoadDialog:nil
!
requestFileName:titleString default:defaultName ok:okText abort:abortText version:versionSymbol ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath whenBoxCreatedEvaluate:boxCreatedCallback asLoadDialog:aBoolean
"launch a Dialog, which allows user to enter a filename.
The files presented initially are those in aDirectoryPathOrNil, or the
last fileBox directory (default: current directory) (if a nil path is given).
The box will show okText in its okButton, abortText in the abortButton.
The matchPattern is set to pattern initially.
Return the string, or nil if cancel was pressed
The version argument allows validation of the files existance;
it may be any of:
#mustBeNew - fail (return empty string) if the file exists
#new - confirm if the file exists
#mustBeOld - fail if the file does not exist
#old - confirm if the file does not exist
#any (other) - no validation
"
| instance enteredFileName enteredFileNameString|
instance := self startApplicationFor:titleString
default:defaultName
ok:okText
abort:abortText
ifFail:failBlock
pattern:pattern
fromDirectory:aDirectoryPath
whenBoxCreatedEvaluate:boxCreatedCallback
asLoadDialog:aBoolean
forDirectory:false
multipleSelect:false.
enteredFileNameString := instance result.
(enteredFileNameString isNil or:[enteredFileNameString isEmpty]) ifTrue:[
^ failBlock value
].
enteredFileName := enteredFileNameString asFilename.
enteredFileNameString := enteredFileName asString.
(enteredFileName notNil
and:[enteredFileNameString notEmpty]) ifTrue:[
versionSymbol isNil ifTrue:[ ^ enteredFileNameString].
versionSymbol == #mustBeNew ifTrue:[
"/ file may not exist
enteredFileName exists ifTrue:[^ ''].
].
versionSymbol == #new ifTrue:[
"/ file may not exist
enteredFileName exists ifTrue:[
(Dialog confirm:(self classResources string:'''%1'' exists.\\Continue anyway ?' with:enteredFileNameString) withCRs)
ifFalse:[^ ''].
].
].
versionSymbol == #mustBeOld ifTrue:[
enteredFileName exists ifFalse:[^ ''].
].
versionSymbol == #old ifTrue:[
"/ file may not exist
enteredFileName exists ifFalse:[
(self confirm:(self classResources string:'''%1'' does not exist yet.\\Continue anyway ?' with:enteredFileNameString) withCRs)
ifFalse:[^ ''].
].
].
FileSelectionBox lastFileSelectionDirectory:(enteredFileName directoryName).
].
^ enteredFileNameString
"
FileDialog
requestFileName:'enter a fileName:'
default:''
ok:nil
abort:nil
version:nil
ifFail:['none']
pattern:'*.conf'
fromDirectory:'/etc'
whenBoxCreatedEvaluate:nil
asLoadDialog:true
"
!
requestFileName:titleString default:defaultName version:versionSymbol ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPathOrNil whenBoxCreatedEvaluate:boxCreatedCallback
^ self requestFileName:titleString
default:defaultName
ok:nil
abort:nil
version:versionSymbol
ifFail:failBlock
pattern:pattern
fromDirectory:aDirectoryPathOrNil
whenBoxCreatedEvaluate:boxCreatedCallback
"
FileDialog
requestFileName:'enter a fileName:'
default:''
version:nil
ifFail:['none']
pattern:'*.conf'
fromDirectory:'/etc'
whenBoxCreatedEvaluate:nil.
Dialog
requestFileName:'enter a fileName:'
default:''
version:nil
ifFail:['none']
pattern:'*.conf'
fromDirectory:'/etc'
whenBoxCreatedEvaluate:nil
"
"
FileDialog
requestFileName:'enter a fileName:'
default:''
version:#old
ifFail:['none']
pattern:'*.conf'
fromDirectory:'/etc'
whenBoxCreatedEvaluate:nil
"
"
FileDialog
requestFileName:'enter a fileName:'
default:''
version:#mustBeNew
ifFail:['none']
pattern:'*.conf'
fromDirectory:'/etc'
whenBoxCreatedEvaluate:nil
"
!
requestFileNames:titleString default:defaultName ok:okText abort:abortText ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath whenBoxCreatedEvaluate:boxCreatedCallback
"launch a Dialog, which allows user to enter a filename.
The files presented initially are those in aDirectoryPathOrNil, or the
last fileBox directory (default: current directory) (if a nil path is given).
The box will show okText in its okButton, abortText in the abortButton.
The matchPattern is set to pattern initially.
Return all selected Filenames as filenames in a collection, or nil if cancel was pressed
"
^ self requestFileNames:titleString
default:defaultName
ok:okText
abort:abortText
ifFail:failBlock
pattern:pattern
fromDirectory:aDirectoryPath
whenBoxCreatedEvaluate:boxCreatedCallback
asLoadDialog:nil.
"
FileDialog
requestFileNames:'enter a fileName:'
default:''
ok:nil
abort:nil
ifFail:['none']
pattern:'*.conf'
fromDirectory:'/etc'
whenBoxCreatedEvaluate:nil.
"
!
requestFileNames:titleString default:defaultName ok:okText abort:abortText ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath whenBoxCreatedEvaluate:boxCreatedCallback asLoadDialog:asLoadDialog
"launch a Dialog, which allows user to enter a filename.
The files presented initially are those in aDirectoryPathOrNil, or the
last fileBox directory (default: current directory) (if a nil path is given).
The box will show okText in its okButton, abortText in the abortButton.
The matchPattern is set to pattern initially.
Return all selected Filenames as filenames in a collection, or nil if cancel was pressed
"
| instance enteredFileNames lastDirectory|
instance := self startApplicationFor:titleString
default:defaultName
ok:okText
abort:abortText
ifFail:failBlock
pattern:pattern
fromDirectory:aDirectoryPath
whenBoxCreatedEvaluate:boxCreatedCallback
asLoadDialog:asLoadDialog
forDirectory:false
multipleSelect:true.
enteredFileNames := instance currentSelectedFiles.
(enteredFileNames isEmpty or:[instance result isNil]) ifTrue:[
^ failBlock value
].
lastDirectory := enteredFileNames first.
lastDirectory := lastDirectory isFilename ifTrue:[lastDirectory directory] ifFalse:[lastDirectory].
FileSelectionBox lastFileSelectionDirectory:(lastDirectory directoryName).
^ enteredFileNames
"
FileDialog
requestFileNames:'enter a fileName:'
default:''
ok:nil
abort:nil
ifFail:['none']
pattern:'*.conf'
fromDirectory:'/etc'
whenBoxCreatedEvaluate:nil
asLoadDialog:true.
"
!
startApplicationFor:titleString default:aFileName ok:okText abort:abortText ifFail:failBlock pattern:pattern fromDirectory:aDirectoryPath whenBoxCreatedEvaluate:boxCreatedCallback asLoadDialog:asLoadDialog forDirectory:forDirectory multipleSelect:multipleSelect
"launch a Dialog, which allows user to enter a filename.
The files presented initially are those in aDirectoryPathOrNil, or the
last fileBox directory (default: current directory) (if a nil path is given).
The box will show okText in its okButton, abortText in the abortButton.
The matchPattern is set to pattern initially.
Return the string, or nil if cancel was pressed
The version argument allows validation of the files existance;
it may be any of:
#mustBeNew - fail (return empty string) if the file exists
#new - confirm if the file exists
#mustBeOld - fail if the file does not exist
#old - confirm if the file does not exist
#any (other) - no validation
"
| defaultDir defaultNm instance defaultFile|
defaultNm := aFileName.
defaultDir := aDirectoryPath.
defaultDir isNil ifTrue:[
(forDirectory not and:[defaultNm notNil]) ifTrue:[
defaultDir := aFileName asFilename directory.
] ifFalse:[
defaultDir := FileSelectionBox lastFileSelectionDirectory.
defaultDir isNil ifTrue:[
defaultDir := Filename currentDirectory.
].
]
].
defaultDir := defaultDir asFilename asAbsoluteFilename.
[defaultDir exists not] whileTrue:[
defaultDir := defaultDir directory.
].
forDirectory not ifTrue:[
(aFileName notNil and:[aFileName asFilename withoutSuffix baseName ~= '*']) ifTrue:[
defaultFile := defaultDir construct:aFileName.
] ifFalse:[
defaultFile := defaultDir.
].
].
instance := self new.
defaultDir notNil ifTrue:[instance directory:(defaultDir asFilename)].
instance multipleSelect:multipleSelect ? false.
instance startFilename:defaultFile.
instance pattern:((pattern isNil or:[pattern isEmpty]) ifTrue:['*'] ifFalse:[pattern]).
instance initialText:titleString.
instance okLabelHolder value:okText.
instance cancelLabelHolder value:abortText.
instance asLoadDialog:asLoadDialog ? false.
instance viewFiles:(forDirectory isNil ifTrue:[true] ifFalse:[forDirectory not]).
self setDoubleClickActionFor:instance.
instance allButOpenInterface:#windowSpec.
boxCreatedCallback notNil ifTrue:[boxCreatedCallback value:instance].
instance openWindowModal.
^ instance
! !
!FileDialog class methodsFor:'accessing'!
lastFileSelectionDirectory
"return the name of the directory used in the previous
fileSelection dialog. This will be used as default for the next dialog,
if no explicit path is specified (see requestFileName:* methods)"
|f|
LastFileSelectionDirectory notNil ifTrue:[
((f := LastFileSelectionDirectory asFilename) exists
and:[f isDirectory]) ifFalse:[
LastFileSelectionDirectory := nil.
]
].
^ LastFileSelectionDirectory
!
lastFileSelectionDirectory:aDirectoryString
"set the name of the directory used in the previous
fileSelection dialog. This will be used as default for the next dialog,
if no explicit path is specified (see requestFileName:* methods)"
LastFileSelectionDirectory := aDirectoryString
!
setDoubleClickActionFor:instance
instance doubleClickAction:[:anIndex|
| item |
item := instance treeBrowser fileList at:anIndex ifAbsent:nil.
item notNil ifTrue:[
((instance viewFiles and:[item isDirectory not]) or:[instance viewFiles not]) ifTrue:[
instance doAccept.
]
]
].
! !
!FileDialog class methodsFor:'interface specs'!
windowSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
"Do not manually edit this!! If it is corrupted,
the UIPainter may not be able to read the specification."
"
UIPainter new openOnClass:FileDialog andSelector:#windowSpec
FileDialog new openInterface:#windowSpec
FileDialog open
"
<resource: #canvas>
^
#(#FullSpec
#name: #windowSpec
#window:
#(#WindowSpec
#label: 'FileDialog'
#name: 'FileDialog'
#min: #(#Point 10 10)
#max: #(#Point 1024 768)
#bounds: #(#Rectangle 25 188 425 588)
)
#component:
#(#SpecCollection
#collection: #(
#(#MenuPanelSpec
#name: 'ToolBar1'
#layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 30 0)
#tabable: true
#menu: #toolBarMenu
#textDefault: true
)
#(#SubCanvasSpec
#name: 'DirectoryTreeBrowser'
#layout: #(#LayoutFrame 0 0.0 30 0 0 1.0 -107 1)
#tabable: true
#hasHorizontalScrollBar: false
#hasVerticalScrollBar: false
#majorKey: #DirectoryTreeBrowser
#createNewApplication: true
#createNewBuilder: true
#postBuildCallback: #postBuildTreeBrowser:
)
#(#LabelSpec
#label: 'Filename:'
#name: 'FilenameLabel'
#layout: #(#LayoutFrame 3 0 -97 1 73 0 -77 1)
#translateLabel: true
#labelChannel: #filenameLabelHolder
#adjust: #left
)
#(#FilenameInputFieldSpec
#name: 'FilenameEntryField'
#layout: #(#LayoutFrame 70 0 -96 1 -10 1 -76 1)
#tabable: true
#model: #filenameHolder
#immediateAccept: false
#acceptOnPointerLeave: false
#postBuildCallback: #postBuildFileNameField:
)
#(#LabelSpec
#label: 'Filter:'
#name: 'FilterLabel'
#layout: #(#LayoutFrame 3 0 -70 1 67 0 -50 1)
#translateLabel: true
#adjust: #left
)
#(#InputFieldSpec
#name: 'FilterEntryField'
#layout: #(#LayoutFrame 70 0 -69 1 -10 1 -49 1)
#model: #filterHolder
#immediateAccept: false
#acceptOnReturn: true
#acceptOnTab: true
#acceptOnLostFocus: true
#acceptOnPointerLeave: false
#postBuildCallback: #postBuildFilterField:
)
#(#HorizontalPanelViewSpec
#name: 'ButtonPanel'
#layout: #(#LayoutFrame 0 0.0 -40 1 0 1 0 1)
#horizontalLayout: #spreadSpace
#verticalLayout: #center
#horizontalSpace: 3
#verticalSpace: 3
#reverseOrderIfOKAtLeft: true
#component:
#(#SpecCollection
#collection: #(
#(#ActionButtonSpec
#label: 'Cancel'
#name: 'cancelButton'
#translateLabel: true
#labelChannel: #cancelLabelHolder
#tabable: true
#model: #doCancel
#extent: #(#Point 150 21)
)
#(#ActionButtonSpec
#label: 'OK'
#name: 'okButton'
#translateLabel: true
#labelChannel: #okLabelHolder
#tabable: true
#model: #doAccept
#isDefault: true
#extent: #(#Point 150 22)
)
)
)
)
)
)
)
! !
!FileDialog class methodsFor:'menu specs'!
toolBarMenu
"This resource specification was automatically generated
by the MenuEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the MenuEditor may not be able to read the specification."
"
MenuEditor new openOnClass:FileDialog andSelector:#toolBarMenu
(Menu new fromLiteralArrayEncoding:(FileDialog toolBarMenu)) startUp
"
<resource: #menu>
^
#(#Menu
#(
#(#MenuItem
#label: 'DirectoryUp'
#translateLabel: true
#isButton: true
#value: #doGoDirectoryUp
#activeHelpKey: #directoryUp
#enabled: #enableDirectoryUp
#labelImage: #(#ResourceRetriever #AbstractFileBrowser #upArrow20x20Icon)
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Back'
#translateLabel: true
#isButton: true
#value: #doBack
#activeHelpKey: #directoryBack
#enabled: #enableBack
#labelImage: #(#ResourceRetriever #AbstractFileBrowser #leftArrow20x20Icon)
#submenuChannel: #menuDirHistoryBack
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Forward'
#translateLabel: true
#isButton: true
#value: #doForward
#activeHelpKey: #directoryForward
#enabled: #enableForward
#labelImage: #(#ResourceRetriever #AbstractFileBrowser #rightArrow20x20Icon)
#submenuChannel: #menuDirHistoryForward
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Home'
#translateLabel: true
#isButton: true
#value: #doGotoHomeDirectory
#activeHelpKey: #fileHome
#enabled: #enableHome
#labelImage: #(#ResourceRetriever #AbstractFileBrowser #goHomeIcon)
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'New Directory'
#isButton: true
#isVisible: #newDirectoryVisibilityHolder
#value: #newDirectory
#labelImage: #(#ResourceRetriever #AbstractFileBrowser #newDirectory20x20Icon)
)
)
nil
nil
)
! !
!FileDialog methodsFor:'accessing'!
asLoadDialog
^ asLoadDialog
!
asLoadDialog:aBoolean
asLoadDialog := aBoolean
!
currentSelectedFiles
| selectedFiles|
selectedFiles := treeBrowser currentFileNameHolder value.
^ selectedFiles select:[:aFile| aFile isDirectory not].
!
directory
"return the value of the instance variable 'directory' (automatically generated)"
^ directory
!
directory:something
"set the value of the instance variable 'directory' (automatically generated)"
directory := something.
!
doubleClickAction
"return the value of the instance variable 'doubleClickAction' (automatically generated)"
^ doubleClickAction
!
doubleClickAction:something
"set the value of the instance variable 'doubleClickAction' (automatically generated)"
doubleClickAction := something.
!
initialText
"return the value of the instance variable 'initialText' (automatically generated)"
^ initialText
!
initialText:something
"set the value of the instance variable 'initialText' (automatically generated)"
initialText := something.
!
multipleSelect
"return the value of the instance variable 'pattern' (automatically generated)"
multipleSelect isNil ifTrue:[
multipleSelect := true.
].
^ multipleSelect
!
multipleSelect:aBoolean
"set the value of the instance variable 'multipleSelect' (automatically generated)"
multipleSelect := aBoolean
!
newDirectoryVisibilityHolder
"return the value of the instance variable 'newDirectoryVisibilityHolder' (automatically generated)"
newDirectoryVisibilityHolder isNil ifTrue:[
newDirectoryVisibilityHolder := true asValue.
].
^ newDirectoryVisibilityHolder
!
pattern
"return the value of the instance variable 'pattern' (automatically generated)"
^ pattern
!
pattern:something
"set the value of the instance variable 'pattern' (automatically generated)"
pattern := something.
!
result
"return the value of the instance variable 'result' (automatically generated)"
^ result
!
result:something
"set the value of the instance variable 'result' (automatically generated)"
result := something.
!
selectedDirectories
| selectedFiles|
selectedFiles := treeBrowser currentFileNameHolder value.
^ selectedFiles select:[:aFile| aFile isDirectory].
!
startFilename
"return the value of the instance variable 'startFilename' (automatically generated)"
startFilename isNil ifTrue:[
startFilename := Filename currentDirectory asAbsoluteFilename.
].
^ startFilename
!
startFilename:something
"set the value of the instance variable 'startFilename' (automatically generated)"
startFilename := something.
!
treeBrowser
"return the value of the instance variable 'treeBrowser' (automatically generated)"
^ treeBrowser
!
viewFiles
"return the value of the instance variable 'viewFiles' (automatically generated)"
^ viewFiles
!
viewFiles:something
"set the value of the instance variable 'viewFiles' (automatically generated)"
viewFiles := something.
! !
!FileDialog methodsFor:'aspects'!
cancelLabelHolder
"automatically generated by UIPainter ..."
"*** the code below creates a default model when invoked."
"*** (which may not be the one you wanted)"
"*** Please change as required and accept it in the browser."
"*** (and replace this comment by something more useful ;-)"
cancelLabelHolder isNil ifTrue:[
cancelLabelHolder := 'Cancel' asValue.
].
^ cancelLabelHolder.
!
enableBack
"Return a value holder for the input string.
"
enableBack isNil ifTrue:[
enableBack := treeBrowser enableBack.
].
^ enableBack
!
enableDirectoryUp
enableDirectoryUp isNil ifTrue:[
enableDirectoryUp := treeBrowser enableDirectoryUp.
].
^ enableDirectoryUp
!
enableForward
"Return a value holder for the input string.
"
enableForward isNil ifTrue:[
enableForward := treeBrowser enableForward.
].
^ enableForward
!
enableHome
"Return a value holder for the input string.
"
enableHome isNil ifTrue:[
enableHome := treeBrowser enableHome.
].
^ enableHome
!
filenameHolder
"Return a value holder with the filename.
Shown in the filename input-field.
Being the selection in the tree.
"
|holder|
holder := builder bindingAt:#filenameHolder.
holder ifNil:[
holder := ValueHolder new.
holder addDependent:self.
builder aspectAt:#filenameHolder
put:holder.
].
^ holder.
!
filenameLabelHolder
"Return a value holder for the input string.
"
filenameLabelHolder isNil ifTrue:[
filenameLabelHolder := 'Filename:' asValue.
].
^ filenameLabelHolder
!
filterHolder
"Return a value holder for filter
"
filterHolder isNil ifTrue:[
filterHolder := treeBrowser filterModel.
self pattern notNil ifTrue:[
filterHolder value:pattern.
]
].
^ filterHolder
!
okLabelHolder
"automatically generated by UIPainter ..."
"*** the code below creates a default model when invoked."
"*** (which may not be the one you wanted)"
"*** Please change as required and accept it in the browser."
"*** (and replace this comment by something more useful ;-)"
okLabelHolder isNil ifTrue:[
okLabelHolder := 'OK' asValue.
].
^ okLabelHolder.
! !
!FileDialog methodsFor:'change & update'!
update:something with:aParameter from:changedObject
"Invoked when an object that I depend upon sends a change notification."
"stub code automatically generated - please change as required"
changedObject == treeBrowser currentFileNameHolder ifTrue:[
| files newDir|
files := treeBrowser currentFileNameHolder value.
(files isEmpty) ifTrue:[
self filenameHolder value:nil withoutNotifying:self.
] ifFalse:[
files size == 1 ifTrue:[
self filenameHolder value:(files first) withoutNotifying:self.
] ifFalse:[
self filenameHolder value:'' withoutNotifying:self.
].
].
].
changedObject == treeBrowser viewFilesInDirectoryTree ifTrue:[
changedObject value ifTrue:[
self filenameLabelHolder value:(resources string:'Filename:').
] ifFalse:[
self filenameLabelHolder value:(resources string:'Directory:').
]
].
changedObject == self filenameHolder ifTrue:[
(changedObject value asFilename exists not) ifTrue:[^ self].
treeBrowser currentFileNameHolder value:(OrderedCollection with:(changedObject value asFilename)) withoutNotifying:self.
].
changedObject == treeBrowser enableBack ifTrue:[
self enableBack value:changedObject value.
^ self.
].
changedObject == treeBrowser enableForward ifTrue:[
self enableForward value:changedObject value.
^ self.
].
changedObject == treeBrowser enableHome ifTrue:[
self enableHome value:changedObject value.
^ self.
].
changedObject == treeBrowser enableDirectoryUp ifTrue:[
self enableDirectoryUp value:changedObject value.
^ self.
].
^ super update:something with:aParameter from:changedObject
! !
!FileDialog methodsFor:'event handling'!
processEvent:anEvent
"filter keyboard events.
Return true, if I have eaten the event"
|focusView key rawKey|
anEvent isKeyPressEvent ifTrue:[
focusView := anEvent targetView.
key := anEvent key.
rawKey := anEvent rawKey.
(focusView == filterField) ifTrue:[
^ false.
].
(focusView == filenameField) ifTrue:[
^ false.
].
].
^ false
! !
!FileDialog methodsFor:'initialization & release'!
postBuildFileNameField:aWidget
filenameField := aWidget.
!
postBuildFilterField:aWidget
filterField := aWidget.
!
postBuildTreeBrowser:aSubCanvasView
treeBrowser := aSubCanvasView client.
!
postBuildWith:aBuilder
treeBrowser multipleSelect:self multipleSelect.
^ super postBuildWith:aBuilder
!
postOpenWith:aBuilder
"/ self windowGroup addPreEventHook:self.
treeBrowser currentFileNameHolder addDependent:self.
treeBrowser doubleClickAction:(self doubleClickAction).
treeBrowser enableBack addDependent:self.
treeBrowser enableForward addDependent:self.
treeBrowser enableHome addDependent:self.
treeBrowser enableDirectoryUp addDependent:self.
treeBrowser viewFilesInDirectoryTree addDependent:self.
treeBrowser rootHolder value:((self directory) ? (Filename currentDirectory asAbsoluteFilename)).
treeBrowser viewFilesInDirectoryTree value:(self viewFiles ? true).
treeBrowser viewFilesInDirectoryTree changed.
treeBrowser currentFileNameHolder value:(OrderedCollection with:(self startFilename)).
self asLoadDialog ifTrue:[
treeBrowser newVisibilityHolder value:false.
treeBrowser allowFileOperations value:false.
self newDirectoryVisibilityHolder value:false.
].
self filenameHolder value:(self startFilename asString).
self window label:(resources string:((self initialText) ? 'File Dialog')).
^ super postOpenWith:aBuilder
! !
!FileDialog methodsFor:'user actions'!
doAccept
"force accept - ignore in filterField"
|ev|
ev := self windowGroup lastEvent.
(ev notNil
and:[ev isKeyEvent
and:[ev key == #Return
and:[( ev targetView isSameOrComponentOf:filterField)
or:[ev targetView isSameOrComponentOf:filenameField]]]]) ifTrue:[
^ self
].
filenameField accept.
self result:(self filenameHolder value asString).
^ super doAccept
!
doBack
treeBrowser doBack.
!
doCancel
self result:nil.
^ super doCancel.
!
doForward
treeBrowser doForward.
!
doGoDirectoryUp
treeBrowser doGoDirectoryUp.
!
doGotoHomeDirectory
treeBrowser doGotoHomeDirectory.
!
menuDirHistory:backOrForward
^ treeBrowser menuDirHistory:backOrForward.
!
menuDirHistoryBack
^ treeBrowser menuDirHistory:#back.
!
menuDirHistoryForward
^ treeBrowser menuDirHistory:#forward.
!
newDirectory
^ treeBrowser newDirectory
! !
!FileDialog class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libtool/FileDialog.st,v 1.22 2002-11-07 13:28:16 penk Exp $'
! !