[Pkg] The Trunk: Morphic-dtl.337.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Feb 10 23:25:16 UTC 2010


David T. Lewis uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-dtl.337.mcz

==================== Summary ====================

Name: Morphic-dtl.337
Author: dtl
Time: 10 February 2010, 6:23:32.802 pm
UUID: 2cd5cc77-e403-4aec-b062-c3e8fbe38446
Ancestors: Morphic-dtl.336

Move FileList from Morphic-FileList to Tools-FileList
Move FileList2  from Morphic-FileList to Tools-FileList
Move FileLPluggableFileListst2  from Morphic-FileList to Tools-FileList
Move StandardFileMenuResult  from Morphic-FileList to Tools-Menus
Remove package category from Morphic-FileList

=============== Diff against Morphic-dtl.336 ===============

Item was changed:
  SystemOrganization addCategory: #'Morphic-Balloon'!
  SystemOrganization addCategory: #'Morphic-Basic'!
  SystemOrganization addCategory: #'Morphic-Basic-NewCurve'!
  SystemOrganization addCategory: #'Morphic-Borders'!
  SystemOrganization addCategory: #'Morphic-Collections-Arrayed'!
  SystemOrganization addCategory: #'Morphic-Demo'!
  SystemOrganization addCategory: #'Morphic-Events'!
  SystemOrganization addCategory: #'Morphic-Explorer'!
- SystemOrganization addCategory: #'Morphic-FileList'!
  SystemOrganization addCategory: #'Morphic-Kernel'!
  SystemOrganization addCategory: #'Morphic-Layouts'!
  SystemOrganization addCategory: #'Morphic-Menus'!
  SystemOrganization addCategory: #'Morphic-Models'!
  SystemOrganization addCategory: #'Morphic-Pluggable Widgets'!
  SystemOrganization addCategory: #'Morphic-Support'!
  SystemOrganization addCategory: #'Morphic-Text Support'!
  SystemOrganization addCategory: #'Morphic-TrueType'!
  SystemOrganization addCategory: #'Morphic-Widgets'!
  SystemOrganization addCategory: #'Morphic-Windows'!
  SystemOrganization addCategory: #'Morphic-Worlds'!

Item was removed:
- ----- Method: FileList>>readContentsBrief: (in category 'private') -----
- readContentsBrief: brevityFlag
- 	"Read the contents of the receiver's selected file, unless it is too long, in which case show just the first 5000 characters. Don't create a file if it doesn't already exist."
- 	| f fileSize first5000 |
- 
- 	brevityFlag ifTrue: [
- 		directory isRemoteDirectory ifTrue: [^ self readServerBrief]].
- 	f := directory oldFileOrNoneNamed: self fullName.
- 	f ifNil: [^ 'For some reason, this file cannot be read' translated].
- 	f converter: (self defaultEncoderFor: self fullName).
- 	(brevityFlag not or: [(fileSize := f size) <= 100000]) ifTrue:
- 		[contents := f contentsOfEntireFile.
- 		brevityState := #fullFile.   "don't change till actually read"
- 		^ contents].
- 
- 	"if brevityFlag is true, don't display long files when first selected"
- 	first5000 := f next: 5000.
- 	f close.
- 	contents := 'File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
- 
- Here are the first 5000 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 5000 characters.' translated format: {fileName. fileSize. first5000}.
- 	brevityState := #briefFile.   "don't change till actually read"
- 	^ contents.
- !

Item was removed:
- ----- Method: FileList2>>setSelectedDirectoryTo: (in category 'private') -----
- setSelectedDirectoryTo: aFileDirectoryWrapper
- 	currentDirectorySelected := aFileDirectoryWrapper.
- 	self directory: aFileDirectoryWrapper withoutListWrapper.
- 	brevityState := #FileList.
- 	"self addPath: path."
- 	self changed: #fileList.
- 	self changed: #contents.
- 	self changed: #currentDirectorySelected.!

Item was removed:
- ----- Method: FileList class>>windowColorSpecification (in category 'window color') -----
- windowColorSpecification
- 	"Answer a WindowColorSpec object that declares my preference"
- 
- 	^ WindowColorSpec classSymbol: self name  wording: 'File List' brightColor: #lightMagenta pastelColor: #paleMagenta helpMessage: 'A tool for looking at files'!

Item was removed:
- ----- Method: FileList>>initialize (in category 'initialization') -----
- initialize
- 	super initialize.
- 	directoryCache := WeakIdentityKeyDictionary new.!

Item was removed:
- ----- Method: FileList>>deleteDirectory (in category 'volume list and pattern') -----
- deleteDirectory
- 	"Remove the currently selected directory"
- 	| localDirName |
- 	directory entries size = 0 ifFalse:[^self inform:'Directory must be empty'].
- 	localDirName := directory localName.
- 	(self confirm: 'Really delete ' , localDirName , '?') ifFalse: [^ self].
- 	self volumeListIndex: self volumeListIndex-1.
- 	directory deleteDirectory: localDirName.
- 	self updateFileList.!

Item was removed:
- ----- Method: FileList>>buildContentPaneWith: (in category 'toolbuilder') -----
- buildContentPaneWith: builder
- 	| textSpec |
- 	textSpec := builder pluggableTextSpec new.
- 	textSpec 
- 		model: self;
- 		getText: #contents; 
- 		setText: #put:; 
- 		selection: #contentsSelection; 
- 		menu: #fileContentsMenu:shifted:.
- 	^textSpec
- !

Item was removed:
- ----- Method: FileList>>itemsForNoFile (in category 'file list menu') -----
- itemsForNoFile
- 
- 	| services |
- 	services := OrderedCollection new.
- 	services add: self serviceSortByName.
- 	services add: self serviceSortBySize.
- 	services add: (self serviceSortByDate useLineAfter: true).
- 	services addAll: (self itemsForDirectory: (self isFileSelected ifFalse: [ self directory ] ifTrue: [])).
- 	^ services
- 
- 		!

Item was removed:
- ----- Method: FileList>>serviceSortByDate (in category 'own services') -----
- serviceSortByDate
- 	"Answer a service for sorting by date"
- 
- 	^  (SimpleServiceEntry new
- 			provider: self 
- 			label: 'by date' 
- 			selector: #sortByDate 
- 			description: 'sort entries by date')
- 		extraSelector: #sortingByDate;
- 		buttonLabel: 'date'!

Item was removed:
- ----- Method: PluggableFileList>>resultBlock: (in category 'accessing') -----
- resultBlock: aBlock
- 
- 	^resultBlock := aBlock!

Item was removed:
- ----- Method: PluggableFileList class>>okToOpen:without: (in category 'validateBlocks') -----
- okToOpen: aFileNameString without: aSuffixString
- 
- 	"Answer whether user confirms that it is ok to overwrite the file named in aString"
- 	^ 1 = (UIManager default 
- 				chooseFrom: #('overwrite that file' 'select another file')
- 				title:  aFileNameString, ' already exists.').
- !

Item was removed:
- ----- Method: StandardFileMenuResult>>printOn: (in category 'accessing') -----
- printOn: aStream
- 	super printOn: aStream.
- 	aStream nextPutAll: ' with directory: '.
- 	directory printOn: aStream.
- 	aStream nextPutAll: ' name: '.
- 	name printOn: aStream
- 
- "StandardFileMenu oldFile"!

Item was removed:
- ----- Method: FileList2 class>>morphicViewFileSelector (in category 'morphic ui') -----
- morphicViewFileSelector
- 
- 	^self morphicViewFileSelectorForSuffixes: nil
- !

Item was removed:
- ----- Method: FileList2>>limitedSuperSwikiPublishDirectoryList (in category 'initialization') -----
- limitedSuperSwikiPublishDirectoryList
- 
- 	| dirList localDirName localDir |
- 
- 	dirList := self publishingServers.
- 	ServerDirectory localProjectDirectories do: [ :each |
- 		dirList add: (FileDirectoryWrapper with: each name: each localName model: self)].
- 
- 	"Make sure the following are always shown, but not twice"
- 	localDirName := SecurityManager default untrustedUserDirectory.
- 	localDir := FileDirectory on: localDirName.
- 	((ServerDirectory localProjectDirectories collect: [:each | each pathName]) includes: localDirName)
- 			ifFalse: [dirList add: (FileDirectoryWrapper with: localDir name: localDir localName model: self)].
- 	FileDirectory default pathName = localDirName
- 			ifFalse: [dirList add: (FileDirectoryWrapper with: FileDirectory default name: FileDirectory default localName model: self)].
- 	^dirList!

Item was removed:
- ----- Method: FileList2>>morphicDirectoryTreePane (in category 'user interface') -----
- morphicDirectoryTreePane
- 
- 	^self morphicDirectoryTreePaneFiltered: #initialDirectoryList
- !

Item was removed:
- ----- Method: FileList2>>servicesForFolderSelector (in category 'own services') -----
- servicesForFolderSelector
- 	"Answer the ok and cancel servies for the folder selector"
- 
- 	^ self okayAndCancelServices!

Item was removed:
- ----- Method: FileList>>volumeMenu: (in category 'volume menu') -----
- volumeMenu: aMenu
- 	aMenu addList: {
- 			{'recent...' translated.		#recentDirs}.
- 			#-.
- 			{'add server...' translated.		#askServerInfo}.
- 			{'remove server...' translated.		#removeServer}.
- 			#-.
- 			{'delete directory...' translated.	#deleteDirectory}.
- 			#-}.
- 	aMenu
- 		addServices: (self itemsForDirectory: self directory)
- 		for: self
- 		extraLines: #().
- 	^aMenu.!

Item was removed:
- ----- Method: FileList>>addPath: (in category 'private') -----
- addPath: aString
- 	"Add the given string to the list of recently visited directories."
- 
- 	| full |
- 	aString ifNil: [^self].
- 	full := String streamContents: 
- 		[ :strm | 2 to: volList size do: 
- 			[ :i | strm nextPutAll: (volList at: i) withBlanksTrimmed.
- 			strm nextPut: FileDirectory pathNameDelimiter]].
- 	full := full, aString.
- "Remove and super-directories of aString from the collection."
- 	RecentDirs removeAllSuchThat: [ :aDir | ((aDir, '*') match: full)].
- 
- "If a sub-directory is in the list, do nothing."
- 	(RecentDirs detect: [ :aDir | ((full, '*') match: aDir)] ifNone: [nil])
- 		ifNotNil: [^self].
- 
- 	[RecentDirs size >= 10]
- 		whileTrue: [RecentDirs removeFirst].
- 	RecentDirs addLast: full!

Item was removed:
- ----- Method: FileList class>>openEditorOn:editString: (in category 'instance creation') -----
- openEditorOn: aFileStream editString: editString
- 	"Open an editor on the given FileStream."
- 	| fileModel topView builder |
- 	fileModel := FileList new setFileStream: aFileStream.	"closes the stream"
- 	builder := ToolBuilder default.
- 	topView := fileModel buildEditorWith: builder.
- 	^builder open: topView.!

Item was removed:
- ----- Method: FileList>>readContentsEUCJP (in category 'private') -----
- readContentsEUCJP
- 	| f writeStream |
- 	f := directory oldFileOrNoneNamed: self fullName.
- 	f ifNil: [^ 'For some reason, this file cannot be read'].
- 	writeStream := WriteStream on: String new.
- 	f converter: EUCJPTextConverter new.
- 	[f atEnd]
- 		whileFalse: [writeStream nextPut: f next].
- 	f close.
- 	^ writeStream contents!

Item was removed:
- ----- Method: FileList>>serviceAddNewFile (in category 'own services') -----
- serviceAddNewFile
- 	"Answer a service entry characterizing the 'add new file' command"
- 
- 	^ SimpleServiceEntry provider: self label: 'add new file' selector: #addNewFile description: 'create a new,. empty file, and add it to the current directory.'!

Item was removed:
- ----- Method: FileList2>>optionalButtonSpecs: (in category 'initialization') -----
- optionalButtonSpecs: anArray
- 
- 	optionalButtonSpecs := anArray!

Item was removed:
- ----- Method: FileList class>>itemsForFile: (in category 'file reader registration') -----
- itemsForFile: fullName
- 	"Answer a list of services appropriate for a file of the given full name"
- 
- 	| services suffix |
- 	suffix := self suffixOf: fullName.
- 	services := OrderedCollection new.
- 	self registeredFileReaderClasses do: [:reader |
- 		reader ifNotNil: [services addAll: (reader fileReaderServicesForFile: fullName suffix: suffix)]].
- 	^ services!

Item was removed:
- ----- Method: FileList2>>directory: (in category 'initialization') -----
- directory: dir
- 	"Set the path of the volume to be displayed."
- 
- 	self okToChange ifFalse: [^ self].
- 
- 	self modelSleep.
- 	directory := dir.
- 	self modelWakeUp.
- 
- 	sortMode == nil ifTrue: [sortMode := #date].
- 	volList := Array with: '[]'.
- 	directory ifNotNil: [
- 		volList := volList, directory pathParts.  "Nesting suggestion from RvL"
- 	].
- 	volList := volList withIndexCollect: [:each :i | ( String new: i-1 withAll: $ ), each].
- 	self changed: #relabel.
- 	self changed: #volumeList.
- 	self pattern: pattern.
- 	directoryChangeBlock ifNotNil: [directoryChangeBlock value: directory].!

Item was removed:
- ----- Method: FileList>>sortBySize (in category 'file menu action') -----
- sortBySize
- 	self resort: #size!

Item was removed:
- ----- Method: FileList>>myServicesForFile:suffix: (in category 'file list menu') -----
- myServicesForFile: fullName suffix: suffix
- 
- 	^(FileStream isSourceFileSuffix: suffix)
- 		ifTrue: [ {self serviceBroadcastUpdate} ]
- 		ifFalse: [ #() ]!

Item was removed:
- ----- Method: FileList>>readContentsEUCKR (in category 'private') -----
- readContentsEUCKR
- 	| f writeStream |
- 	f := directory oldFileOrNoneNamed: self fullName.
- 	f ifNil: [^ 'For some reason, this file cannot be read'].
- 	writeStream := WriteStream on: String new.
- 	f converter: EUCKRTextConverter new.
- 	[f atEnd]
- 		whileFalse: [writeStream nextPut: f next].
- 	f close.
- 	^ writeStream contents!

Item was removed:
- ----- Method: PluggableFileList>>result (in category 'accepting/cancelling') -----
- result
- 
- 	accepted ifFalse: [^nil].
- 	^resultBlock value: directory value: fileName!

Item was removed:
- ----- Method: FileList class>>removeObsolete (in category 'class initialization') -----
- removeObsolete
- 	"FileList removeObsolete"
- 	self registeredFileReaderClasses copy 
- 		do:[:cls| cls isObsolete ifTrue:[self unregisterFileReader: cls]]!

Item was removed:
- ----- Method: StandardFileMenuResult>>directory: (in category 'accessing') -----
- directory: aDirectory
- 
- 	^directory := aDirectory!

Item was removed:
- ----- Method: FileList>>readOnlyStream (in category 'file list') -----
- readOnlyStream
- 	"Answer a read-only stream on the selected file. For the various stream-reading services."
- 
- 	^self directory ifNotNil: [ :dir | dir readOnlyFileNamed: self fileName ]!

Item was removed:
- ----- Method: PluggableFileList class>>allFilesAndFoldersFileFilter (in category 'fileFilterBlocks') -----
- allFilesAndFoldersFileFilter
- 
- 	^[:each | true]!

Item was removed:
- ----- Method: FileList2>>morphicFileContentsPane (in category 'user interface') -----
- morphicFileContentsPane
- 
- 	^PluggableTextMorph 
- 		on: self 
- 		text: #contents 
- 		accept: #put:
- 		readSelection: #contentsSelection 
- 		menu: #fileContentsMenu:shifted:
- !

Item was removed:
- ----- Method: FileList2>>cancelHit (in category 'private') -----
- cancelHit
- 
- 	modalView delete.
- 	directory := fileName := currentDirectorySelected := nil.!

Item was removed:
- ----- Method: FileList class>>registeredFileReaderClasses (in category 'file reader registration') -----
- registeredFileReaderClasses
- 	FileReaderRegistry := nil. "wipe it out"
- 	^FileServices registeredFileReaderClasses
- 	!

Item was removed:
- ----- Method: FileList>>serviceViewContentsInWorkspace (in category 'own services') -----
- serviceViewContentsInWorkspace
- 	"Answer a service for viewing the contents of a file in a workspace"
- 	
- 	^ (SimpleServiceEntry provider: self label: 'workspace with contents' selector: #viewContentsInWorkspace)
- 			description: 'open a new Workspace whose contents are set to the contents of this file'!

Item was removed:
- ----- Method: FileList>>getHex (in category 'file menu action') -----
- getHex
- 	"Get contents of file again, and display in Hex. Do this by making the cancel string be the contents, and doing a cancel."
- 
- 	Cursor read showWhile: [
- 		brevityState := #needToGetBriefHex.
- 		self changed: #contents].
- !

Item was removed:
- ----- Method: FileList>>deleteFile (in category 'file menu action') -----
- deleteFile
- 	"Delete the currently selected file"
- 	listIndex = 0 ifTrue: [^ self].
- 	(self confirm: ('Really delete {1}?' translated format:{fileName})) ifFalse: [^ self].
- 	directory deleteFileNamed: fileName.
- 	self updateFileList.
- 	brevityState := #FileList.
- 	self get!

Item was removed:
- ----- Method: FileList>>defaultContents (in category 'private') -----
- defaultContents
- 	contents := list == nil
- 		ifTrue: [String new]
- 		ifFalse: [String streamContents:
- 					[:s | s nextPutAll: 'NO FILE SELECTED' translated; cr]].
- 	brevityState := #FileList.
- 	^ contents!

Item was removed:
- ----- Method: FileList>>optionalButtonSpecs (in category 'initialization') -----
- optionalButtonSpecs
- 	"Answer a list of services underlying the optional buttons in their initial inception."
- 
- 	^ {self serviceSortByName. self serviceSortByDate. self serviceSortBySize}!

Item was removed:
- ----- Method: PluggableFileList class>>getFilePathNameWithExistenceCheck (in category 'standard dialog operations') -----
- getFilePathNameWithExistenceCheck
- 
- 	^self getFilePathNameDialogWithExistenceCheck open!

Item was removed:
- ----- Method: PluggableFileList>>fileVolumeIndex (in category 'accessing') -----
- fileVolumeIndex
- 
- 	self changed: #fileString.
- 	^super fileVolumeIndex!

Item was removed:
- ----- Method: FileList2>>removeLinefeeds (in category 'own services') -----
- removeLinefeeds
- 	"Remove any line feeds by converting to CRs instead.  This is a temporary implementation for 3.6 only... should be removed during 3.7alpha."
- 	| fileContents |
- 	fileContents := ((FileStream readOnlyFileNamed: self fullName) wantsLineEndConversion: true) contentsOfEntireFile.
- 	(FileStream newFileNamed: self fullName) 
- 		nextPutAll: fileContents;
- 		close.!

Item was removed:
- ----- Method: FileList2>>addNewDirectory (in category 'own services') -----
- addNewDirectory
- 	super addNewDirectory.
- 	self updateDirectory.!

Item was removed:
- ----- Method: StandardFileMenuResult>>name (in category 'accessing') -----
- name
- 
- 	^name!

Item was removed:
- ----- Method: FileList2 class>>textRow: (in category 'utility') -----
- textRow: aString 
- 
- 	^AlignmentMorph newRow 
- 		wrapCentering: #center; cellPositioning: #leftCenter;
- 		color: Color transparent;
- 		layoutInset: 0;
- 		addMorph: (
- 			AlignmentMorph newColumn
- 			wrapCentering: #center; cellPositioning: #topCenter;
- 			color: Color transparent;
- 			vResizing: #shrinkWrap;
- 			layoutInset: 0;
- 			addMorph: (
- 				AlignmentMorph newRow
- 				wrapCentering: #center; cellPositioning: #leftCenter;
- 				color: Color transparent;
- 				hResizing: #shrinkWrap;
- 				vResizing: #shrinkWrap;
- 				layoutInset: 0;
- 				addMorph: ((StringMorph contents: aString) color: Color blue; lock)
- 			)
- 		)!

Item was removed:
- ----- Method: FileList>>volumeListIndex: (in category 'volume list and pattern') -----
- volumeListIndex: index
- 	"Select the volume name having the given index."
- 
- 	| delim path |
- 	volListIndex := index.
- 	index = 1 
- 		ifTrue: [self directory: (FileDirectory on: '')]
- 		ifFalse: [delim := directory pathNameDelimiter.
- 				path := String streamContents: [:strm |
- 					2 to: index do: [:i |
- 						strm nextPutAll: (volList at: i) withBlanksTrimmed.
- 						i < index ifTrue: [strm nextPut: delim]]].
- 				self directory: (directory on: path)].
- 	brevityState := #FileList.
- 	self addPath: path.
- 	self changed: #fileList.
- 	self changed: #contents.
- 	self updateButtonRow.!

Item was removed:
- ----- Method: FileList2 class>>blueButtonText:textColor:color:inWindow:balloonText:selector:recipient: (in category 'blue ui') -----
- blueButtonText: aString textColor: textColor color: aColor inWindow: window balloonText: balloonText selector: sel recipient: recip 
- 	| result |
- 	result := window
- 				fancyText: aString translated
- font: Preferences standardEToysFont
- 				color: textColor.
- 	result setProperty: #buttonText toValue: aString;
- 		 hResizing: #rigid;
- 		 extent: 100 @ 20;
- 		 layoutInset: 4;
- 		 borderWidth: ColorTheme current dialogButtonBorderWidth;
- 		 useRoundedCorners;
- 		 setBalloonText: balloonText.
- 	result
- 		on: #mouseUp
- 		send: sel
- 		to: recip.
- 	aColor isNil
- 		ifFalse: [""
- 			result color: aColor.
- 			result borderColor: aColor muchDarker].
- 	^ result!

Item was removed:
- ----- Method: FileList>>serviceAllFileOptions (in category 'own services') -----
- serviceAllFileOptions
- 
- 	^ {SimpleServiceEntry provider: self label: 'more...' selector: #offerAllFileOptions description: 'show all the options available'}!

Item was removed:
- ----- Method: FileList2 class>>projectOnlySelectionBlock (in category 'as yet unclassified') -----
- projectOnlySelectionBlock
- 
- 	^[ :entry :myPattern |
- 		entry isDirectory ifTrue: [
- 			false
- 		] ifFalse: [
- 			#('*.pr' '*.pr.gz' '*.project') anySatisfy: [ :each | each match: entry name]
- 		]
- 	] fixTemps!

Item was removed:
- ----- Method: FileList2 class>>blueButtonText:textColor:inWindow: (in category 'blue ui') -----
- blueButtonText: aString textColor: textColor inWindow: window 
- 	^ self
- 		blueButtonText: aString
- 		textColor: textColor
- 		color: nil
- 		inWindow: window!

Item was removed:
- ----- Method: PluggableFileList class>>oldFileMenu: (in category 'StandardFileMenu') -----
- oldFileMenu: aDirectory
- 
- 	"For compatibility with StandardFileMenu for now, answer a StandardFileMenuResult"
- 	^(self getFilePathNameDialog)
- 		resultBlock: self sfmResultBlock;
- 		directory: aDirectory;
- 		yourself!

Item was removed:
- ----- Method: PluggableFileList>>canAccept (in category 'accessing') -----
- canAccept
- 
- 	^canAcceptBlock value: directory value: fileName!

Item was removed:
- ----- Method: PluggableFileList class>>existingFileValidateBlock (in category 'validateBlocks') -----
- existingFileValidateBlock
- 
- 	^[:theDirectory :theFileName :theNewFiles | 
- 		(theNewFiles includes: theFileName) or:
- 			[(PluggableFileList okToOverwrite: theFileName)]].!

Item was removed:
- ----- Method: FileList2>>initialDirectoryList (in category 'initialization') -----
- initialDirectoryList
- 
- 	| dirList |
- 	dirList := (FileDirectory on: '') directoryNames collect: [ :each |
- 		FileDirectoryWrapper with: (FileDirectory on: each) name: each model: self].
- 	dirList isEmpty ifTrue:[
- 		dirList := Array with: (FileDirectoryWrapper 
- 			with: FileDirectory default 
- 			name: FileDirectory default localName 
- 			model: self)].
- 	dirList := dirList,(
- 		ServerDirectory serverNames collect: [ :n | | nameToShow dir | 
- 			dir := ServerDirectory serverNamed: n.
- 			nameToShow := n.
- 			(dir directoryWrapperClass with: dir name: nameToShow model: self)
- 				balloonText: dir realUrl
- 		]
- 	).
- 	^dirList!

Item was removed:
- ----- Method: FileList2 class>>modalLoopOn: (in category 'utility') -----
- modalLoopOn: aMorph
- 	[aMorph world notNil] whileTrue: [
- 		aMorph outermostWorldMorph doOneCycle.
- 	].!

Item was removed:
- ----- Method: FileList2>>blueButtonForService:textColor:inWindow: (in category 'user interface') -----
- blueButtonForService: aService textColor: textColor inWindow: window 
- 	| block result |
- 	block := [self fullName isNil
- 				ifTrue: [self inform: 'Please select a file' translated]
- 				ifFalse: [aService performServiceFor: self]] copy fixTemps.
- 	result := window
- 				fancyText: aService buttonLabel capitalized translated
- 				font: Preferences standardEToysFont
- 				color: textColor.
- 	result setProperty: #buttonText toValue: aService buttonLabel capitalized;
- 		 hResizing: #rigid;
- 		 extent: 100 @ 20;
- 		 layoutInset: 4;
- 		 borderWidth: ColorTheme current dialogButtonBorderWidth;
- 		 useRoundedCorners;
- 		 setBalloonText: aService label.
- 	result
- 		on: #mouseUp
- 		send: #value
- 		to: block.
- 	^ result!

Item was removed:
- ----- Method: FileList>>modelWakeUp (in category 'initialization') -----
- modelWakeUp
- 	"User has entered or expanded the window -- reopen any remote connection."
- 
- 	(directory notNil and:[directory isRemoteDirectory])
- 		ifTrue: [[directory wakeUp] on: TelnetProtocolError do: [ :ex | self inform: ex printString ]] "It would be good to implement a null method wakeUp on the root of directory"!

Item was removed:
- ----- Method: FileList2 class>>morphicViewProjectLoader2InWorld: (in category 'blue ui') -----
- morphicViewProjectLoader2InWorld: aWorld
- 
- 	^self morphicViewProjectLoader2InWorld: aWorld reallyLoad: true!

Item was removed:
- ----- Method: FileList>>subDirectoriesOf: (in category 'directory tree') -----
- subDirectoriesOf: aDirectory
- 	^aDirectory directoryNames collect:[:each| aDirectory directoryNamed: each].!

Item was removed:
- ----- Method: FileList2>>listForPattern: (in category 'volume list and pattern') -----
- listForPattern: pat
- 	"Make the list be those file names which match the pattern."
- 
- 	| sizePad newList entries |
- 	directory ifNil: [^#()].
- 	entries := (Preferences eToyLoginEnabled
- 		and: [Utilities authorNamePerSe notNil])
- 		ifTrue: [directory matchingEntries: {'submittedBy: ' , Utilities authorName.} ]
- 		ifFalse: [directory entries].
- 	(fileSelectionBlock isKindOf: MessageSend) ifTrue: [
- 		fileSelectionBlock arguments: {entries}.
- 		newList := fileSelectionBlock value.
- 		fileSelectionBlock arguments: #().
- 	] ifFalse: [
- 		newList := entries select: [:entry | fileSelectionBlock value: entry value: pat].
- 	].
- 	newList := newList asSortedCollection: self sortBlock.
- 	sizePad := (newList inject: 0 into: [:mx :entry | mx max: (entry at: 5)])
- 					asStringWithCommas size - 1.
- 	newList := newList collect: [ :e | self fileNameFormattedFrom: e sizePad: sizePad ].
- 	^ newList asArray!

Item was removed:
- ----- Method: FileList>>setDirectoryTo: (in category 'directory tree') -----
- setDirectoryTo: dir
- 	"Set the current directory shown in the FileList. 
- 	Does not allow setting the directory to nil since this blows up in various places."
- 	dir ifNil:[^self].
- 	self directory: dir.
- 	brevityState := #FileList.
- 	self changed: #fileList.
- 	self changed: #contents.
- 	self changed: #pathAndPattern.!

Item was removed:
- StringHolder subclass: #FileList
- 	instanceVariableNames: 'fileName directory volList volListIndex list listIndex pattern sortMode brevityState directoryCache'
- 	classVariableNames: 'FileReaderRegistry RecentDirs'
- 	poolDictionaries: ''
- 	category: 'Morphic-FileList'!
- 
- !FileList commentStamp: 'nk 11/26/2002 11:52' prior: 0!
- I am model that can be used to navigate the host file system. By omitting the volume list, file list, and template panes from the view, I can also be used as the model for an editor on an individual file.
- 
- The FileList now provides a registration mechanism to which any tools the filelist uses ***MUST*** register.  This way it is possible to dynamically load or unload a new tool and have the FileList automatically updated.  This change supports a decomposition of Squeak and removes a problem with dead reference to classes after a major shrink.
- 
- Tools should implement the following methods (look for implementors in the image):
- 
- #fileReaderServicesForFile:suffix: (appropriate services for given file, takes a file name and a lowercased suffix)
- 
- #services (all provided services, to be displayed in full list)
- 
- These methods both return a collection of SimpleServiceEntry instances.  These contain a class, a menu label and a method selector having one argument.  They may also provide separate button labels and description.
- 
- The argument to the specified method will be a string representing the full name of a file when one is selected or the file list itself when there is no selected file.
- 
- Tools must register with the FileList calling the class method #registerFileReader: when they load. They also must call #unregisterFileReader: when they unload.
- 
- There is a testSuite called FileListTest that presents some examples. 
- 
- Stef (I do not like really this distinction passing always a file list could be better)
- 
- 
- Old Comments: 
- 
- 
- FileLists can now see FTP servers anywhere on the net.  In the volume list menu: 
- fill in server info...		Gives you a form to register a new ftp server you want to use.
- open server...		Choose a server to connect to.
- local disk			Go back to looking at your local volume.
- 
- 
- Still undone (you can contribute code):
- [ ] Using a Proxy server to get out through a firewall.  What is the convention for proxy servers with FTP?
- [ ] Fill in the date and size info in the list of remote files.  Allow sorting by it.  New smarts needed in (ServerDirectory fileNameFormattedFrom:sizePad:sortMode:).
- [ ] Currently the FileList has no way to delete a directory.  Since you can't select a directory without going into it, it would have to be deleting the current directory.  Which would usually be empty.!

Item was removed:
- ----- Method: FileList>>fullName (in category 'private') -----
- fullName
- 	"Answer the full name for the currently selected file; answer nil if no file is selected."
- 
- 	^ fileName ifNotNil: [directory
- 		ifNil:
- 			[FileDirectory default fullNameFor: fileName]
- 		ifNotNil:
- 			[directory fullNameFor: fileName]]
- !

Item was removed:
- ----- Method: FileList>>itemsForFile: (in category 'file list menu') -----
- itemsForFile: fullName
- 	"Answer a list of services appropriate for a file of the given full name"
- 	| suffix |
- 	suffix := self class suffixOf: fullName.
- 	^ (self class itemsForFile: fullName) , (self myServicesForFile: fullName suffix: suffix)!

Item was removed:
- ----- Method: FileList2>>changeDirectoryTo: (in category 'volume list and pattern') -----
- changeDirectoryTo: aFileDirectory
- 	"Change directory as requested."
- 
- 	self directory: aFileDirectory.
- 	self updateDirectory!

Item was removed:
- ----- Method: FileList>>spawn: (in category 'file menu action') -----
- spawn: code
- 	"Open a simple Edit window"
- 
- 	listIndex = 0 ifTrue: [^ self].
- 	self class openEditorOn: (directory readOnlyFileNamed: fileName)
- 				"read only just for initial look"
- 			editString: code!

Item was removed:
- ----- Method: FileList>>directory: (in category 'initialization') -----
- directory: dir
- 	"Set the path of the volume to be displayed."
- 
- 	self okToChange ifFalse: [^ self].
- 
- 	self modelSleep.
- 	directory := dir.
- 	self modelWakeUp.
- 
- 	sortMode == nil ifTrue: [sortMode := #date].
- 	volList := ((Array with: '[]'), directory pathParts)  "Nesting suggestion from RvL"
- 			withIndexCollect: [:each :i | ( String new: i-1 withAll: $ ), each].
- 	volListIndex := volList size.
- 	self changed: #relabel.
- 	self changed: #volumeList.
- 	self pattern: pattern.!

Item was removed:
- ----- Method: FileList>>registeredFileReaderClasses (in category 'private') -----
- registeredFileReaderClasses
- 	"return the list of classes that provide file reader services"
- 
- 	^ self class registeredFileReaderClasses!

Item was removed:
- ----- Method: FileList>>pattern (in category 'volume list and pattern') -----
- pattern
- 
- 	^ pattern ifNil: ['*']
- !

Item was removed:
- ----- Method: FileList2>>dirSelectionBlock: (in category 'initialization') -----
- dirSelectionBlock: aBlock
- 	dirSelectionBlock := aBlock!

Item was removed:
- ----- Method: PluggableFileList>>beAccepted (in category 'accessing') -----
- beAccepted
- 
- 	^accepted := true!

Item was removed:
- ----- Method: FileList>>suffixOfSelectedFile (in category 'file list menu') -----
- suffixOfSelectedFile
- 	"Answer the file extension of the receiver's selected file"
- 	^ self class suffixOf: self fullName.!

Item was removed:
- ----- Method: FileList2>>okHit (in category 'private') -----
- okHit
- 	ok := true.
- 	currentDirectorySelected
- 		ifNil: [Beeper beep]
- 		ifNotNil: [modalView delete]!

Item was removed:
- ----- Method: PluggableFileList class>>getFilePathNameDialogWithExistenceCheck (in category 'instance creation') -----
- getFilePathNameDialogWithExistenceCheck
- 
- 	^(self new)
- 		prompt: 'Select New File:';
- 		validateBlock: PluggableFileList checkExistingFileValidateBlock;
- 		yourself!

Item was removed:
- ----- Method: StandardFileMenuResult class>>directory:name: (in category 'instance creation') -----
- directory: aDirectory name: aString
- 
- 	^super new directory: aDirectory name: aString!

Item was removed:
- ----- Method: FileList>>readContentsUTF8 (in category 'private') -----
- readContentsUTF8
- 	| f writeStream |
- 	f := directory oldFileOrNoneNamed: self fullName.
- 	f ifNil: [^ 'For some reason, this file cannot be read'].
- 	writeStream := WriteStream on: String new.
- 	f converter: UTF8TextConverter new.
- 	[f atEnd]
- 		whileFalse: [writeStream nextPut: f next].
- 	f close.
- 	^ writeStream contents!

Item was removed:
- ----- Method: PluggableFileList>>listForPattern: (in category 'file list menu') -----
- listForPattern: pat
- 	"Make the list be those file names which match the pattern."
- 	| entries sizePad newList allFiles |
- 	entries := directory entries select: fileFilterBlock.
- 	sizePad := (entries inject: 0 into: [:mx :entry | mx max: (entry at: 5)])
- 					asStringWithCommas size - 1.
- 
- 	newList := (SortedCollection new: 30) sortBlock: self sortBlock.
- 
- 	allFiles := pat = '*'.
- 	entries do:
- 		[:entry | "<dirflag><name><creationTime><modificationTime><fileSize>"
- 		(allFiles or: [entry isDirectory or: [pat match: entry first]]) ifTrue:
- 			[newList add: entry]].
- 
- 	newList := newList collect: [ :e | self fileNameFormattedFrom: e sizePad: sizePad ].
- 
- 	volList size = 1 ifTrue:
- 		["Include known servers along with other desktop volumes" 
- 		^ newList asArray ,
- 		(ServerDirectory serverNames collect: [:n | '^' , n , self folderString])].
- 	newFiles := OrderedCollection new.
- 	^ newList asArray.!

Item was removed:
- ----- Method: FileList>>directoryNameOf: (in category 'directory tree') -----
- directoryNameOf: aDirectory
- 	^aDirectory localName!

Item was removed:
- ----- Method: FileList>>serviceGet (in category 'own services') -----
- serviceGet
- 	"Answer a service for getting the entire file"
- 
- 	^  (SimpleServiceEntry 
- 			provider: self 
- 			label: 'get entire file' 
- 			selector: #get
- 			description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.')!

Item was removed:
- ----- Method: FileList>>servicesFromSelectorSpecs: (in category 'own services') -----
- servicesFromSelectorSpecs: symbolArray
- 	"Answer an array of services represented by the incoming symbols, eliminating any that do not have a currently-registered service.  Pass the symbol #- along unchanged to serve as a separator between services"
- 
- 	"FileList new servicesFromSelectorSpecs: #(fileIn: fileIntoNewChangeSet: browseChangesFile:)"
- 
- 	| services col | 
- 	col := OrderedCollection new.
- 	services := self class allRegisteredServices, (self myServicesForFile: #dummy suffix: '*').
- 	symbolArray do: 
- 		[:sel | | res | 
- 			sel == #-
- 				ifTrue:
- 					[col add: sel]
- 				ifFalse:
- 					[res := services
- 							detect: [:each | each selector = sel] ifNone: [nil].
- 					res notNil
- 							ifTrue: [col add: res]]].
- 	^ col!

Item was removed:
- ----- Method: FileList2 class>>morphicViewProjectSaverFor: (in category 'blue ui') -----
- morphicViewProjectSaverFor: aProject
- "
- (FileList2 morphicViewProjectSaverFor: Project current) openInWorld
- "
- 	| window aFileList buttons treePane pane2 textColor1 option treeExtent buttonData buttonRow |
- 
- 	textColor1 := Color r: 0.742 g: 0.839 b: 1.0.
- 	aFileList := self new directory: ServerDirectory projectDefaultDirectory.
- 	aFileList dirSelectionBlock: self hideSqueakletDirectoryBlock.
- 	window := AlignmentMorphBob1 newColumn.
- 	window hResizing: #shrinkWrap; vResizing: #shrinkWrap.
- 	aFileList modalView: window.
- 	window
- 		setProperty: #FileList toValue: aFileList;
- 		wrapCentering: #center; cellPositioning: #topCenter;
- 		borderWidth: ColorTheme current dialogBorderWidth;
- 		borderColor: ColorTheme current dialogBorderColor;
- 		useRoundedCorners.
- 
- 	buttonData := Preferences enableLocalSave
- 				ifTrue: [{
- 							{'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}.
- 							{'Save on local disk only'. #saveLocalOnlyHit. 'saves in the Squeaklets folder'. ColorTheme current okColor}.
- 							{'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor}
- 						}]
- 				ifFalse: [{
- 							{'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}.
- 							{'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor}
- 						}].
- 	buttons := buttonData collect: [ :each |
- 		(self blueButtonText: each first textColor: textColor1 color: each fourth inWindow: window)
- 			setBalloonText: each third translated;
- 			hResizing: #shrinkWrap;
- 			on: #mouseUp send: each second to: aFileList
- 	].
- 
- 	option := aProject world 
- 		valueOfProperty: #SuperSwikiPublishOptions 
- 		ifAbsent: [#initialDirectoryList].
- 	aProject world removeProperty: #SuperSwikiPublishOptions.
- 
- 	treeExtent := World height < 500
- 						ifTrue: [ 350 at 150 ]
- 						ifFalse: [ 350 at 300 ].
- 
- 	(treePane := aFileList morphicDirectoryTreePaneFiltered: option) 
- 		extent: treeExtent; 
- 		retractable: false;
- 		borderWidth: 0.
- 	window
- 		addARowCentered: {
- 			window fancyText: 'Publish This Project' translated font: Preferences standardEToysTitleFont color: textColor1
- 		}.
- 	buttonRow := OrderedCollection new.
- 	buttons do: [:button | buttonRow add: button] separatedBy: [buttonRow add: ((Morph new extent: 30 at 5) color: Color transparent)].
- 
- "	addARowCentered: {
- 			buttons first. 
- 			(Morph new extent: 30 at 5) color: Color transparent. 
- 			buttons second.
- 			(Morph new extent: 30 at 5) color: Color transparent. 
- 			buttons third
- 		};"
- 	window
- 		addARowCentered: buttonRow;
- 		addARowCentered: { (window inAColumn: {(ProjectViewMorph on: aProject) lock}) layoutInset: 4};
- 		addARowCentered: {
- 			window fancyText: 'Please select a folder' translated font: Preferences standardEToysFont color: textColor1
- 		};
- 		addARow: {
- 			(
- 				window inAColumn: {
- 					(pane2 := window inARow: {window inAColumn: {treePane}}) 
- 						useRoundedCorners;
- 						layoutInset: 0;
- 						borderWidth: ColorTheme current dialogPaneBorderWidth;
- 						borderColor: ColorTheme current dialogPaneBorderColor
- 				}
- 			) layoutInset: 10
- 		}.
- 	window fullBounds.
- 	window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65.
- 	pane2 fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35).
- "
- 	buttons do: [ :each |
- 		each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0).
- 	].
- "
- 	window setProperty: #morphicLayerNumber toValue: 11.
- 	aFileList postOpen.
- 	window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0).
- 	^ window !

Item was removed:
- ----- Method: FileList2>>serviceOpenProjectFromFile (in category 'own services') -----
- serviceOpenProjectFromFile
- 	"Answer a service for opening a .pr project file"
- 
- 	^ SimpleServiceEntry 
- 		provider: self 
- 		label: 'load as project'
- 		selector: #openProjectFromFile
- 		description: 'open project from file'
- 		buttonLabel: 'load'!

Item was removed:
- ----- Method: FileList2>>getSelectedFile (in category 'private') -----
- getSelectedFile
- 	"Answer a filestream on the selected file.  If it cannot be opened for read/write, try read-only before giving up; answer nil if unsuccessful"
- 
- 	ok == true ifFalse: [^ nil].
- 	directory ifNil: [^ nil].
- 	fileName ifNil: [^ nil].
- 	^ (directory oldFileNamed: fileName) ifNil:
- 		[directory readOnlyFileNamed: fileName]!

Item was removed:
- ----- Method: FileList>>addNewDirectory (in category 'file menu action') -----
- addNewDirectory
- 	self 
- 		addNew: 'Directory'
- 		byEvaluating: [:newName | directory createDirectory: newName]
- !

Item was removed:
- ----- Method: PluggableFileList class>>fileNameSelectedAcceptBlock (in category 'canAcceptBlocks') -----
- fileNameSelectedAcceptBlock
- 
- 	^[:theDirectory :theFileName | theFileName isNil not]!

Item was removed:
- ----- Method: FileList2>>postOpen (in category 'private') -----
- postOpen
- 
- 	directory ifNotNil: [
- 		self changed: #(openPath) , directory pathParts. 
- 	].
- !

Item was removed:
- ----- Method: FileList2 class>>enableTypeButtons:info:forDir: (in category 'blue ui') -----
- enableTypeButtons: typeButtons info: fileTypeInfo forDir: aDirectory
- 
- 	| foundSuffixes firstEnabled |
- 
- 	firstEnabled := nil.
- 	foundSuffixes := (aDirectory ifNil: [ #()] ifNotNil: [ aDirectory fileNames]) collect: [ :each | (each findTokens: '.') last asLowercase].
- 	foundSuffixes := foundSuffixes asSet.
- 	fileTypeInfo with: typeButtons do: [ :info :button | | enableIt fileSuffixes |
- 		fileSuffixes := info second.
- 		enableIt := fileSuffixes anySatisfy: [ :patt | foundSuffixes includes: patt].
- 		button 
- 			setProperty: #enabled 
- 			toValue: enableIt.
- 		enableIt ifTrue: [firstEnabled ifNil: [firstEnabled := button]].
- 	].
- 	firstEnabled ifNotNil: [^firstEnabled mouseUp: nil].
- 	typeButtons do: [ :each | each color: Color gray].
- 
- !

Item was removed:
- ----- Method: FileList2>>morphicDirectoryTreePaneFiltered: (in category 'user interface') -----
- morphicDirectoryTreePaneFiltered: aSymbol
- 	^(SimpleHierarchicalListMorph 
- 		on: self
- 		list: aSymbol
- 		selected: #currentDirectorySelected
- 		changeSelected: #setSelectedDirectoryTo:
- 		menu: #volumeMenu:
- 		keystroke: nil)
- 			autoDeselect: false;
- 			enableDrag: false;
- 			enableDrop: true;
- 			yourself
- 		
- !

Item was removed:
- ----- Method: FileList2 class>>update:in:fileTypeRow:morphUp: (in category 'morphic ui') -----
- update: actionRow in: window fileTypeRow: fileTypeRow morphUp: morph
- 
- 	| fileTypeInfo info2 buttons textColor1 fileSuffixes fileActions aFileList fileTypeString |
- 
- 	(morph notNil and:[(morph valueOfProperty: #enabled) not]) ifTrue: [^self].
- 	fileTypeRow submorphsDo: [ :sub |
- 		sub color: (
- 			sub == morph 
- 				ifTrue: [Color white] 
- 				ifFalse: [(sub valueOfProperty: #enabled) 
- 							ifTrue: [Color transparent] ifFalse: [Color gray]]
- 		).
- 	].
- 	fileTypeString := morph isNil ifTrue:['xxxx'] ifFalse:[morph valueOfProperty: #buttonText].
- 
- 	aFileList := window valueOfProperty: #FileList.
- 	textColor1 := Color r: 0.742 g: 0.839 b: 1.0.
- 	actionRow removeAllMorphs.
- 	fileTypeInfo := self endingSpecs.
- 	info2 := fileTypeInfo detect: [ :each | each first = fileTypeString] ifNone: [ nil ].
- 	info2 isNil
- 		ifTrue:[
- 			buttons := OrderedCollection new
- 		]
- 		ifFalse:[
- 			fileSuffixes := info2 second.
- 			fileActions := info2 third.
- 			buttons := fileActions collect: [ :each | aFileList blueButtonForService: each textColor: textColor1 inWindow: window ].
- 			buttons do: [ :each |
- 				each fillWithRamp: ColorTheme current okColor oriented: (0.75 @ 0).
- 			].
- 		].
- 	buttons addLast: (self
- 								blueButtonText: 'Cancel'
- 								textColor: textColor1
- 								color: ColorTheme current cancelColor
- 								inWindow: window
- 								balloonText: 'Cancel this search' selector: #cancelHit recipient: aFileList).
- 	buttons do: [ :each | actionRow addMorphBack: each].
- 	window fullBounds.
- 	fileSuffixes isNil ifFalse:[
- 		aFileList fileSelectionBlock: (
- 			self selectionBlockForSuffixes: (fileSuffixes collect: [ :each | '*.',each])
- 		).
- 	].
- 	aFileList updateFileList.!

Item was removed:
- ----- Method: PluggableFileList>>startUpWithCaption: (in category 'StandardFileMenu') -----
- startUpWithCaption: captionOrNil
- 	"Display the menu, slightly offset from the cursor,
- 	so that a slight tweak is required to confirm any action."
- 	^ self startUpWithCaption: captionOrNil at: (ActiveHand ifNil:[Sensor cursorPoint]).!

Item was removed:
- ----- Method: FileList2 class>>morphicViewFileSelectorForSuffixes: (in category 'morphic ui') -----
- morphicViewFileSelectorForSuffixes: aList
- 	"Answer a morphic file-selector tool for the given suffix list."
- 
- 	^self 
- 		morphicViewFileSelectorForSuffixes: aList 
- 		directory: FileDirectory default.!

Item was removed:
- ----- Method: FileList>>fileName (in category 'file list') -----
- fileName
- 
- 	^ fileName!

Item was removed:
- ----- Method: FileList class>>registerFileReader: (in category 'file reader registration') -----
- registerFileReader: aProviderClass
- 	"register the given class as providing services for reading files"
- 
- 	| registeredReaders |
- 	registeredReaders := self registeredFileReaderClasses.
- 	(registeredReaders includes: aProviderClass) 
- 			ifFalse: [ registeredReaders addLast: aProviderClass ]!

Item was removed:
- ----- Method: FileList>>serviceAddNewDirectory (in category 'own services') -----
- serviceAddNewDirectory
- 	"Answer a service entry characterizing the 'add new directory' command"
- 
- 	^ SimpleServiceEntry 
- 		provider: self 
- 		label: 'add new directory' 
- 		selector: #addNewDirectory
- 		description: 'adds a new, empty directory (folder)' !

Item was removed:
- ----- Method: FileList>>pathAndPattern: (in category 'volume list and pattern') -----
- pathAndPattern: stringOrText
- 	"Answers both path and pattern"
- 	| base pat aString |
- 	aString := stringOrText asString.
- 	base := aString copyUpToLast: directory pathNameDelimiter.
- 	pat := aString copyAfterLast: directory pathNameDelimiter.
- 	self changed: #pathAndPattern. "avoid asking if it's okToChange"
- 	pattern := pat.
- 	self directory: (FileDirectory on: base).
- 	self changed: #pathAndPattern.
- 	self changed: #selectedPath.!

Item was removed:
- ----- Method: FileList>>volumeList (in category 'volume list and pattern') -----
- volumeList
- 	"Answer the current list of volumes."
- 
- 	^ volList
- !

Item was removed:
- ----- Method: FileList2 class>>prototypicalToolWindow (in category 'instance creation') -----
- prototypicalToolWindow
- 	"Answer an example of myself seen in a tool window, for the benefit of parts-launching tools"
- 
- 	^ self morphicView applyModelExtent!

Item was removed:
- ----- Method: FileList>>sortingByDate (in category 'private') -----
- sortingByDate
- 	^ sortMode == #date!

Item was removed:
- ----- Method: FileList2>>limitedSuperSwikiDirectoryList (in category 'initialization') -----
- limitedSuperSwikiDirectoryList
- 
- 	| dirList localDirName localDir |
- 
- 	dirList := OrderedCollection new.
- 	ServerDirectory serverNames do: [ :n | | dir nameToShow | 
- 		dir := ServerDirectory serverNamed: n.
- 		dir isProjectSwiki ifTrue: [
- 			nameToShow := n.
- 			dirList add: ((dir directoryWrapperClass with: dir name: nameToShow model: self)
- 				balloonText: dir realUrl)
- 		].
- 	].
- 	ServerDirectory localProjectDirectories do: [ :each |
- 		dirList add: (FileDirectoryWrapper with: each name: each localName model: self)
- 	].
- 	"Make sure the following are always shown, but not twice"
- 	localDirName := SecurityManager default untrustedUserDirectory.
- 	localDir := FileDirectory on: localDirName.
- 	((ServerDirectory localProjectDirectories collect: [:each | each pathName]) includes: localDirName)
- 			ifFalse: [dirList add: (FileDirectoryWrapper with: localDir name: localDir localName model: self)].
- 	FileDirectory default pathName = localDirName
- 			ifFalse: [dirList add: (FileDirectoryWrapper with: FileDirectory default name: FileDirectory default localName model: self)].
- 	(dirList anySatisfy: [:each | each withoutListWrapper acceptsUploads])
- 		ifFalse: [dirList add: (FileDirectoryWrapper with: FileDirectory default name: FileDirectory default localName model: self)].
- 	^dirList!

Item was removed:
- ----- Method: FileList>>listForPattern: (in category 'volume list and pattern') -----
- listForPattern: pat
- 	"Make the list be those file names which match the pattern."
- 
- 	| sizePad newList |
- 	newList := (self entriesMatching: pat) asSortedCollection: self sortBlock.
- 	sizePad := (newList inject: 0 into: [:mx :entry | mx max: (entry at: 5)])
- 					asStringWithCommas size - 1.
- 	newList := newList collect: [ :e | self fileNameFormattedFrom: e sizePad: sizePad ].
- 
- 	volList size = 1 ifTrue:
- 		["Include known servers along with other desktop volumes" 
- 		^ newList asArray ,
- 		(ServerDirectory serverNames collect: [:n | '^' , n , self folderString])].
- 	^ newList asArray!

Item was removed:
- ----- Method: FileList2 class>>endingSpecs (in category 'blue ui') -----
- endingSpecs
- 	"Answer a collection of specs to build the selective 'find anything' tool called by the Navigator. This version uses the services registry to do so."
- 	"FileList2 morphicViewGeneralLoaderInWorld: World"
- 	| categories specs rejects |
- 	rejects := #(addFileToNewZip: compressFile: openInZipViewer: extractAllFrom: openOn:).
- 	categories := #(
- 		('Art' ('bmp' 'gif' 'jpg' 'jpeg' 'form' 'png' 'pcx' 'xbm' 'xpm' 'ppm' 'pbm'))
- 		('Morphs' ('morph' 'morphs' 'sp'))
- 		('Projects' ('extseg' 'project' 'pr'))
- 		('MIDI' ('mid' 'midi'))
- 		('Music' ('mp3'))
- 		('Movies' ('movie' 'mpg' 'mpeg' 'qt' 'mov'))
- 		('Flash' ('swf'))
- 	).
- 
- 		"('Books' ('bo'))"
- 		"('Code' ('st' 'cs'))"
- 		"('TrueType' ('ttf'))"
- 		"('3ds' ('3ds'))"
- 		"('Tape' ('tape'))"
- 		"('Wonderland' ('wrl'))"
- 		"('HTML' ('htm' 'html'))"
- 
- 	categories first at: 2 put: ImageReadWriter allTypicalFileExtensions.
- 	specs := OrderedCollection new.
- 	categories do: [ :cat | | catSpecs catServices okExtensions services |
- 		services := Dictionary new.
- 		catSpecs := Array new: 3.
- 		catServices := OrderedCollection new.
- 		okExtensions := Set new.
- 
- 		cat second do: [ :ext | (FileList itemsForFile: 'fred.',ext) do: [ :i |
- 			(rejects includes: i selector) ifFalse: [
- 				okExtensions add: ext.
- 				services at: i label put: i ]]].
- 		services do: [ :svc | catServices add: svc ].
- 		services isEmpty ifFalse: [ 
- 			catSpecs at: 1 put: cat first;
- 				at: 2 put: okExtensions;
- 				at: 3 put: catServices.
- 			specs add: catSpecs ]
- 	].
- 	^specs
- !

Item was removed:
- ----- Method: FileList>>fileListMenu: (in category 'file list menu') -----
- fileListMenu: aMenu
- 
- 	fileName
- 		ifNil: [^ self noFileSelectedMenu: aMenu]
- 		ifNotNil: [^ self fileSelectedMenu: aMenu].
- !

Item was removed:
- ----- Method: FileList class>>registerInFlapsRegistry (in category 'class initialization') -----
- registerInFlapsRegistry
- 	"Register the receiver in the system's flaps registry"
- 	self environment
- 		at: #Flaps
- 		ifPresent: [:cl | cl registerQuad: #(FileList					prototypicalToolWindow		'File List'			'A File List is a tool for browsing folders and files on disks and on ftp types.') 
- 						forFlapNamed: 'Tools']!

Item was removed:
- ----- Method: FileList2 class>>modalFileSelectorForSuffixes:directory: (in category 'modal dialogs') -----
- modalFileSelectorForSuffixes: aList directory: aDirectory
- 
- 	| window aFileList |
- 
- 	window := self morphicViewFileSelectorForSuffixes: aList directory: aDirectory.
- 	aFileList := window valueOfProperty: #fileListModel.
- 	window openCenteredInWorld.
- 	self modalLoopOn: window.
- 	^aFileList getSelectedFile!

Item was removed:
- FileList subclass: #PluggableFileList
- 	instanceVariableNames: 'accepted fileFilterBlock canAcceptBlock validateBlock newFiles prompt resultBlock'
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Morphic-FileList'!
- 
- !PluggableFileList commentStamp: '<historical>' prior: 0!
- I am a model for a modal dialog akin to "Standard File Services" on various modern GUI operating systems.  My protocol includes some methods to maintain upward compatibility with StandardFileMenu, which I hope to replace.
- 
- Sample doIts:
- 
- 	"StandardFileDialog getFolder"-- ask user to select folder, answer corresponding FileDirectory
- 	"StandardFileDialog getFile"	-- ask user to select file, answer corresponding FileStream
- 	"StandardFileDialog putFile"	-- ask user to create new file, answer FileStream
- 
-   In addition to the instance variables inhereted from FileList, of which I am a subclass, I am pluggable via the following instance variables:
- 
- prompt			<String>
- 	Display a prompt between the buttons.
- 
- resultBlock		<BlockContext>
- 	Passed a file directory and a file name, answer the result to be answered by the dialog.	
- 
- canAcceptBlock	<BlockContext>	
- 	Answer whether the accept button should be "active"
- 
- fileFilterBlock	<BlockContext>	
- 	Passed a file directory entry, answer whether the entry should be added to the list.  The list can be further filtered (but not expanded) by the user through the pattern.
- 
- validateBlock	<BlockContent>
- 	Passed a file directory entry, a file name and a collection of newly created files, answer whether the dialog selection is valid.  validateBlock is checked after the user has pressed accept, for example to ask if the user really meant to delete a file.
- 
- newFiles		<OrderedCollection>
- 
- 	newFiles is an OrderedCollection of fileNames of files added by the user to the current directory since the user last entered same!

Item was removed:
- ----- Method: FileList>>selectedPath (in category 'directory tree') -----
- selectedPath
- 	| top here |
- 	top := FileDirectory root.
- 	here := directory.
- 	^(Array streamContents:[:s| | next |
- 		s nextPut: here.
- 		[next := here containingDirectory.
- 		top pathName = next pathName] whileFalse:[
- 			s nextPut: next.
- 			here := next.
- 		]]) reversed.!

Item was removed:
- ----- Method: StandardFileMenuResult>>directory:name: (in category 'private') -----
- directory: aDirectory name: aString
- 
- 	directory := aDirectory.
- 	name := aString.
- 	^self!

Item was removed:
- ----- Method: PluggableFileList>>fileSelectedMenu: (in category 'file list menu') -----
- fileSelectedMenu: aMenu
- 	| firstItems secondItems thirdItems n1 n2 n3 services |
- 	firstItems := self itemsForFile: self fullName asLowercase.
- 	secondItems := self itemsForAnyFile.
- 	thirdItems := self itemsForNoFile.
- 	n1 := firstItems size.
- 	n2 := n1 + secondItems size.
- 	n3 := n2 + thirdItems size.
- 	services := firstItems, secondItems, thirdItems, 
- 			(OrderedCollection with: (SimpleServiceEntry provider: self label: 'more...' selector: #offerAllFileOptions)).
- 	^ aMenu 
- 		addServices2: services 
- 		for: self
- 		extraLines: (Array with: n1 with: n2 with: n3)
- !

Item was removed:
- ----- Method: PluggableFileList class>>getFile (in category 'standard dialog operations') -----
- getFile
- 
- 	| result |
- 	result := self getFilePathName.
- 	^result ifNotNil: [FileStream oldFileNamed: result]!

Item was removed:
- ----- Method: PluggableFileList>>fileFilterBlock: (in category 'accessing') -----
- fileFilterBlock: aBlock
- 
- 	^fileFilterBlock := aBlock!

Item was removed:
- ----- Method: FileList2 class>>morphicViewFolderSelector (in category 'morphic ui') -----
- morphicViewFolderSelector
- 
- 	^self morphicViewFolderSelector: FileDirectory default!

Item was removed:
- ----- Method: FileList>>sortByName (in category 'file menu action') -----
- sortByName
- 	self resort: #name!

Item was removed:
- ----- Method: FileList2>>okayAndCancelServices (in category 'own services') -----
- okayAndCancelServices
- 	"Answer ok and cancel services"
- 
- 	^ {self serviceOkay. self serviceCancel}!

Item was removed:
- ----- Method: StandardFileMenuResult>>isDirectory (in category 'testing') -----
- isDirectory
- 
- 	^name = ''!

Item was removed:
- ----- Method: FileList2 class>>morphicViewProjectLoader (in category 'morphic ui') -----
- morphicViewProjectLoader
- 
- 	| dir aFileList window midLine fixedSize |
- 
- 	dir := FileDirectory default.
- 	aFileList := self new directory: dir.
- 	aFileList optionalButtonSpecs: aFileList servicesForProjectLoader.
- 	aFileList fileSelectionBlock: self projectOnlySelectionBlock.
- 	window := (SystemWindow labelled: dir pathName) model: aFileList.
- 
- 	fixedSize := 25.
- 	midLine := 0.4.
- 	self addFullPanesTo: window from: {
- 		{aFileList optionalButtonRow. 0 @ 0 corner: 1 @ 0. 0 at 0 corner: 0 at fixedSize}.
- 		{aFileList morphicDirectoryTreePane. 0 at 0 corner: midLine at 1. 0 at fixedSize corner: 0 at 0}.
- 		{aFileList morphicFileListPane. midLine @ 0 corner: 1 at 1. 0 at fixedSize corner: 0 at 0}.
- 	}.
- 	aFileList postOpen.
- 	^ window !

Item was removed:
- ----- Method: PluggableFileList>>fileString: (in category 'file string') -----
- fileString: aString
- 
- 	"| textName index ending |
- 	textName := aString asString.
- 	(FileDirectory default fileExists: textName) ifTrue:
- 		[self directory: (FileDirectory forFileName: textName).
- 		 index := list indexOf: (FileDirectory localNameFor: textName).
- 		 index = 0 ifTrue: 
- 			[ending := ') ', (FileDirectory localNameFor: textName).
- 		  	 index := list findFirst: [:line | line endsWith: ending]].
- 		 self fileListIndex: index].
- 	(FileDirectory default directoryExists: textName) ifTrue:
- 		[self directory: (FileDirectory on: textName)]."
- 	self changed: #fileString.
- 	self changed: #contents.
- 	^true!

Item was removed:
- ----- Method: FileList>>get (in category 'file menu action') -----
- get
- 	"Get contents of file again, it may have changed. Do this by making the cancel string be the contents, and doing a cancel."
- 
- 	Cursor read showWhile: [
- 		self okToChange ifFalse: [^ nil].
- 		brevityState == #briefHex
- 			ifTrue: [brevityState := #needToGetFullHex]
- 			ifFalse: [brevityState := #needToGetFull].
- 		self changed: #contents].
- !

Item was removed:
- ----- Method: FileList2 class>>blueButtonText:textColor:inWindow:balloonText:selector:recipient: (in category 'blue ui') -----
- blueButtonText: aString textColor: textColor inWindow: window balloonText: balloonText selector: sel recipient: recip 
- 	^ self
- 		blueButtonText: aString
- 		textColor: textColor
- 		color: nil
- 		inWindow: window
- 		balloonText: balloonText
- 		selector: sel
- 		recipient: recip !

Item was removed:
- ----- Method: FileList>>putUpdate: (in category 'server list') -----
- putUpdate: fullFileName
- 	"Put this file out as an Update on the servers."
- 
- 	| names choice |
- 	self canDiscardEdits ifFalse: [^ self changed: #flash].
- 	names := ServerDirectory groupNames asSortedArray.
- 	choice := UIManager default chooseFrom: names values: names.
- 	choice == nil ifTrue: [^ self].
- 	(ServerDirectory serverInGroupNamed: choice) putUpdate: 
- 				(directory oldFileNamed: fullFileName).
- 	self volumeListIndex: volListIndex.
- !

Item was removed:
- ----- Method: PluggableFileList class>>open (in category 'instance creation') -----
- open
- 
- 	^self new open!

Item was removed:
- ----- Method: FileList class>>itemsForDirectory: (in category 'file reader registration') -----
- itemsForDirectory: aFileDirectory
- 	"Answer a list of services appropriate when no file is selected."
- 
- 	| services |
- 	services := OrderedCollection new.
- 	self registeredFileReaderClasses do: [:reader |
- 		reader ifNotNil: [services addAll: (reader fileReaderServicesForDirectory: aFileDirectory) ]].
- 	^ services!

Item was removed:
- ----- Method: FileList>>serviceSortBySize (in category 'own services') -----
- serviceSortBySize
- 	"Answer a service for sorting by size"
- 
- 	^  (SimpleServiceEntry 
- 			provider: self 
- 			label: 'by size' 
- 			selector: #sortBySize
- 			description: 'sort entries by size')
- 				extraSelector: #sortingBySize;
- 				buttonLabel: 'size'!

Item was removed:
- ----- Method: FileList>>getButtonRow (in category 'toolbuilder') -----
- getButtonRow
- 	"Answer the dynamic button row to use for the currently selected item."
- 	| builder svc |
- 	builder := ToolBuilder default.
- 	svc := self universalButtonServices.
- 	self fileListIndex = 0 ifFalse:[svc := svc, self dynamicButtonServices].
- 	^svc collect:[:service| service buildWith: builder in: self].!

Item was removed:
- ----- Method: FileList2>>universalButtonServices (in category 'initialization') -----
- universalButtonServices
- 	"Answer the services to be reflected in the receiver's buttons"
- 
- 	^ self optionalButtonSpecs!

Item was removed:
- ----- Method: FileList2>>morphicPatternPane (in category 'user interface') -----
- morphicPatternPane
-    | pane |
-     pane := PluggableTextMorph 
- 		on: self 
- 		text: #pattern 
- 		accept: #pattern:.
-     pane acceptOnCR: true.
-    ^pane
- 		
- !

Item was removed:
- ----- Method: FileList>>serviceCopyName (in category 'own services') -----
- serviceCopyName
- 
- 	^ (SimpleServiceEntry provider: self label: 'copy name to clipboard' selector: #copyName description:'copy name to clipboard' )!

Item was removed:
- ----- Method: FileList2>>directory (in category 'volume list and pattern') -----
- directory
- 
- 	^directory!

Item was removed:
- ----- Method: PluggableFileList>>startUpWithCaption:at: (in category 'StandardFileMenu') -----
- startUpWithCaption: aString at: location
- 
- 	self prompt: aString.
- 	^self open!

Item was removed:
- ----- Method: PluggableFileList class>>okToOverwrite: (in category 'validateBlocks') -----
- okToOverwrite: aString
- 
- 	"Answer whether user confirms that it is ok to overwrite the file named in aString"
- 	^ 1 = (UIManager default chooseFrom: #('overwrite that file' 'select another file')
- 			title:  aString, ' already exists.')
- !

Item was removed:
- ----- Method: FileList>>updateFileList (in category 'private') -----
- updateFileList
- 	"Update my files list with file names in the current directory  
- 	that match the pattern.
- 	The pattern string may have embedded newlines or semicolons; these separate different patterns."
- 	| patterns |
- 	patterns := OrderedCollection new.
- 	Cursor wait showWhile: [
- 	(pattern findTokens: (String with: Character cr with: Character lf with: $;))
- 		do: [ :each |
- 			(each includes: $*) | (each includes: $#)
- 					ifTrue: [ patterns add: each]
- 					ifFalse: [each isEmpty
- 										ifTrue: [ patterns add: '*']
- 										ifFalse: [ patterns add: '*' , each , '*']]].
- 
- 	list := self listForPatterns: patterns.
- 	listIndex := 0.
- 	volListIndex := volList size.
- 	fileName := nil.
- 	contents := ''.
- 	self changed: #volumeListIndex.
- 	self changed: #fileList.
- 	self updateButtonRow]!

Item was removed:
- ----- Method: FileList2 class>>openMorphicViewInWorld (in category 'instance creation') -----
- openMorphicViewInWorld
- 	"FileList2 openMorphicViewInWorld"
- 	^self morphicView openInWorld!

Item was removed:
- ----- Method: FileList>>optionalButtonHeight (in category 'initialization') -----
- optionalButtonHeight
- 
- 	^ 15!

Item was removed:
- ----- Method: FileList>>dirAndFileName (in category 'file list menu') -----
- dirAndFileName
- 
- 	^{directory. fileName}!

Item was removed:
- ----- Method: FileList2>>openProjectFromFile (in category 'own services') -----
- openProjectFromFile
- 	"Reconstitute a Morph from the selected file, presumed to be represent
- 	a Morph saved via the SmartRefStream mechanism, and open it in an
- 	appropriate Morphic world."
- 
- 	Project canWeLoadAProjectNow ifFalse: [^ self].
- 	ProjectViewMorph 
- 		openFromDirectory: directory 
- 		andFileName: fileName
- !

Item was removed:
- ----- Method: FileList>>itemsForAnyFile (in category 'file list menu') -----
- itemsForAnyFile
- 	"Answer a list of universal services that could apply to any file"
- 	
- 	| services |
- 	services := OrderedCollection new: 4.
- 	services add: self serviceCopyName. 
- 	services add: self serviceRenameFile. 
- 	services add: self serviceDeleteFile.
- 	services add: self serviceViewContentsInWorkspace.
- 	^ services!

Item was removed:
- ----- Method: FileList2 class>>projectOnlySelectionMethod: (in category 'as yet unclassified') -----
- projectOnlySelectionMethod: incomingEntries
- 
- 	| versionsAccepted |
- 
- 	"this shows only the latest version of each project"
- 	versionsAccepted := Dictionary new.
- 	incomingEntries do: [ :entry | | basicInfoTuple basicVersion basicName |
- 		entry isDirectory ifFalse: [
- 			(#('*.pr' '*.pr.gz' '*.project') anySatisfy: [ :each | each match: entry name]) ifTrue: [
- 				basicInfoTuple := Project parseProjectFileName: entry name.
- 				basicName := basicInfoTuple first.
- 				basicVersion := basicInfoTuple second.
- 				((versionsAccepted includesKey: basicName) and: 
- 						[(versionsAccepted at: basicName) first > basicVersion]) ifFalse: [
- 					versionsAccepted at: basicName put: {basicVersion. entry}
- 				].
- 			]
- 		]
- 	].
- 	^versionsAccepted asArray collect: [ :each | each second]!

Item was removed:
- ----- Method: FileList class>>prototypicalToolWindow (in category 'instance creation') -----
- prototypicalToolWindow
- 	"Answer an example of myself seen in a tool window, for the benefit of parts-launching tools"
- 	^ ToolBuilder build: self new!

Item was removed:
- ----- Method: FileList>>buildEditorWith: (in category 'toolbuilder') -----
- buildEditorWith: builder
- 	^super buildWith: builder!

Item was removed:
- ----- Method: FileList>>removeServer (in category 'server list') -----
- removeServer
- 
- 	| choice names |
- 	self flag: #ViolateNonReferenceToOtherClasses.
- 	names := ServerDirectory serverNames asSortedArray.
- 	choice := UIManager default chooseFrom: names values: names.
- 	choice == nil ifTrue: [^ self].
- 	ServerDirectory removeServerNamed: choice!

Item was removed:
- ----- Method: FileList>>entriesMatching: (in category 'private') -----
- entriesMatching: patternString
- 	"Answer a list of directory entries which match the patternString.
- 	The patternString may consist of multiple patterns separated by ';'.
- 	Each pattern can include a '*' or '#' as wildcards - see String>>match:"
- 
- 	| entries patterns |
- 	entries := directory entries reject:[:e| e isDirectory].
- 	patterns := patternString findTokens: ';'.
- 	(patterns anySatisfy: [:each | each = '*'])
- 		ifTrue: [^ entries].
- 	^ entries select: [:entry | patterns anySatisfy: [:each | each match: entry first]]!

Item was removed:
- ----- Method: FileList>>serviceDeleteFile (in category 'own services') -----
- serviceDeleteFile
- 
- 	^ (SimpleServiceEntry provider: self label: 'delete' selector: #deleteFile)
- 			description: 'delete the seleted item'!

Item was removed:
- ----- Method: FileList2>>updateDirectory (in category 'initialization') -----
- updateDirectory
- 	"directory has been changed externally, by calling directory:.
- 	Now change the view to reflect the change."
- 	self changed: #currentDirectorySelected.
- 	self postOpen.!

Item was removed:
- ----- Method: FileList2 class>>modalFileSelector (in category 'modal dialogs') -----
- modalFileSelector
- 
- 	| window |
- 
- 	window := self morphicViewFileSelector.
- 	window openCenteredInWorld.
- 	self modalLoopOn: window.
- 	^(window valueOfProperty: #fileListModel) getSelectedFile!

Item was removed:
- ----- Method: FileList class>>open (in category 'instance creation') -----
- open
- 	"Open a view of an instance of me on the default directory."
- 	^ToolBuilder open: self!

Item was removed:
- ----- Method: FileList>>hasMoreDirectories: (in category 'directory tree') -----
- hasMoreDirectories: aDirectory
- 	(aDirectory isKindOf: FileDirectory) ifFalse:[^true]. "server directory; don't ask"
- 	^directoryCache at: aDirectory ifAbsentPut:[
- 		[aDirectory directoryNames notEmpty] on: Error do:[:ex| true].
- 	].!

Item was removed:
- ----- Method: PluggableFileList>>open (in category 'initialize-release') -----
- open
- 
- 	^ Project current
- 		dispatchTo: self
- 		addPrefixAndSend: #OpenLabel:in:
- 		withArguments: { prompt . self currentWorld }
- !

Item was removed:
- ----- Method: PluggableFileList>>prompt: (in category 'accessing') -----
- prompt: aString
- 
- 	 prompt := aString!

Item was removed:
- ----- Method: FileList>>itemsForDirectory: (in category 'file list menu') -----
- itemsForDirectory: dir 
- 	| services |
- 	services := OrderedCollection new.
- 	dir ifNotNil: [
- 		services
- 			addAll: (self class itemsForDirectory: dir).
- 		services last useLineAfter: true. ].
- 	services add: self serviceAddNewFile.
- 	services add: self serviceAddNewDirectory.
- 	^ services!

Item was removed:
- ----- Method: FileList>>fileSelectedMenu: (in category 'file list menu') -----
- fileSelectedMenu: aMenu
- 
- 	| firstItems secondItems thirdItems n1 n2 n3 services |
- 	firstItems := self itemsForFile: self fullName.
- 	secondItems := self itemsForAnyFile.
- 	thirdItems := self itemsForNoFile.
- 	n1 := firstItems size.
- 	n2 := n1 + secondItems size.
- 	n3 := n2 + thirdItems size.
- 	services := firstItems, secondItems, thirdItems, self serviceAllFileOptions.
- 	services do: [ :svc | svc addDependent: self ].
- 	^ aMenu 
- 		addServices2: services 
- 		for: self
- 		extraLines: (Array with: n1 with: n2 with: n3)
- !

Item was removed:
- ----- Method: FileList>>contents (in category 'private') -----
- contents
- 	"Answer the contents of the file, reading it first if needed."
- 	"Possible brevityState values:
- 		FileList,
- 		fullFile, briefFile, needToGetFull, needToGetBrief,
- 		fullHex, briefHex, needToGetFullHex, needToGetBriefHex"
- 
- 	(listIndex = 0) | (brevityState == #FileList) ifTrue: [^ self defaultContents].  "no file selected"
- 	brevityState == #fullFile ifTrue: [^ contents].
- 	brevityState == #fullHex ifTrue: [^ contents].
- 	brevityState == #briefFile ifTrue: [^ contents].
- 	brevityState == #briefHex ifTrue: [^ contents].
- 
- 	brevityState == #needToGetFullHex ifTrue: [^ self readContentsHex: false].
- 	brevityState == #needToGetBriefHex ifTrue: [^ self readContentsHex: true].
- 
- 	brevityState == #needToGetFull ifTrue: [^ self readContentsBrief: false].
- 	brevityState == #needToGetBrief ifTrue: [^ self readContentsBrief: true].  "default"
- 
- 	(TextConverter allEncodingNames includes: brevityState) 
- 		ifTrue: [ ^self readContentsAsEncoding: brevityState].
- 
- 	self halt: 'unknown state ' , brevityState printString!

Item was removed:
- ----- Method: FileList2 class>>modalFolderSelectorForProjectLoad (in category 'modal dialogs') -----
- modalFolderSelectorForProjectLoad
- 
- 	| window fileModel w |
- 
- 	window := self morphicViewProjectLoader2InWorld: self currentWorld reallyLoad: false.
- 	fileModel := window valueOfProperty: #FileList.
- 	w := self currentWorld.
- 	window position: w topLeft + (w extent - window extent // 2).
- 	window openInWorld: w.
- 	self modalLoopOn: window.
- 	^fileModel getSelectedDirectory withoutListWrapper!

Item was removed:
- ----- Method: FileList>>recentDirs (in category 'private') -----
- recentDirs
- 	"Put up a menu and let the user select from the list of recently visited directories."
- 
- 	| dirName |
- 	RecentDirs isEmpty ifTrue: [^self].
- 	dirName := UIManager default chooseFrom: RecentDirs values: RecentDirs.
- 	dirName == nil ifTrue: [^self].
- 	self directory: (FileDirectory on: dirName)!

Item was removed:
- ----- Method: FileList>>volumeListIndex (in category 'volume list and pattern') -----
- volumeListIndex
- 	"Answer the index of the currently selected volume."
- 
- 	^ volListIndex
- !

Item was removed:
- ----- Method: StandardFileMenuResult>>directory (in category 'accessing') -----
- directory
- 
- 	^directory!

Item was removed:
- ----- Method: FileList>>sortBlock (in category 'private') -----
- sortBlock
- 	"Answer block to decide what order to display the directory entries."
- 
- 	^ [ :x :y |
- 			(x isDirectory = y isDirectory) 
- 				ifTrue: [  
- 					"sort by user-specified criterion"
- 					sortMode = #name 
- 						ifTrue: [(x name compare: y name) <= 2]
- 						ifFalse: [ sortMode = #date
- 							ifTrue: [ x modificationTime = y modificationTime
- 									ifTrue: [ (x name compare: y name) <= 2 ]
- 									ifFalse: [ x modificationTime > y modificationTime ] ]
- 							ifFalse: [ "size"
- 								x fileSize = y fileSize 
- 									ifTrue: [ (x name compare: y name) <= 2 ]
- 									ifFalse: [ x fileSize > y fileSize ] ] ] ]
- 				ifFalse: [
- 					"directories always precede files"
- 					x isDirectory ] ]!

Item was removed:
- ----- Method: FileList2>>currentDirectorySelected (in category 'private') -----
- currentDirectorySelected
- 	^ currentDirectorySelected
- !

Item was removed:
- ----- Method: FileList2 class>>modalFolderSelector: (in category 'modal dialogs') -----
- modalFolderSelector: aDir
- 
- 	| window fileModel |
- 	window := self morphicViewFolderSelector: aDir.
- 	fileModel := window model.
- 	window openInWorld: self currentWorld extent: 300 at 400.
- 	self modalLoopOn: window.
- 	^fileModel getSelectedDirectory withoutListWrapper!

Item was removed:
- ----- Method: FileList>>resort: (in category 'private') -----
- resort: newMode
- 	"Re-sort the list of files."
- 
- 	| name |
- 	listIndex > 0
- 		ifTrue: [name := self fileNameFromFormattedItem: (list at: listIndex)].
- 	sortMode := newMode.
- 	self pattern: pattern.
- 	name ifNotNil: [
- 		fileName := name.
- 		listIndex := list findFirst: [:item | (self fileNameFromFormattedItem: item) = name. ].
- 		self changed: #fileListIndex].
- 	listIndex = 0 ifTrue: [self changed: #contents].
- 	self updateButtonRow
- !

Item was removed:
- ----- Method: FileList>>buildWith: (in category 'toolbuilder') -----
- buildWith: builder
- 	"FileList open"
- 	| windowSpec window |
- 	windowSpec := 	self buildWindowWith: builder specs: {
- 		(0 at 0 corner: 1 at 0.06) -> [self buildPatternInputWith: builder].
- 		(0.25 at 0.06 corner: 1 at 0.15) -> [self buildButtonPaneWith: builder].
- 		(0 at 0.06 corner: 0.25 at 1) -> [self buildDirectoryTreeWith: builder].
- 		(0.25 at 0.15 corner: 1 at 0.5) -> [self buildFileListWith: builder].
- 		(0.25 at 0.5 corner: 1 at 1) -> [self buildContentPaneWith: builder].
- 	}.
- 	window := builder build: windowSpec.
- 	self changed: #selectedPath.
- 	^window!

Item was removed:
- ----- Method: FileList2 class>>morphicViewNoFile (in category 'morphic ui') -----
- morphicViewNoFile
- 
- 	| dir aFileList window midLine fixedSize |
- 
- 	dir := FileDirectory default.
- 	aFileList := self new directory: dir.
- 	window := (SystemWindow labelled: dir pathName) model: aFileList.
- 
- 	fixedSize := 25.
- 	midLine := 0.4.
- 	self addFullPanesTo: window from: {
- 		{aFileList morphicPatternPane. 0 at 0 corner: 0.3 at 0. 0 at 0 corner: 0 at fixedSize}.
- 		{aFileList optionalButtonRow. 0.3 @ 0 corner: 1 at 0. 0 at 0 corner: 0 at fixedSize}.
- 		{aFileList morphicDirectoryTreePane. 0 at 0 corner: midLine at 1. 0 at fixedSize corner: 0 at 0}.
- 		{aFileList morphicFileListPane. midLine @ 0 corner: 1 at 1. 0 at fixedSize corner: 0 at 0}.
- 	}.
- 	aFileList postOpen.
- 	^ window !

Item was removed:
- ----- Method: FileList>>folderString (in category 'private') -----
- folderString
- 	^ ' [...]'!

Item was removed:
- ----- Method: FileList2 class>>morphicViewProjectLoader2InWorld:reallyLoad:dirFilterType: (in category 'blue ui') -----
- morphicViewProjectLoader2InWorld: aWorld reallyLoad: aBoolean dirFilterType: aSymbol
- 
- 	| window aFileList buttons treePane textColor1 fileListPane pane2a pane2b treeExtent filesExtent |
- 
- 	window := AlignmentMorphBob1 newColumn.
- 	window hResizing: #shrinkWrap; vResizing: #shrinkWrap.
- 	textColor1 := Color r: 0.742 g: 0.839 b: 1.0.
- 	aFileList := self new directory: FileDirectory default.
- 	aFileList 
- 		optionalButtonSpecs: aFileList servicesForProjectLoader;
- 		fileSelectionBlock: (
- 			aSymbol == #limitedSuperSwikiDirectoryList ifTrue: [
- 				MessageSend receiver: self selector: #projectOnlySelectionMethod:
- 			] ifFalse: [
- 				self projectOnlySelectionBlock
- 			]
- 		);
- 		"dirSelectionBlock: self hideSqueakletDirectoryBlock;"
- 		modalView: window.
- 	window
- 		setProperty: #FileList toValue: aFileList;
- 		wrapCentering: #center; cellPositioning: #topCenter;
- 		borderWidth: ColorTheme current dialogBorderWidth;
- 		borderColor: ColorTheme current dialogBorderColor;
- 		useRoundedCorners.
- 	buttons := {{'OK'. ColorTheme current okColor}. {'Cancel'. ColorTheme current cancelColor}} collect: [ :each |
- 		self blueButtonText: each first textColor: textColor1 color: each second inWindow: window
- 	].
- 
- 	aWorld width < 800 ifTrue: [
- 		treeExtent := 150 at 300.
- 		filesExtent := 350 at 300.
- 	] ifFalse: [
- 		treeExtent := 250 at 300.
- 		filesExtent := 350 at 300.
- 	].
- 	(treePane := aFileList morphicDirectoryTreePaneFiltered: aSymbol)
- 		extent: treeExtent; 
- 		retractable: false;
- 		borderWidth: 0.
- 	fileListPane := aFileList morphicFileListPane 
- 		extent: filesExtent; 
- 		retractable: false;
- 		borderWidth: 0.
- 	window
- 		addARow: {
- 			window fancyText: 'Load A Project' translated font: Preferences standardEToysTitleFont color: textColor1
- 		};
- 		addARowCentered: {
- 			buttons first. 
- 			(Morph new extent: 30 at 5) color: Color transparent. 
- 			buttons second
- 		};
- 		addARow: {
- 			window fancyText: 'Please select a project' translated  font: Preferences standardEToysFont color: textColor1
- 		};
- 		addARow: {
- 				(window inAColumn: {(pane2a := window inARow: {window inAColumn: {treePane}}) 
- 					useRoundedCorners;
- 					layoutInset: 0;
- 					borderWidth: ColorTheme current dialogPaneBorderWidth;
- 					borderColor: ColorTheme current dialogPaneBorderColor
- 				}) layoutInset: 10.
- 				(window inAColumn: {(pane2b := window inARow: {window inAColumn: {fileListPane}}) 
- 					useRoundedCorners;
- 					layoutInset: 0;
- 					borderWidth: ColorTheme current dialogPaneBorderWidth;
- 					borderColor: ColorTheme current dialogPaneBorderColor
- 				}) layoutInset: 10.
- 		}.
- 	window fullBounds.
- 	window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65.
- 	pane2a fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35).
- 	pane2b fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35).
- "
- 	buttons do: [ :each |
- 		each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0).
- 	].
- "
- 	buttons first 
- 		on: #mouseUp 
- 		send: (aBoolean ifTrue: [#okHitForProjectLoader] ifFalse: [#okHit])
- 		to: aFileList.
- 	buttons second on: #mouseUp send: #cancelHit to: aFileList.
- 	aFileList postOpen.
- 	window position: aWorld topLeft + (aWorld extent - window extent // 2).
- 	window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0).
- 	window becomeModal.
- 	^ window openInWorld: aWorld.!

Item was removed:
- ----- Method: FileList>>universalButtonServices (in category 'initialization') -----
- universalButtonServices
- 	"Answer a list of services underlying the universal buttons in their initial inception.  For the moment, only the sorting buttons are shown."
- 
- 	^ {self serviceSortByName. self serviceSortByDate. self serviceSortBySize}!

Item was removed:
- ----- Method: FileList>>fullFileListMenu:shifted: (in category 'file list menu') -----
- fullFileListMenu: aMenu shifted: aBoolean
- 	"Fill the menu with all possible items for the file list pane, regardless of selection."
- 
- 	| lastProvider |
- 	aMenu title: 'all possible file operations' translated.
- 	Smalltalk isMorphic ifTrue: [aMenu addStayUpItemSpecial].
- 
- 	lastProvider := nil.
- 	(self itemsForFile: 'a.*') do: [ :svc |
- 		(lastProvider notNil and: [svc provider ~~ lastProvider])
- 			ifTrue: [ aMenu addLine ].
- 		svc addServiceFor: self toMenu: aMenu.
- 		Smalltalk isMorphic ifTrue: [aMenu submorphs last setBalloonText: svc description].
- 		lastProvider := svc provider.
- 		svc addDependent: self.
- 	].
- 
- 	^aMenu!

Item was removed:
- ----- Method: FileList>>buildButtonPaneWith: (in category 'toolbuilder') -----
- buildButtonPaneWith: builder
- 	| panelSpec |
- 	panelSpec := builder pluggablePanelSpec new.
- 	panelSpec 
- 		model: self;
- 		children: #getButtonRow;
- 		layout: #horizontal.
- 	^panelSpec
- !

Item was removed:
- ----- Method: FileList2 class>>morphicViewProjectLoader2InWorld:reallyLoad: (in category 'blue ui') -----
- morphicViewProjectLoader2InWorld: aWorld reallyLoad: aBoolean
- 
- 	^self 
- 		morphicViewProjectLoader2InWorld: aWorld 
- 		reallyLoad: aBoolean
- 		dirFilterType: #initialDirectoryList
- !

Item was removed:
- ----- Method: FileList2 class>>hideSqueakletDirectoryBlock (in category 'as yet unclassified') -----
- hideSqueakletDirectoryBlock
- 	^[:dirName| (dirName sameAs: 'Squeaklets') not]!

Item was removed:
- ----- Method: FileList class>>suffixOf: (in category 'file reader registration') -----
- suffixOf: aName
- 	"Answer the file extension of the given file"
- 	^ aName
- 		ifNil:
- 			['']
- 		ifNotNil:
- 			[(FileDirectory extensionFor: aName) asLowercase]!

Item was removed:
- ----- Method: FileList2>>okHitForProjectLoader (in category 'private') -----
- okHitForProjectLoader
- 
- 	| areaOfProgress |
- 	fileName ifNil: [^ self].
- 	ok := true.
- 	areaOfProgress := modalView firstSubmorph.
- 	[
- 		areaOfProgress setProperty: #deleteOnProgressCompletion toValue: modalView.
- 		self openProjectFromFile.
- 		modalView delete.	"probably won't get here"
- 	]
- 		on: ProgressTargetRequestNotification
- 		do: [ :ex | ex resume: areaOfProgress].
- 
- 
- !

Item was removed:
- ----- Method: FileList class>>newOn: (in category 'instance creation') -----
- newOn: aDirectory
- 	^super new directory: aDirectory!

Item was removed:
- ----- Method: FileList2 class>>morphicViewFileSelectorForSuffixes:directory: (in category 'morphic ui') -----
- morphicViewFileSelectorForSuffixes: aList directory: dir
- 	"Answer a morphic file-selector tool for the given suffix list and the given directory."
- 
- 	| aFileList window fixedSize midLine gap |
- 	aFileList := self new directory: dir.
- 	aFileList optionalButtonSpecs: aFileList okayAndCancelServices.
- 	aList ifNotNil:
- 		[aFileList fileSelectionBlock: [:entry :myPattern |
- 			entry isDirectory
- 				ifTrue:
- 					[false]
- 				ifFalse:
- 					[aList includes: (FileDirectory extensionFor: entry name asLowercase)]] fixTemps].
- 	window := BorderedMorph new
- 		layoutPolicy: ProportionalLayout new;
- 		color: Color lightBlue;
- 		borderColor: Color blue;
- 		borderWidth: 4;
- 		layoutInset: 4;
- 		extent: 600 at 400;
- 		useRoundedCorners.
- 	window setProperty: #fileListModel toValue: aFileList.
- 	aFileList modalView: window.
- 	midLine := 0.4.
- 	fixedSize := 25.
- 	gap := 5.
- 	self addFullPanesTo: window from: {
- 		{self textRow: 'Please select a file'. 0 @ 0 corner: 1 @ 0. 0 at 0 corner: 0 at fixedSize}.
- 		{aFileList optionalButtonRow. 0 @ 0 corner: 1 @ 0. 0 at fixedSize corner: 0@(fixedSize * 2)}.
- 		{aFileList morphicDirectoryTreePane. 0 at 0 corner: midLine at 1. 
- 					gap @(fixedSize * 2) corner: gap negated at 0}.
- 		{aFileList morphicFileListPane. midLine @ 0 corner: 1 at 1. 
- 					gap@(fixedSize * 2) corner: gap negated at 0}.
- 	}.
- 
- 	aFileList postOpen.
- 
- 	^ window !

Item was removed:
- ----- Method: FileList2>>getSelectedDirectory (in category 'private') -----
- getSelectedDirectory
- 	ok == true ifFalse: [^ nil].
- 	^ currentDirectorySelected
- !

Item was removed:
- ----- Method: FileList>>pathAndPattern (in category 'volume list and pattern') -----
- pathAndPattern
- 	"Answers both path and pattern"
- 	^directory fullName, directory slash, pattern!

Item was removed:
- ----- Method: FileList>>buildPatternInputWith: (in category 'toolbuilder') -----
- buildPatternInputWith: builder
- 	| textSpec |
- 	textSpec := builder pluggableInputFieldSpec new.
- 	textSpec 
- 		model: self;
- 		getText: #pathAndPattern; 
- 		setText: #pathAndPattern:.
- 	^textSpec
- !

Item was removed:
- ----- Method: FileList>>directory (in category 'volume list and pattern') -----
- directory
- 
- 	^ directory!

Item was removed:
- ----- Method: FileList>>renameFile (in category 'file menu action') -----
- renameFile
- 	"Rename the currently selected file"
- 	| newName response |
- 	listIndex = 0 ifTrue: [^ self].
- 	self okToChange ifFalse: [^ self].
- 	(response := UIManager default request: 'NewFileName?' translated
-  					initialAnswer: fileName)
- 		isEmpty ifTrue: [^ self].
- 	newName := response asFileName.
- 	newName = fileName ifTrue: [^ self].
- 	directory rename: fileName toBe: newName.
- 	self updateFileList.
- 	listIndex := list findFirst: [:item | (self fileNameFromFormattedItem: item) = newName].
- 	listIndex > 0 ifTrue: [fileName := newName].
- 	self changed: #fileListIndex.
- !

Item was removed:
- ----- Method: FileList>>readContentsAsEncoding: (in category 'private') -----
- readContentsAsEncoding: encodingName
- 	| f writeStream converter c |
- 	f := directory oldFileOrNoneNamed: self fullName.
- 	f ifNil: [^ 'For some reason, this file cannot be read'].
- 	writeStream := WriteStream on: String new.
- 	converter := TextConverter defaultConverterClassForEncoding: encodingName.
- 	converter ifNil: [^ 'This encoding is not supported'].
- 	f converter: converter new.
- 	f wantsLineEndConversion: true.
- 	[f atEnd or: [(c := f next) isNil]]
- 		whileFalse: [writeStream nextPut: c].
- 	f close.
- 	^ writeStream contents!

Item was removed:
- ----- Method: StandardFileMenuResult>>isCommand (in category 'testing') -----
- isCommand
- 
- 	^name isNil!

Item was removed:
- ----- Method: PluggableFileList class>>sfmResultBlock (in category 'resultBlocks') -----
- sfmResultBlock
- 
- 	^[:theDirectory :theFileName | 
- 		StandardFileMenuResult directory: theDirectory name: theFileName]!

Item was removed:
- ----- Method: PluggableFileList>>rightButtonPressed (in category 'accepting/cancelling') -----
- rightButtonPressed
- 
- 	(canAcceptBlock value: directory value: fileName) ifFalse: [^nil].
- 	(validateBlock value: directory value: fileName value: newFiles) ifFalse: [^nil].
- 	accepted := true.
- 	self changed: #close!

Item was removed:
- ----- Method: FileList>>release (in category 'initialization') -----
- release
- 
- 	self modelSleep!

Item was removed:
- ----- Method: PluggableFileList>>fileListIndex (in category 'accessing') -----
- fileListIndex
- 
- 	self changed: #fileString.
- 	^super fileListIndex!

Item was removed:
- ----- Method: FileList>>veryDeepFixupWith: (in category 'volume list and pattern') -----
- veryDeepFixupWith: deepCopier
- 	super veryDeepFixupWith: deepCopier.
- 	volListIndex := 1.
- 	self directory: FileDirectory default.
- 	self updateFileList!

Item was removed:
- ----- Method: FileList class>>isReaderNamedRegistered: (in category 'file reader registration') -----
- isReaderNamedRegistered: aSymbol
- 	"return if a given reader class has been registered. Note that this is on purpose that the argument is
- 	a symbol and not a class"
- 
- 	 ^ (self registeredFileReaderClasses collect: [:each | each name]) includes: aSymbol
- !

Item was removed:
- ----- Method: FileList>>serviceGetEncodedText (in category 'own services') -----
- serviceGetEncodedText
- 
- 	^  (SimpleServiceEntry 
- 			provider: self 
- 			label: 'view as encoded text'
- 			selector: #getEncodedText
- 			description: 'view as encoded text')
- 
- !

Item was removed:
- ----- Method: FileList2 class>>morphicViewFolderSelector: (in category 'morphic ui') -----
- morphicViewFolderSelector: aDir
- 	"Answer a tool that allows the user to select a folder"
- 
- 	| aFileList window fixedSize |
- 	aFileList := self new directory: aDir.
- 	aFileList optionalButtonSpecs: aFileList servicesForFolderSelector.
- 	window := (SystemWindow labelled: aDir pathName) model: aFileList.
- 	aFileList modalView: window.
- 
- 	fixedSize := 25.
- 	self addFullPanesTo: window from: {
- 		{self textRow: 'Please select a folder'. 0 @ 0 corner: 1 @ 0. 
- 				0 at 0 corner: 0 at fixedSize}.
- 		{aFileList optionalButtonRow. 0 @ 0 corner: 1 @ 0. 
- 				0 at fixedSize corner: 0@(fixedSize * 2)}.
- 		{aFileList morphicDirectoryTreePane. 0 at 0 corner: 1 at 1.
- 				0@(fixedSize * 2) corner: 0 at 0}.
- 	}.
- 	aFileList postOpen.
- 	^ window !

Item was removed:
- ----- Method: PluggableFileList class>>pathNameResultBlock (in category 'resultBlocks') -----
- pathNameResultBlock
- 
- 	^[:theDirectory :theFileName | 
- 		theFileName 
- 			ifNil: [theDirectory pathName]
- 			ifNotNil: [theDirectory fullNameFor: theFileName]].
- !

Item was removed:
- ----- Method: FileList2>>serviceCancel (in category 'own services') -----
- serviceCancel
- 	"Answer a service for hitting the cancel button"
- 
- 	^ (SimpleServiceEntry new
- 		provider: self label: 'cancel' selector: #cancelHit 
- 		description: 'hit here to cancel ')
- 		buttonLabel: 'cancel'!

Item was removed:
- ----- Method: PluggableFileList class>>getFolderDialog (in category 'instance creation') -----
- getFolderDialog
- 
- 	^(self new)
- 		prompt: 'Select a Folder';
- 		fileFilterBlock: PluggableFileList allFoldersFileFilter;
- 		canAcceptBlock: PluggableFileList alwaysAcceptBlock;
- 		resultBlock: PluggableFileList directoryResultBlock;
- 		validateBlock: PluggableFileList alwaysValidateBlock;
- 		yourself!

Item was removed:
- ----- Method: FileList>>viewContentsInWorkspace (in category 'own services') -----
- viewContentsInWorkspace
- 	"View the contents of my selected file in a new workspace"
- 	
- 	| aString aFileStream aName |
- 	aString := (aFileStream := directory readOnlyFileNamed: self fullName) setConverterForCode contentsOfEntireFile.
- 	aName := aFileStream localName.
- 	aFileStream close.
- 	UIManager default edit: aString withSqueakLineEndings label: 'Workspace from ', aName!

Item was removed:
- ----- Method: FileList>>isFileSelected (in category 'private') -----
- isFileSelected
- 	"return if a file is currently selected"
- 
- 	^ fileName isNil not!

Item was removed:
- ----- Method: FileList>>serviceGetHex (in category 'own services') -----
- serviceGetHex
- 
- 	^  (SimpleServiceEntry 
- 			provider: self 
- 			label: 'view as hex' 
- 			selector: #getHex
- 			description: 'view as hex')
- 			
- !

Item was removed:
- ----- Method: FileList>>executeService: (in category 'toolbuilder') -----
- executeService: aService
- 	aService performServiceFor: self.!

Item was removed:
- Object subclass: #StandardFileMenuResult
- 	instanceVariableNames: 'directory name'
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Morphic-FileList'!

Item was removed:
- ----- Method: FileList2 class>>selectionBlockForSuffixes: (in category 'as yet unclassified') -----
- selectionBlockForSuffixes: anArray
- 
- 	^[ :entry :myPattern |
- 		entry isDirectory ifTrue: [
- 			false
- 		] ifFalse: [
- 			anArray anySatisfy: [ :each | each match: entry name]
- 		]
- 	] fixTemps!

Item was removed:
- ----- Method: FileList>>fileListIndex (in category 'file list') -----
- fileListIndex
- 	"Answer the index of the currently selected file."
- 
- 	^ listIndex!

Item was removed:
- ----- Method: FileList>>sortingBySize (in category 'private') -----
- sortingBySize
- 	^ sortMode == #size!

Item was removed:
- ----- Method: FileList>>put: (in category 'private') -----
- put: aText
- 	"Private - put the supplied text onto the file"
- 
- 	| ff type |
- 	brevityState == #fullFile ifTrue:
- 		[ff := directory newFileNamed: self fullName.
- 		Cursor write showWhile: [ff nextPutAll: aText asString; close].
- 		fileName = ff localName 
- 			ifTrue: [contents := aText asString]
- 			ifFalse: [self updateFileList].		"user renamed the file"
- 		^ true  "accepted"].
- 
- 	listIndex = 0 ifTrue:
- 		[self inform: 'No fileName is selected' translated.
- 		^ false  "failed"].
- 	type := 'These'.
- 	brevityState = #briefFile ifTrue: [type := 'Abbreviated'].
- 	brevityState = #briefHex ifTrue: [type := 'Abbreviated'].
- 	brevityState = #fullHex ifTrue: [type := 'Hexadecimal'].
- 	brevityState = #FileList ifTrue: [type := 'Directory'].
- 	self inform: ('{1} contents cannot
- meaningfully be saved at present.' translated format:{type translated}).
- 	^ false  "failed"
- !

Item was removed:
- ----- Method: PluggableFileList>>leftButtonState (in category 'accepting/cancelling') -----
- leftButtonState
- 
- 	^true!

Item was removed:
- ----- Method: FileList>>buildFileListWith: (in category 'toolbuilder') -----
- buildFileListWith: builder
- 	| listSpec |
- 	listSpec := builder pluggableListSpec new.
- 	listSpec 
- 		model: self;
- 		list: #fileList; 
- 		getIndex: #fileListIndex; 
- 		setIndex: #fileListIndex:; 
- 		menu: #fileListMenu:; 
- 		keyPress: nil.
- 	^listSpec
- !

Item was removed:
- ----- Method: FileList>>getSelectedPath (in category 'directory tree') -----
- getSelectedPath
- 	self halt.!

Item was removed:
- ----- Method: FileList>>serviceSortByName (in category 'own services') -----
- serviceSortByName
- 	"Answer a service for soring by name"
- 
- 	^ (SimpleServiceEntry new
- 		provider: self label: 'by name' selector: #sortByName 
- 		description: 'sort entries by name')
- 		extraSelector: #sortingByName;
- 		buttonLabel: 'name'!

Item was removed:
- ----- Method: PluggableFileList>>addNew:byEvaluating: (in category 'file list menu') -----
- addNew: aString byEvaluating: aBlock
- 	"A parameterization of earlier versions of #addNewDirectory and
- 	#addNewFile.  Fixes the bug in each that pushing the cancel button
- 	in the FillInTheBlank dialog gave a walkback."
- 
- 	| response newName index ending |
- 	self okToChange ifFalse: [^ self].
- 	(response := UIManager default request: 'New ',aString,' Name?'
-  					initialAnswer: aString,'Name')
- 		isEmpty ifTrue: [^ self].
- 	newName := response asFileName.
- 	Cursor wait showWhile: [
- 		aBlock value: newName].
- 	self updateFileList.
- 	index := list indexOf: newName.
- 	index = 0 ifTrue: [ending := ') ',newName.
- 		index := list findFirst: [:line | line endsWith: ending]].
- 	self fileListIndex: index.
- 	newFiles add: newName
- !

Item was removed:
- ----- Method: FileList2 class>>modalFileSelectorForSuffixes: (in category 'modal dialogs') -----
- modalFileSelectorForSuffixes: aList
- 
- 	| window aFileList |
- 
- 	window := self morphicViewFileSelectorForSuffixes: aList.
- 	aFileList := window valueOfProperty: #fileListModel.
- 	window openCenteredInWorld.
- 	self modalLoopOn: window.
- 	^aFileList getSelectedFile!

Item was removed:
- ----- Method: FileList>>readContentsCNGB (in category 'private') -----
- readContentsCNGB
- 	| f writeStream |
- 	f := directory oldFileOrNoneNamed: self fullName.
- 	f ifNil: [^ 'For some reason, this file cannot be read'].
- 	writeStream := WriteStream on: String new.
- 	f converter: CNGBTextConverter new.
- 	[f atEnd]
- 		whileFalse: [writeStream nextPut: f next].
- 	f close.
- 	^ writeStream contents!

Item was removed:
- ----- Method: PluggableFileList>>leftButtonPressed (in category 'accepting/cancelling') -----
- leftButtonPressed
- 
- 	accepted := false.
- 	self changed: #close.
- !

Item was removed:
- ----- Method: FileList>>sortByDate (in category 'file menu action') -----
- sortByDate
- 	self resort: #date!

Item was removed:
- ----- Method: PluggableFileList class>>getFilePathNameDialog (in category 'instance creation') -----
- getFilePathNameDialog
- 
- 	^(self new)
- 		validateBlock: PluggableFileList alwaysValidateBlock;
- 		yourself!

Item was removed:
- ----- Method: PluggableFileList class>>newFileMenu: (in category 'StandardFileMenu') -----
- newFileMenu: aDirectory
- 
- 	"For compatibility with StandardFileMenu for now, answer a StandardFileMenuResult"
- 	^(self getFilePathNameDialogWithExistenceCheck)
- 		resultBlock: self sfmResultBlock;
- 		directory: aDirectory;
- 		yourself!

Item was removed:
- ----- Method: FileList2>>listForPatterns: (in category 'volume list and pattern') -----
- listForPatterns: anArray
- 	"Make the list be those file names which match the patterns."
- 
- 	| sizePad newList |
- 	directory ifNil: [^#()].
- 	(fileSelectionBlock isKindOf: MessageSend) ifTrue: [
- 		fileSelectionBlock arguments: {directory entries}.
- 		newList := fileSelectionBlock value.
- 		fileSelectionBlock arguments: #().
- 	] ifFalse: [
- 		newList := Set new.
- 		anArray do: [ :pat |
- 			newList addAll: (directory entries select: [:entry | fileSelectionBlock value: entry value: pat]) ].
- 	].
- 	newList := newList asSortedCollection: self sortBlock.
- 	sizePad := (newList inject: 0 into: [:mx :entry | mx max: (entry at: 5)])
- 					asStringWithCommas size - 1.
- 	newList := newList collect: [ :e | self fileNameFormattedFrom: e sizePad: sizePad ].
- 	^ newList asArray!

Item was removed:
- ----- Method: FileList>>selectEncoding (in category 'private') -----
- selectEncoding
- 
- 	| encodingItems |
- 	encodingItems := OrderedCollection new.
- 	TextConverter allSubclasses do: [:each | | names |
- 		names := each encodingNames.
- 		names notEmpty ifTrue: [ | label |
- 			label := '' writeStream.
- 			names do: [:eachName | label nextPutAll: eachName ] separatedBy: [ label nextPutAll: ', '].
- 			encodingItems add: {label contents. names first asSymbol}.
- 		].
- 	].
- 	brevityState := UIManager default
- 		chooseFrom: (encodingItems collect: [:spec| spec first])
- 		values: (encodingItems collect: [:spec| spec last]).
- 	brevityState ifNil: [brevityState := #needToGetBrief].
- !

Item was removed:
- ----- Method: FileList class>>new (in category 'instance creation') -----
- new
- 	^self newOn: FileDirectory default!

Item was removed:
- ----- Method: FileList>>rootDirectoryList (in category 'directory tree') -----
- rootDirectoryList
- 	| dirList dir servers |
- 	dir := FileDirectory on: ''.
- 	dirList := dir directoryNames collect:[:each| dir directoryNamed: each]..
- 	dirList isEmpty ifTrue:[dirList := Array with: FileDirectory default].
- 	servers := ServerDirectory serverNames collect: [ :n | ServerDirectory serverNamed: n].
- 	"This is so FileListPlus will work on ancient Squeak versions."
- 	servers := servers select:[:each| each respondsTo: #localName].
- 	^dirList, servers!

Item was removed:
- ----- Method: PluggableFileList class>>getFolder (in category 'standard dialog operations') -----
- getFolder
- 
- 	^self getFolderDialog open!

Item was removed:
- ----- Method: FileList2>>importImage (in category 'own services') -----
- importImage
- 	"Import the given image file and store the resulting Form in the default Imports"
- 
- 	| fname image |
- 	fname := fileName sansPeriodSuffix.
- 	image := Form fromFileNamed: self fullName.
- 	Imports default importImage: image named: fname.
- !

Item was removed:
- ----- Method: FileList>>addNewFile (in category 'file menu action') -----
- addNewFile
- 	self 
- 		addNew: 'File'
- 		byEvaluating: [:newName | (directory newFileNamed: newName) close]
- !

Item was removed:
- ----- Method: FileList2>>labelString (in category 'initialization') -----
- labelString
- 	^ (directory ifNil: [^'[]']) pathName contractTo: 50!

Item was removed:
- ----- Method: FileList>>serviceCompressFile (in category 'own services') -----
- serviceCompressFile
- 	"Answer a service for compressing a file"
- 
- 	^ SimpleServiceEntry provider: self label: 'compress' selector: #compressFile description: 'compress file' buttonLabel: 'compress'!

Item was removed:
- ----- Method: FileList>>defaultEncoderFor: (in category 'private') -----
- defaultEncoderFor: aFileName
- 
- 	"This method just illustrates the stupidest possible implementation of encoder selection."
- 	| l |
- 	l := aFileName asLowercase.
- "	((l endsWith: FileStream multiCs) or: [
- 		l endsWith: FileStream multiSt]) ifTrue: [
- 		^ UTF8TextConverter new.
- 	].
- "
- 	((l endsWith: FileStream cs) or: [
- 		l endsWith: FileStream st]) ifTrue: [
- 		^ MacRomanTextConverter new.
- 	].
- 
- 	^ Latin1TextConverter new.
- 
- 	!

Item was removed:
- ----- Method: FileList2 class>>blueButtonText:textColor:color:inWindow: (in category 'blue ui') -----
- blueButtonText: aString textColor: textColor color: aColor inWindow: window 
- 	| result |
- 	result := window
- 				fancyText: aString translated
- 				font: Preferences standardEToysFont
- 				color: textColor.
- 	result setProperty: #buttonText toValue: aString;
- 		 hResizing: #rigid;
- 		 extent: 100 @ 20;
- 		 layoutInset: 4;
- 		 borderWidth: ColorTheme current dialogButtonBorderWidth;
- 		 useRoundedCorners.
- 	aColor isNil
- 		ifFalse: [""result color: aColor. result borderColor: aColor muchDarker].
- 	^ result!

Item was removed:
- ----- Method: FileList2>>saveLocalOnlyHit (in category 'private') -----
- saveLocalOnlyHit
- 	ok := true.
- 	modalView delete.
- 	directory := fileName := nil.
- 	currentDirectorySelected := #localOnly.!

Item was removed:
- ----- Method: FileList>>modelSleep (in category 'initialization') -----
- modelSleep
- 	"User has exited or collapsed the window -- close any remote connection."
- 
- 	directory ifNotNil: [directory sleep]!

Item was removed:
- ----- Method: FileList>>addNew:byEvaluating: (in category 'file menu action') -----
- addNew: aString byEvaluating: aBlock
- 	"A parameterization of earlier versions of #addNewDirectory and
- 	#addNewFile.  Fixes the bug in each that pushing the cancel button
- 	in the FillInTheBlank dialog gave a walkback."
- 
- 	| response newName index ending |
- 	self okToChange ifFalse: [^ self].
- 	(response := UIManager default
- 						request: ('New {1} Name?' translated format: {aString translated})
- 						initialAnswer: ('{1}Name' translated format: {aString translated}))
- 		isEmpty ifTrue: [^ self].
- 	newName := response asFileName.
- 	Cursor wait showWhile: [
- 		aBlock value: newName].
- 	self updateFileList.
- 	index := list indexOf: newName.
- 	index = 0 ifTrue: [ending := ') ',newName.
- 		index := list findFirst: [:line | line endsWith: ending]].
- 	self fileListIndex: index.
- !

Item was removed:
- ----- Method: PluggableFileList>>validateBlock: (in category 'accessing') -----
- validateBlock: aBlock
- 
- 	^validateBlock := aBlock!

Item was removed:
- ----- Method: PluggableFileList class>>alwaysValidateBlock (in category 'validateBlocks') -----
- alwaysValidateBlock
- 
- 	^[:theDirectory :theFileName :theNewFiles | true].!

Item was removed:
- ----- Method: FileList2>>servicesForProjectLoader (in category 'own services') -----
- servicesForProjectLoader
- 	"Answer the services to show in the button pane for the project loader"
- 
- 	^ {self serviceSortByName. self serviceSortByDate. self serviceSortBySize. self serviceOpenProjectFromFile}!

Item was removed:
- ----- Method: PluggableFileList>>rightButtonState (in category 'accepting/cancelling') -----
- rightButtonState
- 
- 	^self canAccept!

Item was removed:
- ----- Method: FileList>>pattern: (in category 'volume list and pattern') -----
- pattern: textOrStringOrNil
- 
- 	textOrStringOrNil
- 		ifNil: [pattern := '*']
- 		ifNotNil: [pattern := textOrStringOrNil asString].
- 	self updateFileList.
- 	^ true
- !

Item was removed:
- ----- Method: FileList2>>directoryChangeBlock: (in category 'initialization') -----
- directoryChangeBlock: aBlockOrNil
- 
- 	directoryChangeBlock := aBlockOrNil.!

Item was removed:
- ----- Method: PluggableFileList class>>alwaysAcceptBlock (in category 'canAcceptBlocks') -----
- alwaysAcceptBlock
- 
- 	^[:theDirectory :theFileName | true]!

Item was removed:
- ----- Method: FileList>>fileNameFromFormattedItem: (in category 'private') -----
- fileNameFromFormattedItem: item
- 	"Extract fileName and folderString from a formatted fileList item string"
- 
- 	| from to |
- 	self sortingByName
- 		ifTrue: [
- 			from := item lastIndexOf: $( ifAbsent: [0].
- 			to := item lastIndexOf: $) ifAbsent: [0]]
- 		ifFalse: [
- 			from := item indexOf: $( ifAbsent: [0].
- 			to := item indexOf: $) ifAbsent: [0]].
- 	^ (from * to = 0
- 		ifTrue: [item]
- 		ifFalse: [item copyReplaceFrom: from to: to with: '']) withBlanksTrimmed!

Item was removed:
- ----- Method: FileList2 class>>modalFolderSelector (in category 'modal dialogs') -----
- modalFolderSelector
- 
- 	^self modalFolderSelector: FileDirectory default!

Item was removed:
- FileList subclass: #FileList2
- 	instanceVariableNames: 'showDirsInFileList currentDirectorySelected fileSelectionBlock dirSelectionBlock optionalButtonSpecs modalView directoryChangeBlock ok'
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Morphic-FileList'!
- 
- !FileList2 commentStamp: 'BJP 11/19/2003 21:13' prior: 0!
- Some variations on FileList that
- - use a hierarchical pane to show folder structure
- - use different pane combinations, button layouts and prefiltering for specific uses
- 
- FileList2 morphicView openInWorld				"an alternative to the standard FileList"
- FileList2 morphicViewNoFile openInWorld			"useful for selecting, but not viewing"
- FileList2 morphicViewProjectLoader openInWorld	"useful for finding and loading projects"
- FileList2 modalFolderSelector						"allows the user to select a folder"
- 
- 
- 
- !

Item was removed:
- ----- Method: FileList2>>dropDestinationDirectory:event: (in category 'drag''n''drop') -----
- dropDestinationDirectory: dest event: evt
- 	"Answer a FileDirectory representing the drop destination in the directory hierarchy morph dest"
- 	^ (dest itemFromPoint: evt position) withoutListWrapper!

Item was removed:
- ----- Method: PluggableFileList class>>allFoldersFileFilter (in category 'fileFilterBlocks') -----
- allFoldersFileFilter
- 
- 	^[:each | each isDirectory]!

Item was removed:
- ----- Method: PluggableFileList class>>getFilePathName (in category 'standard dialog operations') -----
- getFilePathName
- 
- 	^self getFilePathNameDialog open!

Item was removed:
- ----- Method: FileList>>readContentsHex: (in category 'private') -----
- readContentsHex: brevity
- 	"retrieve the contents from the external file unless it is too long.
- 	  Don't create a file here.  Check if exists."
- 	| f size data hexData s |
- 
- 	f := directory oldFileOrNoneNamed: self fullName. 
- 	f == nil ifTrue: [^ 'For some reason, this file cannot be read' translated].
- 	f binary.
- 	((size := f size)) > 5000 & brevity
- 		ifTrue: [data := f next: 10000. f close. brevityState := #briefHex]
- 		ifFalse: [data := f contentsOfEntireFile. brevityState := #fullHex].
- 
- 	s := WriteStream on: (String new: data size*4).
- 	0 to: data size-1 by: 16 do:
- 		[:loc | s nextPutAll: loc printStringHex; space;
- 			nextPut: $(; print: loc; nextPut: $); space; tab.
- 		loc+1 to: (loc+16 min: data size) do: [:i | s nextPutAll: (data at: i) printStringHex; space].
- 		s cr].
- 	hexData := s contents.
- 
- 	^ contents := ((size > 5000) & brevity
- 		ifTrue: ['File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
- 
- Here are the first 5000 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 5000 characters.' translated format: {fileName. size. hexData}]
- 		ifFalse: [hexData]).
- !

Item was removed:
- ----- Method: FileList2>>openImageInWindow (in category 'own services') -----
- openImageInWindow
- 	"Handle five file formats: GIF, JPG, PNG, Form stoteOn: (run coded), and BMP.
- 	Fail if file format is not recognized."
- 
- 	| image myStream |
- 	myStream := (directory readOnlyFileNamed: fileName) binary.
- 	[image := Form fromBinaryStream: myStream.
- 	Project current openImage: image name: fileName saveResource: false]
- 		ensure: [myStream close]
- !

Item was removed:
- ----- Method: FileList>>updateButtonRow (in category 'initialization') -----
- updateButtonRow
- 	"Dynamically update the contents of the button row, if any."
- 	self changed: #getButtonRow.!

Item was removed:
- ----- Method: PluggableFileList>>defaultBackgroundColor (in category 'initialize-release') -----
- defaultBackgroundColor
- 
- 	^Color lightYellow!

Item was removed:
- ----- Method: FileList2 class>>addFullPanesTo:from: (in category 'utility') -----
- addFullPanesTo: window from: aCollection
- 
- 	
- 
- 	aCollection do: [ :each | | frame |
- 		frame := LayoutFrame 
- 			fractions: each second 
- 			offsets: each third.
- 		window addMorph: each first fullFrame: frame.
- 	]!

Item was removed:
- ----- Method: FileList2>>publishingServers (in category 'initialization') -----
- publishingServers
- 
- 	| dirList |
- 
- 	dirList := OrderedCollection new.
- 	ServerDirectory serverNames do: [ :n | | dir nameToShow | 
- 		dir := ServerDirectory serverNamed: n.
- 		(dir isProjectSwiki and: [dir acceptsUploads])
- 			 ifTrue: [
- 				nameToShow := n.
- 				dirList add: ((dir directoryWrapperClass with: dir name: nameToShow model: self)
- 					balloonText: dir realUrl)]].
- 	^dirList!

Item was removed:
- ----- Method: FileList2>>initialize (in category 'initialize-release') -----
- initialize
- 
- 	showDirsInFileList := false.
- 	fileSelectionBlock := [ :entry :myPattern |
- 		entry isDirectory ifTrue: [
- 			showDirsInFileList
- 		] ifFalse: [
- 			myPattern = '*' or: [myPattern match: entry name]
- 		]
- 	] fixTemps.
- 	dirSelectionBlock := [ :dirName | true].!

Item was removed:
- ----- Method: PluggableFileList class>>fileNameResultBlock (in category 'resultBlocks') -----
- fileNameResultBlock
- 
- 	^[:theDirectory :theFileName | theFileName]!

Item was removed:
- ----- Method: FileList2>>serviceOkay (in category 'own services') -----
- serviceOkay
- 	"Answer a service for hitting the okay button"
- 
- 	^ (SimpleServiceEntry new
- 		provider: self label: 'okay' selector: #okHit 
- 		description: 'hit here to accept the current selection')
- 		buttonLabel: 'ok'!

Item was removed:
- ----- Method: FileList>>fileListIndex: (in category 'file list') -----
- fileListIndex: anInteger
- 	"Select the file name having the given index, and display its contents."
- 
- 	| item name |
- 	self okToChange ifFalse: [^ self].
- 	listIndex := anInteger.
- 	listIndex = 0 
- 		ifTrue: [fileName := nil]
- 		ifFalse:
- 			[item := self fileNameFromFormattedItem: (list at: anInteger).
- 			(item endsWith: self folderString)
- 				ifTrue:
- 					["remove [...] folder string and open the folder"
- 					name := item copyFrom: 1 to: item size - self folderString size.
- 					listIndex := 0.
- 					brevityState := #FileList.
- 					self addPath: name.
- 					name first = $^
- 						ifTrue: [self directory: (ServerDirectory serverNamed: name allButFirst)]
- 						ifFalse: [volListIndex = 1 ifTrue: [name := name, directory slash].
- 							self directory: (directory directoryNamed: name)]]
- 				ifFalse: [fileName := item]].  "open the file selected"
- 
- 	brevityState := #needToGetBrief.
- 	self changed: #fileListIndex.
- 	self changed: #contents.
- 	self updateButtonRow!

Item was removed:
- ----- Method: PluggableFileList>>canAcceptBlock: (in category 'accessing') -----
- canAcceptBlock: aBlock
- 
- 	^canAcceptBlock := aBlock!

Item was removed:
- ----- Method: FileList>>readServerBrief (in category 'private') -----
- readServerBrief
- 	| lString sizeStr fsize ff first5000 parts |
- 	"If file on server is known to be long, just read the beginning.  Cheat badly by reading the fileList string."
- 
- 	listIndex = 0 ifTrue: [^ self].
- 	"Get size from file list entry"
- 	lString := list at: listIndex.
- 	parts := lString findTokens: '()'.
- 	sortMode = #name ifTrue: [sizeStr := (parts second findTokens: ' ') third].
- 	sortMode = #date ifTrue: [sizeStr := (parts first findTokens: ' ') third].
- 	sortMode = #size ifTrue: [sizeStr := (parts first findTokens: ' ') first].
- 	fsize := (sizeStr copyWithout: $,) asNumber.
- 
- 	fsize <= 50000 ifTrue:
- 		[ff := directory oldFileOrNoneNamed: self fullName.
- 		ff ifNil: [^ 'For some reason, this file cannot be read' translated].
- 		contents := ff contentsOfEntireFile.
- 		brevityState := #fullFile.   "don't change till actually read"
- 		^ contents].
- 
- 	"if brevityFlag is true, don't display long files when first selected"
- 	first5000 := directory getOnly: 3500 from: fileName.
- 	contents := 'File ''{1}'' is {2} bytes long.
- You may use the ''get'' command to read the entire file.
- 
- Here are the first 3500 characters...
- ------------------------------------------
- {3}
- ------------------------------------------
- ... end of the first 3500 characters.' translated format: {fileName. sizeStr. first5000}.
- 	brevityState := #briefFile.   "don't change till actually read"
- 	^ contents.
- 
- !

Item was removed:
- ----- Method: FileList2>>deleteDirectory (in category 'own services') -----
- deleteDirectory
- 	super deleteDirectory.
- 	self updateDirectory.!

Item was removed:
- ----- Method: FileList>>listForPatterns: (in category 'private') -----
- listForPatterns: anArray
- 	"Make the list be those file names which match the pattern."
- 
- 	| sizePad newList |
- 	newList := Set new.
- 	anArray do: [ :pat | newList addAll: (self entriesMatching: pat) ].
- 	newList := (SortedCollection sortBlock: self sortBlock) addAll: newList; yourself.
- 	sizePad := (newList inject: 0 into: [:mx :entry | mx max: (entry at: 5)])
- 					asStringWithCommas size - 1.
- 	newList := newList collect: [ :e | self fileNameFormattedFrom: e sizePad: sizePad ].
- 
- 	volList size = 1 ifTrue:
- 		["Include known servers along with other desktop volumes" 
- 		^ newList asArray ,
- 		(ServerDirectory serverNames collect: [:n | '^' , n , self folderString])].
- 	^ newList asArray!

Item was removed:
- ----- Method: FileList class>>allRegisteredServices (in category 'file reader registration') -----
- allRegisteredServices
- 	"self allRegisteredServices"
- 
- 	| col |
- 	col := OrderedCollection new.
- 	self registeredFileReaderClasses do: [:each | col addAll: (each services)].
- 	^ col!

Item was removed:
- ----- Method: FileList class>>unload (in category 'class initialization') -----
- unload
- 	"Unload the receiver from global registries"
- 
- 	self environment at: #Flaps ifPresent: [:cl |
- 	cl unregisterQuadsWithReceiver: self] !

Item was removed:
- ----- Method: FileList>>serviceBroadcastUpdate (in category 'own services') -----
- serviceBroadcastUpdate
- 	"Answer a service for broadcasting a file as an update"
- 
- 	^ SimpleServiceEntry
- 		provider: self 
- 		label: 'broadcast as update'
- 		selector: #putUpdate:
- 		description: 'broadcast file as update'
- 		buttonLabel: 'broadcast'!

Item was removed:
- ----- Method: FileList>>setFileStream: (in category 'initialization') -----
- setFileStream: aStream
- 	"Used to initialize a spawned file editor.  Sets directory too."
- 
- 	self directory: aStream directory.
- 	fileName := aStream localName.
- 	pattern := '*'.
- 	listIndex := 1.  "pretend a file is selected"
- 	aStream close.
- 	brevityState := #needToGetBrief.
- 	self changed: #contents.
- !

Item was removed:
- ----- Method: FileList2>>isDirectoryList: (in category 'drag''n''drop') -----
- isDirectoryList: aMorph
- 	^aMorph isKindOf: SimpleHierarchicalListMorph!

Item was removed:
- ----- Method: FileList2>>directoryNamesFor: (in category 'private') -----
- directoryNamesFor: item
- 	"item may be file directory or server directory"
- 	| entries |
- 	entries := item directoryNames.
- 	dirSelectionBlock ifNotNil:[entries := entries select: dirSelectionBlock].
- 	^entries!

Item was removed:
- ----- Method: FileList>>buildDirectoryTreeWith: (in category 'toolbuilder') -----
- buildDirectoryTreeWith: builder
- 	| treeSpec |
- 	treeSpec := builder pluggableTreeSpec new.
- 	treeSpec 
- 			model: self;
- 			roots: #rootDirectoryList;
- 			hasChildren: #hasMoreDirectories:;
- 			getChildren: #subDirectoriesOf:;
- 			getSelectedPath: #selectedPath; 
- 			setSelected: #setDirectoryTo:;
- 			label: #directoryNameOf:;
- 			autoDeselect: false.
- 	^treeSpec
- !

Item was removed:
- ----- Method: FileList>>copyName (in category 'menu messages') -----
- copyName
- 
- 	listIndex = 0 ifTrue: [^ self].
- 	Clipboard clipboardText: self fullName asText.
- !

Item was removed:
- ----- Method: FileList class>>initialize (in category 'class initialization') -----
- initialize
- 	"FileList initialize"
- 
- 	RecentDirs := OrderedCollection new.
- 	(self systemNavigation allClassesImplementing: #fileReaderServicesForFile:suffix:) do: 		[:providerMetaclass |
- 			self registerFileReader: providerMetaclass soleInstance]!

Item was removed:
- ----- Method: FileList>>offerAllFileOptions (in category 'file list menu') -----
- offerAllFileOptions
- 	"Put up a menu offering all possible file options, whatever the suffix of the current selection may be.  Specially useful if you're wanting to keep the menu up"
- 
- 	self offerMenuFrom: #fullFileListMenu:shifted: shifted: true!

Item was removed:
- ----- Method: FileList>>perform:orSendTo: (in category 'menu messages') -----
- perform: selector orSendTo: otherTarget 
- 	"Selector was just chosen from a menu by a user.
- 	If it's one of the three sort-by items, handle it specially.
- 	If I can respond myself, then perform it on myself. 
- 	If not, send it to otherTarget, presumably the editPane from which the menu was invoked."
- 
- 	^ (#(sortByDate sortBySize sortByName) includes: selector)
- 		ifTrue:
- 			[self resort: selector]
- 		ifFalse:
- 			[(#(get getHex copyName openImageInWindow importImage renameFile deleteFile addNewFile) includes: selector)
- 				ifTrue: [self perform: selector]
- 				ifFalse: [super perform: selector orSendTo: otherTarget]]!

Item was removed:
- ----- Method: PluggableFileList>>initialize (in category 'initialize-release') -----
- initialize
- 
- 	prompt := 'Select File'.
- 	directory := FileDirectory default.
- 	newFiles := OrderedCollection new.
- 	fileFilterBlock := PluggableFileList allFilesAndFoldersFileFilter.
- 	canAcceptBlock := PluggableFileList fileNameSelectedAcceptBlock.
- 	resultBlock := PluggableFileList pathNameResultBlock.
- 	validateBlock := PluggableFileList checkExistingFileValidateBlock.
- !

Item was removed:
- ----- Method: FileList>>serviceRenameFile (in category 'own services') -----
- serviceRenameFile
- 
- 	^ (SimpleServiceEntry provider: self label: 'rename' selector: #renameFile description: 'rename file')!

Item was removed:
- ----- Method: FileList>>update: (in category 'updating') -----
- update: aParameter
- 	"Receive a change notice from an object of whom the receiver is a dependent"
- 
- 	(aParameter == #fileListChanged) ifTrue: [self updateFileList].
- 	super update: aParameter!

Item was removed:
- ----- Method: PluggableFileList class>>checkExistingFileValidateBlock (in category 'validateBlocks') -----
- checkExistingFileValidateBlock
- 
- 	^[:theDirectory :theFileName :theNewFiles | 
- 		(theNewFiles includes: theFileName) or:
- 			[(PluggableFileList okToOverwrite: theFileName)]].!

Item was removed:
- ----- Method: FileList>>getEncodedText (in category 'file menu action') -----
- getEncodedText
- 
- 	Cursor read showWhile: [
- 		self selectEncoding.
- 		self changed: #contents].
- !

Item was removed:
- ----- Method: FileList2>>modalView: (in category 'private') -----
- modalView: aSystemWindowOrSuch
- 
- 	modalView := aSystemWindowOrSuch!

Item was removed:
- ----- Method: FileList2>>morphicFileListPane (in category 'user interface') -----
- morphicFileListPane
- 
- 	^(PluggableListMorph 
- 		on: self 
- 		list: #fileList 
- 		selected: #fileListIndex
- 		changeSelected: #fileListIndex: 
- 		menu: #fileListMenu:)
- 			enableDrag: true;
- 			enableDrop: false;
- 			yourself
- 
- !

Item was removed:
- ----- Method: FileList>>noFileSelectedMenu: (in category 'file list menu') -----
- noFileSelectedMenu: aMenu
- 
- 	^ aMenu
- 		addServices: self itemsForNoFile 
- 		for: self
- 		extraLines: #()
- 		
- !

Item was removed:
- ----- Method: FileList>>fileContentsMenu:shifted: (in category 'file list menu') -----
- fileContentsMenu: aMenu shifted: shifted
- 	"Construct aMenu to have items appropriate for the file browser's code pane, given the shift state provided"
- 
- 	| shiftMenu services maybeLine extraLines |
- 	shifted ifTrue:
- 		[shiftMenu := ParagraphEditor shiftedYellowButtonMenu.
- 		^ aMenu addAllFrom: shiftMenu].
- 	fileName ifNotNil:
- 		[services := OrderedCollection new.
- 		(#(briefHex briefFile needToGetBriefHex needToGetBrief) includes: brevityState) ifTrue:
- 			[services add: self serviceGet].
- 		(#(fullHex briefHex needToGetFullHex needToGetBriefHex) includes: brevityState) ifFalse:
- 			[services add: self serviceGetHex].
- 		(#(needToGetShiftJIS needToGetEUCJP needToGetCNGB needToGetEUCKR needToGetUTF8) includes: brevityState) ifFalse:
- 			[services add: self serviceGetEncodedText].
- 		maybeLine := services size.
- 		(FileStream sourceFileSuffixes includes: self suffixOfSelectedFile) ifTrue:
- 			[services addAll:
- 				(self servicesFromSelectorSpecs:
- 					#(fileIntoNewChangeSet: fileIn: browseChangesFile: browseFile:))].
- 
- 		extraLines := OrderedCollection new.
- 		maybeLine > 0 ifTrue: [extraLines add: maybeLine].
- 		services size > maybeLine ifTrue: [extraLines add: services size].
- 		aMenu 
- 			addServices: services
- 			for: self fullName
- 			extraLines: extraLines].
- 
- 	aMenu addList: {
- 			{'find...(f)' translated.		#find}.
- 			{'find again (g)' translated.		#findAgain}.
- 			{'set search string (h)' translated.	#setSearchString}.
- 			#-.
- 			{'do again (j)' translated.		#again}.
- 			{'undo (z)' translated.			#undo}.
- 			#-.
- 			{'copy (c)' translated.			#copySelection}.
- 			{'cut (x)' translated.			#cut}.
- 			{'paste (v)' translated.		#paste}.
- 			{'paste...' translated.			#pasteRecent}.
- 			#-.
- 			{'do it (d)' translated.		#doIt}.
- 			{'print it (p)' translated.		#printIt}.
- 			{'inspect it (i)' translated.		#inspectIt}.
- 			{'fileIn selection (G)' translated.	#fileItIn}.
- 			#-.
- 			{'accept (s)' translated.		#accept}.
- 			{'cancel (l)' translated.		#cancel}.
- 			#-.
- 			{'more...' translated.			#shiftedYellowButtonActivity}}.
- 
- 
- 	^ aMenu
- !

Item was removed:
- ----- Method: FileList>>labelString (in category 'initialization') -----
- labelString
- 	^fileName ifNil:['File List'] ifNotNil:[directory fullNameFor: fileName].!

Item was removed:
- ----- Method: FileList2 class>>modalFolderSelectorForProject: (in category 'modal dialogs') -----
- modalFolderSelectorForProject: aProject
- "
- FileList2 modalFolderSelectorForProject: Project current
- "
- 	| window fileModel w |
- 
- 	window := FileList2 morphicViewProjectSaverFor: aProject.
- 	fileModel := window valueOfProperty: #FileList.
- 	w := self currentWorld.
- 	window position: w topLeft + (w extent - window extent // 2).
- 	w addMorphInLayer: window.
- 	w startSteppingSubmorphsOf: window.
- 	self modalLoopOn: window.
- 	^fileModel getSelectedDirectory withoutListWrapper!

Item was removed:
- ----- Method: PluggableFileList>>validate (in category 'accessing') -----
- validate
- 
- 	^validateBlock value: directory value: fileName value: newFiles!

Item was removed:
- ----- Method: PluggableFileList>>fileString (in category 'file string') -----
- fileString
- 
- 	fileName ifNil: [^directory pathName].
- 	^directory fullNameFor: fileName!

Item was removed:
- ----- Method: FileList2>>fileSelectionBlock: (in category 'initialization') -----
- fileSelectionBlock: aBlock
- 
- 	fileSelectionBlock := aBlock!

Item was removed:
- ----- Method: FileList2 class>>morphicViewImageViewer (in category 'morphic ui') -----
- morphicViewImageViewer
- 
- 	| dir aFileList window midLine fixedSize |
- 
- 	dir := FileDirectory default.
- 	aFileList := self new directory: dir.
- 	aFileList optionalButtonSpecs: aFileList specsForImageViewer.
- 	aFileList fileSelectionBlock: [ :entry :myPattern |
- 		entry isDirectory ifTrue: [
- 			false
- 		] ifFalse: [
- 			#('bmp' 'gif' 'jpg' 'form' 'png') includes: 
- 					 (FileDirectory extensionFor: entry name asLowercase)
- 		]
- 	] fixTemps.
- 	window := (SystemWindow labelled: dir pathName) model: aFileList.
- 
- 	fixedSize := 25.
- 	midLine := 0.4.
- 	self addFullPanesTo: window from: {
- 		{aFileList optionalButtonRow. 0 @ 0 corner: 1 @ 0.
- 				0 at 0 corner: 0 at fixedSize}.
- 		{aFileList morphicDirectoryTreePane. 0 at 0 corner: midLine at 1.
- 				0 at fixedSize corner: 0 at 0}.
- 		{aFileList morphicFileListPane. midLine @ 0 corner: 1 at 1.
- 				0 at fixedSize corner: 0 at 0}.
- 	}.
- 	aFileList postOpen.
- 	^ window !

Item was removed:
- ----- Method: FileList2 class>>morphicViewGeneralLoaderInWorld: (in category 'blue ui') -----
- morphicViewGeneralLoaderInWorld: aWorld
- "
- FileList2 morphicViewGeneralLoaderInWorld: self currentWorld
- "
- 	| window aFileList buttons treePane textColor1 fileListPane pane2a pane2b fileTypeInfo fileTypeButtons fileTypeRow actionRow |
- 
- 	fileTypeInfo := self endingSpecs.
- 	window := AlignmentMorphBob1 newColumn.
- 	window hResizing: #shrinkWrap; vResizing: #shrinkWrap.
- 	textColor1 := Color r: 0.742 g: 0.839 b: 1.0.
- 	aFileList := self new directory: FileDirectory default.
- 	aFileList 
- 		fileSelectionBlock: self projectOnlySelectionBlock;
- 		modalView: window.
- 	window
- 		setProperty: #FileList toValue: aFileList;
- 		wrapCentering: #center; cellPositioning: #topCenter;
- 		borderWidth: ColorTheme current dialogBorderWidth;
- 		borderColor: ColorTheme current dialogBorderColor;
- 		useRoundedCorners.
- 
- 	fileTypeButtons := fileTypeInfo collect: [ :each |
- 		(self blueButtonText: each first textColor: Color gray inWindow: window)
- 			setProperty: #enabled toValue: true;
- 			hResizing: #shrinkWrap;
- 			useSquareCorners
- 	].
- 	buttons := {{'OK'. ColorTheme current okColor}. {'Cancel'. ColorTheme current cancelColor}} collect: [ :each |
- 		self blueButtonText: each first textColor: textColor1 color: each second inWindow: window
- 	].
- 
- 	treePane := aFileList morphicDirectoryTreePane 
- 		extent: 250 at 300; 
- 		retractable: false;
- 		borderWidth: 0.
- 	fileListPane := aFileList morphicFileListPane 
- 		extent: 350 at 300; 
- 		retractable: false;
- 		borderWidth: 0.
- 	window addARow: {window fancyText: 'Find...' translated font: Preferences standardEToysTitleFont color: textColor1}.
- 	fileTypeRow := window addARowCentered: fileTypeButtons cellInset: 2.
- 	actionRow := window addARowCentered: {
- 		buttons first. 
- 		(Morph new extent: 30 at 5) color: Color transparent. 
- 		buttons second
- 	} cellInset: 2.
- 	window
- 		addARow: {
- 				(window inAColumn: {(pane2a := window inARow: {window inAColumn: {treePane}}) 
- 					useRoundedCorners;
- 					layoutInset: 0;
- 					borderWidth: ColorTheme current dialogPaneBorderWidth;
- 					borderColor: ColorTheme current dialogPaneBorderColor
- 				}) layoutInset: 10.
- 				(window inAColumn: {(pane2b := window inARow: {window inAColumn: {fileListPane}}) 
- 					useRoundedCorners;
- 					layoutInset: 0;
- 					borderWidth: ColorTheme current dialogPaneBorderWidth;
- 					borderColor: ColorTheme current dialogPaneBorderColor
- 				}) layoutInset: 10.
- 		}.
- 	window fullBounds.
- 	window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65.
- 	pane2a fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35).
- 	pane2b fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35).
- "
- 	buttons do: [ :each |
- 		each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0).
- 	].
- "
- 	fileTypeButtons do: [ :each | 
- 		each 
- 			on: #mouseUp 
- 			send: #value:value: 
- 			to: [ :evt :morph | 
- 				self update: actionRow in: window fileTypeRow: fileTypeRow morphUp: morph.
- 			] fixTemps
- 	].
- 	buttons first on: #mouseUp send: #okHit to: aFileList.
- 	buttons second on: #mouseUp send: #cancelHit to: aFileList.
- 	aFileList postOpen.
- 	window position: aWorld topLeft + (aWorld extent - window extent // 2).
- 	aFileList directoryChangeBlock: [ :newDir |
- 		self update: actionRow in: window fileTypeRow: fileTypeRow morphUp: nil.
- 		self enableTypeButtons: fileTypeButtons info: fileTypeInfo forDir: newDir.
- 	] fixTemps.
- 	aFileList directory: aFileList directory.
- 	window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0).
- 	window becomeModal.
- 	^ window openInWorld: aWorld.!

Item was removed:
- ----- Method: StandardFileMenuResult>>name: (in category 'accessing') -----
- name: aString
- 
- 	^name := aString!

Item was removed:
- ----- Method: FileList>>readContentsShiftJIS (in category 'private') -----
- readContentsShiftJIS
- 	| f writeStream |
- 	f := directory oldFileOrNoneNamed: self fullName.
- 	f ifNil: [^ 'For some reason, this file cannot be read'].
- 	writeStream := WriteStream on: String new.
- 	f converter: ShiftJISTextConverter new.
- 	[f atEnd]
- 		whileFalse: [writeStream nextPut: f next].
- 	f close.
- 	^ writeStream contents!

Item was removed:
- ----- Method: FileList>>dynamicButtonServices (in category 'initialization') -----
- dynamicButtonServices
- 	"Answer services for buttons that may come and go in the button pane, depending on selection"
- 
- 	^ fileName isEmptyOrNil
- 		ifTrue:
- 			[#()]
- 		ifFalse:
- 			[ | toReject |
- 				toReject := self buttonSelectorsToSuppress.
- 				(self itemsForFile: self fullName) reject:
- 					[:svc | toReject includes: svc selector]]!

Item was removed:
- ----- Method: FileList>>askServerInfo (in category 'server list') -----
- askServerInfo
- 	"Get the user to create a ServerDirectory for a new server.  Fill in and say Accept."
- 	| template |
- 	template := '"Please fill in the following info, then select all text and choose DoIt."
- 
- 	| aa | 
- 	self flag: #ViolateNonReferenceToOtherClasses.
- 	aa := ServerDirectory new.
- 	aa server: ''st.cs.uiuc.edu''.    "host"
- 	aa user: ''anonymous''.
- 	aa password: ''yourEmail at school.edu''.
- 	aa directory: ''/Smalltalk/Squeak/Goodies''.
- 	aa url: ''''.    "<- this is optional.  Only used when *writing* update files."
- 	ServerDirectory addServer: aa named: ''UIUCArchive''.  "<- known by this name in Squeak"'.
- 
- 	(StringHolder new contents: template) openLabel: 'FTP Server Form'
- 	!

Item was removed:
- ----- Method: FileList2>>optionalButtonSpecs (in category 'initialization') -----
- optionalButtonSpecs
- 
- 	^optionalButtonSpecs ifNil: [super optionalButtonSpecs]!

Item was removed:
- ----- Method: FileList>>fileNameFormattedFrom:sizePad: (in category 'volume list and pattern') -----
- fileNameFormattedFrom: entry sizePad: sizePad
- 	"entry is a 5-element array of the form:
- 		(name creationTime modificationTime dirFlag fileSize)"
- 	| sizeStr nameStr dateStr |
- 	nameStr := (entry at: 4)
- 		ifTrue: [entry first , self folderString]
- 		ifFalse: [entry first].
- 	dateStr := ((Date fromSeconds: (entry at: 3) )
- 					printFormat: #(3 2 1 $. 1 1 2)) , ' ' ,
- 				(String streamContents: [:s |
- 					(Time fromSeconds: (entry at: 3) \\ 86400)
- 						print24: true on: s]).
- 	sizeStr := (entry at: 5) asStringWithCommas.
- 	sortMode = #name ifTrue:
- 		[^ nameStr , '    (' , dateStr , ' ' , sizeStr , ')'].
- 	sortMode = #date ifTrue:
- 		[^ '(' , dateStr , ' ' , sizeStr , ') ' , nameStr].
- 	sortMode = #size ifTrue:
- 		[^ '(' , ((sizeStr size to: sizePad) collect: [:i | $ ]) , sizeStr , ' ' , dateStr , ') ' , nameStr].
- !

Item was removed:
- ----- Method: FileList>>buildCodePaneWith: (in category 'toolbuilder') -----
- buildCodePaneWith: builder
- 	| textSpec |
- 	textSpec := builder pluggableTextSpec new.
- 	textSpec 
- 		model: self;
- 		getText: #contents; 
- 		setText: #put:; 
- 		selection: #contentsSelection; 
- 		menu: #fileContentsMenu:shifted:.
- 	^textSpec!

Item was removed:
- ----- Method: PluggableFileList class>>directoryResultBlock (in category 'resultBlocks') -----
- directoryResultBlock
- 
- 	^[:theDirectory :theFileName | theDirectory]!

Item was removed:
- ----- Method: FileList>>sortingByName (in category 'private') -----
- sortingByName
- 	^ sortMode == #name!

Item was removed:
- ----- Method: FileList2>>optionalButtonRow (in category 'initialization') -----
- optionalButtonRow
- 	"Answer the button row associated with a file list"
- 
- 	| aRow |
- 	aRow := AlignmentMorph newRow beSticky.
- 	aRow color: Color transparent.
- 	aRow clipSubmorphs: true.
- 	aRow layoutInset: 5 at 1; cellInset: 6.
- 	self universalButtonServices do:  "just the three sort-by items"
- 			[:service |
- 				aRow addMorphBack: (service buttonToTriggerIn: self).
- 				(service selector  == #sortBySize)
- 					ifTrue:
- 						[aRow addTransparentSpacerOfSize: (4 at 0)]].
- 	aRow setNameTo: 'buttons'.
- 	aRow setProperty: #buttonRow toValue: true.  "Used for dynamic retrieval later on"
- 	^ aRow!

Item was removed:
- ----- Method: FileList class>>unregisterFileReader: (in category 'file reader registration') -----
- unregisterFileReader: aProviderClass
- 	"unregister the given class as providing services for reading files"
- 
- 	self registeredFileReaderClasses remove: aProviderClass ifAbsent: [nil]!

Item was removed:
- ----- Method: FileList>>compressFile (in category 'file menu action') -----
- compressFile
- 	"Compress the currently selected file"
- 
- 	| f |
- 	f := StandardFileStream
- 				readOnlyFileNamed: (directory fullNameFor: self fullName).
- 	f compressFile.
- 	self updateFileList!

Item was removed:
- ----- Method: FileList2>>specsForImageViewer (in category 'as yet unclassified') -----
- specsForImageViewer
- 
- 	 ^{self serviceSortByName. self serviceSortByDate. self serviceSortBySize }!

Item was removed:
- ----- Method: FileList class>>openFileDirectly (in category 'instance creation') -----
- openFileDirectly
- 
- 	| aResult |
- 	(aResult := StandardFileMenu oldFile) ifNotNil:
- 		[self openEditorOn: (aResult directory readOnlyFileNamed: aResult name) editString: nil]!

Item was removed:
- ----- Method: FileList class>>detectService:ifNone: (in category 'file reader registration') -----
- detectService: aBlock ifNone: anotherBlock
- 	"self detectService: [:each | each selector = #fileIn:] ifNone: [nil]"
- 
- 	^ self allRegisteredServices
- 			detect: aBlock
- 			ifNone: anotherBlock!

Item was removed:
- ----- Method: PluggableFileList class>>putFile (in category 'standard dialog operations') -----
- putFile
- 
- 	| result |
- 	result := self getFilePathNameWithExistenceCheck.
- 	^result ifNotNil: 
- 		[FileDirectory deleteFilePath: result.
- 		 FileStream newFileNamed: result]!

Item was removed:
- ----- Method: FileList>>fileList (in category 'file list') -----
- fileList
- 	"Answer the list of files in the current volume."
- 
- 	^ list!

Item was removed:
- ----- Method: FileList>>buttonSelectorsToSuppress (in category 'initialization') -----
- buttonSelectorsToSuppress
- 	"Answer a list of action selectors whose corresponding services we would prefer *not* to have appear in the filelist's button pane; this can be hand-jimmied to suit personal taste."
- 
- 	^ #(removeLineFeeds: addFileToNewZip: compressFile: putUpdate:)!



More information about the Packages mailing list