"
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: 'stx:libtool' }"
AbstractFileBrowser subclass:#FileBrowserV2
instanceVariableNames:'fileEntryFieldHolder pathEntryField'
classVariableNames:'Icons'
poolDictionaries:''
category:'Interface-Tools-File'
!
!FileBrowserV2 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
"
FileBrowserV2 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:]
FileBrowserV2 open
"
! !
!FileBrowserV2 class methodsFor:'instance creation'!
on:aDirectoryPath
"return a new FileBrowserV2 in a pathname"
| instance files|
instance := self new.
files := aDirectoryPath isCollection ifTrue:[aDirectoryPath] ifFalse:[(Array with:aDirectoryPath)].
instance currentFileNameHolder value:files.
^ instance
"/ | instance builder|
"/
"/ builder := super open.
"/ instance := builder application.
"/ instance currentFileNameHolder value:aDirectoryPath.
"/ ^ instance
"
(FileBrowserV2 on:'/usr/local/bin') open
(FileBrowserV2 on:'/etc' ) open
(FileBrowserV2 on:'..' ) open
(FileBrowserV2 on:'.' ) open
"
!
open
"start a new FileBrowserV2"
| instance |
instance := self new.
instance open.
^ instance
"
FileBrowserV2 openOn:'/etc' withExtent:800@600
FileBrowserV2 openOn:'..' withExtent:200@300
FileBrowserV2 openOn:'.' withExtent:1024@768
"
!
openOn:aDirectoryPath
"start a new FileBrowserV2 in a pathname"
| instance|
instance := self on:aDirectoryPath asFilename.
^ instance open.
"
FileBrowserV2 openOn:'/etc'
FileBrowserV2 openOn:'..'
FileBrowserV2 openOn:'.'
"
!
openOn:aDirectoryPath withExtent:extent
"start a new FileBrowserV2 in a pathname"
| instance builder|
instance := self on:aDirectoryPath.
builder := instance open.
builder window extent:extent.
^ instance
"
FileBrowserV2 openOn:'/etc' withExtent:800@600
FileBrowserV2 openOn:'..' withExtent:200@300
FileBrowserV2 openOn:'.' withExtent:1024@768
"
!
openWithAspects:someAspects withExtent:extent
"start a new FileBrowserV2 in a pathname"
|dir clone|
dir := someAspects at:#currentFileNameHolder ifAbsent:nil.
clone := self openOn:(dir value) withExtent:extent.
"
FileBrowserV2 openOn:'/etc' withExtent:800@600
FileBrowserV2 openOn:'..' withExtent:200@300
FileBrowserV2 openOn:'.' withExtent:1024@768
"
! !
!FileBrowserV2 class methodsFor:'class initialization'!
clearHistoryIcon
^ Icon deleteIcon
!
initialize
self installInLauncher.
!
initializeDefaultCommands
DefaultCommandPerMIME := Dictionary new.
DefaultCommandPerMIME at:'application/x-tar-compressed' put:'gunzip < %1 | tar tvf -'.
DefaultCommandPerMIME at:'application/pdf' put:'acroread %1'.
"
self initializeDefaultCommands
"
!
installInLauncher
"add myself to the launcher menu and toolBar"
|menuItem icon action currentLauncher|
FileBrowserV2 isNil ifTrue:[^ self].
action := [FileBrowserV2 open].
icon := NewLauncher startNewFileBrowserIcon. "/ self defaultIcon magnifiedTo:28@28.
menuItem := MenuItem new
label: 'FileBrowser V2';
value: action;
isButton: false;
labelImage: (LabelAndIcon icon:icon string:'FileBrowser V2');
nameKey: #fileBrowserV2;
activeHelpKey: #fileBrowserV2;
submenuChannel: #menuFileHistory;
showBusyCursorWhilePerforming:true.
NewLauncher addMenuItem:menuItem in:'menu.file' position:#( #before #fileBrowser) space:true.
menuItem := MenuItem new
label: 'FileBrowser V2';
value: action;
isButton: true;
labelImage: icon;
nameKey: #fileBrowserV2;
activeHelpKey: #fileBrowserV2;
submenuChannel: #menuFileHistory;
showBusyCursorWhilePerforming:true.
NewLauncher addMenuItem:menuItem in:'toolbar' position:#( #before #fileBrowser) space:false.
currentLauncher := NewLauncher current.
currentLauncher notNil ifTrue:[
currentLauncher fileBrowserItemVisible value:false
].
"
self installInLauncher
self removeFromLauncher
"
!
removeFromLauncher
"/
"/ remove myself from the launcher menu
"/
|currentLauncher|
NewLauncher isNil ifTrue:[^ self].
NewLauncher removeUserTool:#fileBrowserV2.
currentLauncher := NewLauncher current.
currentLauncher notNil ifTrue:[
currentLauncher fileBrowserItemVisible value:false
].
"
self removeFromLauncher
"
! !
!FileBrowserV2 class methodsFor:'defaults'!
entryFieldEndStringForMultipleSelection
^ ('[*]')
! !
!FileBrowserV2 class methodsFor:'help specs'!
flyByHelpSpec
<resource: #help>
|spec|
spec := super flyByHelpSpec addPairsFrom:#(
#addTerminal
'Shell Terminal'
#searchFile
'Search a File'
#directoryUp
'Up'
#directoryBack
'Back'
#copyFile
'CopyFile'
#cutFile
'CutFile'
#fileHome
'Home'
#pasteFile
'PasteFile'
#deleteFile
'DeleteFile'
#fileIn
'FileIn'
#directoryForward
'Forward'
#directoryHistory
'Directory'
#fileHistory
'History'
#hideToolBar
'Hide Toolbar'
#hideFilenameEntryField
'Hide Filename Field'
#showFileDetails
'Show File Details'
#hideFileDetails
'Hide File Details'
#toggleDetails
'Show/Hide File Details'
).
^ spec.
!
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:#(
)
! !
!FileBrowserV2 class methodsFor:'icon'!
defaultIcon
"This resource specification was automatically generated
by the ImageEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the ImageEditor may not be able to read the specification."
"
self defaultIcon inspect
ImageEditor openOnClass:self andSelector:#defaultIcon
"
<resource: #image>
^Icon
constantNamed:#'FileBrowserV2 class defaultIcon'
ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
@@@@@@@@@@@@@@@@@@@@CLA&Y&Y&Y&X@@ADP@@@L0F@@@@@@A @ADAD@@@3@XN;.;.8F@ADPDQ@@CLA ;.@@@@@@D@@@D@@L0FC.8O[6=/@QDADP@@3@X@;
[6=/[0DPDP@@CLA DNC6<@@F<ADP@@@L0F@A@F= [0= @@@@@@3@X@@P=/[6=/@@@@@@CLA @@A/[6=/X@@@@@@L0FC0@O[6=/[0@@@@@@3@XF<@@@@@@@@@
@@@@CLA = @@@@@@@@@@@@@L0FA/[6=/A @@@@@@@@3@XO[6=/XF@@@@@@@@CLA @@@@@@X@@@@@@@@L0FY&Y&Y&Y @@@@@@@@C@Y&Y&Y&Y&@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C @b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
O??# C??9<@??>? O???<C????@????0O???8C???<@???>@O??<@C???@@???0@O??<@C??8@@??>@@O?? @C??8@@??>@@G?? @@??8@@@@@@@G.P=0AAD
HP@PQBD@GDP8 AADHD@PQBA@DN^=0@@a') ; yourself); yourself]
!
hideFilenameEntryFieldIcon
<resource: #programImage>
^ ToolbarIconLibrary hideToolbarIconH14
!
hideToolBarIcon
<resource: #programImage>
^ ToolbarIconLibrary hideToolbarIconH26
! !
!FileBrowserV2 class methodsFor:'image specs'!
viewDetailsIcon
"This resource specification was automatically generated
by the ImageEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the ImageEditor may not be able to read the specification."
"
self viewDetailsIcon inspect
ImageEditor openOnClass:self andSelector:#viewDetailsIcon
Icon flushCachedIcons
"
<resource: #image>
^Icon
constantNamed:#'FileBrowserV2 class viewDetailsIcon'
ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@]+X@@@@@]+X@@@@@]+X@@@@@]+X@@@@@@@@b') ; yourself); yourself]
!
viewNoDetailsIcon
"This resource specification was automatically generated
by the ImageEditor of ST/X."
"Do not manually edit this!! If it is corrupted,
the ImageEditor may not be able to read the specification."
"
self viewNoDetailsIcon inspect
ImageEditor openOnClass:self andSelector:#viewNoDetailsIcon
Icon flushCachedIcons
"
<resource: #image>
^Icon
constantNamed:#'FileBrowserV2 class viewNoDetailsIcon'
ifAbsentPut:[(Depth1Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@A<@@@@@@A<@@@@@@A<@@@@@@A<@@@@@@@@@b') ; yourself); yourself]
! !
!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 16 42 816 642)
#menu: #mainMenu
)
#component:
#(#SpecCollection
#collection: #(
#(#ViewSpec
#name: 'ToolbarBox'
#layout: #(#LayoutFrame 0 0 0 0 0 1 30 0)
#level: 0
#visibilityChannel: #toolBarVisibleHolder
#component:
#(#SpecCollection
#collection: #(
#(#ActionButtonSpec
#label: 'hideToolBarIcon'
#name: 'HideToolBarButton'
#layout: #(#LayoutFrame 0 0 0 0 13 0 30 0)
#activeHelpKey: #hideToolBar
#hasCharacterOrientedLabel: false
#translateLabel: true
#model: #hideToolbar
#postBuildCallback: #hideToolBarButtonCreated:
)
#(#MenuPanelSpec
#name: 'ToolBar'
#layout: #(#LayoutFrame 13 0 0 0 0 1 30 0)
#menu: #toolBarMainMenu
#textDefault: true
)
)
)
)
#(#ViewSpec
#name: 'FilenameEntryFieldBox'
#layout: #(#LayoutFrame 0 0 30 0 0 1 55 0)
#level: 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:
)
#(#ViewSpec
#name: 'Box1'
#layout: #(#LayoutFrame 13 0.0 0 0.0 0 1.0 0 1.0)
#level: 1
#component:
#(#SpecCollection
#collection: #(
#(#VariableHorizontalPanelSpec
#name: 'VariableHorizontalPanel1'
#layout: #(#LayoutFrame 1 0.0 1 0.0 -1 1.0 -1 1.0)
#level: 0
#showHandle: true
#component:
#(#SpecCollection
#collection: #(
#(#FilenameInputFieldSpec
#name: 'FilenameEntryField'
#level: 1
#model: #fileEntryFieldHolder
#acceptOnPointerLeave: false
#postBuildCallback: #postBuildPathField:
)
#(#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.8 1.0)
#postBuildCallback: #postBuildPathViewBox:
)
)
)
#postBuildCallback: #postBuildPathViewBox:
)
)
)
)
#(#ViewSpec
#name: 'BrowserBox'
#layout: #(#LayoutFrame 0 0.0 55 0 0 1.0 -20 1)
#level: 0
#component:
#(#SpecCollection
#collection: #(
#(#'FileBrowserV2UISpecifications::PanelSpec'
#name: 'VerticalPanel'
#layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
#level: 0
#whichView: #last
#orientation: #vertical
#visibility: #viewNoteBookApplicationHolder
#component:
#(#SpecCollection
#collection: #(
#(#'FileBrowserV2UISpecifications::PanelSpec'
#name: 'HorizontalPanel'
#level: 0
#whichView: #first
#orientation: #horizontal
#visibility: #showDirectoryTreeHolder
#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.229621 1.0)
)
#(#SubCanvasSpec
#name: 'FileApplicationNoteBook'
#hasHorizontalScrollBar: false
#hasVerticalScrollBar: false
#majorKey: #FileApplicationNoteBook
#createNewApplication: true
#createNewBuilder: true
#tabable: false
)
)
)
#handles: #(#Any 0.5 1.0)
)
)
)
)
#(#ViewSpec
#name: 'Box2'
#layout: #(#LayoutFrame 0 0 -20 1 0 1 0 1)
#level: 0
#component:
#(#SpecCollection
#collection: #(
#(#LabelSpec
#label: 'NotifyLabel'
#name: 'NotifyLabel'
#layout: #(#LayoutFrame 1 0.0 1 0.0 1 1.0 1 1.0)
#level: -1
#translateLabel: true
#labelChannel: #notifyChannel
#adjust: #left
)
)
)
)
)
)
)
! !
!FileBrowserV2 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:FileBrowserV2 andSelector:#browserMenu
(Menu new fromLiteralArrayEncoding:(FileBrowserV2 browserMenu)) startUp
"
<resource: #menu>
^
#(#Menu
#(
#(#MenuItem
#label: 'Spawn'
#translateLabel: true
#value: #doSpawn
)
#(#MenuItem
#label: 'Save Settings'
#translateLabel: true
#value: #saveSettingsAspectValues
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Search File'
#translateLabel: true
#value: #doOpenSearchFile
)
#(#MenuItem
#label: '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:FileBrowserV2 andSelector:#mainMenu
(Menu new fromLiteralArrayEncoding:(FileBrowserV2 mainMenu)) startUp
"
<resource: #menu>
^
#(#Menu
#(
#(#MenuItem
#label: 'Browser'
#translateLabel: true
#submenuChannel: #browserMenu
)
#(#MenuItem
#label: 'Directory'
#translateLabel: true
#submenuChannel: #directoryMenu
)
#(#MenuItem
#label: 'File'
#translateLabel: true
#submenuChannel: #fileMenu
)
#(#MenuItem
#label: 'Edit'
#translateLabel: true
#submenuChannel: #editMenu
)
#(#MenuItem
#label: 'View'
#translateLabel: true
#submenu:
#(#Menu
#(
#(#MenuItem
#label: 'Show'
#translateLabel: true
#submenu:
#(#Menu
#(
#(#MenuItem
#label: 'Hidden Files'
#translateLabel: true
#indication: #showHiddenFiles
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Directory Tree'
#translateLabel: true
#indication: #showDirectoryTreeHolder
)
#(#MenuItem
#label: 'Directory Description'
#translateLabel: true
#indication: #viewDirectoryDescription
)
#(#MenuItem
#label: 'Regular Files in TreeView (Left)'
#translateLabel: true
#indication: #viewFilesInDirectoryTree
)
#(#MenuItem
#label: 'Directories in ContentsView (Right)'
#translateLabel: true
#indication: #viewDirectoriesInDirectoryContentsBrowser
)
#(#MenuItem
#label: 'File Applications'
#translateLabel: true
#enabled: #enableViewNoteBookApplication
#indication: #viewNoteBookApplicationHolder
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Open Multiple Applications'
#translateLabel: true
#indication: #openMultipleApplicationsForType
)
)
nil
nil
)
)
#(#MenuItem
#label: 'Sort'
#translateLabel: true
#submenuChannel: #sortMenu
)
#(#MenuItem
#label: 'Details'
#translateLabel: true
#submenuChannel: #viewInContentsBrowserMenu
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Toolbar'
#translateLabel: true
#hideMenuOnActivated: false
#indication: #toolBarVisibleHolder
)
#(#MenuItem
#label: 'Pathname '
#translateLabel: true
#hideMenuOnActivated: false
#indication: #filenameEntryFieldVisibleHolder
)
#(#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'
#translateLabel: true
#value: #cvsUpdateAll
)
#(#MenuItem
#label: 'Update Directory Recursive'
#translateLabel: true
#value: #cvsUpdateAllRecursive
)
#(#MenuItem
#label: '-'
)
#(#MenuItem
#label: 'Commit...'
#translateLabel: true
#value: #cvsCommit
)
#(#MenuItem
#label: 'Add && Commit...'
#translateLabel: true
#value: #cvsAddAndCommit
#enabled: #canCvsAddAndCommit
)
#(#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
)
#(#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:FileBrowserV2 andSelector:#toolBarMainMenu
(Menu new fromLiteralArrayEncoding:(FileBrowserV2 toolBarMainMenu)) startUp
"
<resource: #menu>
^
#(#Menu
#(
#(#MenuItem
#label: 'DirectoryUp'
#translateLabel: true
#isButton: true
#value: #doGoDirectoryUp
#activeHelpKey: #directoryUp
#enabled: #enableDirectoryUp
#labelImage: #(#ResourceRetriever #AbstractFileBrowser #upArrow20x20Icon)
)
#(#MenuItem
#label: ''
)
#(#MenuItem
#label: 'Back'
#translateLabel: true
#isButton: true
#value: #doBack
#activeHelpKey: #directoryBack
#enabled: #enableBack
#labelImage: #(#ResourceRetriever #AbstractFileBrowser #leftArrow20x20Icon)
#submenuChannel: #menuDirHistoryBack
)
#(#MenuItem
#label: ''
)
#(#MenuItem
#label: 'Forward'
#translateLabel: true
#isButton: true
#value: #doForward
#activeHelpKey: #directoryForward
#enabled: #enableForward
#labelImage: #(#ResourceRetriever #AbstractFileBrowser #rightArrow20x20Icon)
#submenuChannel: #menuDirHistoryForward
)
#(#MenuItem
#label: ''
)
#(#MenuItem
#label: 'Home'
#translateLabel: true
#isButton: true
#value: #doGotoHomeDirectory
#activeHelpKey: #fileHome
#enabled: #enableHome
#labelImage: #(#ResourceRetriever nil #goHomeIcon)
)
#(#MenuItem
#label: ''
)
#(#MenuItem
#label: 'File History'
#translateLabel: true
#isButton: true
#activeHelpKey: #fileHistory
#enabled: #enableFileHistory
#labelImage: #(#ResourceRetriever #ToolbarIconLibrary #history20x20Icon)
#submenuChannel: #menuFileHistory
)
#(#MenuItem
#label: ''
)
#(#MenuItem
#label: 'Copy'
#translateLabel: true
#isButton: true
#value: #copyInDirContentsBrowser
#activeHelpKey: #copyFile
#enabled: #hasSelection
#labelImage: #(#ResourceRetriever #ToolbarIconLibrary #copy20x20Icon)
)
#(#MenuItem
#label: 'Cut'
#translateLabel: true
#isButton: true
#value: #cutInDirContentsBrowser
#activeHelpKey: #cutFile
#enabled: #hasSelection
#labelImage: #(#ResourceRetriever #ToolbarIconLibrary #cut20x20Icon2)
)
#(#MenuItem
#label: 'Paste'
#translateLabel: true
#isButton: true
#value: #pasteFiles
#activeHelpKey: #pasteFile
#enabled: #canPaste
#labelImage: #(#ResourceRetriever #ToolbarIconLibrary #paste20x20Icon)
)
#(#MenuItem
#label: 'Delete'
#translateLabel: true
#isButton: true
#value: #deleteInDirContentsBrowser
#activeHelpKey: #deleteFile
#enabled: #hasSelection
#labelImage: #(#ResourceRetriever #ToolbarIconLibrary #erase20x20Icon)
)
#(#MenuItem
#label: ''
)
#(#MenuItem
#label: 'File In'
#translateLabel: true
#isButton: true
#value: #fileFileIn
#activeHelpKey: #fileIn
#enabled: #hasSelection
#labelImage: #(#ResourceRetriever #ToolbarIconLibrary #fileIn20x20Icon3)
)
#(#MenuItem
#label: ''
)
#(#MenuItem
#label: 'Search File'
#translateLabel: true
#isButton: true
#value: #doOpenSearchFile
#activeHelpKey: #searchFile
#labelImage: #(#ResourceRetriever #ToolbarIconLibrary #search20x20Icon)
)
#(#MenuItem
#label: 'VT100'
#translateLabel: true
#isButton: true
#value: #doAddTerminal
#activeHelpKey: #addTerminal
#labelImage: #(#ResourceRetriever #ToolbarIconLibrary #shell20x20WithoutTextIcon)
)
#(#MenuItem
#label: 'viewDetails'
#isButton: true
#startGroup: #right
"/ #value: #toggleFileDetailsFor:
#activeHelpKey: #toggleDetails
#labelImage: #(#ResourceRetriever nil #viewDetailsIcon)
#submenuChannel: #viewDetailsMenuSpec
#indication: #viewDetails
)
)
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:FileBrowserV2 andSelector:#toolsMenuSpec
(Menu new fromLiteralArrayEncoding:(FileBrowserV2 toolsMenuSpec)) startUp
"
<resource: #menu>
^
#(#Menu
#(
#(#MenuItem
#label: 'Execute Command...'
#translateLabel: true
#value: #doExecuteCommand
)
#(#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: 'Install all as Autoloaded'
#translateLabel: true
#value: #installAllAsAutoloaded
#enabled: #anySTFilesPresent
)
#(#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: 'Slide Show'
#translateLabel: true
#isVisible: #hasSlideShow
#value: #openSlideShow
#enabled: #currentFilesAreInSameDirectory
)
#(#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
#enabled: #hasSelection
)
#(#MenuItem
#label: 'Find a File...'
#translateLabel: true
#value: #fileFindFile
)
#(#MenuItem
#label: 'Hex Dump'
#translateLabel: true
#value: #fileHexDump
#enabled: #hasSelection
)
)
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.
!
hideFilenameEntryField
self filenameEntryFieldVisibleHolder value:false.
!
hideToolbar
self toolBarVisibleHolder value:false.
!
toggleFileDetailsFor:anItem
|viewDetails|
viewDetails := self viewDetails value not.
self viewDetails value:viewDetails.
viewDetails ifTrue:[
anItem activeHelpKey:#hideFileDetails.
anItem label:(self class viewNoDetailsIcon).
] ifFalse:[
anItem activeHelpKey:#showFileDetails.
anItem label:(self class viewDetailsIcon).
].
! !
!FileBrowserV2 methodsFor:'aspects'!
fileEntryFieldHolder
fileEntryFieldHolder isNil ifTrue:[
fileEntryFieldHolder := ValueHolder new.
fileEntryFieldHolder addDependent:self.
].
^ fileEntryFieldHolder.
! !
!FileBrowserV2 methodsFor:'change & update'!
update:something with:aParameter from:changedObject
changedObject == self fileEntryFieldHolder ifTrue:[
(fileEntryFieldHolder value asFilename exists) ifFalse:[^ self].
self currentFileNameHolder value:(OrderedCollection with:(fileEntryFieldHolder value asFilename)) withoutNotifying:self.
].
changedObject == self currentFileNameHolder ifTrue:[
| files newDir|
files := self currentFileNameHolder value.
(files isEmpty) ifTrue:[
self fileEntryFieldHolder value:nil withoutNotifying:self.
] ifFalse:[
files size == 1 ifTrue:[
self fileEntryFieldHolder value:(files first) withoutNotifying:self.
] ifFalse:[
self fileEntryFieldHolder value:self getBestFile withoutNotifying:self.
].
].
" do not return here because the AbstractFileBrowserComponent have to do something
for every application "
"/ ^ self.
].
(changedObject == self toolBarVisibleHolder
or:[changedObject == self filenameEntryFieldVisibleHolder]) ifTrue:[
self updateToolVisibility.
^ self.
].
^ super update:something with:aParameter from:changedObject.
!
updateToolVisibility
|builder toolBar filenameEntryField vPanel topOffset visible d|
builder := self builder.
topOffset := 0.
visible := self toolBarVisibleHolder value.
visible ifTrue:[
toolBar := builder componentAt:#ToolbarBox.
topOffset := topOffset + toolBar height.
].
visible := self filenameEntryFieldVisibleHolder value.
visible ifTrue:[
filenameEntryField := builder componentAt:#FilenameEntryFieldBox.
d := filenameEntryField layout bottomOffset - filenameEntryField layout topOffset.
filenameEntryField layout topOffset:topOffset bottomOffset:topOffset + d.
topOffset := topOffset + filenameEntryField height.
filenameEntryField container notNil ifTrue:[
filenameEntryField containerChangedSize.
].
].
vPanel := builder componentAt:#BrowserBox.
vPanel layout topOffset:topOffset+1.
vPanel container notNil ifTrue:[
vPanel containerChangedSize.
].
! !
!FileBrowserV2 methodsFor:'event handling'!
processEvent:anEvent
"filter keyboard events.
Return true, if I have eaten the event"
|focusView key rawKey fileName|
anEvent isKeyPressEvent ifTrue:[
focusView := anEvent targetView.
key := anEvent key.
rawKey := anEvent rawKey.
(focusView isSameOrComponentOf:self window) ifTrue:[
((focusView == pathEntryField) not) ifTrue:[ ^ false].
(key == #Return) ifTrue:[
fileName := pathEntryField list first asFilename.
(fileName exists and:[fileName isDirectory not]) ifTrue:[
self openApplByFileItem:(DirectoryContentsBrowser itemClass with:fileName)
].
].
]
].
^ false
! !
!FileBrowserV2 methodsFor:'startup & release'!
closeRequest
(self application:#FileApplicationNoteBook do:#closeRequest) not ifTrue:[
^ 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.
!
makeDependent
self currentFileNameHolder addDependent:self.
self notifyChannel addDependent:self.
self viewNoteBookApplicationHolder addDependent:self.
self filenameEntryFieldVisibleHolder addDependent:self.
self toolBarVisibleHolder addDependent:self.
!
postBuildPathField:aWidget
"
set the pramters that not can be changed in the window spec
"
pathEntryField := aWidget.
aWidget level:-1.
"/ sClr := aWidget shadowColor.
"/ lClr := aWidget lightColor.
"/ sClr := (self builder componentAt:#ToolBar) shadowColor.
"/ lClr := (self builder componentAt:#ToolBar) lightColor.
"/ aWidget backgroundColor:(aWidget superView viewBackground).
"/ aWidget shadowColor:sClr.
!
postBuildPathViewBox:aWidget
aWidget backgroundColor:(MenuPanel defaultBackgroundColor).
!
postBuildWith:aBuilder
super postBuildWith:aBuilder.
self updateToolVisibility.
!
postOpenWith:aBuilder
self currentFileNameHolder changed.
self showDirectoryTreeHolder changed.
self viewNoteBookApplicationHolder changed.
self windowGroup addPreEventHook:self.
^ super postOpenWith:aBuilder
!
release
self saveRuntimeAspectValues.
^ super release
! !
!FileBrowserV2 class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libtool/FileBrowserV2.st,v 1.15 2002-10-12 00:48:20 cg Exp $'
! !
FileBrowserV2 initialize!