[squeak-dev] The Inbox: Tools-hmm.236.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Apr 27 18:47:25 UTC 2010


A new version of Tools was added to project The Inbox:
http://source.squeak.org/inbox/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 at 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!




More information about the Squeak-dev mailing list