Andreas Raab uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-hmm.236.mcz
==================== Summary ====================
Name: Tools-hmm.236 Author: hmm Time: 27 April 2010, 8:46:59.789 pm UUID: 283b99fb-15fd-45b6-81f0-49a6bb6bea15 Ancestors: Tools-ar.235
Display image files (graphics) in FileList
=============== Diff against Tools-ar.235 ===============
Item was added: + ----- Method: FileList>>stepTimeIn: (in category 'private') ----- + stepTimeIn: aWindow + ^500!
Item was added: + ----- Method: FileList>>readGraphicContents (in category 'private') ----- + readGraphicContents + | form maxExtent ext | + form := Form fromFileNamed: self fullName. + maxExtent := lastGraphicsExtent := self availableGraphicsExtent. + ext := form extent. + (maxExtent notNil and: [form extent <= maxExtent]) ifFalse: [ + form := form magnify: form boundingBox by: (maxExtent x / form width min: maxExtent y / form height) asPoint smoothing: 3]. + contents := ('Image extent: ', ext printString) asText, + (String with: Character cr), + (Text string: ' ' + attribute: (TextFontReference toFont: + (FormSetFont new + fromFormArray: (Array with: form) + asciiStart: Character space asInteger + ascent: form height))). + brevityState := #graphic. + ^contents!
Item was added: + ----- Method: FileList>>step (in category 'private') ----- + step + | ext | + brevityState = #graphic ifTrue: [ + ext := self availableGraphicsExtent. + ext = lastGraphicsExtent ifFalse: [ + lastGraphicsExtent := ext. + brevityState := #needToGetGraphic. + self changed: #contents]]!
Item was added: + ----- Method: FileList>>availableGraphicsExtent (in category 'private') ----- + availableGraphicsExtent + self dependents do: [:each | + ((each isKindOf: PluggableTextMorph) and: [each getTextSelector == #contents]) ifTrue: [^each innerBounds extent - (6@22)]]. + ^nil!
Item was added: + ----- Method: FileList>>isGraphicsFileSelected (in category 'private') ----- + isGraphicsFileSelected + ^fileName notNil and: [((self itemsForFile: self fullName) detect: [:each | each provider == Form and: [each selector == #importImage:]] ifNone: []) notNil]!
Item was changed: ----- 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 := self isGraphicsFileSelected + ifTrue: [#needToGetGraphic] + ifFalse: [#needToGetBrief].. - brevityState := #needToGetBrief. self changed: #fileListIndex. self changed: #contents. self updateButtonRow!
Item was changed: ----- 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 == #graphic ifTrue: [^ contents].
+ brevityState == #needToGetGraphic ifTrue: [^self readGraphicContents]. + 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 changed: StringHolder subclass: #FileList + instanceVariableNames: 'fileName directory volList volListIndex list listIndex pattern sortMode brevityState directoryCache lastGraphicsExtent' - instanceVariableNames: 'fileName directory volList volListIndex list listIndex pattern sortMode brevityState directoryCache' classVariableNames: 'FileReaderRegistry RecentDirs' poolDictionaries: '' category: 'Tools-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 added: + ----- Method: FileList>>wantsSteps (in category 'private') ----- + wantsSteps + ^true!
packages@lists.squeakfoundation.org