FileBrowserV2.st
author Claus Gittinger <cg@exept.de>
Wed, 05 Jun 2019 14:16:59 +0200
changeset 18805 f6df57c6dbfb
parent 18456 290717c02899
child 18845 4b4fed53b7e3
permissions -rw-r--r--
#BUGFIX by cg class: AbstractFileBrowser changed: #currentFileNameHolder endless loop if file not present.

"{ Encoding: utf8 }"

"
 COPYRIGHT (c) 2002 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.
"
"{ Package: 'stx:libtool' }"

"{ NameSpace: Smalltalk }"

AbstractFileBrowser subclass:#FileBrowserV2
	instanceVariableNames:'fileEntryFieldHolder pathEntryField previewProcess
		listOfDeviceDrives selectedDeviceDrive imgView lineLabel
		bookmarkBarVisibleHolder bookmarkHolder'
	classVariableNames:''
	poolDictionaries:''
	category:'Interface-Tools-File'
!

!FileBrowserV2 class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 2002 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
"
    FileBrowserV2 is based on Filebrowser

    WARNING: files edited with FileBrowser will have leading spaces (multiple-8)
	     being replaced by tabs. If tabs are to be preserved at other
	     positions (for example, sendmail-config files) they will be
	     corrupt after being written.

    [instance variables]:

	checkDelta      <Integer>       number of seconds of check interval
					(looks ever so often if shown directory
					 has changed). You may make this number
					higher, if your network-times are
					incorrect and thus, the filebrowser
					checks too often.

	compressTabs    <Boolean>       if true, leading spaces will be
					replaced by tabs when saving text

    some of the defaults (long/short list etc.) can be set by the resource file;
    see FileBrowser>>initialize for more details..

    [author:]
	Christian Penk

    [start with:]
	FileBrowserV2 open
"
!

toDo
"
    - the tab for the directory description text editor is not changed if the
      directory description changes to a normal text editor
    - FileDialog should get a file history
    - directorycontentsItem isDirectory fails if it is a symbolic link
    - on sort order change in directory contents browser the columnspec shouldnt not reloaded
    - check all windowspecs with different font types
    - multiple select with mouse moving is flickering (see bestFilename in FilenameEditField)
    - too many system calls on update cycle
    - stop monitoring task for DirectoryTreebrowser and DirectoryContentsBrowser
"
! !

!FileBrowserV2 class methodsFor:'instance creation'!

on:aDirectoryPath
    "return a new FileBrowserV2 in a pathname.
     The browser is not yet open"

   ^ self new
        onDirectory:aDirectoryPath;
        yourself.

    "
     (self on:'/etc') open
    "

    "Modified: / 09-02-2017 / 11:35:29 / stefan"
!

open
    "start a new FileBrowserV2 (in the current directory)"

    | instance |
    instance := self new.
    instance open.
    ^ instance

    "
     FileBrowserV2 open.
     FileBrowserV2 openOn:(OrderedCollection with:(Filename currentDirectory asAbsoluteFilename)) withExtent:800@600
    "
!

openIn:aDirectoryPath
    "backward compatibility"

    ^ self openOn:aDirectoryPath
!

openOn:aFileOrDirectoryPath
    "start a new FileBrowserV2 on aFileOrDirectoryPath.
     if it represents a file, it is opened and shown for editing;
     if it represents a directory, the directory is shown."

    |fn|

    fn := aFileOrDirectoryPath asFilename.
    fn isDirectory ifFalse:[
        ^ self openOnFileNamed:aFileOrDirectoryPath
    ] ifTrue:[
        ^ self openOn:fn withExtent:nil
    ].

    "
     FileBrowserV2 openOn:(Filename currentDirectory asAbsoluteFilename)
     FileBrowserV2 openOn:'Makefile'
    "

    "Modified (comment): / 06-09-2012 / 14:46:54 / cg"
!

openOn:aDirectoryPath withExtent:extentOrNil
    "start a new FileBrowserV2 on aDirectoryPath"

    |instance builder|

    instance := self on:aDirectoryPath.
    builder := instance open.
    extentOrNil notNil ifTrue:[
        builder window extent:extentOrNil.
    ].
    ^ instance

    "
     FileBrowserV2 openOn:(Filename currentDirectory) withExtent:800@600
    "

    "Modified (comment): / 09-02-2017 / 11:40:25 / stefan"
!

openOnDirectory:aDirectoryPath
    "start a new FileBrowserV2 in a pathname"

    ^ self openOn:aDirectoryPath withExtent:nil

    "
     FileBrowserV2 
            openOn:(OrderedCollection 
                        with:(Filename currentDirectory asAbsoluteFilename)
                   ) 
            withExtent:800@600
    "
!

openOnFileNamed:aFilename
    "start a new FileBrowserV2 on a aFilename.
     The browser looks for an appropriate viewer and uses that if one is found;
     otherwise, the file is opened for text editing."

    ^ self openOnFileNamed:aFilename editing:true

    "
     FileBrowserV2 openOnFileNamed:'Makefile'
    "
!

openOnFileNamed:aFilename editing:editing
    "start a new FileBrowserV2 on a aFilename;
     If editing is true, the browser opens the document as text to be edited;
     if false, it looks for an appropriate viewer and uses that if one is found."

    |browser|

    browser := self new.
    browser openOnFileNamed:aFilename editing:editing.
    ^ browser

    "
     FileBrowserV2 openOnFileNamed:'Makefile'
    "
!

openWithAspects:someAspects withExtent:extent
    "start a new FileBrowserV2 taking aspects from a dictionary
     (internal interface - only for spawn)"

    |dir|

    dir := (someAspects at:#currentFileNameHolder ifAbsent:nil) value.
    (dir isNonByteCollection and:[dir notEmpty]) ifTrue:[
        dir := dir first.
    ].
    ^ self openOn:dir withExtent:extent.

    "Modified: / 09-02-2017 / 11:45:51 / stefan"
! !

!FileBrowserV2 class methodsFor:'class initialization'!

initialize
    "/ self installInLauncher.            - now done in phase 2
    ObjectMemory addDependent:self.
!

installInLauncher
    "add myself to the launcher menu and toolBar"

    |menuItem icon action currentLauncher|

    FileBrowserV2 isNil ifTrue:[^ self].

    "JV@2012-04-03: Changed to reflect UserPreferences"
    "/action := (MessageSend receiver:(Smalltalk at:self name) selector:#open).
    action := [ FileBrowser default open].

    icon := [self defaultIcon]. "/ self defaultIcon magnifiedTo:28@28.

"/ already there
"/    menuItem := MenuItem new
"/                    translateLabel: true;
"/                    value: action;
"/                    isButton: false;
"/                    label:'File Browser' icon:icon;
"/                    nameKey: #fileBrowserV2;
"/                    activeHelpKey: #fileBrowserV2;
"/                    submenuChannel: #menuFileHistory;
"/                    showBusyCursorWhilePerforming:true.
"/
"/    NewLauncher
"/        addMenuItem:menuItem
"/        from:self
"/        in:'menu.file'
"/        position:#( #before #fileBrowser)
"/        space:true.

    menuItem := MenuItem new
                    itemValue: action;
                    isButton: true;
                    "label:'File Browser'" icon:icon;
                    nameKey: #fileBrowserV2;
                    activeHelpKey: #fileBrowserV2;
                    submenuChannel: #menuFileHistory;
                    showBusyCursorWhilePerforming:true.

    NewLauncher
        addMenuItem:menuItem
        from:self
        in:'toolbar'
        position:#( #before #fileBrowser)
        space:false.

    currentLauncher := NewLauncher current.
    currentLauncher notNil ifTrue:[
        currentLauncher fileBrowserItemVisible value:false
    ].
    NewLauncher addSettingsApplicationByClass:#'FileBrowserV2SettingsAppl'
                withName:'Tools/FileBrowserV2'
                icon:nil.

    "
     self installInLauncher
     self removeFromLauncher
    "

    "Modified: / 03-04-2012 / 11:06:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 01-09-2017 / 14:05:06 / cg"
!

removeFromLauncher
    "remove myself from the launcher's menu & settings dialog"

    |currentLauncher|

    NewLauncher isNil ifTrue:[^ self].
    NewLauncher removeUserTool:#fileBrowserV2.
    currentLauncher := NewLauncher current.
    currentLauncher notNil ifTrue:[
        currentLauncher fileBrowserItemVisible value:false
    ].
    NewLauncher removeSettingsApplicationByClass:#'FileBrowserV2SettingsAppl'.

    "
     self removeFromLauncher
    "
!

update:something with:aParameter from:changedObject
    something == #initialized ifTrue:[
	changedObject == ObjectMemory ifTrue:[
	    self installInLauncher.
	    ObjectMemory removeDependent:self.
	]
    ].
! !

!FileBrowserV2 class methodsFor:'defaults'!

entryFieldEndStringForMultipleSelection

    ^ ('[*]')
! !

!FileBrowserV2 class methodsFor:'help specs'!

helpSpec
    "This resource specification was automatically generated
     by the UIHelpTool of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the UIHelpTool may not be able to read the specification."

    "
     UIHelpTool openOnClass:FileBrowserV2
    "

    <resource: #help>

    ^ super helpSpec addPairsFrom:#(

#columnLabel
'The text-cursor''s column number'

#lineAndColumnLabel
'The text-cursor''s line and column number'

#encodingLabel
'The file''s encoding (Right-click to change)'

#encodingLockedLabel
'Lock the file-encoding (do not try to guess from the file''s contents)'

#fileFilter
'Only show files matching the pattern.\Separate multiple patterns by ";".\Patterns starting with "~" are excluding.'

#lineLabel
'The text-cursor''s line number. Double-click to change'

#modeLabel
'The editing mode (Insert vs. overwrite)'

#numberOfFiles
'Number of files shown (Total number of files in directory)'

)

    "Modified: / 06-10-2011 / 14:37:12 / cg"
! !

!FileBrowserV2 class methodsFor:'image specs'!

applicationIcon
    <resource: #programImage>

    ^ self defaultIcon

    "Modified: / 28-07-2018 / 09:56:55 / Claus Gittinger"
!

closePreviewButtonImage
    <resource: #programImage>

      ^ ToolbarIconLibrary removeTabIcon

    "Modified: / 28-07-2018 / 09:56:52 / Claus Gittinger"
!

defaultIcon
    <resource: #programImage>

    ^ ToolbarIconLibrary startNewFileBrowserIcon
!

encodingLockIcon
    <resource: #programImage>

    ^ ToolbarIconLibrary encodingLockIcon
!

hideFilenameEntryFieldIcon
    <resource: #programImage>

    ^ ToolbarIconLibrary hideToolbarIconH14
!

hideToolBarIcon
    <resource: #programImage>

    ^ ToolbarIconLibrary hideToolbarIconH26
! !

!FileBrowserV2 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:FileBrowserV2 andSelector:#windowSpec
     FileBrowserV2 new openInterface:#windowSpec
     FileBrowserV2 open
    "

    <resource: #canvas>

    ^ 
    #(FullSpec
       name: windowSpec
       window: 
      (WindowSpec
         label: FileBrowser
         name: FileBrowser
         min: (Point 10 10)
         bounds: (Rectangle 0 0 800 600)
         menu: mainMenu
         icon: defaultIcon
       )
       component: 
      (SpecCollection
         collection: (
          (ViewSpec
             name: 'ToolbarBox'
             layout: (LayoutFrame 0 0 0 0 0 1 40 0)
             level: 0
             visibilityChannel: toolBarVisibleHolder
             component: 
            (SpecCollection
               collection: (
                (ActionButtonSpec
                   label: 'hideToolBarIcon'
                   name: 'HideToolBarButton'
                   layout: (LayoutFrame 0 0 0 0 13 0 40 0)
                   activeHelpKey: hideToolBar
                   hasCharacterOrientedLabel: false
                   translateLabel: true
                   model: hideToolbar
                   postBuildCallback: hideToolBarButtonCreated:
                 )
                (MenuPanelSpec
                   name: 'ToolBar'
                   layout: (LayoutFrame 13 0 0 0 0 1 40 0)
                   menu: toolBarMainMenu
                   textDefault: true
                 )
                )
              
             )
           )
          (ViewSpec
             name: 'BookmarkBar'
             layout: (LayoutFrame 0 0 40 0 0 1 66 0)
             visibilityChannel: bookmarkBarVisibleHolder
             component: 
            (SpecCollection
               collection: (
                (ActionButtonSpec
                   label: 'hideToolBarIcon'
                   name: 'Button1'
                   layout: (LayoutFrame 0 0 0 0 13 0 0 1)
                   activeHelpKey: hideBookmarks
                   hasCharacterOrientedLabel: false
                   translateLabel: true
                   model: hideBookmarkBar
                   postBuildCallback: hideToolBarButtonCreated:
                 )
                (SubCanvasSpec
                   name: 'Bookmarks'
                   layout: (LayoutFrame 13 0 0 0 0 1 0 1)
                   level: 1
                   hasHorizontalScrollBar: false
                   hasVerticalScrollBar: false
                   miniScrollerHorizontal: false
                   majorKey: BookmarkBar
                   subAspectHolders: 
                  (Array
                     
                    (SubChannelInfoSpec
                       subAspect: bookmarkHolder
                       aspect: bookmarkHolder
                     ) 
                    (SubChannelInfoSpec
                       subAspect: bookmarksHolder
                       aspect: bookmarkListHolder
                     )
                   )
                   createNewApplication: true
                   createNewBuilder: true
                 )
                )
              
             )
           )
          (ViewSpec
             name: 'FilenameEntryFieldBox'
             layout: (LayoutFrame 0 0 67 0 0 1 92 0)
             visibilityChannel: filenameEntryFieldVisibleHolder
             component: 
            (SpecCollection
               collection: (
                (ActionButtonSpec
                   label: 'hideFilenameEntryFieldIcon'
                   name: 'HideFilenameEntryFieldButton'
                   layout: (LayoutFrame 0 0 0 0 13 0 0 1)
                   activeHelpKey: hideFilenameEntryField
                   hasCharacterOrientedLabel: false
                   translateLabel: true
                   model: hideFilenameEntryField
                   postBuildCallback: hideFilenameEntryFieldButtonCreated:
                 )
                (HorizontalPanelViewSpec
                   name: 'HorizontalPanel1'
                   layout: (LayoutFrame 13 0.0 0 0.0 0 1.0 0 1.0)
                   level: 1
                   horizontalLayout: leftFit
                   verticalLayout: fit
                   horizontalSpace: 3
                   verticalSpace: 3
                   component: 
                  (SpecCollection
                     collection: (
                      (ComboListSpec
                         name: 'ComboList1'
                         visibilityChannel: driveSelectorVisible
                         model: selectedDeviceDrive
                         comboList: listOfDeviceDrives
                         useIndex: false
                         hidePullDownMenuButton: false
                         extent: (Point 53 21)
                       )
                      (VariableHorizontalPanelSpec
                         name: 'VariableHorizontalPanel1'
                         level: 0
                         showHandle: true
                         component: 
                        (SpecCollection
                           collection: (
                            (NonScrollableArbitraryComponentSpec
                               name: 'NonScrollableArbitraryComponent1'
                               component: FilenameEditFieldV2
                               postBuildCallback: postBuildEditField:
                             )
                            (ViewSpec
                               name: 'FilterBox'
                               component: 
                              (SpecCollection
                                 collection: (
                                  (LabelSpec
                                     label: 'Filter:'
                                     name: 'Filter'
                                     layout: (LayoutFrame 0 0 0 0 40 0 0 1)
                                     translateLabel: true
                                     adjust: left
                                     postBuildCallback: postBuildPathViewBox:
                                   )
                                  (ComboBoxSpec
                                     name: 'FilterSelectionBox'
                                     layout: (LayoutFrame 40 0 0 0 0 1 0 1)
                                     model: filterModel
                                     immediateAccept: true
                                     acceptOnPointerLeave: false
                                     comboList: filterListModel
                                   )
                                  )
                                
                               )
                               postBuildCallback: postBuildPathViewBox:
                             )
                            )
                          
                         )
                         handles: (Any 0.77493599999999996 1.0)
                         postBuildCallback: postBuildPathViewBox:
                         useDefaultExtent: true
                       )
                      )
                    
                   )
                   postBuildCallback: postBuildPathViewBox:
                 )
                )
              
             )
           )
          (#'FileBrowserV2UISpecifications::PanelSpec'
             name: 'BrowserBox'
             layout: (LayoutFrame 0 0.0 92 0.0 0 1.0 -26 1.0)
             level: 0
             showHandle: true
             snapMode: both
             whichView: last
             orientation: vertical
             visibility: viewNoteBookApplicationHolder
             component: 
            (SpecCollection
               collection: (
                (#'FileBrowserV2UISpecifications::PanelSpec'
                   name: 'HorizontalPanel'
                   level: 0
                   snapMode: both
                   whichView: first
                   orientation: horizontal
                   visibility: showDirectoryTree
                   component: 
                  (SpecCollection
                     collection: (
                      (SubCanvasSpec
                         name: 'DirectoryTreeBrowser'
                         hasHorizontalScrollBar: false
                         hasVerticalScrollBar: false
                         majorKey: DirectoryTreeBrowser
                         createNewApplication: true
                         createNewBuilder: true
                         postBuildCallback: postBuildDirectoryTree:
                       )
                      (SubCanvasSpec
                         name: 'DirectoryContentsBrowser'
                         hasHorizontalScrollBar: false
                         hasVerticalScrollBar: false
                         majorKey: DirectoryContentsBrowser
                         createNewApplication: true
                         createNewBuilder: true
                       )
                      )
                    
                   )
                   handles: (Any 0.22500000000000001 1.0)
                 )
                (SubCanvasSpec
                   name: 'FileApplicationNoteBook'
                   tabable: false
                   hasHorizontalScrollBar: false
                   hasVerticalScrollBar: false
                   majorKey: FileApplicationNoteBook
                   createNewApplication: true
                   createNewBuilder: true
                 )
                )
              
             )
             handles: (Any 0.5 1.0)
           )
          (ViewSpec
             name: 'InfoBox'
             layout: (LayoutFrame 0 0 -26 1 -16 1 0 1)
             level: 0
             visibilityChannel: infoBarVisibleHolder
             component: 
            (SpecCollection
               collection: (
                (LabelSpec
                   label: 'NotifyLabel'
                   name: 'NotifyLabel'
                   layout: (LayoutFrame 0 0 1 0.0 -220 1 1 1.0)
                   level: -1
                   translateLabel: true
                   labelChannel: notifyChannel
                   adjust: left
                 )
                (LabelSpec
                   label: 'encoding'
                   name: 'EncodingLabel'
                   layout: (LayoutFrame -318 1 2 0.0 -235 1 0 1.0)
                   activeHelpKey: encodingLabel
                   level: 0
                   translateLabel: true
                   labelChannel: fileEncodingHolder
                   adjust: right
                   menu: encodingMenu
                 )
                (LabelSpec
                   name: 'FileEncodingLockedLabel'
                   layout: (LayoutFrame -235 1 2 0.0 -220 1 20 0.0)
                   activeHelpKey: encodingLockedLabel
                   level: 0
                   translateLabel: true
                   labelChannel: fileEncodingLockImageHolder
                   adjust: right
                   menu: encodingMenu
                 )
                (LabelSpec
                   label: 'Shown Files'
                   name: 'ShownFilesLabel'
                   layout: (LayoutFrame -220 1 1 0.0 -65 1 1 1.0)
                   activeHelpKey: numberOfFiles
                   level: -1
                   translateLabel: true
                   labelChannel: shownFiles
                   adjust: right
                 )
                (ViewSpec
                   name: 'ProgressIndicatorBox'
                   layout: (LayoutFrame -220 1 1 0.0 -65 1 1 1.0)
                   level: -1
                   visibilityChannel: activityVisibilityChannel
                   component: 
                  (SpecCollection
                     collection: (
                      (ProgressIndicatorSpec
                         name: 'ProgressIndicator1'
                         layout: (LayoutFrame 5 0.0 -7 0.5 -5 1.0 7 0.5)
                         backgroundColor: (Color 0.0 66.75 66.75)
                         isActivityIndicator: true
                       )
                      )
                    
                   )
                 )
                (LabelSpec
                   name: 'BusyLabel'
                   layout: (LayoutFrame -220 1 1 0.0 -65 1 1 1.0)
                   activeHelpKey: modeLabel
                   level: -1
                   visibilityChannel: busyLabelVisibleHolder
                   translateLabel: true
                   labelChannel: busyLabelHolder
                   adjust: right
                 )
                (LabelSpec
                   label: 'M'
                   name: 'ModeLabel'
                   layout: (LayoutFrame -65 1 1 0.0 -55 1 1 1.0)
                   activeHelpKey: modeLabel
                   level: -1
                   translateLabel: true
                   labelChannel: modeLabelHolder
                   adjust: right
                   postBuildCallback: postBuildEditModeInfoLabel:
                 )
                (LabelSpec
                   label: 'L : C'
                   name: 'LineAndColumnLabel'
                   layout: (LayoutFrame -55 1 1 0.0 0 1 1 1.0)
                   activeHelpKey: lineAndColumnLabel
                   level: -1
                   labelChannel: cursorLineAndColumnLabelHolder
                   adjust: left
                 )
                )
              
             )
             keepSpaceForOSXResizeHandleH: true
           )
          (LabelSpec
             label: 'Preview'
             name: 'PreviewLabel'
             layout: (LayoutFrame 0 0.5 93 0 100 0.5 115 0)
             level: 0
             borderWidth: 1
             visibilityChannel: previewVisibleHolder
             backgroundColor: (Color 87.0 87.0 87.0)
             translateLabel: true
           )
          (ArbitraryComponentSpec
             name: 'Preview'
             layout: (LayoutFrame 0 0.5 116 0 -147 1 -266 1)
             level: 1
             visibilityChannel: previewVisibleHolder
             hasBorder: false
             component: ImageView
           )
          (ActionButtonSpec
             label: 'closePreviewButtonImage'
             name: 'ClosePreviewButton'
             layout: (LayoutFrame -169 1 94 0 -147 1 116 0)
             visibilityChannel: previewVisibleHolder
             hasCharacterOrientedLabel: false
             translateLabel: true
           )
          )
        
       )
     )
! !

!FileBrowserV2 class methodsFor:'menu specs'!

editModeInfoLabelMenu
    "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:Tools::NewSystemBrowser andSelector:#editModeInfoLabelMenu
     (Menu new fromLiteralArrayEncoding:(Tools::NewSystemBrowser editModeInfoLabelMenu)) startUp
    "

    <resource: #menu>

    ^
     #(Menu
	(
	 (MenuItem
	    label: 'Insert'
	    itemValue: editModeInsert
	    translateLabel: true
	  )
	 (MenuItem
	    label: 'Overwrite'
	    itemValue: editModeOverwrite
	    translateLabel: true
	  )
	 (MenuItem
	    label: 'Insert Selecting'
	    itemValue: editModeInsertAndSelect
	    translateLabel: true
	  )
	 )
	nil
	nil
      )

    "Created: / 11-09-2006 / 12:23:59 / cg"
!

encodingMenu
    "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:FileBrowserV2 andSelector:#encodingMenu
     (Menu new fromLiteralArrayEncoding:(FileBrowserV2 encodingMenu)) startUp
    "

    <resource: #menu>

    ^
     #(Menu
	(
	 (MenuItem
	    label: 'Encoding...'
	    itemValue: fileEncodingDialog
	    translateLabel: true
	  )
	 (MenuItem
	    label: '-'
	  )
	 (MenuItem
	    label: 'Locked'
	    translateLabel: true
	    indication: lockFileEncodingHolder
	  )
	 )
	nil
	nil
      )
!

mainMenu
    "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:FileBrowserV2 andSelector:#mainMenu
     (Menu new fromLiteralArrayEncoding:(FileBrowserV2 mainMenu)) startUp
    "

    <resource: #menu>

    ^ 
     #(Menu
        (
         (MenuItem
            label: 'Browser'
            submenuChannel: browserMenu
          )
         (MenuItem
            label: 'Directory'
            submenuChannel: directoryMenu
          )
         (MenuItem
            label: 'File'
            submenuChannel: fileMenu
          )
         (MenuItem
            label: 'Edit'
            submenuChannel: editMenu
          )
         (MenuItem
            label: 'MENU_View'
            submenu: 
           (Menu
              (
               (MenuItem
                  label: 'Details'
                  submenuChannel: viewInContentsBrowserMenu
                )
               (MenuItem
                  label: 'Sort'
                  submenuChannel: sortMenu
                )
               (MenuItem
                  label: 'Show'
                  submenuChannel: showMenuSpec
                )
               (MenuItem
                  label: '-'
                )
               (MenuItem
                  label: 'Toolbar'
                  hideMenuOnActivated: false
                  indication: toolBarVisibleHolder
                )
               (MenuItem
                  label: 'Bookmarks'
                  hideMenuOnActivated: false
                  indication: bookmarkBarVisibleHolder
                )
               (MenuItem
                  label: 'Path Entry && Filter'
                  hideMenuOnActivated: false
                  indication: filenameEntryFieldVisibleHolder
                )
               (MenuItem
                  label: 'Info'
                  hideMenuOnActivated: false
                  indication: infoBarVisibleHolder
                )
               (MenuItem
                  label: 'Tags'
                  hideMenuOnActivated: false
                  indication: tagsBrowserVisibleHolder
                )
               (MenuItem
                  label: 'Preview'
                  hideMenuOnActivated: false
                  indication: previewVisibleHolder
                )
               (MenuItem
                  label: '-'
                )
               (MenuItem
                  label: 'Update'
                  itemValue: updateCurrentDirectory
                )
               )
              nil
              nil
            )
          )
         (MenuItem
            label: 'Tools'
            submenuChannel: toolsMenuSpec
          )
         (MenuItem
            label: 'Source Code Management'
            submenuChannel: scmMenuSlice
            isMenuSlice: true
          )
         (MenuItem
            label: 'Extras'
            submenuChannel: extraMenu
          )
         (MenuItem
            label: 'MENU_Help'
            startGroup: conditionalRight
            submenu: 
           (Menu
              (
               (MenuItem
                  label: 'FileBrowser Documentation'
                  itemValue: openHTMLDocument:
                  argument: 'tools/fbrowserV2/TOP.html'
                )
               (MenuItem
                  label: '-'
                )
               (MenuItem
                  label: 'About FileBrowser...'
                  itemValue: openAboutThisApplication
                )
               )
              nil
              nil
            )
          )
         )
        nil
        nil
      )
!

previewLabelMenu
    "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:FileBrowserV2 andSelector:#previewLabelMenu
     (Menu new fromLiteralArrayEncoding:(FileBrowserV2 previewLabelMenu)) startUp
    "

    <resource: #menu>

    ^
     #(#Menu
	#(
	 #(#MenuItem
	    #label: 'Close Preview'
	    #itemValue: #closePreview
	    #translateLabel: true
	  )
	 )
	nil
	nil
      )
!

toolBarMainMenu
    "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:FileBrowserV2 andSelector:#toolBarMainMenu
     (Menu new fromLiteralArrayEncoding:(FileBrowserV2 toolBarMainMenu)) startUp
    "

    <resource: #menu>

    ^ 
     #(Menu
        (
         (MenuItem
            activeHelpKey: directoryBack
            enabled: enableBack
            label: 'Back'
            itemValue: doBack
            isButton: true
            submenuChannel: menuDirHistoryBack
            labelImage: (ResourceRetriever ToolbarIconLibrary historyBackIcon)
          )
         (MenuItem
            label: ''
          )
         (MenuItem
            activeHelpKey: directoryForward
            enabled: enableForward
            label: 'Forward'
            itemValue: doForward
            isButton: true
            submenuChannel: menuDirHistoryForward
            labelImage: (ResourceRetriever ToolbarIconLibrary historyForwardIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: directoryUp
            enabled: enableDirectoryUp
            label: 'DirectoryUp'
            itemValue: doGoDirectoryUp
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary directoryUpIcon)
          )
         (MenuItem
            activeHelpKey: fileDesktop
            enabled: enableGotoDesktopDirectory
            label: 'Desktop'
            itemValue: doGotoDesktopDirectory
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary desktopIcon)
          )
         (MenuItem
            activeHelpKey: fileHome
            enabled: enableHome
            label: 'Home'
            itemValue: doGotoHomeDirectory
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary homeIcon)
          )
         (MenuItem
            activeHelpKey: fileGotoDefaultDirectory
            enabled: enableGotoDefaultDirectory
            label: 'Current'
            itemValue: doGotoDefaultDirectory
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary currentDirectoryIcon)
          )
         (MenuItem
            activeHelpKey: fileGotoSmalltalkDirectory
            enabled: enableGotoSmalltalkDirectory
            label: 'ST/X Default'
            itemValue: doGotoSmalltalkDirectory
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary stxHomeIcon)
          )
         (MenuItem
            activeHelpKey: fileGotoBookmark
            label: 'Bookmarks'
            isButton: true
            isVisible: false
            submenuChannel: gotoBookmarksMenu
            labelImage: (ResourceRetriever ToolbarIconLibrary directoryBookmarksIcon)
          )
         (MenuItem
            activeHelpKey: fileHistory
            enabled: enableFileHistory
            label: 'File History'
            isButton: true
            isVisible: false
            submenuChannel: menuFileHistory
            labelImage: (ResourceRetriever ToolbarIconLibrary historyIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: searchFile
            label: 'Search File'
            itemValue: doOpenSearchFile
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary searchFileIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: cutFile
            enabled: hasSelection
            label: 'Cut'
            itemValue: cutFiles
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary cutFileIcon)
          )
         (MenuItem
            activeHelpKey: copyFile
            enabled: hasSelection
            label: 'Copy'
            itemValue: copyFiles
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary copyFileIcon)
          )
         (MenuItem
            activeHelpKey: pasteFile
            enabled: canPaste
            label: 'Paste'
            itemValue: pasteFiles
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary pasteFileIcon)
          )
         (MenuItem
            activeHelpKey: deleteFile
            enabled: hasSelection
            label: 'Delete'
            itemValue: deleteFiles
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary deleteFileIcon)
          )
         (MenuItem
            label: '-'
            isVisible: false
          )
         (MenuItem
            activeHelpKey: editFile
            label: 'Edit File'
            itemValue: doShowFileContents
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary editFileIcon)
          )
         (MenuItem
            activeHelpKey: fileIn
            label: 'File In'
            itemValue: fileFileIn
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary fileInIcon)
          )
         (MenuItem
            activeHelpKey: openChangeBrowser
            enabled: canOpenChangeBrowser
            label: 'Changes Browser'
            itemValue: openChangesBrowser
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary startChangesBrowserIcon)
          )
         (MenuItem
            label: '-'
            isVisible: false
          )
         (MenuItem
            activeHelpKey: addTerminal
            label: 'VT100'
            itemValue: doAddTerminal
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary shellTerminalIcon)
          )
         (MenuItem
            activeHelpKey: make
            enabled: canMake
            label: 'Make'
            itemValue: doMake
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary make24x24Icon3)
          )
         (MenuItem
            activeHelpKey: viewDetails
            label: 'viewDetails'
            isButton: true
            startGroup: right
            hideMenuOnActivated: false
            indication: viewDetails
            labelImage: (ResourceRetriever ToolbarIconLibrary viewDetailsIcon)
          )
         (MenuItem
            activeHelpKey: viewDetails
            label: 'viewDetails'
            isButton: true
            startGroup: right
            isVisible: false
            indication: viewDetails
            submenuChannel: viewDetailsMenuSpec
            labelImage: (ResourceRetriever ToolbarIconLibrary viewDetailsIcon)
          )
         (MenuItem
            activeHelpKey: selectDetails
            label: ''
            isButton: true
            startGroup: right
            submenuChannel: viewDetailsMenuSpec
            labelImage: (ResourceRetriever ToolbarIconLibrary empty1x20Icon)
          )
         )
        nil
        nil
      )

    "Modified: / 30-06-2018 / 18:29:25 / Claus Gittinger"
!

toolBarMainMenu_new
    "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:FileBrowserV2 andSelector:#toolBarMainMenu_new
     (Menu new fromLiteralArrayEncoding:(FileBrowserV2 toolBarMainMenu_new)) startUp
    "

    <resource: #menu>

    ^ 
     #(Menu
        (
         (MenuItem
            activeHelpKey: directoryBack
            enabled: enableBack
            label: 'Back'
            itemValue: doBack
            isButton: true
            submenuChannel: menuDirHistoryBack
            labelImage: (ResourceRetriever ToolbarIconLibrary historyBackIcon)
          )
         (MenuItem
            label: ''
          )
         (MenuItem
            activeHelpKey: directoryForward
            enabled: enableForward
            label: 'Forward'
            itemValue: doForward
            isButton: true
            submenuChannel: menuDirHistoryForward
            labelImage: (ResourceRetriever ToolbarIconLibrary historyForwardIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: directoryUp
            enabled: enableDirectoryUp
            label: 'DirectoryUp'
            itemValue: doGoDirectoryUp
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary directoryUpIcon)
          )
         (MenuItem
            activeHelpKey: fileHome
            enabled: enableGotoHomeDirectory
            label: 'Home'
            itemValue: doGotoHomeDirectory
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary homeIcon)
          )
         (MenuItem
            activeHelpKey: gotoDesktop
            enabled: enableGotoDesktopDirectory
            label: 'Desktop'
            itemValue: doGotoDesktopDirectory
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary desktopIcon)
          )
         (MenuItem
            activeHelpKey: fileGotoDefaultDirectory
            enabled: enableGotoDefaultDirectory
            label: 'Current'
            itemValue: doGotoDefaultDirectory
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary currentDirectoryIcon)
          )
         (MenuItem
            activeHelpKey: fileGotoSmalltalkDirectory
            enabled: enableGotoSmalltalkDirectory
            label: 'ST/X Default'
            itemValue: doGotoSmalltalkDirectory
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary stxHomeIcon)
          )
         (MenuItem
            activeHelpKey: fileGotoBookmark
            label: 'Bookmarks'
            isButton: true
            isVisible: false
            submenuChannel: gotoBookmarksMenu
            labelImage: (ResourceRetriever ToolbarIconLibrary directoryBookmarksIcon)
          )
         (MenuItem
            activeHelpKey: fileHistory
            enabled: enableFileHistory
            label: 'File History'
            isButton: true
            isVisible: false
            submenuChannel: menuFileHistory
            labelImage: (ResourceRetriever ToolbarIconLibrary historyIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: searchFile
            label: 'Search File'
            itemValue: doOpenSearchFile
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary searchFileIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: cutFile
            enabled: hasSelection
            label: 'Cut'
            itemValue: cutFiles
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary cutFileIcon)
          )
         (MenuItem
            activeHelpKey: copyFile
            enabled: hasSelection
            label: 'Copy'
            itemValue: copyFiles
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary copyFileIcon)
          )
         (MenuItem
            activeHelpKey: pasteFile
            enabled: canPaste
            label: 'Paste'
            itemValue: pasteFiles
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary pasteFileIcon)
          )
         (MenuItem
            activeHelpKey: deleteFile
            enabled: hasSelection
            label: 'Delete'
            itemValue: deleteFiles
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary deleteFileIcon)
          )
         (MenuItem
            label: '-'
            isVisible: false
          )
         (MenuItem
            activeHelpKey: editFile
            label: 'Edit File'
            itemValue: doShowFileContents
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary editFileIcon)
          )
         (MenuItem
            activeHelpKey: fileIn
            label: 'File In'
            itemValue: fileFileIn
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary fileInIcon)
          )
         (MenuItem
            activeHelpKey: openChangeBrowser
            enabled: hasFileSelection
            label: 'Changes Browser'
            itemValue: openChangesBrowser
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary startChangesBrowserIcon)
          )
         (MenuItem
            label: '-'
            isVisible: false
          )
         (MenuItem
            activeHelpKey: addTerminal
            label: 'VT100'
            itemValue: doAddTerminal
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary shellTerminalIcon)
          )
         (MenuItem
            activeHelpKey: make
            enabled: canMake
            label: 'Make'
            itemValue: doMake
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary make24x24Icon3)
          )
         (MenuItem
            activeHelpKey: viewDetails
            label: 'viewDetails'
            isButton: true
            startGroup: right
            hideMenuOnActivated: false
            indication: viewDetails
            labelImage: (ResourceRetriever ToolbarIconLibrary viewDetailsIcon)
          )
         (MenuItem
            activeHelpKey: viewDetails
            label: 'viewDetails'
            isButton: true
            startGroup: right
            isVisible: false
            indication: viewDetails
            submenuChannel: viewDetailsMenuSpec
            labelImage: (ResourceRetriever ToolbarIconLibrary viewDetailsIcon)
          )
         (MenuItem
            activeHelpKey: selectDetails
            label: ''
            isButton: true
            startGroup: right
            submenuChannel: viewDetailsMenuSpec
            labelImage: (ResourceRetriever ToolbarIconLibrary empty1x20Icon)
          )
         )
        nil
        nil
      )
!

toolBarMainMenu_old
    "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:FileBrowserV2 andSelector:#toolBarMainMenu_old
     (Menu new fromLiteralArrayEncoding:(FileBrowserV2 toolBarMainMenu_old)) startUp
    "

    <resource: #menu>

    ^ 
     #(Menu
        (
         (MenuItem
            activeHelpKey: directoryBack
            enabled: enableBack
            label: 'Back'
            itemValue: doBack
            isButton: true
            submenuChannel: menuDirHistoryBack
            labelImage: (ResourceRetriever ToolbarIconLibrary historyBackIcon)
          )
         (MenuItem
            label: ''
          )
         (MenuItem
            activeHelpKey: directoryForward
            enabled: enableForward
            label: 'Forward'
            itemValue: doForward
            isButton: true
            submenuChannel: menuDirHistoryForward
            labelImage: (ResourceRetriever ToolbarIconLibrary historyForwardIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: directoryUp
            enabled: enableDirectoryUp
            label: 'DirectoryUp'
            itemValue: doGoDirectoryUp
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary directoryUpIcon)
          )
         (MenuItem
            activeHelpKey: fileHome
            enabled: enableHome
            label: 'Home'
            itemValue: doGotoHomeDirectory
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary homeIcon)
          )
         (MenuItem
            activeHelpKey: gotoDesktop
            enabled: enableGotoDesktopDirectory
            label: 'Desktop'
            itemValue: doGotoDesktopDirectory
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary desktopIcon)
          )
         (MenuItem
            activeHelpKey: fileGotoDefaultDirectory
            enabled: enableGotoDefaultDirectory
            label: 'Current'
            itemValue: doGotoDefaultDirectory
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary currentDirectoryIcon)
          )
         (MenuItem
            activeHelpKey: fileGotoSmalltalkDirectory
            enabled: enableGotoSmalltalkDirectory
            label: 'ST/X Default'
            itemValue: doGotoSmalltalkDirectory
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary stxHomeIcon)
          )
         (MenuItem
            activeHelpKey: fileGotoBookmark
            label: 'Bookmarks'
            isButton: true
            submenuChannel: gotoBookmarksMenu
            labelImage: (ResourceRetriever ToolbarIconLibrary directoryBookmarksIcon)
          )
         (MenuItem
            activeHelpKey: fileHistory
            enabled: enableFileHistory
            label: 'File History'
            isButton: true
            submenuChannel: menuFileHistory
            labelImage: (ResourceRetriever ToolbarIconLibrary historyIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: searchFile
            label: 'Search File'
            itemValue: doOpenSearchFile
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary searchFileIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: cutFile
            enabled: hasSelection
            label: 'Cut'
            itemValue: cutFiles
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary cutFileIcon)
          )
         (MenuItem
            activeHelpKey: copyFile
            enabled: hasSelection
            label: 'Copy'
            itemValue: copyFiles
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary copyFileIcon)
          )
         (MenuItem
            activeHelpKey: pasteFile
            enabled: canPaste
            label: 'Paste'
            itemValue: pasteFiles
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary pasteFileIcon)
          )
         (MenuItem
            activeHelpKey: deleteFile
            enabled: hasSelection
            label: 'Delete'
            itemValue: deleteFiles
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary deleteFileIcon)
          )
         (MenuItem
            label: '-'
          )
         (MenuItem
            activeHelpKey: editFile
            label: 'Edit File'
            itemValue: doShowFileContents
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary editFileIcon)
          )
         (MenuItem
            activeHelpKey: fileIn
            label: 'File In'
            itemValue: fileFileIn
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary fileInIcon)
          )
         (MenuItem
            activeHelpKey: openChangeBrowser
            enabled: hasFileSelection
            label: 'Changes Browser'
            itemValue: openChangesBrowser
            isButton: true
            labelImage: (ResourceRetriever ToolbarIconLibrary startChangesBrowserIcon)
          )
         (MenuItem
            label: '-'
            isVisible: false
          )
         (MenuItem
            activeHelpKey: addTerminal
            label: 'VT100'
            itemValue: doAddTerminal
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary shellTerminalIcon)
          )
         (MenuItem
            activeHelpKey: make
            enabled: canMake
            label: 'Make'
            itemValue: doMake
            isButton: true
            isVisible: false
            labelImage: (ResourceRetriever ToolbarIconLibrary makeIcon)
          )
         (MenuItem
            activeHelpKey: viewDetails
            label: 'viewDetails'
            isButton: true
            startGroup: right
            hideMenuOnActivated: false
            indication: viewDetails
            labelImage: (ResourceRetriever ToolbarIconLibrary viewDetailsIcon)
          )
         (MenuItem
            activeHelpKey: viewDetails
            label: 'viewDetails'
            isButton: true
            startGroup: right
            isVisible: false
            indication: viewDetails
            submenuChannel: viewDetailsMenuSpec
            labelImage: (ResourceRetriever ToolbarIconLibrary viewDetailsIcon)
          )
         (MenuItem
            activeHelpKey: selectDetails
            label: ''
            isButton: true
            startGroup: right
            submenuChannel: viewDetailsMenuSpec
            labelImage: (ResourceRetriever ToolbarIconLibrary empty1x20Icon)
          )
         )
        nil
        nil
      )
! !

!FileBrowserV2 methodsFor:'actions'!

changeFileBrowserTitleTo:aString

    |string|

    string := 'FileBrowser: ', aString.
    self window label:string.
!

doSpawn

    self saveRuntimeAspectValues.
    self class openWithAspects:aspects withExtent:(self builder window extent).
!

hideBookmarkBar
    "hide the bookmarks - called when the button to the left of the toolbar is clicked"

    self bookmarkBarVisibleHolder value:false

    "Created: / 04-04-2012 / 12:08:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

hideFilenameEntryField
    self filenameEntryFieldVisibleHolder value:false.
!

hideToolbar
    "hide the toolbar - called when the button to the left of the toolbar is clicked"

    self toolBarVisibleHolder value:false.
!

switchToBookmarkEntry: bookmark

    self gotoFile: bookmark path asFilename

    "Created: / 20-04-2012 / 18:07:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

toggleFileDetailsFor:anItem
    |viewDetails|

    viewDetails := self viewDetails value not.
    self viewDetails value:viewDetails.

    viewDetails ifTrue:[
	anItem activeHelpKey:#hideFileDetails.
	anItem label:(ToolbarIconLibrary viewNoDetailsIcon).
    ] ifFalse:[
	anItem activeHelpKey:#showFileDetails.
	anItem label:(ToolbarIconLibrary viewDetailsIcon).
    ].
! !

!FileBrowserV2 methodsFor:'aspects'!

bookmarkBarVisibleHolder
    "return/create the 'bookmarkBarVisibleHolder' value holder (automatically generated)"

    bookmarkBarVisibleHolder isNil ifTrue:[
        bookmarkBarVisibleHolder := ValueHolder with:true.
        bookmarkBarVisibleHolder addDependent:self.
    ].
    ^ bookmarkBarVisibleHolder

    "Modified: / 10-06-2011 / 23:56:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

bookmarkBarVisibleHolder:something
    "set the 'bookmarkBarVisibleHolder' value holder (automatically generated)"

    |oldValue newValue|

    bookmarkBarVisibleHolder notNil ifTrue:[
        oldValue := bookmarkBarVisibleHolder value.
        bookmarkBarVisibleHolder removeDependent:self.
    ].
    bookmarkBarVisibleHolder := something.
    bookmarkBarVisibleHolder notNil ifTrue:[
        bookmarkBarVisibleHolder addDependent:self.
    ].
    newValue := bookmarkBarVisibleHolder value.
    oldValue ~~ newValue ifTrue:[
        self update:#value with:newValue from:bookmarkBarVisibleHolder.
    ].
!

bookmarkHolder
    "return/create the 'bookmarkHolder' value holder (automatically generated)"

    bookmarkHolder isNil ifTrue:[
        bookmarkHolder := ValueHolder new.
    ].
    ^ bookmarkHolder
!

bookmarkListHolder

    ^BookmarkList forFileBrowser

    "Created: / 08-06-2011 / 12:16:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

busyLabelHolder
    ^ self
        aspectFor:#busyLabelHolder
        ifAbsent:[ ValueHolder with:' ' ].

    "Created: / 25-07-2006 / 09:06:00 / cg"
!

canAddToClassPath
    ^ [
        |f|

        (Java isNil or:[Java isLoaded not]) ifTrue:[
            false
        ] ifFalse:[
            f := self currentFileNameHolder value.
            f size == 1
            and:[ f := f first. ((Java classPath ? #()) includes:f pathName) not
            and:[ f isDirectory
                 or:[(f hasSuffix:'jar')
                 or:[(f hasSuffix:'zip')]]]]
          ]
      ]
!

canAddToSourcePath
    ^ [
	|f|

	(Java isNil or:[Java isLoaded not]) ifTrue:[
	    false
	] ifFalse:[
	    f := self currentFileNameHolder value.
	    f size == 1
	    and:[ f:= f first. (Java sourcePath isNil
		 or:[(Java sourcePath includes:f pathName) not])
	    and:[f isDirectory
		 or:[(f hasSuffix:'jar')
		 or:[(f hasSuffix:'zip')]]]].
	  ]
      ]
!

canRemoveFromClassPath
    ^ [
        |f|

        (Java isNil or:[Java isLoaded not]) ifTrue:[
            false
        ] ifFalse:[
            f := self currentFileNameHolder value.
            f size == 1
            and:[ f:= f first. ((Java classPath ? #())includes:f pathName) not
            and:[ f isDirectory
                 or:[(f hasSuffix:'jar')
                 or:[(f hasSuffix:'zip')]]]]
          ]
      ]
!

currentDirectoryDisplayed
    "Return a directory that is currently displayed in the browser"

    ^(self builder componentAt: #DirectoryContentsBrowser) application currentDirectoryDisplayed

    "Modified: / 13-02-2014 / 16:08:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

cursorColLabelHolder
    ^ self
	aspectFor:#cursorColLabelHolder
	ifAbsent:[
	    self
		applicationNamed:#FileApplicationNoteBook
		ifPresentDo:[:appl | appl cursorColLabelHolder].
	]
!

cursorLineAndColumnLabelHolder
    ^ self
        aspectFor:#cursorLineAndColumnLabelHolder
        ifAbsent:[
            self
                applicationNamed:#FileApplicationNoteBook
                ifPresentDo:[:appl | appl cursorLineAndColumnLabelHolder].
        ]
!

cursorLineLabelHolder
    ^ self
	aspectFor:#cursorLineLabelHolder
	ifAbsent:[
	    self
		applicationNamed:#FileApplicationNoteBook
		ifPresentDo:[:appl | appl cursorLineLabelHolder].
	]
!

fileEncodingLockImageHolder
    ^ self
	aspectFor:#fileEncodingLockImageHolder
	ifAbsent:[
	    BlockValue
		with:[:m | m == true ifTrue:[self class encodingLockIcon] ifFalse:[nil] ]
		argument:(self lockFileEncodingHolder)
	]

    "Modified: / 08-03-2007 / 22:59:12 / cg"
!

fileEntryFieldHolder

    fileEntryFieldHolder isNil ifTrue:[
	fileEntryFieldHolder := ValueHolder new.
	fileEntryFieldHolder addDependent:self.
    ].
    ^ fileEntryFieldHolder.
!

listOfDeviceDrives

    listOfDeviceDrives isNil ifTrue:[
	listOfDeviceDrives := Filename volumes.
    ].
    ^ listOfDeviceDrives
!

modeLabelHolder
    ^ self
	aspectFor:#modeLabelHolder
	ifAbsent:[
	    self
		applicationNamed:#FileApplicationNoteBook
		ifPresentDo:[:appl | appl modeLabelHolder].
	]
!

modeLabelMenuHolder
    ^ self
	applicationNamed:#FileApplicationNoteBook
	ifPresentDo:[:appl | appl modeLabelMenu].

    "Created: / 11-09-2006 / 12:26:44 / cg"
!

selectedDeviceDrive

    selectedDeviceDrive isNil ifTrue:[
        selectedDeviceDrive := ValueHolder with:(self listOfDeviceDrives firstIfEmpty:nil).
        selectedDeviceDrive addDependent:self.
    ].
    ^ selectedDeviceDrive
! !

!FileBrowserV2 methodsFor:'aspects-visibility'!

busyLabelVisibleHolder
    ^ self aspectFor:#busyLabelVisibleHolder ifAbsent:[ValueHolder with:false]

    "Created: / 25-07-2006 / 09:06:22 / cg"
!

driveSelectorVisible
    ^ self systemSupportsVolumes "/ systemIsDOS
!

filenameEntryFieldVisibleHolder
    " aspect for show FileEntryField "

    ^ self aspectFor:#filenameEntryFieldVisibleHolder ifAbsent:[ValueHolder with:true]
!

infoBarVisibleHolder
    " aspect for show infoBar "

    ^ self aspectFor:#infoBarVisibleHolder ifAbsent:[ValueHolder with:true]
!

previewVisibleHolder
    " aspect for show preview"

    ^ self aspectFor:#previewVisibleHolder ifAbsent:[ValueHolder with:false]
!

toolBarVisibleHolder
    " aspect for show toolbar"

    ^ self aspectFor:#toolBarVisibleHolder ifAbsent:[ValueHolder with:true]
! !

!FileBrowserV2 methodsFor:'change & update'!

currentFileNameHolderChanged
    |newEntryValue nSelected files volume dir|

    files := self currentSelectedObjects.
    nSelected := files size.

    nSelected == 0 ifTrue:[
        newEntryValue := ''.
    ] ifFalse:[
        nSelected == 1 ifTrue:[
            newEntryValue := files first.
        ] ifFalse:[
            newEntryValue := self commonPrefixOfSelectedFiles.
        ].
    ].
    self fileEntryFieldHolder value:(newEntryValue asString) withoutNotifying:self.

    OperatingSystem supportsVolumes ifTrue:[
        volume := (nSelected >= 1)
                    ifTrue:[files first volume]
                    ifFalse:[nil].
        self selectedDeviceDrive value:volume.
    ].
    self updatePreview.

    nSelected == 1 ifTrue:[
        (dir := self currentDirectory) notNil ifTrue:[
            self changeFileBrowserTitleTo:(dir baseName)
        ]
    ].
    self updateBookmark

    "Modified: / 06-07-2011 / 09:41:50 / cg"
    "Modified: / 05-02-2014 / 11:45:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

fileEntryFieldHolderChanged
    |fileName fileNameString dir|

    fileNameString := fileEntryFieldHolder value withoutSeparators.
    fileNameString isEmpty ifTrue:[
        pathEntryField flash.
        ^ self
    ].

    fileName := fileNameString asFilename.
    fileName exists ifFalse:[
        pathEntryField flash.

        dir := fileName directory.
        dir exists ifTrue:[
            self currentFileNameHolder
                value:(OrderedCollection with:dir)
                withoutNotifying:self.
        ].
        fileName baseName includesMatchCharacters ifTrue:[
            self fileEntryFieldHolder value:(fileName directoryName) withoutNotifying:self.
            self filterModel value:fileName baseName.
        ].

"/        answer := OptionBox
"/           request:(resources string:'No file or directory named "%1" exists.\\Create ?' with:fileNameString allBold) withCRs
"/           buttonLabels:#('Create as File' 'Create as Directory' 'Cancel')
"/           values:#(createFile createDirectory nil)
"/           default:nil.
"/
"/        answer isNil ifTrue:[
"/            ^ self.
"/        ].
"/
"/        [
"/            answer == #createFile ifTrue:[
"/                fileName directory recursiveMakeDirectory.
"/                fileName createAsEmptyFile.
"/            ] ifFalse:[
"/                answer == #createDirectory ifTrue:[
"/                    fileName recursiveMakeDirectory.
"/                ]
"/            ].
"/        ] on:OperatingSystem accessDeniedErrorSignal do:[:ex |
"/            Dialog warn:'Error: ' , ex description.
"/        ].
        ^ self
    ].
    self setCurrentFileName:fileName.
!

selectedDeviceDriveChanged
    | newDrive curSel newFile|

    newDrive := self selectedDeviceDrive value.
    curSel := self currentSelectedObjects.
    curSel notEmptyOrNil ifTrue:[
        curSel first volume = newDrive ifTrue:[ ^self].
    ].

    newDrive notNil ifTrue:[
        newFile := (OperatingSystem pathNameForDrive:newDrive) asFilename.

        newFile isReadable ifTrue:[
            self gotoFile:newFile.
            ^self.
        ].
    ].
    self selectedDeviceDrive
        value:(curSel notEmptyOrNil
                ifTrue:[curSel first volume]
                ifFalse:['C:']).

    "Modified: / 18-09-2007 / 09:41:30 / cg"
!

selectedImage
    |files selectedFile mime img|

    files := self currentSelectedFiles.
    files size >= 1 ifFalse:[
	^ nil
    ].
    selectedFile := files last.

    mime := MIMETypes mimeTypeForFilename:selectedFile.
    (mime notNil and:[mime startsWith:'image/']) ifTrue:[
	img := Image fromFile:selectedFile.
	^ img
    ].

    ^ nil.
!

showPreview:shownImage
    |lbl previewLabel|

    lbl := shownImage isNil ifTrue:'Preview' ifFalse:[ shownImage fileName asFilename baseName ].

    previewLabel := builder componentAt:#PreviewLabel.
    previewLabel label:lbl; forceResizeHorizontally.

    imgView := builder componentAt:#Preview.
    (imgView notNil and:[imgView scrolledView notNil]) ifTrue:[

        shownImage isNil ifTrue:[
            imgView adjust:#fitBig.
            imgView image:nil.
        ] ifFalse:[    
            imgView adjust:#fitBig.
            imgView image:shownImage.
            imgView scrolledView repairDamage.
            imgView adjust:#smoothFitBig.
        ].
    ].

    "Created: / 10-09-2017 / 17:22:43 / cg"
!

update:something with:aParameter from:changedObject
    changedObject == self selectedDeviceDrive ifTrue:[
        self selectedDeviceDriveChanged.
        ^ self.
    ].
    changedObject == self fileEntryFieldHolder ifTrue:[
        self fileEntryFieldHolderChanged.
        ^ self.
    ].
    changedObject == self currentFileNameHolder ifTrue:[
        super update:something with:aParameter from:changedObject.
        self currentFileNameHolderChanged.
        ^ self.
    ].
    (changedObject == self previewVisibleHolder) ifTrue:[
        self updatePreview.
        ^ self.
    ].
    (changedObject == self toolBarVisibleHolder
    or:[changedObject == self bookmarkBarVisibleHolder
    or:[changedObject == self filenameEntryFieldVisibleHolder
    or:[changedObject == self infoBarVisibleHolder]]]) ifTrue:[
        self updateToolVisibility.
        ^ self.
    ].
    (changedObject == self sortBlockProperty or:[changedObject == self sortDirectoriesBeforeFiles]) ifTrue:[
        self sortFileListsBy:(self sortBlockProperty value) withReverse:false.
        ^ self.
    ].

    ^ super update:something with:aParameter from:changedObject.

    "Modified: / 01-10-2007 / 19:21:35 / cg"
!

updateBookmark

    | file bookmark |
    file := fileEntryFieldHolder value.
    file notEmptyOrNil ifTrue:[
        bookmark := Bookmark forFile: file.
    ].
    self bookmarkHolder value: bookmark.

    "Created: / 13-04-2012 / 12:37:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

updatePreview
    |previewLabel shownImage plug closePreviewButton|

    self previewVisibleHolder value ifTrue:[
        shownImage := nil.
        imgView := builder componentAt:#Preview.
        previewLabel := builder componentAt:#PreviewLabel.
        closePreviewButton := builder componentAt:#ClosePreviewButton.

        plug := Plug new.
        plug respondTo:#closePreview with:[ self previewVisibleHolder value:false ].

        previewLabel menuHolder:(self class previewLabelMenu decodeAsLiteralArray).
        previewLabel menuPerformer:plug asValue.

        closePreviewButton action:[ self previewVisibleHolder value:false ].

        previewProcess notNil ifTrue:[
            previewProcess terminate
        ].
        previewProcess := 
                [
                    |oldBg lbl|

                    oldBg := previewLabel backgroundColor.
                    [
                        previewLabel backgroundColor:(Color red lightened).

                        shownImage := self selectedImage.

                        lbl := (shownImage isNil or:[shownImage fileName isNil])
                                    ifTrue:'Preview' 
                                    ifFalse:[ shownImage fileName asFilename baseName ].

                        previewLabel label:lbl; forceResizeHorizontally.

                        imgView := builder componentAt:#Preview.
                        (imgView notNil and:[imgView scrolledView notNil]) ifTrue:[
                            imgView image:nil.
                            imgView adjust:#fitBig.

                            shownImage notNil ifTrue:[
                                imgView image:shownImage.
                                previewLabel backgroundColor:(Color red lightened lightened).
                                imgView scrolledView repairDamage.
                                imgView adjust:#smoothFitBig.
                            ].
                        ].
                        previewProcess := nil.
                    ] ensure:[
                        previewLabel backgroundColor:oldBg.
                    ].
              ] forkAt:7.
    ] ifFalse:[
        imgView notNil ifTrue:[
            imgView image:nil.
        ]
    ].

    "Modified: / 10-09-2017 / 17:51:33 / cg"
    "Modified: / 13-07-2018 / 22:18:48 / Claus Gittinger"
!

updateToolVisibility
    |bldr toolBar bookmarkBar infoBar filenameEntryField vPanel topOffset bottomOffset
     toolBarVisible bookmarkBarVisible filenameEntryFieldVisible infoBarVisible d|

    bldr := self builder.

    topOffset := 0.
    bottomOffset := 0.

    toolBarVisible := self toolBarVisibleHolder value.
    toolBarVisible ifTrue:[
        toolBar := bldr componentAt:#ToolbarBox.
        topOffset := topOffset + toolBar height.
    ].

    bookmarkBarVisible := self bookmarkBarVisibleHolder value.
    bookmarkBarVisible ifTrue:[
        bookmarkBar := bldr componentAt:#BookmarkBar.
        d := bookmarkBar height. "/ layout bottomOffset - bookmarkBar layout topOffset.
        bookmarkBar layout topOffset:topOffset bottomOffset:topOffset + d.
        "/ that's the consequence of modifying the layout, instead of sending #layout:
        "/ we have to tell the component that it changed here!!
        bookmarkBar layoutChanged.
        topOffset := topOffset + d
    ].

    filenameEntryFieldVisible := self filenameEntryFieldVisibleHolder value.
    filenameEntryFieldVisible ifTrue:[
        filenameEntryField := bldr componentAt:#FilenameEntryFieldBox.
        d := filenameEntryField layout bottomOffset - filenameEntryField layout topOffset.
        filenameEntryField layout topOffset:topOffset bottomOffset:topOffset + d.
        "/ that's the consequence of modifying the layout, instead of sending #layout:
        "/ we have to tell the component that it changed here!!
        filenameEntryField layoutChanged.
        topOffset := topOffset + filenameEntryField height.
    ].

    infoBarVisible := self infoBarVisibleHolder value.
    infoBarVisible ifTrue:[
        infoBar := bldr componentAt:#InfoBox.
        bottomOffset := bottomOffset - infoBar height.
    ].

    vPanel := bldr componentAt:#BrowserBox.
    vPanel layout topOffset:topOffset+1.
    vPanel layout bottomOffset:bottomOffset-1.
    vPanel container notNil ifTrue:[
        vPanel containerChangedSize.
    ].

    "Modified: / 03-04-2012 / 22:23:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!FileBrowserV2 methodsFor:'event handling'!

crPressedInPathField
    |path fn|

    path := fileEntryFieldHolder value.
    fn := path asFilename.
    fn isRegularFile ifTrue:[
        self openApplForFile:path.
    ]
!

processEvent:anEvent
    "filter keyboard events.
     Return true, if I have eaten the event"

    <resource: #keyboard (#Return )>

    |focusView key rawKey fileName|

    anEvent isKeyPressEvent ifTrue:[
        focusView := anEvent targetView.
        key := anEvent key.
        rawKey := anEvent rawKey.

        (focusView isSameOrComponentOf:self window) ifTrue:[

            (focusView == pathEntryField) ifFalse:[ ^ false].

            (key == #Return) ifTrue:[
                fileName := pathEntryField list first asFilename.
                fileName isRegularFile ifTrue:[
                    self openApplForFile:fileName
                ].
            ].
        ]
    ].

    (anEvent isButtonPressEvent or:[anEvent isButtonMultiPressEvent]) ifTrue:[
        self
            applicationNamed:#FileApplicationNoteBook
            ifPresentDo:[:appl |
                |subApp editor eventView viewsName|

                subApp := appl selectedApplication.
                subApp notNil ifTrue:[
                    eventView := anEvent view.
                    viewsName := eventView name.

                    anEvent isButtonMultiPressEvent ifTrue:[
                        (viewsName = 'LineLabel' or:[viewsName = 'LineAndColumnLabel']) ifTrue:[
                            editor := subApp perform:#editView ifNotUnderstood:nil.
                            editor notNil ifTrue:[
                                editor gotoLine
                            ].
                        ].
                        viewsName = 'ModeLabel' ifTrue:[
                            eventView activateMenu
                        ].
                        viewsName = 'EncodingLabel' ifTrue:[
                            eventView activateMenu
                        ].
                    ] ifFalse:[
                        anEvent button == 2 ifTrue:[
                            eventView name = 'LineLabel' ifTrue:[
                                subApp editView gotoLine
                            ].
                        ].
                    ].
                ].
            ].
    ].

    ^ false

    "Modified: / 17-05-2007 / 09:12:53 / cg"
! !

!FileBrowserV2 methodsFor:'menu accessing'!

menuFileHistory
    "initialize the file history menu"

    <resource: #programMenu >

    |menu hist text removeItem removeCol|

    menu := Menu new receiver:self.

    hist := self fileHistory.
    hist isEmpty ifTrue:[^ nil].

    removeCol := OrderedCollection new.
    hist do:[:aFileItem|
        "aFileItem fileName exists" true ifTrue:[
            menu addItem:(MenuItem 
                            label: aFileItem fileName asString 
                            itemValue:
                                [
                                    self setCurrentFileName:(aFileItem fileName).
                                    self openApplByFileItem:aFileItem
                                ]
                            translateLabel:false).
        ] ifFalse:[
            removeCol add:aFileItem.
        ]
    ].
    "/ remove all not existing history entries
    removeCol do:[ : el |
        hist remove:el.
    ].
    removeItem := MenuItem new.
    text := resources string:'Clear History'.
    "/ text := LabelAndIcon icon:(self class clearHistoryIcon) string:text.
    removeItem label:text.
    removeItem
        itemValue:[
            self fileHistory removeAll.
            self enableFileHistory value:false.
        ].
    menu addSeparator.
    menu addItem:removeItem.
    ^ menu

    "Modified: / 09-09-2012 / 13:08:42 / cg"
! !

!FileBrowserV2 methodsFor:'queries'!

defaultWindowExtent
    "use nearly the full screen height, but at least 768px if available.
     Keep the width as defined in the windowSpec"

    |w maxHeight|

    w := self window.
    maxHeight := w device usableHeightAt:w origin.
    ^ Point x:nil y:(((maxHeight - 200) max:w extent y) min:maxHeight).
!

getAllFilesAsStrings
    ^ self directoryContentsBrowser getAllFilesAsStrings
! !

!FileBrowserV2 methodsFor:'startup & release'!

closeRequest
    "asks for permission before closing"

    self
	applicationNamed:#FileApplicationNoteBook
	ifPresentDo:[:appl | appl tryCloseApplications ifFalse:[^ self] ].

    super closeRequest.
!

hideFilenameEntryFieldButtonCreated:aButton

    aButton passiveLevel:(MenuPanel defaultLevel).
    aButton activeLevel:-1.
    aButton backgroundColor:(MenuPanel defaultBackgroundColor).
!

hideToolBarButtonCreated:aButton

    aButton passiveLevel:(MenuPanel defaultLevel).
    aButton activeLevel:-1.
    aButton backgroundColor:(MenuPanel defaultBackgroundColor).
!

initialize

    self masterApplication:nil.
    self directoryHistory resetForwardBackward.
!

makeDependent

    super makeDependent.
    self sortBlockProperty addDependent:self.
    self filenameEntryFieldVisibleHolder addDependent:self.
    self toolBarVisibleHolder addDependent:self.
    self infoBarVisibleHolder addDependent:self.
    self previewVisibleHolder addDependent:self.
!

onDirectory:aDirectoryPathOrNil
    |directory|

    self createBuilder.
    aDirectoryPathOrNil notNil ifTrue:[
        directory := aDirectoryPathOrNil asFilename.
        self currentFileNameHolder value:{ directory }.
    ].
!

openOnDirectory:aDirectoryPath
    self onDirectory:aDirectoryPath.
    self open
!

openOnFileNamed:aFilename editing:editing
    "start a new FileBrowserV2 on a aFilename;
     If editing is true, the browser opens the document as text to be edited;
     if false, it looks for an appropriate viewer and uses that if one is found."

    |f|

    f := aFilename asFilename.
    f isDirectory ifTrue:[
        self onDirectory:f.
        self open.
        ^ self.
    ].

    self onDirectory:(f directory).
    self currentFileNameHolder setValue:(Array with:f).
    self openAndWaitUntilVisible.
    self enqueueDelayedAction:[
        editing ifTrue:[
            self openTextEditorForFile:f.
        ] ifFalse:[
            self openApplForFile:f.
        ].
    ].

    "
     FileBrowserV2 openOnFileNamed:'Make.proto'
     FileBrowserV2 openOnFileNamed:'modules'
    "

    "Modified (comment): / 09-02-2017 / 11:38:22 / stefan"
!

postBuildDirectoryTree:aWidget
    aWidget application multipleSelect:true.
!

postBuildEditField:aWidget

    pathEntryField := aWidget.
    aWidget model:self fileEntryFieldHolder.
    aWidget listHolder:self directoryHistory.
    aWidget level:-1.
    aWidget acceptIfUnchanged:true.
    aWidget crAction:[ self crPressedInPathField ].
!

postBuildEditModeInfoLabel:aLabel
    aLabel menuHolder:self; menuMessage:#modeLabelMenuHolder.

    "Created: / 11-09-2006 / 12:24:54 / cg"
!

postBuildFilterBox:aWidget

    self filterValueBox value:aWidget.
    self filterBackgroundColor value:aWidget backgroundColor.
!

postBuildPathViewBox:aWidget

    aWidget backgroundColor:(MenuPanel defaultBackgroundColor).
!

postBuildWith:aBuilder

    | prefs |

    super postBuildWith:aBuilder.
    self updateToolVisibility.

    "Load user settings"
    prefs := UserPreferences current.
    AbstractFileBrowser userPreferencesAspectList keysAndValuesDo:[:aspect :default|
	| value |

	(prefs respondsTo: aspect) ifTrue:[
	    value := prefs perform: aspect
	] ifFalse:[
	    value := prefs at: aspect ifAbsent:[default].
	].
	(self perform: aspect) value: value
    ]

    "Modified: / 10-10-2011 / 10:54:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

postOpenWith:aBuilder

    super postOpenWith:aBuilder.

    self currentFileNameHolderChangedForCommon.
    self currentFileNameHolderChanged.

    self windowGroup addPreEventHook:self.
!

release

    self saveRuntimeAspectValues.
    super release
! !

!FileBrowserV2 class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !


FileBrowserV2 initialize!