FileSelectionBrowser.st
changeset 404 35982cf1482f
child 426 b8110a424326
equal deleted inserted replaced
403:e713820cb346 404:35982cf1482f
       
     1 "
       
     2  COPYRIGHT (c) 1997 by eXept Software AG / Thomas Zwick
       
     3               All Rights Reserved
       
     4 
       
     5  This software is furnished under a license and may be used
       
     6  only in accordance with the terms of that license and with the
       
     7  inclusion of the above copyright notice. This software may not
       
     8  be provided or otherwise made available to, or used by, any
       
     9  other person. No title to or ownership of the software is
       
    10  hereby transferred.
       
    11 "
       
    12 
       
    13 
       
    14 
       
    15 SelectionBrowser subclass:#FileSelectionBrowser
       
    16 	instanceVariableNames:'selectedFileFilter directoryView listOfFileFilters directory'
       
    17 	classVariableNames:''
       
    18 	poolDictionaries:''
       
    19 	category:'Interface-Advanced-Tools'
       
    20 !
       
    21 
       
    22 !FileSelectionBrowser class methodsFor:'documentation'!
       
    23 
       
    24 copyright
       
    25 "
       
    26  COPYRIGHT (c) 1997 by eXept Software AG / Thomas Zwick
       
    27               All Rights Reserved
       
    28 
       
    29  This software is furnished under a license and may be used
       
    30  only in accordance with the terms of that license and with the
       
    31  inclusion of the above copyright notice. This software may not
       
    32  be provided or otherwise made available to, or used by, any
       
    33  other person. No title to or ownership of the software is
       
    34  hereby transferred.
       
    35 "
       
    36 
       
    37 
       
    38 !
       
    39 
       
    40 documentation
       
    41 "
       
    42     documentation to be added.
       
    43 "
       
    44 !
       
    45 
       
    46 history
       
    47     "Created: / 10.1.1998 / 11:00:06 / tz"
       
    48 ! !
       
    49 
       
    50 !FileSelectionBrowser class methodsFor:'instance creation'!
       
    51 
       
    52 request: aTitle fileFilters: fileFilters
       
    53 
       
    54     "self request: 'Select A File' fileFilters: #('.*')"
       
    55 
       
    56     ^self new
       
    57         title: aTitle;
       
    58         listOfFileFilters: fileFilters;
       
    59         open
       
    60 !
       
    61 
       
    62 request: aTitle fileName: aFileName fileFilters: fileFilters
       
    63 
       
    64     "self request: 'Select A File' fileName: '' fileFilters: #('.*')"
       
    65     
       
    66     ^self new
       
    67         title: aTitle;
       
    68         fileName: aFileName;
       
    69         listOfFileFilters: fileFilters;
       
    70         open
       
    71 !
       
    72 
       
    73 request: aTitle fileName: aFileName inDirectory: dir withFileFilters: fileFilters
       
    74 
       
    75     "self 
       
    76         request: 'Select Your Profile File' 
       
    77         fileName: '.profile' 
       
    78         inDirectory: Filename homeDirectory 
       
    79         withFileFilters: #('.*')"
       
    80 
       
    81     ^self new
       
    82         title: aTitle;
       
    83         fileName: aFileName;
       
    84         directory: dir;
       
    85         listOfFileFilters: fileFilters;
       
    86         open
       
    87 !
       
    88 
       
    89 requestFileName
       
    90 
       
    91     "self requestFileName"
       
    92 
       
    93     ^self new title: 'Select A File'; open
       
    94 
       
    95 ! !
       
    96 
       
    97 !FileSelectionBrowser class methodsFor:'accessing'!
       
    98 
       
    99 loadImageFileNameFilters
       
   100     ^self saveImageFileNameFilters addAll: #('*.jpeg' '*.jpg'); yourself
       
   101 
       
   102 !
       
   103 
       
   104 projectFileNameFilters
       
   105     ^Array withAll: #('*.st' '*.*o'  '*.s' '*.c' 'Make*' '*.project')
       
   106 
       
   107 !
       
   108 
       
   109 saveImageFileNameFilters
       
   110     ^Array withAll: #('*.xpm' '*.xbm' '*.gif' '*.tif' '*.tiff' '*.bmp')
       
   111 
       
   112 ! !
       
   113 
       
   114 !FileSelectionBrowser class methodsFor:'interface specs'!
       
   115 
       
   116 windowSpec
       
   117     "this window spec was automatically generated by the ST/X UIPainter"
       
   118 
       
   119     "do not manually edit this - the painter/builder may not be able to
       
   120      handle the specification if its corrupted."
       
   121 
       
   122     "
       
   123      UIPainter new openOnClass:FileSelectionBrowser andSelector:#windowSpec
       
   124      FileSelectionBrowser new openInterface:#windowSpec
       
   125     "
       
   126     "FileSelectionBrowser open"
       
   127 
       
   128     <resource: #canvas>
       
   129 
       
   130     ^
       
   131      
       
   132        #(#FullSpec
       
   133           #'window:' 
       
   134            #(#WindowSpec
       
   135               #'name:' 'File Selection Browser'
       
   136               #'layout:' #(#LayoutFrame 130 0 174 0 529 0 473 0)
       
   137               #'label:' 'File Selection Browser'
       
   138               #'min:' #(#Point 10 10)
       
   139               #'max:' #(#Point 1152 900)
       
   140               #'bounds:' #(#Rectangle 130 174 530 474)
       
   141               #'usePreferredExtent:' false
       
   142           )
       
   143           #'component:' 
       
   144            #(#SpecCollection
       
   145               #'collection:' 
       
   146                #(
       
   147                  #(#VariableHorizontalPanelSpec
       
   148                     #'name:' 'panel'
       
   149                     #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -40 1.0)
       
   150                     #'component:' 
       
   151                      #(#SpecCollection
       
   152                         #'collection:' 
       
   153                          #(
       
   154                            #(#ViewSpec
       
   155                               #'name:' 'view1'
       
   156                               #'component:' 
       
   157                                #(#SpecCollection
       
   158                                   #'collection:' 
       
   159                                    #(
       
   160                                      #(#FileSelectionTreeSpec
       
   161                                         #'name:' 'directoryTreeView'
       
   162                                         #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
       
   163                                         #'model:' #selectionOfDirectory
       
   164                                         #'hasHorizontalScrollBar:' true
       
   165                                         #'hasVerticalScrollBar:' true
       
   166                                         #'miniScrollerHorizontal:' true
       
   167                                         #'showRoot:' false
       
   168                                         #'showDirectoryIndicator:' true
       
   169                                         #'valueChangeSelector:' #readDirectory
       
   170                                         #'hierarchicalList:' #rootOfDirectory
       
   171                                         #'itemClass:' 'Directory'
       
   172                                     )
       
   173                                   )
       
   174                               )
       
   175                               #'level:' -1
       
   176                           )
       
   177                            #(#ViewSpec
       
   178                               #'name:' 'view2'
       
   179                               #'component:' 
       
   180                                #(#SpecCollection
       
   181                                   #'collection:' 
       
   182                                    #(
       
   183                                      #(#InputFieldSpec
       
   184                                         #'name:' 'EditField'
       
   185                                         #'layout:' #(#LayoutFrame 1 0.0 -22 1 0 1.0 0 1)
       
   186                                         #'model:' #valueOfFileName
       
   187                                         #'acceptOnReturn:' false
       
   188                                         #'acceptOnTab:' false
       
   189                                     )
       
   190                                      #(#SubCanvasSpec
       
   191                                         #'name:' 'subCanvas1'
       
   192                                         #'layout:' #(#LayoutFrame 1 0.0 0 0.0 0 1.0 -22 1.0)
       
   193                                         #'clientHolder:' #directoryView
       
   194                                     )
       
   195                                   )
       
   196                               )
       
   197                               #'level:' -1
       
   198                           )
       
   199                         )
       
   200                     )
       
   201                     #'handles:' #(#Any 0.5 1.0)
       
   202                 )
       
   203                  #(#HorizontalPanelViewSpec
       
   204                     #'name:' 'horizontalPanelView'
       
   205                     #'layout:' #(#LayoutFrame 0 0.0 -40 1 0 1.0 0 1.0)
       
   206                     #'component:' 
       
   207                      #(#SpecCollection
       
   208                         #'collection:' 
       
   209                          #(
       
   210                            #(#ActionButtonSpec
       
   211                               #'name:' 'cancelButton'
       
   212                               #'label:' 'Cancel'
       
   213                               #'model:' #cancel
       
   214                               #'extent:' #(#Point 100 22)
       
   215                           )
       
   216                            #(#ActionButtonSpec
       
   217                               #'name:' 'okButton'
       
   218                               #'label:' 'OK'
       
   219                               #'model:' #accept
       
   220                               #'extent:' #(#Point 100 22)
       
   221                           )
       
   222                         )
       
   223                     )
       
   224                     #'level:' 1
       
   225                     #'horizontalLayout:' #center
       
   226                     #'verticalLayout:' #center
       
   227                     #'horizontalSpace:' 3
       
   228                     #'verticalSpace:' 3
       
   229                 )
       
   230               )
       
   231           )
       
   232       )
       
   233 ! !
       
   234 
       
   235 !FileSelectionBrowser methodsFor:'accessing'!
       
   236 
       
   237 directory: aDirectory
       
   238 
       
   239     directory := aDirectory asFilename asAbsoluteFilename name
       
   240 !
       
   241 
       
   242 directoryView
       
   243 
       
   244     ^directoryView ? (directoryView := DirectoryView new)
       
   245 !
       
   246 
       
   247 fileName: aFileName
       
   248 
       
   249     self valueOfFileName value: (aFileName ? '') asFilename baseName.
       
   250     directory := directory ? ((aFileName ? '') asFilename directoryName).
       
   251 
       
   252 !
       
   253 
       
   254 listOfFileFilters: anArray
       
   255 
       
   256     listOfFileFilters := anArray
       
   257 ! !
       
   258 
       
   259 !FileSelectionBrowser methodsFor:'accessing - views'!
       
   260 
       
   261 directoryTreeView
       
   262 
       
   263     ^builder componentAt: #directoryTreeView
       
   264 
       
   265 ! !
       
   266 
       
   267 !FileSelectionBrowser methodsFor:'aspects'!
       
   268 
       
   269 rootOfDirectory
       
   270 
       
   271     |holder|
       
   272     (holder := builder bindingAt:#rootOfDirectory) isNil ifTrue:[
       
   273         builder aspectAt:#rootOfDirectory put: (holder :=  Filename rootDirectory name asValue).
       
   274     ].
       
   275     ^ holder
       
   276 
       
   277 !
       
   278 
       
   279 selectionOfDirectory
       
   280 
       
   281     |holder|
       
   282     (holder := builder bindingAt:#selectionOfDirectory) isNil ifTrue:[
       
   283         builder aspectAt:#selectionOfDirectory put: (holder := ValueHolder new)
       
   284     ].
       
   285     ^ holder
       
   286 
       
   287 !
       
   288 
       
   289 valueOfFileName
       
   290 
       
   291     |holder|
       
   292     (holder := builder bindingAt:#valueOfFileName) isNil ifTrue:[
       
   293         builder aspectAt:#valueOfFileName put:(holder :=  ValueHolder new).
       
   294     ].
       
   295     ^ holder
       
   296 ! !
       
   297 
       
   298 !FileSelectionBrowser methodsFor:'callbacks'!
       
   299 
       
   300 fileDoubleClicked: aFileName
       
   301 
       
   302     self valueOfFileName value: aFileName.
       
   303     accept value: true.
       
   304     self close
       
   305 !
       
   306 
       
   307 readDirectory
       
   308     "Diesen Mist musste ich machen, weil ztk es nicht fertig bringt,
       
   309     seine Models upzudaten, bevor er die Callbacks aufruft!!!!!!"
       
   310 
       
   311     |dir|
       
   312     directoryView listOfFiles removeAll.
       
   313     directoryView directory: 
       
   314         (dir := (self directoryTreeView model list at:
       
   315         self directoryTreeView model selection) contents name);   
       
   316         readDirectory.
       
   317     directory isNil ifTrue: [self class lastSelection: dir]
       
   318 ! !
       
   319 
       
   320 !FileSelectionBrowser methodsFor:'startup / release'!
       
   321 
       
   322 closeCancel
       
   323 
       
   324     directoryView release.
       
   325     super closeCancel
       
   326 !
       
   327 
       
   328 closeRequest
       
   329 
       
   330     directoryView release.
       
   331     super closeRequest
       
   332 
       
   333 !
       
   334 
       
   335 open
       
   336 
       
   337     super open.
       
   338     accept value
       
   339     ifTrue:
       
   340     [
       
   341         ^(self selectionOfDirectory value ? '') , Filename separator, (self valueOfFileName value ? '')
       
   342     ].
       
   343     ^nil
       
   344 
       
   345 
       
   346 
       
   347 !
       
   348 
       
   349 postBuildWith:aBuilder
       
   350 
       
   351     directoryView listOfFileFilters: listOfFileFilters ? #('*').
       
   352     directoryView fileSelectAction: [:aFileName |self valueOfFileName value: aFileName].
       
   353     directoryView fileDoubleClickAction: [:aFileName |self fileDoubleClicked: aFileName].
       
   354     directoryView fileFilterSelectAction: [:fileFilter|
       
   355     self valueOfFileName value: (
       
   356         ((self valueOfFileName value ? 'unknown') readStream upTo: $.), '.',
       
   357         (fileFilter copy reverse readStream upTo: $.) reverse)].
       
   358     self directoryTreeView selectPathname: directory ? self class lastSelection.
       
   359     self directoryTreeView monitoring: true.
       
   360 
       
   361     ^super postBuildWith:aBuilder
       
   362 ! !
       
   363 
       
   364 !FileSelectionBrowser class methodsFor:'documentation'!
       
   365 
       
   366 version
       
   367     ^ '$Header$'
       
   368 ! !