'From Squeakland 3.8.5976 of 19 August 2004 [latest update: #243] on 25 August 2004 at 12:04:14 pm'! "Change Set: dropHandler-dgd-mir Date: 24 August 2004 Author: Diego Gomez Deck, Michael Rueger Extends the drop handler to query the file services for possible handler actions."! !ExternalDropHandler class methodsFor: 'accessing' stamp: 'mir 8/24/2004 15:37'! lookupExternalDropHandler: stream | types extension serviceHandler | types _ stream mimeTypes. types ifNotNil: [ self registeredHandlers do: [:handler | (handler matchesTypes: types) ifTrue: [^handler]]]. extension _ FileDirectory extensionFor: stream name. self registeredHandlers do: [:handler | (handler matchesExtension: extension) ifTrue: [^handler]]. serviceHandler := self lookupServiceBasedHandler: stream. ^serviceHandler ifNil: [self defaultHandler]! ! !ExternalDropHandler class methodsFor: 'accessing' stamp: 'mir 8/24/2004 17:15'! lookupServiceBasedHandler: dropStream "the file was just droped, let's do our job" | fileName services theOne | fileName := dropStream name. services := (FileList itemsForFile: fileName) reject: [:svc | self unwantedSelectors includes: svc selector]. "no service, default behavior" services isEmpty ifTrue: [^nil]. theOne := self chooseServiceFrom: services. ^theOne ifNotNil: [ExternalDropHandler type: nil extension: nil action: [:stream | theOne performServiceFor: stream]]! ! !ExternalDropHandler class methodsFor: 'private' stamp: 'mir 8/24/2004 15:28'! chooseServiceFrom: aCollection "private - choose a service from aCollection asking the user if needed" | menu | aCollection size = 1 ifTrue: [^ aCollection anyOne]. "" menu := CustomMenu new. aCollection do: [:each | menu add: each label action: each]. ^ menu startUp! ! !ExternalDropHandler class methodsFor: 'private' stamp: 'mir 8/24/2004 15:28'! unwantedSelectors "private - answer a collection well known unwanted selectors " ^ #(#removeLineFeeds: #addFileToNewZip: #compressFile: #putUpdate: )! ! !FileStream methodsFor: 'file modes' stamp: 'mir 8/24/2004 17:58'! readOnlyStream ^self readOnly! !