FileSelectionBrowser.st
changeset 745 d3995881fa13
parent 626 402a50b931d5
child 871 45c6d4418ae6
equal deleted inserted replaced
744:20cbba6d7e96 745:d3995881fa13
    37 
    37 
    38 !
    38 !
    39 
    39 
    40 documentation
    40 documentation
    41 "
    41 "
    42     documentation to be added.
    42     The FileSelectionBrowser allows you to browse in file directories
       
    43     and to select files in order to load file contents or to save
       
    44     something to files.
       
    45 
       
    46     [start with:]
       
    47         FileSelectionBrowser open
    43 
    48 
    44     [author:]
    49     [author:]
    45         Thomas Zwick
    50         Thomas Zwick, eXept Software AG
    46 "
    51 "
    47 ! !
    52 ! !
    48 
    53 
    49 !FileSelectionBrowser class methodsFor:'instance creation'!
    54 !FileSelectionBrowser class methodsFor:'instance creation'!
    50 
    55 
    51 request: aTitle fileFilters: fileFilters
       
    52 
       
    53     "self request: 'Select A File' fileFilters: #('.*')"
       
    54 
       
    55     ^self new
       
    56         title: aTitle;
       
    57         listOfFileFilters: fileFilters;
       
    58         open
       
    59 !
       
    60 
       
    61 request: aTitle fileName: aFileName inDirectory: dir withFileFilters: fileFilters
    56 request: aTitle fileName: aFileName inDirectory: dir withFileFilters: fileFilters
    62 
    57     "
    63     "self 
    58     self 
    64         request: 'Select Your Profile File' 
    59         request: 'Select Your Profile File' 
    65         fileName: '.profile' 
    60         fileName: '.profile' 
    66         inDirectory: Filename homeDirectory 
    61         inDirectory: Filename homeDirectory 
    67         withFileFilters: #('.*')"
    62         withFileFilters: #('.*')
       
    63     "
    68 
    64 
    69     ^self new
    65     ^self new
    70         title: aTitle;
    66         title: aTitle;
    71         fileName: aFileName;
    67         fileName: aFileName;
    72         directory: dir;
    68         directory: dir;
    73         listOfFileFilters: fileFilters;
    69         listOfFileFilters: fileFilters;
    74         open
    70         open
    75 !
    71 !
    76 
    72 
    77 request: aTitle pathName: aPath fileFilters: fileFilters
    73 request: aTitle fileName: aFileName withFileFilters: fileFilters
    78 
    74     "
    79     "self request: 'Select A File' pathName: '' fileFilters: #('.*')"
    75     self 
       
    76         request: 'Select Your Profile File' 
       
    77         fileName: '/etc/fstab' 
       
    78         withFileFilters: #('*')  
       
    79     "
    80 
    80 
    81     ^self new
    81     ^self new
    82         title: aTitle;
    82         title: aTitle;
    83         fileName: aPath;
    83         fileName: aFileName;
    84         listOfFileFilters: fileFilters;
    84         listOfFileFilters: fileFilters;
    85         open
    85         open
    86 !
    86 !
    87 
    87 
       
    88 request: aTitle pathName: aPath withFileFilters: fileFilters
       
    89     "
       
    90     self request: 'Select A File' pathName: '/etc' fileFilters: #('*.conf')
       
    91     "
       
    92 
       
    93     ^self new
       
    94         title: aTitle;
       
    95         directory: aPath;
       
    96         listOfFileFilters: fileFilters;
       
    97         open
       
    98 !
       
    99 
       
   100 request: aTitle withFileFilters: fileFilters
       
   101     "
       
   102     self request: 'Select A File' fileFilters: #('.*')
       
   103     "
       
   104 
       
   105     ^self new
       
   106         title: aTitle;
       
   107         listOfFileFilters: fileFilters;
       
   108         open
       
   109 !
       
   110 
    88 requestFileName
   111 requestFileName
    89 
   112     "
    90     "self requestFileName"
   113     self requestFileName
       
   114     "
    91 
   115 
    92     ^self new title: 'Select A File'; open
   116     ^self new title: 'Select A File'; open
    93 
   117 
    94 ! !
   118 ! !
    95 
   119 
   111 ! !
   135 ! !
   112 
   136 
   113 !FileSelectionBrowser class methodsFor:'interface specs'!
   137 !FileSelectionBrowser class methodsFor:'interface specs'!
   114 
   138 
   115 windowSpec
   139 windowSpec
   116     "this window spec was automatically generated by the ST/X UIPainter"
   140     "This resource specification was automatically generated
   117 
   141      by the UIPainter of ST/X."
   118     "do not manually edit this - the painter/builder may not be able to
   142 
   119      handle the specification if its corrupted."
   143     "Do not manually edit this!! If it is corrupted,
       
   144      the UIPainter may not be able to read the specification."
   120 
   145 
   121     "
   146     "
   122      UIPainter new openOnClass:FileSelectionBrowser andSelector:#windowSpec
   147      UIPainter new openOnClass:FileSelectionBrowser andSelector:#windowSpec
   123      FileSelectionBrowser new openInterface:#windowSpec
   148      FileSelectionBrowser new openInterface:#windowSpec
   124     "
   149      FileSelectionBrowser open
   125     "FileSelectionBrowser open"
   150     "
   126 
   151 
   127     <resource: #canvas>
   152     <resource: #canvas>
   128 
   153 
   129     ^
   154     ^
   130      
   155      
   131        #(#FullSpec
   156        #(#FullSpec
   132           #'window:' 
   157           #window: 
   133            #(#WindowSpec
   158            #(#WindowSpec
   134               #'name:' 'File Selection Browser'
   159               #name: 'File Selection Browser'
   135               #'layout:' #(#LayoutFrame 248 0 226 0 847 0 575 0)
   160               #layout: #(#LayoutFrame 379 0 259 0 978 0 608 0)
   136               #'label:' 'File Selection Browser'
   161               #label: 'File Selection Browser'
   137               #'min:' #(#Point 10 10)
   162               #min: #(#Point 10 10)
   138               #'max:' #(#Point 1152 900)
   163               #max: #(#Point 1152 900)
   139               #'bounds:' #(#Rectangle 248 226 848 576)
   164               #bounds: #(#Rectangle 379 259 979 609)
   140               #'usePreferredExtent:' false
   165               #usePreferredExtent: false
   141           )
   166           )
   142           #'component:' 
   167           #component: 
   143            #(#SpecCollection
   168            #(#SpecCollection
   144               #'collection:' 
   169               #collection: 
   145                #(
   170                #(
   146                  #(#VariableHorizontalPanelSpec
   171                  #(#VariableHorizontalPanelSpec
   147                     #'name:' 'panel'
   172                     #name: 'panel'
   148                     #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -40 1.0)
   173                     #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -40 1.0)
   149                     #'component:' 
   174                     #component: 
   150                      #(#SpecCollection
   175                      #(#SpecCollection
   151                         #'collection:' 
   176                         #collection: 
   152                          #(
   177                          #(
   153                            #(#ViewSpec
   178                            #(#ViewSpec
   154                               #'name:' 'view1'
   179                               #name: 'view1'
   155                               #'component:' 
   180                               #component: 
   156                                #(#SpecCollection
   181                                #(#SpecCollection
   157                                   #'collection:' 
   182                                   #collection: 
   158                                    #(
   183                                    #(
   159                                      #(#FileSelectionTreeSpec
   184                                      #(#FileSelectionTreeSpec
   160                                         #'name:' 'directoryTreeView'
   185                                         #name: 'directoryTreeView'
   161                                         #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -25 1.0)
   186                                         #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -25 1.0)
   162                                         #'model:' #selectionOfDirectory
   187                                         #model: #selectionOfDirectory
   163                                         #'hasHorizontalScrollBar:' true
   188                                         #hasHorizontalScrollBar: true
   164                                         #'hasVerticalScrollBar:' true
   189                                         #hasVerticalScrollBar: true
   165                                         #'miniScrollerHorizontal:' true
   190                                         #miniScrollerHorizontal: true
   166                                         #'showDirectoryIndicatorForRoot:' false
   191                                         #showDirectoryIndicatorForRoot: false
   167                                         #'showDirectoryIndicator:' true
   192                                         #showDirectoryIndicator: true
   168                                         #'valueChangeSelector:' #readDirectory
   193                                         #valueChangeSelector: #readDirectory
   169                                         #'hierarchicalList:' #rootOfDirectory
   194                                         #hierarchicalList: #rootOfDirectory
   170                                         #'itemClass:' 'Directory'
   195                                         #itemClass: 'Directory'
   171                                     )
   196                                     )
   172                                      #(#InputFieldSpec
   197                                      #(#InputFieldSpec
   173                                         #'name:' 'directoryInputField'
   198                                         #name: 'directoryInputField'
   174                                         #'layout:' #(#LayoutFrame 2 0.0 -22 1 0 1.0 0 1)
   199                                         #layout: #(#LayoutFrame 2 0.0 -22 1 0 1.0 0 1)
   175                                         #'model:' #selectionOfDirectory
   200                                         #model: #selectionOfDirectory
   176                                         #'immediateAccept:' false
   201                                         #immediateAccept: false
   177                                     )
   202                                     )
   178                                   )
   203                                   )
   179                               )
   204                               )
   180                           )
   205                           )
   181                            #(#ViewSpec
   206                            #(#ViewSpec
   182                               #'name:' 'view2'
   207                               #name: 'view2'
   183                               #'component:' 
   208                               #component: 
   184                                #(#SpecCollection
   209                                #(#SpecCollection
   185                                   #'collection:' 
   210                                   #collection: 
   186                                    #(
   211                                    #(
   187                                      #(#InputFieldSpec
   212                                      #(#InputFieldSpec
   188                                         #'name:' 'EditField'
   213                                         #name: 'EditField'
   189                                         #'layout:' #(#LayoutFrame 1 0.0 -22 1 -2 1.0 0 1)
   214                                         #layout: #(#LayoutFrame 1 0.0 -22 1 -2 1.0 0 1)
   190                                         #'model:' #valueOfFileName
   215                                         #model: #valueOfFileName
   191                                         #'acceptOnReturn:' false
   216                                         #acceptOnReturn: false
   192                                         #'acceptOnTab:' false
   217                                         #acceptOnTab: false
   193                                     )
   218                                     )
   194                                      #(#SubCanvasSpec
   219                                      #(#SubCanvasSpec
   195                                         #'name:' 'subCanvas1'
   220                                         #name: 'subCanvas1'
   196                                         #'layout:' #(#LayoutFrame 1 0.0 0 0.0 0 1.0 -25 1.0)
   221                                         #layout: #(#LayoutFrame 1 0.0 0 0.0 0 1.0 -25 1.0)
   197                                         #'clientHolder:' #directoryView
   222                                         #clientHolder: #directoryView
   198                                     )
   223                                     )
   199                                   )
   224                                   )
   200                               )
   225                               )
   201                           )
   226                           )
   202                         )
   227                         )
   203                     )
   228                     )
   204                     #'handles:' #(#Any 0.5 1.0)
   229                     #handles: #(#Any 0.5 1.0)
   205                 )
   230                 )
   206                  #(#UISubSpecification
   231                  #(#UISubSpecification
   207                     #'name:' 'SubSpecification'
   232                     #name: 'SubSpecification'
   208                     #'layout:' #(#LayoutFrame 2 0.0 -32 1 0 1.0 -8 1.0)
   233                     #layout: #(#LayoutFrame 2 0.0 -32 1 0 1.0 -8 1.0)
   209                     #'majorKey:' #ToolApplicationModel
   234                     #majorKey: #ToolApplicationModel
   210                     #'minorKey:' #windowSpecForCommitWithoutChannels
   235                     #minorKey: #windowSpecForCommitWithoutChannels
   211                 )
   236                 )
   212               )
   237               )
   213           )
   238           )
   214       )
   239       )
   215 ! !
   240 ! !
   216 
   241 
   217 !FileSelectionBrowser methodsFor:'accessing'!
   242 !FileSelectionBrowser methodsFor:'accessing'!
   218 
   243 
   219 directory: aDirectory
   244 directory: aDirectory
   220 
   245 
   221     directory := (aDirectory ? Filename homeDirectory) asFilename asAbsoluteFilename name
   246     directory := (aDirectory ? Filename currentDirectory) asFilename asAbsoluteFilename name
       
   247 
   222 !
   248 !
   223 
   249 
   224 directoryView
   250 directoryView
   225 
   251 
   226     ^directoryView ? (directoryView := DirectoryView new)
   252     ^directoryView ? (directoryView := DirectoryView new)
   228 
   254 
   229 fileName: aFileName
   255 fileName: aFileName
   230 
   256 
   231     self valueOfFileName value: (aFileName ? '') asFilename baseName.
   257     self valueOfFileName value: (aFileName ? '') asFilename baseName.
   232     directory := directory ? ((aFileName ? '') asFilename directoryName).
   258     directory := directory ? ((aFileName ? '') asFilename directoryName).
   233 
   259                        
   234 !
   260 !
   235 
   261 
   236 listOfFileFilters: anArray
   262 listOfFileFilters: anArray
   237 
   263 
   238     listOfFileFilters := anArray
   264     listOfFileFilters := anArray
   295 readDirectory
   321 readDirectory
   296 
   322 
   297     self directoryTreeView selection notNil 
   323     self directoryTreeView selection notNil 
   298     ifTrue: 
   324     ifTrue: 
   299     [
   325     [
   300         directoryView directory: self selectionOfDirectory value; readDirectory.
   326         directoryView directory: self selectionOfDirectory value; readDirectory.  
   301         directory isNil ifTrue: [self class lastSelection: self selectionOfDirectory value]
   327         self class lastSelection notNil ifTrue: [self class lastSelection: self selectionOfDirectory value]
   302     ]
   328     ]
   303 ! !
   329 ! !
   304 
   330 
   305 !FileSelectionBrowser methodsFor:'startup / release'!
   331 !FileSelectionBrowser methodsFor:'startup / release'!
   306 
   332 
   334     directoryView fileDoubleClickAction: [:aFileName |self fileDoubleClicked: aFileName asFilename baseName].
   360     directoryView fileDoubleClickAction: [:aFileName |self fileDoubleClicked: aFileName asFilename baseName].
   335     directoryView fileFilterSelectAction: [:fileFilter|
   361     directoryView fileFilterSelectAction: [:fileFilter|
   336     self valueOfFileName value: (
   362     self valueOfFileName value: (
   337         ((self valueOfFileName value ? 'unknown') readStream upTo: $.), '.',
   363         ((self valueOfFileName value ? 'unknown') readStream upTo: $.), '.',
   338         (fileFilter copy reverse readStream upTo: $.) reverse)]. 
   364         (fileFilter copy reverse readStream upTo: $.) reverse)]. 
   339     self directoryTreeView selectPathname: directory ? self class lastSelection ? '/'.
   365     self directoryTreeView selectPathname: directory ? self class lastSelection ? Filename currentDirectory asAbsoluteFilename name.
   340 
   366 
   341     self directoryInputField entryCompletionBlock: 
   367     self directoryInputField entryCompletionBlock: 
   342     [:f|
   368     [:f|
   343        |completedDirectory|
   369        |completedDirectory|
   344        (completedDirectory := Filename 
   370        (completedDirectory := Filename