on 31/01/02 7:05 PM, Ned Konz at ned@bike-nomad.com wrote:
On Thursday 31 January 2002 03:31 am, Stephane Ducasse wrote:
So the file list only knows the classes and not the services which have been register.
I'm in favor of letting the reader classes decide:
whether they're going to handle a specific file or not (not just by suffix!)
what services they want to provide for a specific file
I'd suggest registering classes using file suffixes (as an optimization for readers that care about suffixes), and then before popping up a menu, passing the name of the selected file(s) to the registered reader classes.
If you include '*' as a file suffix that can be registered, it would allow readers to decide on a file-by-file basis.
This is important for some files that may not have predictable file suffixes (I'm thinking here of ZIP files, which may have suffixes like .zip .ZIP .exe .EXE .pr .PR, etc...) and would benefit from being looked at (for magic numbers, etc.).
I was thinking about the same in fact. So I will try to use that.
That is, I'd have something like this (probably pseudo-code):
ArchiveViewer class >>initialize FileList registerReader: self forSuffixes: #( * ).
ArchiveViewer class>>servicesForFile: aFileName services := OrderedCollection new. (aFileName isZipFile) ifTrue: [ services add: (SimpleServiceEntry provider: self label: 'view zip' selector: #viewZip:) ]. services add: (SimpleServiceEntry provider: self label: 'add to zip' selector: #addFileToNewZip:) . ^services
and before popping up a menu, the FileList would call all the reader classes that had expressed an interest in the given file suffix (plus all those who'd registered '*'). The results would be added to the menu.
squeak-dev@lists.squeakfoundation.org