"
COPYRIGHT (c) 1997 by eXept Software AG
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
SelectionBrowser subclass:#FileSelectionBrowser
instanceVariableNames:'selectedFileFilter directoryView listOfFileFilters directory'
classVariableNames:''
poolDictionaries:''
category:'Interface-Dialogs'
!
!FileSelectionBrowser class methodsFor:'documentation'!
copyright
"
COPYRIGHT (c) 1997 by eXept Software AG
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
!
documentation
"
documentation to be added.
[author:]
Thomas Zwick
"
! !
!FileSelectionBrowser class methodsFor:'instance creation'!
request: aTitle fileFilters: fileFilters
"self request: 'Select A File' fileFilters: #('.*')"
^self new
title: aTitle;
listOfFileFilters: fileFilters;
open
!
request: aTitle fileName: aFileName inDirectory: dir withFileFilters: fileFilters
"self
request: 'Select Your Profile File'
fileName: '.profile'
inDirectory: Filename homeDirectory
withFileFilters: #('.*')"
^self new
title: aTitle;
fileName: aFileName;
directory: dir;
listOfFileFilters: fileFilters;
open
!
request: aTitle pathName: aPath fileFilters: fileFilters
"self request: 'Select A File' pathName: '' fileFilters: #('.*')"
^self new
title: aTitle;
fileName: aPath;
listOfFileFilters: fileFilters;
open
!
requestFileName
"self requestFileName"
^self new title: 'Select A File'; open
! !
!FileSelectionBrowser class methodsFor:'accessing'!
loadImageFileNameFilters
^self saveImageFileNameFilters addAll: #('*.jpeg' '*.jpg'); yourself
!
projectFileNameFilters
^Array withAll: #('*.st' '*.*o' '*.s' '*.c' 'Make*' '*.project')
!
saveImageFileNameFilters
^Array withAll: #('*.xpm' '*.xbm' '*.gif' '*.tif' '*.tiff' '*.bmp')
! !
!FileSelectionBrowser class methodsFor:'interface specs'!
windowSpec
"this window spec was automatically generated by the ST/X UIPainter"
"do not manually edit this - the painter/builder may not be able to
handle the specification if its corrupted."
"
UIPainter new openOnClass:FileSelectionBrowser andSelector:#windowSpec
FileSelectionBrowser new openInterface:#windowSpec
"
"FileSelectionBrowser open"
<resource: #canvas>
^
#(#FullSpec
#'window:'
#(#WindowSpec
#'name:' 'File Selection Browser'
#'layout:' #(#LayoutFrame 248 0 226 0 847 0 575 0)
#'label:' 'File Selection Browser'
#'min:' #(#Point 10 10)
#'max:' #(#Point 1152 900)
#'bounds:' #(#Rectangle 248 226 848 576)
#'usePreferredExtent:' false
)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#VariableHorizontalPanelSpec
#'name:' 'panel'
#'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -40 1.0)
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#ViewSpec
#'name:' 'view1'
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#FileSelectionTreeSpec
#'name:' 'directoryTreeView'
#'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -25 1.0)
#'model:' #selectionOfDirectory
#'hasHorizontalScrollBar:' true
#'hasVerticalScrollBar:' true
#'miniScrollerHorizontal:' true
#'showDirectoryIndicatorForRoot:' false
#'showDirectoryIndicator:' true
#'valueChangeSelector:' #readDirectory
#'hierarchicalList:' #rootOfDirectory
#'itemClass:' 'Directory'
)
#(#InputFieldSpec
#'name:' 'directoryInputField'
#'layout:' #(#LayoutFrame 2 0.0 -22 1 0 1.0 0 1)
#'model:' #selectionOfDirectory
#'immediateAccept:' false
)
)
)
)
#(#ViewSpec
#'name:' 'view2'
#'component:'
#(#SpecCollection
#'collection:'
#(
#(#InputFieldSpec
#'name:' 'EditField'
#'layout:' #(#LayoutFrame 1 0.0 -22 1 -2 1.0 0 1)
#'model:' #valueOfFileName
#'acceptOnReturn:' false
#'acceptOnTab:' false
)
#(#SubCanvasSpec
#'name:' 'subCanvas1'
#'layout:' #(#LayoutFrame 1 0.0 0 0.0 0 1.0 -25 1.0)
#'clientHolder:' #directoryView
)
)
)
)
)
)
#'handles:' #(#Any 0.5 1.0)
)
#(#UISubSpecification
#'name:' 'SubSpecification'
#'layout:' #(#LayoutFrame 2 0.0 -32 1 0 1.0 -8 1.0)
#'majorKey:' #ToolApplicationModel
#'minorKey:' #windowSpecForCommitWithoutChannels
)
)
)
)
! !
!FileSelectionBrowser methodsFor:'accessing'!
directory: aDirectory
directory := (aDirectory ? Filename homeDirectory) asFilename asAbsoluteFilename name
!
directoryView
^directoryView ? (directoryView := DirectoryView new)
!
fileName: aFileName
self valueOfFileName value: (aFileName ? '') asFilename baseName.
directory := directory ? ((aFileName ? '') asFilename directoryName).
!
listOfFileFilters: anArray
listOfFileFilters := anArray
! !
!FileSelectionBrowser methodsFor:'accessing - views'!
directoryInputField
^builder componentAt: #directoryInputField
!
directoryTreeView
^builder componentAt: #directoryTreeView
! !
!FileSelectionBrowser methodsFor:'aspects'!
rootOfDirectory
|holder|
(holder := builder bindingAt:#rootOfDirectory) isNil ifTrue:[
builder aspectAt:#rootOfDirectory put: (holder := Filename rootDirectory name asValue).
].
^ holder
!
selectionOfDirectory
|holder|
(holder := builder bindingAt:#selectionOfDirectory) isNil ifTrue:[
builder aspectAt:#selectionOfDirectory put: (holder := ValueHolder new)
].
^ holder
!
valueOfFileName
|holder|
(holder := builder bindingAt:#valueOfFileName) isNil ifTrue:[
builder aspectAt:#valueOfFileName put:(holder := ValueHolder new).
].
^ holder
! !
!FileSelectionBrowser methodsFor:'callbacks'!
fileDoubleClicked: aFileName
self valueOfFileName value: aFileName.
accept value: true.
self close
!
readDirectory
self directoryTreeView selection notNil
ifTrue:
[
directoryView directory: self selectionOfDirectory value; readDirectory.
directory isNil ifTrue: [self class lastSelection: self selectionOfDirectory value]
]
! !
!FileSelectionBrowser methodsFor:'startup / release'!
closeCancel
directoryView release.
super closeCancel
!
closeRequest
directoryView release.
super closeRequest
!
open
super open.
accept value ifTrue:[
^ (self selectionOfDirectory value ? '') asFilename
constructString:(self valueOfFileName value ? '')
].
^ nil
!
postBuildWith:aBuilder
directoryView listOfFileFilters: listOfFileFilters ? #('*').
directoryView fileSelectAction: [:aFileName |self valueOfFileName value: aFileName asFilename baseName].
directoryView fileDoubleClickAction: [:aFileName |self fileDoubleClicked: aFileName asFilename baseName].
directoryView fileFilterSelectAction: [:fileFilter|
self valueOfFileName value: (
((self valueOfFileName value ? 'unknown') readStream upTo: $.), '.',
(fileFilter copy reverse readStream upTo: $.) reverse)].
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
! !
!FileSelectionBrowser class methodsFor:'documentation'!
version
^ '$Header$'
! !