NewFileBrowser.st
author Claus Gittinger <cg@exept.de>
Tue, 15 Oct 2002 18:43:23 +0200
changeset 4004 f97168a68093
parent 3715 ec07a41796ae
permissions -rw-r--r--
*** empty log message ***

"
 COPYRIGHT (c) 1991 by Claus Gittinger
              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: 'penk:NewFileBrowser' }"

AbstractNewFileBrowser subclass:#NewFileBrowser
	instanceVariableNames:'directoryContentsHolder fileEntryFieldHolder
		variableHorizontalPanel variableVerticalPanel directoryTreePage
		noteBookApplicationPage enableDirectoryUp enableForward
		enableBack'
	classVariableNames:'DefaultIcon Icons DefaultCommandPerMIME'
	poolDictionaries:''
	category:'Interface-Browsers'
!

!NewFileBrowser class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1991 by Claus Gittinger
              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
"
    NewFileBrowser is based on Filebrowser created by Claus Gittinger

    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:]
        NewFileBrowser open
"
! !

!NewFileBrowser class methodsFor:'instance creation'!

on:aDirectoryPath
    "return a new NewFileBrowser in a pathname"

    | instance|
    instance := self new.
    instance currentFileNameHolder value:aDirectoryPath.
    ^ instance

"/    | instance builder|
"/
"/    builder := super open.
"/    instance := builder application.
"/    instance currentFileNameHolder value:aDirectoryPath.
"/    ^ instance

    "
     (NewFileBrowser on:'/usr/local/bin') open
     (NewFileBrowser on:'/etc'          ) open
     (NewFileBrowser on:'..'            ) open
     (NewFileBrowser on:'.'             ) open
    "
!

open
    "start a new NewFileBrowser"

    | instance |
    instance := self on:(Filename currentDirectory asAbsoluteFilename).
    ^ instance open.
    "
     NewFileBrowser openOn:'/etc'           withExtent:800@600
     NewFileBrowser openOn:'..'             withExtent:200@300
     NewFileBrowser openOn:'.'              withExtent:1024@768
    "
!

openOn:aDirectoryPath 
    "start a new NewFileBrowser in a pathname"

    | instance|
    instance := self on:aDirectoryPath.
    ^ instance open.
    "
     NewFileBrowser openOn:'/etc'           
     NewFileBrowser openOn:'..'           
     NewFileBrowser openOn:'.'             
    "
!

openOn:aDirectoryPath withExtent:extent
    "start a new NewFileBrowser in a pathname"

    | instance builder|
    instance := self on:aDirectoryPath.
    builder := instance open.
    builder window extent:extent.
    ^ instance
    "
     NewFileBrowser openOn:'/etc'           withExtent:800@600
     NewFileBrowser openOn:'..'             withExtent:200@300
     NewFileBrowser openOn:'.'              withExtent:1024@768
    "
!

openWithAspects:someAspects withExtent:extent
    "start a new NewFileBrowser in a pathname"

    |dir|

    dir := someAspects at:#currentFileNameHolder ifAbsent:nil.
    ^ self openOn:(dir value) withExtent:extent

    "
     NewFileBrowser openOn:'/etc'           withExtent:800@600
     NewFileBrowser openOn:'..'             withExtent:200@300
     NewFileBrowser openOn:'.'              withExtent:1024@768
    "
! !

!NewFileBrowser class methodsFor:'class initialization'!

clearHistoryIcon
    ^ Icon deleteIcon
!

icons
    Icons isNil ifTrue:[
        self initializeIcons
    ].
    ^ Icons


"   
    Icons := nil.
"
!

initializeDefaultCommands
    DefaultCommandPerMIME := Dictionary new.

    DefaultCommandPerMIME at:'application/x-tar-compressed' put:'gunzip < %1 | tar tvf -'.
    DefaultCommandPerMIME at:'application/pdf'              put:'acroread %1'.

    "
     self initializeDefaultCommands
    "
!

initializeIcons
    |resources|

    resources := self classResources.

    Icons := Dictionary new.

    #(
        "/ internal-type to icon mappings.
        (#directory       'ICON_DIRECTORY'        'tiny_yellow_dir.xpm'       )
        (#directoryLocked 'ICON_DIRECTORY_LOCKED' 'tiny_yellow_dir_locked.xpm')
        (#directoryLink   'ICON_DIRECTORY_LINK'   'tiny_yellow_dir_link.xpm'  )
        (#file            'ICON_FILE'             'tiny_file_plain.xpm'       )
        (#fileLink        'ICON_FILE_LINK'        'tiny_file_link.xpm'        )
        (#fileLocked      'ICON_FILE_LOCKED'      'tiny_file_lock.xpm'        )
        (#imageFile       'ICON_IMAGE_FILE'       'tiny_file_pix.xpm'         )
        (#textFile        'ICON_TEXT_FILE'        'tiny_file_text.xpm'        )
        (#executableFile  'ICON_EXECUTABLEFILE'   'tiny_file_exec.xpm'        )
        (#directoryUp     'ICON_DIRECTORYUP'      'tiny_yellow_dir_up.xpm'    )

        "/ mime-type to icon mappings.
        ('text/plain'                     nil     'tiny_file_text.xpm'        )
        ('text/html'                      nil     'tiny_file_text.xpm'        )
        ('application/postscript'         nil     'tiny_file_st.xpm'          )
        ('application/x-smalltalk-source' nil     'tiny_file_st.xpm'          )
        ('application/x-java-source'      nil     'tiny_file_java.xpm'        )
        ('image'                          nil     'tiny_file_pix.xpm'         )
        ('audio'                          nil     'tiny_file_sound.xpm'       )
     ) do:[:entry |
        |key resource defaultName nm img|

        key := entry at:1.
        resource := entry at:2.
        defaultName := entry at:3.

        resource notNil ifTrue:[
            nm := resources at:resource default:nil.
        ].
        nm isNil ifTrue:[
            nm := 'xpmBitmaps/document_images/' , defaultName
        ].
        Icons at:key put:(Smalltalk imageFromFileNamed:nm forClass:self).
    ]

    "
     self initializeIcons
    "
! !

!NewFileBrowser class methodsFor:'defaults'!

defaultIcon
    "return the file browsers default window icon"

    <resource: #style (#FILEBROWSER_ICON #FILEBROWSER_ICON_FILE)>

    |nm i res|

    (i := DefaultIcon) isNil ifTrue:[
        res := self classResources.
        i := res at:'FILEBROWSER_ICON' default:nil.
        i isNil ifTrue:[
            nm := res at:'FILEBROWSER_ICON_FILE' default:'FBrowser.xbm'.
            i := Smalltalk imageFromFileNamed:nm forClass:self.
            i isNil ifTrue:[
                i := StandardSystemView defaultIcon
            ]
        ].
        i notNil ifTrue:[
            DefaultIcon := i := i onDevice:Display
        ]
    ].
    ^ i
! !

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

    <resource: #canvas>

    ^ 
     #(#FullSpec
        #name: #windowSpec
        #window: 
       #(#WindowSpec
          #label: #NewFileBrowser
          #name: #NewFileBrowser
          #min: #(#Point 10 10)
          #max: #(#Point 1152 864)
          #bounds: #(#Rectangle 220 170 1091 971)
          #menu: #mainMenu
        )
        #component: 
       #(#SpecCollection
          #collection: #(
           #(#MenuPanelSpec
              #name: 'ToolBar'
              #layout: #(#LayoutFrame 0 0 0 0 0 1 28 0)
              #menu: #toolBarMainMenu
              #textDefault: true
            )
           #(#FilenameInputFieldSpec
              #name: 'FilenameEntryField'
              #layout: #(#LayoutFrame 0 0 28 0 0 1 48 0)
              #model: #fileEntryFieldHolder
              #style: #(#FontDescription #helvetica #bold #roman 12)
              #acceptOnPointerLeave: false
              #postBuildCallback: #postBuildPathView:
            )
           #(#VariableVerticalPanelSpec
              #name: 'VariableVerticalPanel'
              #layout: #(#LayoutFrame 0 0.0 48 0 0 1.0 -20 1)
              #showHandle: true
              #snapMode: #both
              #handlePosition: #left
              #component: 
             #(#SpecCollection
                #collection: #(
                 #(#VariableHorizontalPanelSpec
                    #name: 'VariableHorizontalPanel'
                    #showHandle: true
                    #snapMode: #both
                    #handlePosition: #left
                    #component: 
                   #(#SpecCollection
                      #collection: #(
                       #(#SubCanvasSpec
                          #name: 'DirectoryTreeBrowser'
                          #hasHorizontalScrollBar: false
                          #hasVerticalScrollBar: false
                          #majorKey: #DirectoryTreeBrowser
                          #createNewApplication: true
                          #createNewBuilder: true
                        )
                       #(#SubCanvasSpec
                          #name: 'DirectoryContentsBrowser'
                          #hasHorizontalScrollBar: false
                          #hasVerticalScrollBar: false
                          #majorKey: #DirectoryContentsBrowser
                          #createNewApplication: true
                          #createNewBuilder: true
                        )
                       )
                     
                    )
                    #handles: #(#Any 0.283375 1.0)
                    #postBuildCallback: #postBuildHorizontalPanel:
                  )
                 #(#SubCanvasSpec
                    #name: 'NoteBookApplication'
                    #hasHorizontalScrollBar: false
                    #hasVerticalScrollBar: false
                    #majorKey: #NoteBookApplication
                    #createNewApplication: true
                    #createNewBuilder: true
                  )
                 )
               
              )
              #handles: #(#Any 0.5 1.0)
              #postBuildCallback: #postBuildVerticalPanel:
            )
           #(#LabelSpec
              #label: 'NotifyLabel'
              #name: 'NotifyLabel'
              #layout: #(#LayoutFrame 0 0.0 -20 1 0 1.0 0 1.0)
              #level: -1
              #translateLabel: true
              #labelChannel: #notifyChannel
              #adjust: #left
            )
           )
         
        )
      )
! !

!NewFileBrowser class methodsFor:'menu specs'!

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

    <resource: #menu>

    ^ 
     #(#Menu
        #(
         #(#MenuItem
            #label: 'Spawn'
            #translateLabel: true
            #value: #doSpawn
          )
         #(#MenuItem
            #label: 'Add Terminal View'
            #translateLabel: true
            #value: #doAddTerminal
          )
         #(#MenuItem
            #label: '-'
          )
         #(#MenuItem
            #label: 'Exit'
            #translateLabel: true
            #value: #closeRequest
          )
         )
        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:NewFileBrowser andSelector:#mainMenu
     (Menu new fromLiteralArrayEncoding:(NewFileBrowser mainMenu)) startUp
    "

    <resource: #menu>

    ^ 
     #(#Menu
        #(
         #(#MenuItem
            #label: 'Browser'
            #translateLabel: true
            #submenuChannel: #browserMenu
          )
         #(#MenuItem
            #label: 'Edit'
            #translateLabel: true
            #submenuChannel: #editMenu
          )
         #(#MenuItem
            #label: 'View'
            #translateLabel: true
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'View file list'
                  #translateLabel: true
                  #submenuChannel: #viewFileBrowserMenu
                )
               #(#MenuItem
                  #label: 'View directory tree'
                  #translateLabel: true
                  #indication: #showDirectoryTreeHolder
                )
               #(#MenuItem
                  #label: 'View directory description'
                  #translateLabel: true
                  #indication: #viewDirectoryDescription
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Show file contents'
                  #translateLabel: true
                  #value: #doShowFileContents
                )
               #(#MenuItem
                  #label: 'Open Terminal'
                  #translateLabel: true
                  #value: #doAddTerminal
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Encoding...'
                  #translateLabel: true
                  #value: #fileEncoding
                )
               #(#MenuItem
                  #label: 'DOS EndOfLine Mode'
                  #translateLabel: true
                  #indication: #dosEOLMode
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Update'
                  #translateLabel: true
                )
               )
              nil
              nil
            )
          )
         #(#MenuItem
            #label: 'Tools'
            #translateLabel: true
            #submenuChannel: #toolsMenuSpec
          )
         #(#MenuItem
            #label: 'CVS'
            #translateLabel: true
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'Update selected files/directories'
                  #translateLabel: true                   
                  #value: #cvsUpdateSelection
                  #enabled: #hasSelection
                )
               #(#MenuItem
                  #label: 'Update directory local'
                  #value: #cvsUpdateAll
                  #translateLabel: true
                )
               #(#MenuItem
                  #label: 'Update directory recursive'
                  #value: #cvsUpdateAllRecursive
                  #translateLabel: true
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Commit...'
                  #value: #cvsCommit
                  #translateLabel: true
                )
               #(#MenuItem
                  #label: 'Add && Commit...'
                  #value: #cvsAddAndCommit
                  #translateLabel: true
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Remove file && CVS Container...'
                  #translateLabel: true
                  #value: #cvsRemoveFileAndCVSContainer
                  #enabled: #canRemoveCVSContainer
                )
               )
              nil
              nil
            )
          )
         #(#MenuItem
            #label: 'Help'
            #translateLabel: true
            #startGroup: #right
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'FileBrowser Documentation'
                  #translateLabel: true
                  #value: #':'
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'About FileBrowser...'
                  #translateLabel: true
                )
               )
              nil
              nil
            )
          )
         )
        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:NewFileBrowser andSelector:#toolBarMainMenu
     (Menu new fromLiteralArrayEncoding:(NewFileBrowser toolBarMainMenu)) startUp
    "

    <resource: #menu>

    ^ 
     #(#Menu
        #(
         #(#MenuItem
            #label: 'DirectoryUp'
            #translateLabel: true
            #isButton: true
            #value: #doGoDirectoryUp
            #enabled: #enableDirectoryUp
            #labelImage: #(#ResourceRetriever #AbstractNewFileBrowser #DirectoryUpIcon)
          )
         #(#MenuItem
            #label: ''
          )
         #(#MenuItem
            #label: 'Back'
            #translateLabel: true
            #isButton: true
            #value: #doBack
            #enabled: #enableBack
            #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #undo16x16Icon)
          )
         #(#MenuItem
            #label: 'BackHistory'
            #translateLabel: true
            #isButton: true
            #nameKey: #BackHistory
            #enabled: #enableBack
            #argument: #back
            #labelImage: #(#ResourceRetriever #ComboView #buttonForm)
            #submenuChannel: #menuDirHistory:
          )
         #(#MenuItem
            #label: ''
          )
         #(#MenuItem
            #label: 'Forward'
            #translateLabel: true
            #isButton: true
            #value: #doForward
            #enabled: #enableForward
            #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #redo16x16Icon)
          )
         #(#MenuItem
            #label: 'ForwardHistory'
            #translateLabel: true
            #isButton: true
            #nameKey: #ForwardHistory
            #enabled: #enableForward
            #argument: #forward
            #labelImage: #(#ResourceRetriever #ComboView #buttonForm)
            #submenuChannel: #menuDirHistory:
          )
         #(#MenuItem
            #label: ''
          )
         #(#MenuItem
            #label: 'File History'
            #translateLabel: true
            #isButton: true
            #enabled: #enableFileHistory
            #labelImage: #(#ResourceRetriever nil #historyIcon)
            #submenuChannel: #menuFileHistory
          )
         #(#MenuItem
            #label: ''
          )
         #(#MenuItem
            #label: 'Copy'
            #translateLabel: true
            #isButton: true
            #value: #copyInDirContentsBrowser
            #enabled: #hasSelection
            #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #copy20x20Icon)
          )
         #(#MenuItem
            #label: 'Cut'
            #translateLabel: true
            #isButton: true
            #value: #cutInDirContentsBrowser
            #enabled: #hasSelection
            #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #cut20x20Icon)
          )
         #(#MenuItem
            #label: 'Paste'
            #translateLabel: true
            #isButton: true
            #value: #pasteInDirContentsBrowser
            #enabled: #canPaste
            #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #paste20x20Icon)
          )
         #(#MenuItem
            #label: 'Delete'
            #translateLabel: true
            #isButton: true
            #value: #deleteInDirContentsBrowser
            #enabled: #hasSelection
            #labelImage: #(#ResourceRetriever #ToolbarIconLibrary #erase16x16Icon)
          )
         #(#MenuItem
            #label: ''
          )
         #(#MenuItem
            #label: 'File In'
            #translateLabel: true
            #isButton: true
            #value: #fileFileIn
            #enabled: #canFileIn
            #labelImage: #(#ResourceRetriever nil #fileInIcon)
          )
         #(#MenuItem
            #label: ''
          )
         #(#MenuItem
            #label: 'Search file'
            #translateLabel: true
            #isButton: true
            #value: #doOpenSearchFile
            #enabled: #canFileIn
            #labelImage: #(#ResourceRetriever nil #search22x22Icon)
          )
         #(#MenuItem
            #label: 'VT100'
            #translateLabel: true
            #isButton: true
            #value: #doAddTerminal
            #labelImage: #(#ResourceRetriever nil #vt100Terminal)
          )
         )
        nil
        nil
      )
!

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

    <resource: #menu>

    ^ 
     #(#Menu
        #(
         #(#MenuItem
            #label: 'Shell Terminal'
            #translateLabel: true
            #isVisible: #canDoTerminalAndSystemIsUnix
            #value: #openTerminal
            #enabled: #canDoTerminal
          )
         #(#MenuItem
            #label: 'DOS Terminal'
            #translateLabel: true
            #isVisible: #canDoTerminalAndSystemIsDOS
            #value: #openTerminal
            #enabled: #canDoTerminal
          )
         #(#MenuItem
            #label: '-'
          )
         #(#MenuItem
            #label: 'Changes Browser'
            #translateLabel: true
            #value: #openChangesBrowser
            #enabled: #hasSelection
          )
         #(#MenuItem
            #label: 'Snapshot Image Browser'
            #translateLabel: true
            #value: #openSnapshotImageBrowser
            #enabled: #hasSnapshotSelection
          )
         #(#MenuItem
            #label: 'Create Smalltalk Project'
            #translateLabel: true
            #value: #createProjectAndOpenProjectBrowser
            #enabled: #canCreateNewProject
          )
         #(#MenuItem
            #label: 'Install autoloaded'
            #translateLabel: true
            #value: #readAbbrevFile
            #enabled: #canReadAbbrevFile
          )
         #(#MenuItem
            #label: 'Editor'
            #translateLabel: true
            #value: #openEditor
            #enabled: #hasSelection
          )
         #(#MenuItem
            #label: 'HTML Reader'
            #translateLabel: true
            #value: #openHTMLReader
            #enabled: #hasSelection
          )
         #(#MenuItem
            #label: 'ASN1 Browser'
            #translateLabel: true
            #isVisible: #hasASN1
            #value: #openASN1Browser
            #enabled: #hasASN1AndSelection
          )
         #(#MenuItem
            #label: 'C Browser'
            #translateLabel: true
            #isVisible: #hasCBrowser
            #value: #openCBrowser
            #enabled: #hasCBrowser
          )
         #(#MenuItem
            #label: 'Applet Viewer'
            #translateLabel: true
            #isVisible: #hasJava
            #value: #openAppletViewer
            #enabled: #hasJavaAndSelection
          )
         #(#MenuItem
            #label: 'Image Inspector'
            #translateLabel: true
            #value: #openImageInspector
            #enabled: #hasSelection
          )
         #(#MenuItem
            #label: 'Image Preview'
            #translateLabel: true
            #value: #openImagePreview
            #enabled: #hasSelection
          )
         #(#MenuItem
            #label: 'Image Editor'
            #translateLabel: true
            #value: #openImageEditor
            #enabled: #hasSelection
          )
         #(#MenuItem
            #label: 'MP3 Player'
            #translateLabel: true
            #isVisible: #hasMP3Player
            #value: #openMP3Player
            #enabled: #hasMP3PlayerAndSelection
          )
         #(#MenuItem
            #label: 'ZipFile Tool'
            #translateLabel: true
            #value: #openZipTool
            #enabled: #hasZipFileSelected
          )
         #(#MenuItem
            #label: 'SlideShow'
            #translateLabel: true
            #value: #openSlideShow
            #isVisible: #hasSlideShow
          )
         #(#MenuItem
            #label: 'File Differences...'
            #translateLabel: true
            #value: #openDiffView
            #enabled: #hasSelection
          )
         #(#MenuItem
            #label: 'Find Duplicate Files'
            #translateLabel: true
            #value: #fileFindDuplicates
          )
         #(#MenuItem
            #label: 'Find All Duplicate Files (recursive)'
            #translateLabel: true
            #value: #fileFindAllDuplicates
          )
         #(#MenuItem
            #label: 'Find a File...'
            #translateLabel: true
            #value: #fileFindFile
          )
         #(#MenuItem
            #label: 'Hex Dump'
            #translateLabel: true
            #value: #fileHexDump
            #enabled: #hasSelection
          )
         )
        nil
        nil
      )
! !

!NewFileBrowser class methodsFor:'plugIn spec'!

aspectSelectors
    "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."

    "Return a description of exported aspects;
     these can be connected to aspects of an embedding application
     (if this app is embedded in a subCanvas)."

    ^ #(
        #notifyChannel
      ).

! !

!NewFileBrowser methodsFor:'actions'!

doBack

    | fileName |
    fileName := self dirHistory doBack.
    fileName notNil ifTrue:[
        self currentFileNameHolder value:fileName.
    ]
!

doForward

    | fileName |
    fileName := self dirHistory doForward.
    fileName notNil ifTrue:[
        self currentFileNameHolder value:fileName.
    ]
!

doSpawn

    self class openWithAspects:aspects withExtent:self builder window extent.
! !

!NewFileBrowser methodsFor:'aspects'!

enableBack

    enableBack isNil ifTrue:[
        enableBack := false asValue.
    ].
    ^ enableBack.
!

enableDirectoryUp

    enableDirectoryUp isNil ifTrue:[
        enableDirectoryUp := false asValue.
    ].
    ^ enableDirectoryUp.
!

enableForward

    enableForward isNil ifTrue:[
        enableForward := false asValue.
    ].
    ^ enableForward.
!

fileEntryFieldHolder

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

!NewFileBrowser methodsFor:'change & update'!

update:something with:aParameter from:changedObject

    changedObject == self fileEntryFieldHolder ifTrue:[
        (fileEntryFieldHolder value asFilename exists) ifFalse:[^ self].
        self currentFileNameHolder value:(fileEntryFieldHolder value).
    ].
    changedObject == self currentFileNameHolder ifTrue:[
        | fileName currDir newDir|
        fileName := self currentFileNameHolder value asFilename. 
        self enableDirectoryUp value:(fileName isRootDirectory not).
        self fileEntryFieldHolder value:fileName.
        currDir := self currentDirectory value.
        newDir := self getDirWithoutFileName:(self currentFileNameHolder value asFilename).
        currDir ~= newDir ifTrue:[
            self currentDirectory value:newDir.
            self dirHistory addFile:newDir.
            self enableForward value:self dirHistory canForward.
            self enableBack value:self dirHistory canBack.
        ].
        ^ self
    ].
    changedObject == self treeSelectionHolder ifTrue:[
        | treeValue filename|
        treeValue := self treeSelectionHolder value.
        filename := treeValue fileName.
        treeValue ifTrue:[
            self currentFileNameHolder value:filename.
        ].
        ^ self
    ].

    changedObject == self showDirectoryTreeHolder ifTrue:[ |first|

        first := variableHorizontalPanel subViews first.

        directoryTreePage isNil ifTrue:[
            directoryTreePage := first.
            variableHorizontalPanel removeComponent:directoryTreePage.
        ] ifFalse:[
            variableHorizontalPanel addComponent:directoryTreePage.
            variableHorizontalPanel changeSequenceOrderFor:directoryTreePage to:1.
            directoryTreePage := nil
        ].
        ^ self
    ].
    changedObject == self viewNoteBookApplicationHolder ifTrue:[ | isPart lastPage|
        noteBookApplicationPage isNil ifTrue:[
            noteBookApplicationPage := variableVerticalPanel subViews last.
        ].
        lastPage := (self builder namedComponents at:#VariableVerticalPanel) subViews last.
        isPart := ((lastPage isKindOf:SubCanvas) and:[lastPage client isKindOf:NoteBookApplication]).             
        changedObject value ifTrue:[
            isPart ifFalse:[
                variableVerticalPanel addComponent:noteBookApplicationPage.
            ]
        ] ifFalse:[
            isPart ifTrue:[
                variableVerticalPanel removeComponent:noteBookApplicationPage.
            ]
        ].
        ^ self
    ].


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

!NewFileBrowser methodsFor:'image specs'!

clearHistoryIcon
    ^ Icon deleteIcon
! !

!NewFileBrowser methodsFor:'menu'!

canBack

    ^ self dirHistory canBack.
!

canForward

    ^ self dirHistory canForward.
!

menuDirHistory:backOrForward
    "initialize the directory menu
    "
    <resource: #programMenu >

    |menu histCopy index text removeItem|

    menu := Menu new.
    menu receiver:self.

    self dirHistory isEmpty ifTrue:[^ nil].
    index := self dirHistory indexOf:self currentFileNameHolder value.
    index = 0 ifTrue:[^ self].
    text := LabelAndIcon icon:(self class clearHistoryIcon) string:'Clear History'.
    backOrForward == #back ifTrue:[
        histCopy := self dirHistory copyTo:index - 1.
        removeItem := MenuItem label:text value:[
            self dirHistory removeBack.
            self enableBack value:self dirHistory canBack.
        ].
    ] ifFalse:[
        histCopy := self dirHistory copyFrom:index + 1.
        removeItem := MenuItem label:text value:[
            self dirHistory removeForward.
            self enableForward value:self dirHistory canForward.
        ].
    ].
    histCopy do:[:aFile| 
        menu addItem:(MenuItem label:aFile asString value:[
            self dirHistory setIndexTo:aFile.
            self currentFileNameHolder value:aFile.
        ]).
    ].
    menu addItem:(MenuItem label:'-').
    menu addItem:removeItem.
    ^ menu
!

menuFileHistory
    "initialize the file history menu
    "
    <resource: #programMenu >

    |menu hist text removeItem|

    menu := Menu new.
    menu receiver:self.

    hist := self fileHistory.
    hist isEmpty ifTrue:[^ nil].
    text := LabelAndIcon icon:(self class clearHistoryIcon) string:'Clear File History'.
    hist do:[:aFileItem| 
        menu addItem:(MenuItem label: aFileItem fileName asString value:[
            self selectOrOpenApplByFileItem:aFileItem
        ]).
    ].
    removeItem := MenuItem label:text value:[
        self fileHistory removeAll.
        self enableFileHistory value:false.
    ].
    menu addItem:(MenuItem label:'-').
    menu addItem:removeItem.
    ^ menu
! !

!NewFileBrowser methodsFor:'startup & release'!

initialize

    self masterApplication:nil.
    self fileEncodingHolder value:#iso8859.        "/ native ST/X encoding
!

makeDependent

    self currentFileNameHolder addDependent:self.
    self notifyChannel addDependent:self.
    self treeSelectionHolder addDependent:self.
    self showDirectoryTreeHolder addDependent:self.
    self viewNoteBookApplicationHolder addDependent:self.
!

postBuildHorizontalPanel:aPanel

    variableHorizontalPanel := aPanel.
!

postBuildPathView:aWidget
    "
        set the pramters that not can be changed in the window spec
    "

    aWidget level:-1.
    aWidget backgroundColor:(aWidget superView viewBackground).
!

postBuildVerticalPanel:aPanel

    variableVerticalPanel := aPanel.
!

postOpenWith:aBuilder

    self currentFileNameHolder changed.
    self currentDirectory changed.
    self viewNoteBookApplicationHolder changed.
    ^ super postOpenWith:aBuilder
!

preBuildWith:aBuilder

    ^ super preBuildWith:aBuilder.
! !

!NewFileBrowser class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewFileBrowser.st,v 1.7 2002-07-11 20:19:24 cg Exp $'
! !