--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FileSelectionBrowser.st Sat Jan 10 11:53:03 1998 +0100
@@ -0,0 +1,368 @@
+"
+ COPYRIGHT (c) 1997 by eXept Software AG / Thomas Zwick
+ 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-Advanced-Tools'
+!
+
+!FileSelectionBrowser class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1997 by eXept Software AG / Thomas Zwick
+ 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.
+"
+!
+
+history
+ "Created: / 10.1.1998 / 11:00:06 / tz"
+! !
+
+!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 fileFilters: fileFilters
+
+ "self request: 'Select A File' fileName: '' fileFilters: #('.*')"
+
+ ^self new
+ title: aTitle;
+ fileName: aFileName;
+ 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
+!
+
+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 130 0 174 0 529 0 473 0)
+ #'label:' 'File Selection Browser'
+ #'min:' #(#Point 10 10)
+ #'max:' #(#Point 1152 900)
+ #'bounds:' #(#Rectangle 130 174 530 474)
+ #'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 0 1.0)
+ #'model:' #selectionOfDirectory
+ #'hasHorizontalScrollBar:' true
+ #'hasVerticalScrollBar:' true
+ #'miniScrollerHorizontal:' true
+ #'showRoot:' false
+ #'showDirectoryIndicator:' true
+ #'valueChangeSelector:' #readDirectory
+ #'hierarchicalList:' #rootOfDirectory
+ #'itemClass:' 'Directory'
+ )
+ )
+ )
+ #'level:' -1
+ )
+ #(#ViewSpec
+ #'name:' 'view2'
+ #'component:'
+ #(#SpecCollection
+ #'collection:'
+ #(
+ #(#InputFieldSpec
+ #'name:' 'EditField'
+ #'layout:' #(#LayoutFrame 1 0.0 -22 1 0 1.0 0 1)
+ #'model:' #valueOfFileName
+ #'acceptOnReturn:' false
+ #'acceptOnTab:' false
+ )
+ #(#SubCanvasSpec
+ #'name:' 'subCanvas1'
+ #'layout:' #(#LayoutFrame 1 0.0 0 0.0 0 1.0 -22 1.0)
+ #'clientHolder:' #directoryView
+ )
+ )
+ )
+ #'level:' -1
+ )
+ )
+ )
+ #'handles:' #(#Any 0.5 1.0)
+ )
+ #(#HorizontalPanelViewSpec
+ #'name:' 'horizontalPanelView'
+ #'layout:' #(#LayoutFrame 0 0.0 -40 1 0 1.0 0 1.0)
+ #'component:'
+ #(#SpecCollection
+ #'collection:'
+ #(
+ #(#ActionButtonSpec
+ #'name:' 'cancelButton'
+ #'label:' 'Cancel'
+ #'model:' #cancel
+ #'extent:' #(#Point 100 22)
+ )
+ #(#ActionButtonSpec
+ #'name:' 'okButton'
+ #'label:' 'OK'
+ #'model:' #accept
+ #'extent:' #(#Point 100 22)
+ )
+ )
+ )
+ #'level:' 1
+ #'horizontalLayout:' #center
+ #'verticalLayout:' #center
+ #'horizontalSpace:' 3
+ #'verticalSpace:' 3
+ )
+ )
+ )
+ )
+! !
+
+!FileSelectionBrowser methodsFor:'accessing'!
+
+directory: aDirectory
+
+ directory := aDirectory 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'!
+
+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
+ "Diesen Mist musste ich machen, weil ztk es nicht fertig bringt,
+ seine Models upzudaten, bevor er die Callbacks aufruft!!!!!!"
+
+ |dir|
+ directoryView listOfFiles removeAll.
+ directoryView directory:
+ (dir := (self directoryTreeView model list at:
+ self directoryTreeView model selection) contents name);
+ readDirectory.
+ directory isNil ifTrue: [self class lastSelection: dir]
+! !
+
+!FileSelectionBrowser methodsFor:'startup / release'!
+
+closeCancel
+
+ directoryView release.
+ super closeCancel
+!
+
+closeRequest
+
+ directoryView release.
+ super closeRequest
+
+!
+
+open
+
+ super open.
+ accept value
+ ifTrue:
+ [
+ ^(self selectionOfDirectory value ? '') , Filename separator, (self valueOfFileName value ? '')
+ ].
+ ^nil
+
+
+
+!
+
+postBuildWith:aBuilder
+
+ directoryView listOfFileFilters: listOfFileFilters ? #('*').
+ directoryView fileSelectAction: [:aFileName |self valueOfFileName value: aFileName].
+ directoryView fileDoubleClickAction: [:aFileName |self fileDoubleClicked: aFileName].
+ 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 directoryTreeView monitoring: true.
+
+ ^super postBuildWith:aBuilder
+! !
+
+!FileSelectionBrowser class methodsFor:'documentation'!
+
+version
+ ^ '$Header$'
+! !