'From Squeak3.7beta of ''1 April 2004'' [latest update: #5905] on 29 April 2004 at 11:22:40 am'! "Change Set: ServicesInArchiveViewer-nk Date: 29 April 2004 Author: Ned Konz Adds the FileList services to the member context menu in the ArchiveViewer. For some of the services (those taking a filename instead of a stream) this requires actually extracting the appropriate member into a temporary directory. This directory will be removed when you quit. "! !ArchiveViewer methodsFor: 'accessing' stamp: 'nk 4/29/2004 10:36'! directory "For compatibility with file list." ^self error: 'should use readOnlyStream instead!!'! ! !ArchiveViewer methodsFor: 'accessing' stamp: 'nk 4/29/2004 10:53'! fullName "For compatibility with FileList services. If this is called, it means that a service that requires a real filename has been requested. So extract the selected member to a temporary file and return that name." | fullName dir | self canExtractMember ifFalse: [ ^nil ]. dir _ FileDirectory default directoryNamed: '.archiveViewerTemp'. fullName _ dir fullNameFor: self selectedMember localFileName. self selectedMember extractInDirectory: dir. ^fullName! ! !ArchiveViewer methodsFor: 'accessing' stamp: 'nk 4/29/2004 10:39'! readOnlyStream "Answer a read-only stream on the selected member. For the various stream-reading services." ^self selectedMember ifNotNilDo: [ :mem | mem contentStream ascii ]! ! !ArchiveViewer methodsFor: 'member list' stamp: 'nk 4/29/2004 10:20'! memberMenu: menu shifted: shifted | services | menu add: 'Comment archive' target: self selector: #commentArchive; balloonTextForLastItem: 'Add a comment for the entire archive'. self selectedMember ifNotNilDo: [ :member | menu addLine; add: 'Inspect member' target: self selector: #inspectMember; balloonTextForLastItem: 'Inspect the selected member'; add: 'Comment member' target: self selector: #commentMember; balloonTextForLastItem: 'Add a comment for the selected member'; addLine. services _ FileList itemsForFile: member fileName. menu addServices2: services for: self extraLines: #(). ]. ^menu! ! !ArchiveViewer methodsFor: 'member operations' stamp: 'nk 4/29/2004 10:46'! extractMember "Extract the member after prompting for a filename. Answer the filename, or nil if error." | result name | self canExtractMember ifFalse: [ ^nil ]. result _ StandardFileMenu newFile. result ifNil: [ ^nil ]. name _ (result directory fullNameFor: result name). (archive canWriteToFileNamed: name) ifFalse: [ self inform: name, ' is used by one or more members in your archive, and cannot be overwritten. Try extracting to another file name'. ^nil ]. self selectedMember extractToFileNamed: name. ^name! ! !ArchiveViewer class methodsFor: 'class initialization' stamp: 'nk 4/29/2004 11:05'! deleteTemporaryDirectory " ArchiveViewer deleteTemporaryDirectory " | dir | (dir _ self temporaryDirectory) exists ifTrue: [ dir recursiveDelete ].! ! !ArchiveViewer class methodsFor: 'class initialization' stamp: 'nk 4/29/2004 10:56'! initialize "ArchiveViewer initialize" FileList registerFileReader: self. Smalltalk addToShutDownList: self.! ! !ArchiveViewer class methodsFor: 'class initialization' stamp: 'nk 4/29/2004 11:06'! shutDown: quitting quitting ifTrue: [ self deleteTemporaryDirectory ].! ! !ArchiveViewer class methodsFor: 'fileIn/Out' stamp: 'nk 4/29/2004 10:56'! temporaryDirectory "Answer a directory to use for unpacking files for the file list services." ^FileDirectory default directoryNamed: '.archiveViewerTemp'! ! ArchiveViewer initialize! ArchiveViewer class removeSelector: #temporaryDirectoryName! !ArchiveViewer class reorganize! ('class initialization' deleteTemporaryDirectory initialize serviceOpenInZipViewer shutDown:) ('file list services' extractAllFrom: serviceAddToNewZip serviceExtractAll) ('fileIn/Out' fileReaderServicesForFile:suffix: services temporaryDirectory) ('initialize-release' unload) ('instance creation' addFileToNewZip: open openOn:) ('parts bin' descriptionForPartsBin) ! ArchiveViewer removeSelector: #readOnlyFileNamed:! !ArchiveViewer reorganize! ('accessing' archive directory fileName fullName members readOnlyStream selectedMember) ('archive operations' canCreateNewArchive canExtractAll canOpenNewArchive canSaveArchive commentArchive createNewArchive extractAll extractAllPossibleInDirectory: extractDirectoriesIntoDirectory: extractFilesIntoDirectory: openNewArchive saveArchive writePrependingFile) ('initialization' archive: backgroundColor briefContents buttonColor buttonOffColor buttonOnColor contents contents: createButtonBar createListHeadingUsingFont: createWindow fileName: initialize windowIsClosing) ('member list' displayLineFor: highlightMemberList:with: memberIndex memberIndex: memberList memberMenu:shifted:) ('member operations' addDirectory addMember addMemberFromClipboard canAddMember canDeleteMember canExtractMember canRenameMember canViewAllContents changeViewAllContents commentMember deleteMember extractMember inspectMember renameMember) ('menu' buildWindowMenu) ('message handling' perform:orSendTo:) ('panes' paneColor paneColorToUse) ('parts bin' initializeToStandAlone) ('user interface' defaultBackgroundColor) !