--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FileBrowserV2.st Wed Sep 25 10:00:32 2002 +0200
@@ -0,0 +1,1372 @@
+"
+ 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'
+ 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|
+ instance := self new.
+ instance currentFileNameHolder value:(Array with:aDirectoryPath).
+ ^ 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|
+
+ FileBrowserV2 isNil ifTrue:[^ self].
+
+ action := [FileBrowserV2 open].
+
+ icon := 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.
+
+ "
+ self installInLauncher
+ self removeFromLauncher
+ "
+!
+
+removeFromLauncher
+ "/
+ "/ remove myself from the launcher menu
+ "/
+
+ NewLauncher isNil ifTrue:[^ self].
+ NewLauncher removeUserTool:#fileBrowserV2
+
+ "
+ 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'
+
+).
+
+ ^ spec.
+! !
+
+!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:'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)
+ #max: #(#Point 1152 864)
+ #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
+ )
+ )
+
+ )
+ #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: 'View File List'
+ #translateLabel: true
+ #submenuChannel: #viewFileBrowserMenu
+ )
+ #(#MenuItem
+ #label: 'Sort File List'
+ #translateLabel: true
+ #submenuChannel: #sortMenu
+ )
+ #(#MenuItem
+ #label: 'View Tree View'
+ #translateLabel: true
+ #indication: #showDirectoryTreeHolder
+ )
+ #(#MenuItem
+ #label: 'View Directory Description'
+ #translateLabel: true
+ #indication: #viewDirectoryDescription
+ )
+ #(#MenuItem
+ #label: 'View Files in Tree View'
+ #translateLabel: true
+ #indication: #viewFilesInDirectoryTree
+ )
+ #(#MenuItem
+ #label: 'View Directories in Contents View'
+ #translateLabel: true
+ #indication: #viewDirectoriesInDirectoryContentsBrowser
+ )
+ #(#MenuItem
+ #label: 'View Notebook Applications'
+ #translateLabel: true
+ #enabled: #enableViewNoteBookApplication
+ #indication: #viewNoteBookApplicationHolder
+ )
+ #(#MenuItem
+ #label: 'Open Multiple Applications'
+ #translateLabel: true
+ #indication: #openMultipleApplicationsForType
+ )
+ #(#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 #leftArrow20x20PlusMenuIcon)
+ #submenuChannel: #menuDirHistoryBack
+ )
+ #(#MenuItem
+ #label: ''
+ )
+ #(#MenuItem
+ #label: 'Forward'
+ #translateLabel: true
+ #isButton: true
+ #value: #doForward
+ #activeHelpKey: #directoryForward
+ #enabled: #enableForward
+ #labelImage: #(#ResourceRetriever #AbstractFileBrowser #rightArrowPlusMenu20x20Icon)
+ #submenuChannel: #menuFileHistory
+ )
+ #(#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)
+ )
+ )
+ 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.
+! !
+
+!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.
+ self hasSelection value:false.
+ ] ifFalse:[
+ self hasSelection value:true.
+ 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:'menu'!
+
+canBack
+
+ ^ self dirHistory canBack.
+!
+
+canForward
+
+ ^ self dirHistory canForward.
+!
+
+menuFileHistory
+ "initialize the file history menu
+ "
+ <resource: #programMenu >
+
+ |menu hist text removeItem removeCol|
+
+ menu := Menu new.
+ menu receiver:self.
+
+ hist := self fileHistory.
+ hist isEmpty ifTrue:[^ nil].
+ text := LabelAndIcon icon:(self class clearHistoryIcon) string:'Clear File History'.
+ removeCol := OrderedCollection new.
+ hist do:[:aFileItem|
+ aFileItem fileName exists ifTrue:[
+ menu addItem:(MenuItem label: aFileItem fileName asString value:[
+ self currentFileNameHolder value:(OrderedCollection with:(aFileItem fileName)).
+ self openApplByFileItem:aFileItem
+ ]).
+ ] ifFalse:[
+ removeCol add:aFileItem.
+ ]
+ ].
+ "/ remove all not existing history entries
+ removeCol do:[ : el |
+ hist remove:el.
+ ].
+ removeItem := MenuItem label:text value:[
+ self fileHistory removeAll.
+ self enableFileHistory value:false.
+ ].
+ menu addItem:(MenuItem label:'-').
+ menu addItem:removeItem.
+ ^ menu
+! !
+
+!FileBrowserV2 methodsFor:'startup & release'!
+
+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
+ "
+
+ |sClr lClr|
+
+ 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.
+ ^ super postOpenWith:aBuilder
+!
+
+release
+
+ self saveRuntimeAspectValues.
+ ^ super release
+! !
+
+!FileBrowserV2 class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/libtool/FileBrowserV2.st,v 1.1 2002-09-25 07:59:46 penk Exp $'
+! !
+
+FileBrowserV2 initialize!