'From Squeak6.0alpha of 14 October 2020 [latest update: #19988] on 22 October 2020 at 7:09:07 pm'!
"Change Set:		dropFiles3
Date:			18 January 586455
Author:			Christoph Thiede

<your descriptive text goes here>"!


!DropFilesEvent commentStamp: 'ct 10/15/2020 18:15' prior: 0!
THIS CLASS IS DEPRECATED!! The #dropFiles/#wantsDropFiles: protocol has been replaced. Use #acceptDroppingMorph:event:/#wantsDroppedMorph:event: instead and scan for dragTransferType: #filesAndDirectories.!
]style[(25 179)cred;,!

Morph subclass: #HandMorph
	instanceVariableNames: 'mouseFocus keyboardFocus eventListeners mouseListeners keyboardListeners eventCaptureFilters mouseCaptureFilters keyboardCaptureFilters mouseClickState mouseOverHandler targetOffset lastMouseEvent damageRecorder cacheCanvas cachedCanvasHasHoles temporaryCursor temporaryCursorOffset hardwareCursor hasChanged savedPatch userInitials lastEventBuffer genieGestureProcessor keyboardInterpreter externalDropMorph'
	classVariableNames: 'CompositionWindowManager DoubleClickTime DragThreshold EventStats MinimalWheelDelta NewEventRules NormalCursor PasteBuffer SendMouseWheelToKeyboardFocus ShowEvents SynthesizeMouseWheelEvents'
	poolDictionaries: 'EventSensorConstants'
	category: 'Morphic-Kernel'!
Smalltalk renameClassNamed: #LaunchDropEvent as: #SystemLaunchEvent!
MorphicEvent subclass: #SystemLaunchEvent
	instanceVariableNames: 'arguments wasHandled'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Morphic-Events'!

!SystemLaunchEvent commentStamp: 'ct 1/18/586455 02:22' prior: 0!
I am signaled by the VM that is configured as a singleton application when it has been invoked with a new image file.

This feature is also known as #launchDrop as well as under several platform-specific names:

	Unix - runAsSingleInstance
	Win32 - RunSingleApp

Instance Variables
	arguments:		A collection of FileStreams.
	wasHandled:		A Boolean.!


!Object methodsFor: '*morphic' stamp: 'ct 5/5/2020 16:19'!
asDraggableMorph
	"Converts the receiver into a Morph suitable for dragging"
	^ TransferMorph draggableMorphLabeled: (
		(self respondsTo: #dragLabel)
			ifTrue: [self dragLabel] 
			ifFalse: [self printString])! !


!DefaultExternalDropHandler methodsFor: 'event handling' stamp: 'ct 5/5/2020 17:40'!
handle: dropStream in: pasteUp dropEvent: anEvent 
	"the file was just droped, let's do our job"
	| fileName services chosen |
	fileName := dropStream name.
	services := self servicesForFileNamed: fileName.
	
	"no service, default behavior"
	services ifEmpty: [
		^ UIManager default edit: dropStream contentsOfEntireFile].
	
	chosen := self chooseServiceFrom: services.
	chosen ifNotNil: [chosen performServiceFor: dropStream].! !

!DefaultExternalDropHandler methodsFor: 'private' stamp: 'ct 5/5/2020 17:32'!
chooseServiceFrom: aCollection
	"private - choose a service from aCollection asking the user if needed"
	^ aCollection size = 1 
		ifTrue: [aCollection anyOne]
		ifFalse: [UIManager default 
			chooseFrom: (aCollection collect: [:each | each label])
			values: aCollection
			title: 'You dropped a file. Please choose a service:' translated withCRs].! !

!DefaultExternalDropHandler methodsFor: 'private' stamp: 'ct 5/5/2020 17:31'!
servicesForFileNamed: aString 
	"private - answer a collection of file-services for the file named aString"

	^ (FileServices itemsForFile: aString)
		copyWithoutAll: self unwantedSelectors! !


!ExternalDropHandler class methodsFor: 'accessing' stamp: 'ct 5/5/2020 17:36'!
defaultHandler

	^ DefaultHandler ifNil: [
		DefaultHandler := ExternalDropHandler
			type: nil
			extension: nil
			action: #edit]! !


!Morph methodsFor: 'event handling' stamp: 'ct 6/13/2020 13:26'!
dropFiles: anEvent
	"Handle a number of files dropped from the OS. Deprecated protocol. Use #acceptDroppingMorph:event: instead and scan for dragTransferType: #filesAndDirectories."! !

!Morph methodsFor: 'event handling' stamp: 'ct 10/15/2020 19:31'!
handlesSystemLaunch: evt
	"Do I want to receive #systemLaunch: when the VM instance is invoked with a second image file? See #handleSystemLaunch:."

	^ false! !

!Morph methodsFor: 'event handling' stamp: 'ct 10/15/2020 19:36'!
systemLaunch: evt
	"Handle a systemLaunch event, signaled when the VM instance is invoked with a second image file. See #handleSystemLaunch:. Hook for subclasses."! !

!Morph methodsFor: 'event handling' stamp: 'ct 8/20/2020 19:00'!
wantsDropFiles: anEvent
	"Return true if the receiver wants files dropped from the OS. Deprecated protocol. Use #wantsDroppedMorph:event: instead and scan for dragTransferType: #filesAndDirectories."
	^ false! !

!Morph methodsFor: 'events-processing' stamp: 'ct 6/13/2020 13:28'!
handleDropFiles: anEvent
	"Handle a drop from the OS. Deprecated protocol. Use #handleDropMorph: instead and scan for dragTransferType: #filesAndDirectories."
	anEvent wasHandled ifTrue: [^ self]. "not interested"
	(self wantsDropFiles: anEvent) ifFalse: [^ self].
	anEvent wasHandled: true.
	self deprecated: 'ct: #dropFiles/#wantsDropFiles: protocol is deprecated. Use #acceptDroppingMorph:event:/#wantsDroppedMorph:event: instead and scan for dragTransferType: #filesAndDirectories.'.
	self dropFiles: anEvent.! !

!Morph methodsFor: 'events-processing' stamp: 'ct 10/15/2020 19:32'!
handleSystemLaunch: anEvent
	"Handle a system launch event from the OS. Signaled if them VM is configured as a singleton application when it has been invoked again with a second image file. See SystemLaunchEvent comment."

	anEvent wasHandled ifTrue: [^ self]. "not interested"
	(self handlesSystemLaunch: anEvent) ifFalse: [^ self].
	anEvent wasHandled: true.
	self systemLaunch: anEvent.! !

!Morph methodsFor: 'testing' stamp: 'ct 8/19/2020 16:13'!
isTransferMorph

	^ false! !


!HandMorph methodsFor: 'event handling' stamp: 'ct 10/15/2020 19:40'!
processEvents
	"Process user input events from the local input devices."

	| evtBuf hadAny |
	self currentEvent ~= lastMouseEvent ifTrue: [
		"Meaning that we were invoked from within an event response.
		Make sure z-order is up to date."
		self mouseOverHandler processMouseOver: lastMouseEvent].
	
	hadAny := false.
	[(evtBuf := Sensor nextEvent) isNil] whileFalse: [
		| evt |
		evt := evtBuf first "type"
			caseOf: {
				[EventTypeMouse] -> [self generateMouseEvent: evtBuf].
				[EventTypeMouseWheel] -> [self generateMouseWheelEvent: evtBuf].
				[EventTypeKeyboard] -> [self generateKeyboardEvent: evtBuf].
				[EventTypeDragDropFiles] -> [self generateDropFilesEvent: evtBuf].
				[EventTypeWindow] -> [self generateWindowEvent: evtBuf] }
			otherwise: [nil "All other events are ignored"].
		
		evt ifNotNil: [
			"Finally, handle it"
			self handleEvent: evt.
			hadAny := true.
			
			"For better user feedback, return immediately after a mouse event has been processed."
			evt isMouse ifTrue: [^ self] ] ].
	
	"note: if we come here we didn't have any mouse events"
	mouseClickState ifNotNil: [
		"No mouse events during this cycle. Make sure click states time out accordingly"
		mouseClickState handleEvent: lastMouseEvent asMouseMove from: self].
	hadAny ifFalse: [
		"No pending events. Make sure z-order is up to date"
		self mouseOverHandler processMouseOver: lastMouseEvent].! !

!HandMorph methodsFor: 'grabbing/dropping' stamp: 'ct 8/19/2020 15:00'!
dropMorph: aMorph event: anEvent
	"Drop the given morph which was carried by the hand"
	| event dropped |
	(anEvent isMouseUp and: [aMorph shouldDropOnMouseUp not]) ifTrue: [^ self].

	"Note: For robustness in drag and drop handling, we remove the morph BEFORE we drop it, but we keep its owner set to the hand. This prevents system lockups when there is a problem in drop handling (for example if there's an error in #wantsToBeDroppedInto:). THIS TECHNIQUE IS NOT RECOMMENDED FOR CASUAL USE."
	self privateRemove: aMorph.
	aMorph privateOwner: self.
	
	dropped := aMorph.
	(dropped hasProperty: #addedFlexAtGrab) 
		ifTrue: [dropped := aMorph removeFlexShell].
	event := DropEvent new setPosition: self position contents: dropped hand: self.
	
	[ "In case of an error, ensure that the morph-to-be-dropped will be disposed. Otherwise it may confuse garbage handler. See the sends of #privateRemove: and #privateOwner: above."
		event := self sendEvent: event focus: nil. "event filters can apply and filtered events will be returned"
		event wasHandled ifFalse: [aMorph rejectDropMorphEvent: event] ]
			ensure: [ aMorph owner == self ifTrue: [aMorph delete] ].
	
	self mouseOverHandler processMouseOver: anEvent.! !

!HandMorph methodsFor: 'initialize-release' stamp: 'ct 6/6/2020 19:57'!
cleanUp: aggressive

	aggressive ifTrue: [
		externalDropMorph := nil].! !

!HandMorph methodsFor: 'private events' stamp: 'ct 6/12/2020 21:35'!
collectDropFilesAndDirectories: numFiles

	^ (1 to: numFiles) collect: [:index |
		(FileDirectory requestDropDirectory: index)
			ifNil: [FileStream requestDropStream: index]]! !

!HandMorph methodsFor: 'private events' stamp: 'ct 1/18/586455 10:01'!
generateDropFilesEvent: evtBuf 
	"Generate the appropriate mouse event for the given raw event buffer."

	| position buttons modifiers stamp numFiles dragType |
	stamp := evtBuf second.
	stamp = 0 ifTrue: [stamp := Time eventMillisecondClock].
	dragType := evtBuf third.
	position := evtBuf fourth @ evtBuf fifth.
	buttons := 1. "red" "hacked because necessary for correct mouseMoveDragging handling"
	modifiers := evtBuf sixth.
	buttons := buttons bitOr: (modifiers bitShift: 3).
	numFiles := evtBuf seventh.
	
	dragType caseOf: {
		[1] -> [ "dragEnter"
			externalDropMorph := TransferMorph new
				dragTransferType: #filesAndDirectories;
				source: self;
				yourself.
			numFiles isZero
				ifTrue: [ "Usually, numFiles and drop paths are delivered on dragDrop only. Still reserving this possibility for able host implementations."
					externalDropMorph addMorph: (
						TransferMorph draggableMorphLabeled: 'Host content' translated)]
				ifFalse: [
					externalDropMorph passenger: (self collectDropFilesAndDirectories: numFiles)].
			
			"During the drag operation, the host system is responsible for displaying the cursor."
			self showTemporaryCursor: Cursor blank.
			self grabMorph: externalDropMorph.
			externalDropMorph bottomRight: self topLeft. "Southeast area of the cursor is blocked by drawings from the source application. Display our drop morph at the opposite corner of the cursor." ].
		[2] -> [ "dragMove"
			^ MouseMoveEvent new 
				setType: #mouseMove
				startPoint: self position
				endPoint: position
				trail: "{self position. position}"(self mouseDragTrailFrom: evtBuf)
				buttons: buttons
				hand: self
				stamp: stamp ].
		[3]  -> [ "dragLeave"
			externalDropMorph ifNotNil: #abandon.
			externalDropMorph := nil.
			self showTemporaryCursor: nil ].
		[4] -> [ "dragDrop"
			| oldButtons |
			externalDropMorph ifNil: [
				"dragDrop has been sent without prior dragging. This happens if the VM is configured as a singleton application and has been called again (aka #launchDrop)."
				^ SystemLaunchEvent new
					setArguments: (self collectDropFilesAndDirectories: numFiles)
					source: self
					stamp: stamp].
			
			self showTemporaryCursor: nil.
			externalDropMorph passenger ifNil: [
				externalDropMorph passenger: (self collectDropFilesAndDirectories: numFiles)].
			externalDropMorph := nil.
			
			(Smalltalk classNamed: #DropFilesEvent) ifNotNil: [:eventClass |
				| classicEvent |
				"Generate classic DropFilesEvent, providing backward compatibility."
				classicEvent := eventClass new
					setPosition: position
					contents: numFiles
					hand: self.
				self processEvent: classicEvent.
				classicEvent wasHandled ifTrue: [^ nil]].
			
			oldButtons := lastEventBuffer fifth
				bitOr: (lastEventBuffer sixth bitShift: 3).
			^ MouseButtonEvent new 
				setType: #mouseUp
				position: position
				which: (oldButtons bitXor: buttons)
				buttons: buttons
				nClicks: 0
				hand: self
				stamp: stamp ].
		[5] -> [ "drag request"
			"For dnd out. Not properly implemented at the moment."
			self shouldBeImplemented] }.
	^ nil! !

!HandMorph methodsFor: 'private events' stamp: 'ct 1/18/586455 10:01'!
mouseDragTrailFrom: currentBuf 
	"Current event, a dragMove event buffer, is about to be processed.  If there are other similar dragMove events queued up, then drop them from the queue, and report the positions inbetween. Adapted version of #mouseTrailFrom:."

	| nextEvent trail |
	trail := WriteStream on: (Array new: 1).
	trail nextPut: currentBuf fourth @ currentBuf fifth.
	[(nextEvent := Sensor peekEvent) isNil] whileFalse: [
		nextEvent first = currentBuf first
			ifFalse: [^ trail contents	 "different event type"].
		nextEvent third = currentBuf third
			ifFalse: [^ trail contents "dragType changed"].
		nextEvent sixth = currentBuf sixth
			ifFalse: [^ trail contents	 "modifiers changed"].
		nextEvent seventh = currentBuf seventh
			ifFalse: [^ trail contents	 "numFiles changed"].
		"nextEvent is similar.  Remove it from the queue, and check the next."
		nextEvent := Sensor nextEvent.
		trail nextPut: nextEvent fourth @ nextEvent fifth].
	^ trail contents! !

!HandMorph methodsFor: 'events-debugging' stamp: 'ct 2/29/2020 16:58'!
logEvent: anEvent
	"Update statistics for processed events."
	
	EventStats ifNil: [EventStats := IdentityDictionary new].
	EventStats at: #count put: (EventStats at: #count ifAbsent: [0]) + 1.
	EventStats at: anEvent type put: (EventStats at: anEvent type ifAbsent: [0]) + 1.! !


!HandMorph class methodsFor: 'initialization' stamp: 'ct 6/6/2020 19:56'!
cleanUp: aggressive

	EventStats := nil.
	self allSubInstancesDo: [:hand |
		hand cleanUp: aggressive].! !


!PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'ct 4/2/2020 12:03'!
acceptDroppingMorph: dropped event: evt
	"The supplied morph, known to be acceptable to the receiver, is now to be assimilated; the precipitating event is supplied"

	| aMorph |
	(self isWorldMorph
		and: [dropped respondsTo: #dragTransferType]
		and: [dropped dragTransferType = #filesAndDirectories])
			ifTrue: [^ self dropFiles: dropped passenger event: evt].
	
	aMorph := self morphToDropFrom: dropped.
	self isWorldMorph
		ifTrue: [
			"Add the given morph to this world and start stepping it if it wants to be."
			aMorph isInWorld ifFalse: [aMorph position: evt position].
			self addMorphFront: aMorph.
			(aMorph fullBounds intersects: self viewBox) ifFalse: [
				Beeper beep.
				aMorph position: self bounds center] ]
		ifFalse: [super acceptDroppingMorph: aMorph event: evt].
	
	aMorph submorphsDo: [:m | (m isKindOf: HaloMorph) ifTrue: [m delete]].
	aMorph allMorphsDo:  "Establish any penDown morphs in new world"
		[:m | | tfm mm |
		m player ifNotNil:
			[m player getPenDown ifTrue:
				[((mm := m player costume) notNil and: [(tfm := mm owner transformFrom: self) notNil])
					ifTrue: [self noteNewLocation: (tfm localPointToGlobal: mm referencePosition)
									forPlayer: m player]]]].
	
	self isPartsBin
		ifTrue:
			[aMorph isPartsDonor: true.
			aMorph stopSteppingSelfAndSubmorphs.
			aMorph suspendEventHandler]
		ifFalse:
			[self world startSteppingSubmorphsOf: aMorph].
	
"	self presenter morph: aMorph droppedIntoPasteUpMorph: self."
	self griddingOn ifTrue: [aMorph position: (self gridPoint: aMorph position)].
	self showingListView ifTrue:
		[self sortSubmorphsBy: (self valueOfProperty: #sortOrder).
		self currentWorld abandonAllHalos].
	
	self bringTopmostsToFront.
! !

!PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'ct 8/20/2020 18:51'!
morphToDropFrom: aMorph 
	"Given a morph being carried by the hand which the hand is about to drop, answer the actual morph to be deposited.  Normally this would be just the morph itself, but several unusual cases arise, which this method is designed to service."

	| aNail representee handy posBlock |
	handy := self primaryHand.
	posBlock := 
			[:z | | tempPos | 
			tempPos := handy position 
						- ((handy targetOffset - aMorph formerPosition) 
								* (z extent / aMorph extent)) rounded.
			self pointFromWorld: tempPos].
	self alwaysShowThumbnail 
		ifTrue: 
			[aNail := aMorph 
						representativeNoTallerThan: self maxHeightToAvoidThumbnailing
						norWiderThan: self maximumThumbnailWidth
						thumbnailHeight: self heightForThumbnails.
			aNail == aMorph 
				ifFalse: 
					[aMorph formerPosition: aMorph position.
					aNail position: (posBlock value: aNail)].
			^aNail].
	((aMorph isKindOf: MorphThumbnail) 
		and: [(representee := aMorph morphRepresented) owner isNil]) 
			ifTrue: 
				[representee position: (posBlock value: representee).
				^representee].
	self showingListView 
		ifTrue: 
			[^aMorph 
				listViewLineForFieldList: (self valueOfProperty: #fieldListSelectors)].
	(aMorph hasProperty: #newPermanentScript) 
		ifTrue: [^aMorph asEmptyPermanentScriptor].
	((aMorph isPhraseTileMorph) or: [aMorph isSyntaxMorph]) 
		ifFalse: [^aMorph morphToDropInPasteUp: self].
	aMorph userScriptSelector isEmptyOrNil 
		ifTrue: 
			["non-user"

			self automaticPhraseExpansion ifFalse: [^aMorph]].
	^aMorph morphToDropInPasteUp: self! !

!PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'ct 8/20/2020 18:57'!
wantsDroppedTransferMorph: transferMorph

	self hasTransferMorphConverter
		ifTrue: [^ true].
	transferMorph dragTransferType = #filesAndDirectories
		ifTrue: [^ true].
	^ false! !

!PasteUpMorph methodsFor: 'event handling' stamp: 'ct 10/15/2020 18:44'!
dropFiles: filesAndDirectories event: anEvent
	"Handle a number of dropped files from the OS."

	filesAndDirectories do: [ :file |
		self handleDroppedItem: file event: anEvent].! !

!PasteUpMorph methodsFor: 'event handling' stamp: 'ct 10/15/2020 19:32'!
handlesSystemLaunch: anEvent

	^ self isWorldMorph! !

!PasteUpMorph methodsFor: 'event handling' stamp: 'ct 10/15/2020 19:57'!
systemLaunch: anEvent
	"Handle a number of files the singleton VM was called with again. See SystemLaunchEvent comment."

	self flag: #todo. "Do something more useful with the image here, e. g. tell the VM to load it."
	^ self dropFiles: anEvent arguments event: anEvent! !


!PluggableListMorphPlus methodsFor: 'drag and drop' stamp: 'ct 8/20/2020 18:02'!
wantsDroppedMorph: aTransferMorph event: anEvent

	dropItemSelector ifNil: [^ false].
	aTransferMorph isTransferMorph ifFalse: [^ false].
	wantsDropSelector ifNil: [^ true].

	^ model perform: wantsDropSelector withEnoughArguments: {
		aTransferMorph passenger.
		aTransferMorph dragTransferType.
		aTransferMorph source.
		aTransferMorph}! !


!PluggableTreeMorph methodsFor: 'drag and drop' stamp: 'ct 8/20/2020 19:06'!
wantsDroppedMorph: aTransferMorph event: anEvent

	dropItemSelector ifNil: [^ false].
	wantsDropSelector ifNil: [^ true].

	aTransferMorph isTransferMorph ifFalse: [^ false].

	^ model perform: wantsDropSelector withEnoughArguments: {
		aTransferMorph passenger.
		aTransferMorph dragTransferType.
		aTransferMorph source.
		aTransferMorph}! !


!SystemLaunchEvent methodsFor: 'dispatching' stamp: 'ct 10/15/2020 19:30'!
sentTo: anObject

	^ anObject handleSystemLaunch: self! !

!SystemLaunchEvent methodsFor: 'accessing' stamp: 'ct 10/22/2020 19:08'!
arguments
	"A collection of specified image files each represented by a FileStream instance."

	^ arguments! !

!SystemLaunchEvent methodsFor: 'accessing' stamp: 'ct 10/22/2020 19:08'!
position
	"For polymorphy with DropEvents, see HandMorph >> #handleEvent:."

	^ 0 @ 0! !

!SystemLaunchEvent methodsFor: 'accessing' stamp: 'ct 10/22/2020 19:08'!
type

	^ #systemLaunch! !

!SystemLaunchEvent methodsFor: 'accessing' stamp: 'ct 9/2/2020 21:33'!
wasHandled

	^ wasHandled! !

!SystemLaunchEvent methodsFor: 'accessing' stamp: 'ct 9/2/2020 21:33'!
wasHandled: aBoolean

	wasHandled := aBoolean.! !

!SystemLaunchEvent methodsFor: 'initialize-release' stamp: 'ct 10/15/2020 19:57'!
setArguments: filesAndDirectories source: anObject stamp: aString

	arguments := filesAndDirectories.
	self setHand: anObject.
	self setTimeStamp: aString.
	wasHandled := false.! !

!SystemLaunchEvent methodsFor: 'testing' stamp: 'ct 10/22/2020 19:08'!
isDropEvent
	"For polymorphy with DropEvents, see HandMorph >> #handleEvent:."
	
	^ true! !


!TextMorphForEditView methodsFor: 'dropping/grabbing' stamp: 'ct 8/20/2020 19:05'!
wantsDroppedMorph: aMorph event: evt

	^ ((super wantsDroppedMorph: aMorph event: evt)
		and: [aMorph isTransferMorph])
		and: [aMorph passenger isString or: [aMorph passenger isText]]! !


!TransferMorph methodsFor: 'dropping/grabbing' stamp: 'ct 8/20/2020 18:57'!
wantsToBeDroppedInto: aMorph

	^ aMorph isWorldMorph
		ifTrue: [aMorph wantsDroppedTransferMorph: self]
		ifFalse: [super wantsToBeDroppedInto: aMorph]! !

!TransferMorph methodsFor: 'testing' stamp: 'ct 8/19/2020 16:13'!
isTransferMorph

	^ true! !


!TransferMorph class methodsFor: 'miscellaneous' stamp: 'ct 1/18/586455 02:26'!
draggableMorphLabeled: aString

	^ (StringMorph contents: aString)
		color: (self userInterfaceTheme textColor ifNil: [Color black]);
		font: (self userInterfaceTheme font ifNil: [TextStyle defaultFont])
		yourself! !


!Workspace methodsFor: 'drag and drop' stamp: 'ct 8/20/2020 19:06'!
wantsDroppedMorph: dropee event: evt inMorph: target

	^ acceptDroppedMorphs or: [dropee isTransferMorph]
		
! !


!SystemLaunchEvent reorganize!
('dispatching' sentTo:)
('accessing' arguments position type wasHandled wasHandled:)
('initialize-release' setArguments:source:stamp:)
('testing' isDropEvent)
!

PasteUpMorph removeSelector: #dropFiles:!
PasteUpMorph removeSelector: #launchDropFiles:event:!
PasteUpMorph removeSelector: #wantsDropFiles:!

!Morph reorganize!
('accessing' actorStateOrNil actorState: adoptPaneColor: balloonText balloonText: balloonTextSelector balloonTextSelector: beFlap: beSticky beTransparent beUnsticky borderColor borderColor: borderStyle borderStyleForSymbol: borderStyle: borderWidth borderWidthForRounding borderWidth: clearArea color colorForInsets color: couldHaveRoundedCorners defaultNameStemForInstances eventHandler eventHandler: freeAreasInsetBy: freeAreasInsideOf: freeAreasInsideOf:insetBy: hasTranslucentColor highlight highlightColor highlightColor: insetColor isFlap isLocked isShared isSticky lock lock: methodCommentAsBalloonHelp modelOrNil player playerRepresented player: presenter raisedColor regularColor regularColor: rememberedColor rememberedColor: resistsRemoval resistsRemoval: scaleFactor setBorderStyle: sqkPage sticky: toggleLocked toggleResistsRemoval toggleStickiness unHighlight unlock unlockContents url userString viewBox visibleClearArea wantsToBeCachedByHand wantsToBeTopmost)
('accessing - extension' assureExtension extension hasExtension initializeExtension privateExtension: resetExtension)
('accessing - properties' hasProperty: otherProperties removeProperty: setProperties: setProperty:toValue: valueOfProperty: valueOfProperty:ifAbsentPut: valueOfProperty:ifAbsent: valueOfProperty:ifPresentDo:)
('caching' fullLoadCachedState fullReleaseCachedState loadCachedState releaseCachedState)
('change reporting' addedMorph: colorChangedForSubmorph: invalidRect: invalidRect:from: ownerChanged privateInvalidateMorph: userSelectedColor:)
('classification' demandsBoolean isAlignmentMorph isBalloonHelp isCompoundTileMorph isFlapOrTab isFlapTab isFlexMorph isHandMorph isKedamaMorph isModalShell isNumericReadoutTile isPhraseTileMorph isPlayfieldLike isRenderer isSoundTile isStandardViewer isStickySketchMorph isSyntaxMorph isTextMorph isTileMorph isTilePadMorph isViewer isWorldMorph isWorldOrHandMorph)
('connectors-scripting' wantsConnectorVocabulary)
('converting' asDraggableMorph asSnapshotThumbnail)
('copying' copy deepCopy duplicate duplicateMorphCollection: fullCopy updateReferencesUsing: usableSiblingInstance veryDeepCopyWith: veryDeepFixupWith: veryDeepInner:)
('creation' asMorph)
('debug and other' addDebuggingItemsTo:hand: addMouseActionIndicatorsWidth:color: addMouseUpAction addMouseUpActionWith: addViewingItemsTo: allStringsAfter: altSpecialCursor0 altSpecialCursor1 altSpecialCursor2 altSpecialCursor3 altSpecialCursor3: buildDebugMenu: defineTempCommand deleteAnyMouseActionIndicators inspectArgumentsPlayerInMorphic: inspectOwnerChain installModelIn: mouseUpCodeOrNil ownerChain programmedMouseDown:for: programmedMouseEnter:for: programmedMouseLeave:for: programmedMouseUp:for: removeMouseUpAction resumeAfterDrawError resumeAfterEventError resumeAfterStepError tempCommand viewMorphDirectly)
('dispatching' disableSubmorphFocusForHand:)
('drawing' areasRemainingToFill: boundingBoxOfSubmorphs boundsWithinCorners changeClipSubmorphs clipLayoutCells clipLayoutCells: clippingBounds clipSubmorphs clipSubmorphs: doesOwnRotation drawDropHighlightOn: drawDropShadowOn: drawErrorOn: drawKeyboardFocusIndicationOn: drawMouseDownHighlightOn: drawOn: drawOverlayOn: drawRolloverBorderOn: drawSubmorphsOn: expandFullBoundsForDropShadow: expandFullBoundsForRolloverBorder: flashBounds fullDrawOn: hasClipSubmorphsString hide highlightedForMouseDown highlightForMouseDown highlightForMouseDown: imageForm imageFormDepth: imageFormForRectangle: imageFormWithout:andStopThere: imageForm:backgroundColor:forRectangle: imageForm:forRectangle: keyboardFocusColor keyboardFocusWidth refreshWorld shadowForm show updateDropShadowCache visible visible:)
('drop shadows' addDropShadow addDropShadowMenuItems:hand: changeShadowColor hasDropShadow hasDropShadowString hasDropShadow: hasRolloverBorder hasRolloverBorder: removeDropShadow setShadowOffset: shadowColor shadowColor: shadowOffset shadowOffset: shadowPoint: toggleDropShadow useSoftDropShadow useSoftDropShadow:)
('dropping/grabbing' aboutToBeGrabbedBy: acceptDroppingMorph:event: disableDragNDrop dragEnabled dragEnabled: dragNDropEnabled dragSelectionColor dropEnabled dropEnabled: dropHighlightColor dropSuccessColor enableDragNDrop enableDragNDrop: enableDrag: enableDrop: formerOwner formerOwner: formerPosition formerPosition: grabTransform handledOwnDraggingBy:on: highlightedForDrop highlightForDrop highlightForDrop: justDroppedInto:event: justGrabbedFrom: morphToDropInPasteUp: nameForUndoWording rejectDropMorphEvent: repelsMorph:event: resetHighlightForDrop separateDragAndDrop slideBackToFormerSituation: slideToTrash: startDrag:with: transportedMorph undoGrabCommand vanishAfterSlidingTo:event: wantsDroppedMorph:event: wantsToBeDroppedInto: wantsToBeOpenedInWorld willingToBeDiscarded)
('event handling' click click: cursorPoint doubleClickTimeout: doubleClick: dropFiles: firstClickTimedOut: handlerForMouseDown: handlerForYellowButtonDown: handlesKeyboard: handlesKeyboardOnlyOnFocus handlesKeyboardOnlyOnFocus: handlesMouseDown: handlesMouseMove: handlesMouseOverDragging: handlesMouseOver: handlesMouseStillDown: handlesMouseWheel: handlesSystemLaunch: hasFocus hasKeyboardFocus hasKeyboardFocus: hasMouseFocus hasMouseFocus: keyboardFocusChange: keyDown: keyStroke: keyUp: keyboardFocusDelegate mouseDown: mouseEnterDragging: mouseEnter: mouseLeaveDragging: mouseLeave: mouseMove: mouseStillDownThreshold mouseStillDown: mouseUp: mouseWheel: moveOrResizeFromKeystroke: on:send:to: on:send:to:withValue: removeLink: restoreSuspendedEventHandler startDrag: suspendEventHandler systemLaunch: tabAmongFields transformFromOutermostWorld transformFromWorld transformFrom: wantsDropFiles: wantsEveryMouseMove wantsKeyboardFocus wantsKeyboardFocusFor: wantsWindowEvents: windowEvent: wouldAcceptKeyboardFocus wouldAcceptKeyboardFocusUponTab yellowButtonActivity:)
('events-accessing' actionMap updateableActionMap)
('events-alarms' addAlarm:after: addAlarm:at: addAlarm:withArguments:after: addAlarm:withArguments:at: addAlarm:with:after: addAlarm:with:at: addAlarm:with:with:after: addAlarm:with:with:at: alarmScheduler removeAlarm: removeAlarm:at: removeAlarms)
('events-processing' containsPoint:event: defaultEventDispatcher handleDropFiles: handleDropMorph: handleEvent: handleFocusEvent: handleKeyDown: handleKeyUp: handleKeystroke: handleListenEvent: handleMouseDown: handleMouseEnter: handleMouseLeave: handleMouseMove: handleMouseOver: handleMouseStillDown: handleMouseUp: handleMouseWheel: handleSystemLaunch: handleUnknownEvent: handleWindowEvent: mouseDownPriority mouseDownPriority: processEvent: processEvent:using: processFocusEvent: processFocusEvent:using: rejectDropEvent: rejectsEvent: sendFilterEvent:for:to: sendFilterEventBubble:for: sendFilterEventBubbleAgain:for: sendFilterEventCapture:for: sendFilterEventCaptureAgain:for: transformedFrom:)
('events-removing' releaseActionMap)
('fileIn/out' attachToResource prepareToBeSaved reserveUrl: saveAsResource saveDocPane saveOnFile saveOnURL saveOnURLbasic saveOnURL: updateAllFromResources updateFromResource)
('filter streaming' drawOnCanvas:)
('geometry' absolutePointAt: bottom bottomCenter bottomLeft bottomLeft: bottomRight bottomRight: bottom: bounds bounds: center center: extent height height: left leftCenter left: position position: right rightCenter right: top topCenter topLeft topLeft: topRight topRight: top: width width:)
('geometry testing' containsPoint: fullContainsPoint: obtrudesBeyondContainer)
('halos and balloon help' addHalo addHalo: addHalo:from: addHandlesTo:box: addMagicHaloFor: addOptionalHandlesTo:box: addSimpleHandlesTo:box: addWorldHandlesTo:box: balloonColor balloonColor: balloonFont balloonFont: balloonHelpAligner balloonHelpDelayTime balloonHelpTextForHandle: balloonMorphClass boundsForBalloon comeToFrontAndAddHalo createHalo defaultBalloonColor defaultBalloonFont defersHaloOnClickTo: deleteBalloon editBalloonHelpContent: editBalloonHelpText halo haloClass haloDelayTime hasHalo hasHalo: isLikelyRecipientForMouseOverHalos mouseDownOnHelpHandle: noHelpString okayToAddDismissHandle okayToAddGrabHandle okayToBrownDragEasily okayToExtractEasily okayToResizeEasily okayToRotateEasily preferredDuplicationHandleSelector removeHalo setBalloonText: setBalloonText:maxLineLength: setCenteredBalloonText: showBalloon showBalloon: showBalloon:at: showBalloon:hand: transferHalo:from: wantsBalloon wantsDirectionHandles wantsDirectionHandles: wantsHalo wantsHaloFor: wantsHaloFromClick wantsHaloFromClick: wantsHaloHandleWithSelector:inHalo: wantsScriptorHaloHandle wantsSimpleSketchMorphHandles)
('initialization' basicInitialize defaultBounds defaultColor inAScrollPane initialize intoWorld: openAsIsIn: openCenteredInWorld openInHand openInWindow openInWindowLabeled: openInWindowLabeled:inWorld: openInWorld openInWorld: openNear: openNear:in: openNearMorph: outOfWorld: resourceJustLoaded standardPalette wrapIntoWindowLabeled:inWorld:)
('layout' adjustLayoutBounds adjustTo:in: checkCellSpacingProperty: checkListSpacingProperty: checkResizingProperty: doLayoutIn: fullBounds layoutChanged layoutComputed layoutInBounds: layoutInBounds:positioning: layoutProportionallyIn: layoutProportionallyInBounds:positioning: minExtent minExtent: minHeight minHeight: minWidth minWidth: privateFullBounds privateFullBoundsForRedraw setExtentFromLayout: setLayoutBoundsFromLayout: setPositionFromLayout: submorphBounds submorphBoundsForShrinkWrap)
('layout-menu' addCellLayoutMenuItems:hand: addLayoutMenuItems:hand: addTableLayoutMenuItems:hand: changeCellGap: changeCellInset: changeClipLayoutCells changeDisableTableLayout changeHeightForWidth changeLayoutInset: changeListDirection: changeMaxCellSize: changeMinCellSize: changeNoLayout changeProportionalLayout changeReverseCells changeRubberBandCells changeTableLayout changeWidthForHeight changesHeightForWidth changesWidthForHeight hasClipLayoutCellsString hasDisableTableLayoutString hasNoLayoutString hasProportionalLayoutString hasReverseCellsString hasRubberBandCellsString hasTableLayoutString layoutMenuPropertyString:from:)
('layout-properties' assureLayoutProperties assureTableProperties cellGap cellGap: cellInset cellInset: cellPositioning cellPositioningString: cellPositioning: cellSpacing cellSpacingString: cellSpacing: copyLayoutProperties disableLayout disableLayout: disableTableLayout disableTableLayout: hResizing hResizingString: hResizing: layoutFrame layoutFrame: layoutInset layoutInset: layoutPolicy layoutPolicy: layoutProperties layoutProperties: listCentering listCenteringString: listCentering: listDirection listDirectionString: listDirection: listSpacing listSpacingString: listSpacing: maxCellSize maxCellSize: minCellSize minCellSize: reverseTableCells reverseTableCells: rubberBandCells rubberBandCells: spaceFillWeight spaceFillWeight: vResizeToFit: vResizing vResizingString: vResizing: wrapCentering wrapCenteringString: wrapCentering: wrapDirection wrapDirectionString: wrapDirection:)
('macpal' flash)
('menu' addBorderStyleMenuItems:hand: addGestureMenuItems:hand: addGraphModelYellowButtonItemsTo:event: addModelYellowButtonItemsTo:event: addMyYellowButtonMenuItemsToSubmorphMenus addNestedYellowButtonItemsTo:event: addTitleForHaloMenu: addYellowButtonMenuItemsTo:event: buildYellowButtonMenu: hasYellowButtonMenu offerCostumeViewerMenu: outermostOwnerWithYellowButtonMenu startWiring wantsMetaMenu wantsMetaMenu: wantsYellowButtonMenu wantsYellowButtonMenu:)
('menus' absorbStateFromRenderer: addAddHandMenuItemsForHalo:hand: addCopyItemsTo: addCustomHaloMenuItems:hand: addCustomMenuItems:hand: addExportMenuItems:hand: addFillStyleMenuItems:hand: addHaloActionsTo: addMiscExtrasTo: addPaintingItemsTo:hand: addStandardHaloMenuItemsTo:hand: addToggleItemsToHaloMenu: addWorldTargetSightingItems:hand: adhereToEdge adhereToEdge: adjustedCenter adjustedCenter: allMenuWordings changeColor changeDirectionHandles changeDrag changeDragAndDrop changeDrop chooseNewGraphic chooseNewGraphicCoexisting: chooseNewGraphicFromHalo collapse defaultArrowheadSize doMenuItem: exploreInMorphic exploreInMorphic: exportAsBMP exportAsBMPNamed: exportAsGIF exportAsGIFNamed: exportAsJPEG exportAsJPEGNamed: exportAsPNG exportAsPNGNamed: hasDirectionHandlesString hasDragAndDropEnabledString hasDragEnabledString hasDropEnabledString helpButton inspectInMorphic inspectInMorphic: lockedString lockUnlockMorph makeNascentScript maybeAddCollapseItemTo: menuItemAfter: menuItemBefore: model presentHelp reasonableBitmapFillForms reasonableForms resetForwardDirection resistsRemovalString setArrowheads setRotationCenter setRotationCenterFrom: setToAdhereToEdge: snapToEdgeIfAppropriate stickinessString transferStateToRenderer: uncollapseSketch)
('meta-actions' addEmbeddingMenuItemsTo:hand: applyStatusToAllSiblings: beThisWorldsModel bringAllSiblingsToMe: buildHandleMenu: buildMetaMenu: changeColorTarget:selector:originalColor:hand: copyToPasteBuffer: dismissMorph dismissMorph: duplicateMorphImage: duplicateMorph: embedInto: grabMorph: indicateAllSiblings inspectAt:event: invokeHaloOrMove: invokeMetaMenuAt:event: invokeMetaMenu: makeMultipleSiblings: makeNewPlayerInstance: makeSiblingsLookLikeMe: makeSiblings: maybeDuplicateMorph maybeDuplicateMorph: openAPropertySheet openATextPropertySheet potentialEmbeddingTargets potentialTargets potentialTargetsAt: resizeFromMenu resizeMorph: saveAsPrototype showActions showHiders sightTargets: sightWorldTargets: subclassMorph targetFromMenu: targetWith:)
('miscellaneous' roundUpStrays setExtentFromHalo: setFlexExtentFromHalo:)
('naming' downshiftedNameOfObjectRepresented innocuousName nameForFindWindowFeature nameInModel nameOfObjectRepresented name: setNamePropertyTo: setNameTo: specialNameInModel tryToRenameTo: updateAllScriptingElements)
('objects from disk' objectForDataStream: storeDataOn:)
('other events' menuButtonMouseEnter: menuButtonMouseLeave:)
('parts bin' initializeToStandAlone inPartsBin isPartsBin isPartsDonor isPartsDonor: markAsPartsDonor partRepresented residesInPartsBin)
('printing' clipText colorString: constructorString fullPrintOn: initString morphReport morphReportFor: morphReportFor:on:indent: pagesHandledAutomatically printConstructorOn:indent: printConstructorOn:indent:nodeDict: printOn: printSpecs printSpecs: printStructureOn:indent: reportableSize structureString textToPaste)
('rotate scale and flex' addFlexShell addFlexShellIfNecessary ensureFlexShell forwardDirection forwardDirection: heading heading: keepsTransform newTransformationMorph referencePosition referencePosition: referencePositionInWorld referencePositionInWorld: removeFlexShell rotationCenter rotationCenter: rotationDegrees rotationDegrees: setDirectionFrom:)
('rounding' cornerRadius cornerRadius: cornerStyle cornerStyle: roundedCorners roundedCornersString toggleCornerRounding wantsRoundedCorners)
('stepping and presenter' arrangeToStartStepping arrangeToStartSteppingIn: isStepping isSteppingSelector: start startStepping startSteppingIn: startSteppingSelector: startStepping:at:arguments:stepTime: step stepAt: stepTime stop stopStepping stopSteppingSelector: stopSteppingSelfAndSubmorphs wantsSteps)
('structure' activeHand allOwners allOwnersDo: containingWindow firstOwnerSuchThat: hasOwner: isInDockingBar isInSystemWindow isInWorld morphPreceding: nearestOwnerThat: orOwnerSuchThat: outermostMorphThat: outermostWorldMorph owner ownerThatIsA: ownerThatIsA:orA: pasteUpMorph pasteUpMorphHandlingTabAmongFields primaryHand renderedMorph root rootAt: topPasteUp topRendererOrSelf withAllOwners withAllOwnersDo: world)
('submorphs-accessing' allKnownNames allMorphs allMorphsDo: allNonSubmorphMorphs allSubmorphNamesDo: dockingBars findA: findDeeplyA: findDeepSubmorphThat:ifAbsent: findSubmorphBinary: firstSubmorph gatherMorphsThat:fromMorphsThat: hasSubmorphs hasSubmorphWithProperty: indexOfMorphAbove: lastSubmorph mainDockingBars morphsAt: morphsAt:behind:unlocked: morphsAt:unlocked: morphsAt:unlocked:do: morphsInFrontOf:overlapping:do: morphsInFrontOverlapping: morphsInFrontOverlapping:do: noteNewOwner: rootMorphsAtGlobal: rootMorphsAt: shuffleSubmorphs submorphAfter submorphBefore submorphCount submorphNamed: submorphNamed:ifNone: submorphOfClass: submorphs submorphsBehind:do: submorphsDo: submorphsInFrontOf:do: submorphsReverseDo: submorphsSatisfying: submorphThat:ifNone: submorphWithProperty:)
('submorphs-add/remove' abandon actWhen actWhen: addAllMorphs: addAllMorphs:after: addAllMorphs:behind: addAllMorphs:inFrontOf: addAllMorphsBack: addAllMorphsFront: addMorph:spec: addMorphBack: addMorphCentered: addMorphFrontFromWorldPosition: addMorphFront: addMorphFront:fromWorldPosition: addMorphNearBack: addMorph: addMorph:after: addMorph:asElementNumber: addMorph:behind: addMorph:fullFrame: addMorph:inFrontOf: allMorphsWithPlayersDo: comeToFront copyWithoutSubmorph: delete deleteDockingBars deleteSubmorphsWithProperty: deleteUnlessHasFocus dismissViaHalo fillWith:of:onOverflow: goBehind privateDelete removeAllMorphs removeAllMorphsIn: removedMorph: removeMorph: replaceSubmorph:by: submorphIndexOf:)
('testing' canDrawAtHigherResolution canDrawBorder: completeModificationHash couldMakeSibling indicateKeyboardFocus isDockingBar isFlexed isFullOnScreen isImageMorph isLineMorph isMenuItemMorph isMorph isPluggableButtonMorph isSafeToServe isSelectionMorph isSketchMorph isTransferMorph knownName modificationHash renameInternal: renameTo: shouldDropOnMouseUp wantsToBeWindow)
('text-anchor' addTextAnchorMenuItems:hand: asTextAnchor textAnchorProperties)
('thumbnail' demandsThumbnailing icon iconOrThumbnail iconOrThumbnailOfSize: morphRepresented permitsThumbnailing readoutForField: representativeNoTallerThan:norWiderThan:thumbnailHeight: thumbnail updateThumbnailUrl updateThumbnailUrlInBook:)
('undo' commandHistory undoMove:redo:owner:bounds:predecessor:)
('updating' applyUserInterfaceTheme changed)
('user interface' defaultLabelForInspector doCancel initialExtent)
('viewer' externalName)
('visual properties' canApplyUserInterfaceTheme canHaveFillStyles defaultBitmapFillForm fillStyle fillStyle: fillWithRamp:oriented: useBitmapFill useDefaultFill useGradientFill useSolidFill)
('WiW support' addMorphInFrontOfLayer: addMorphInLayer: eToyRejectDropMorph:event: morphicLayerNumber morphicLayerNumberWithin: randomBoundsFor: setErrorOnStep shouldGetStepsFrom:)
('*MorphicExtras-geometry' shiftSubmorphsBy:)
('*MorphicExtras-menus' dismissButton printPSToFileNamed:)
('*services-base' requestor)
('private' canBeEncroached privateAddAllMorphs:atIndex: privateAddMorph:atIndex: privateBounds: privateColor: privateDeleteWithAbsolutelyNoSideEffects privateFullBounds: privateFullMoveBy: privateOwner: privateRemoveMorphWithAbsolutelyNoSideEffects: privateRemove: privateSubmorphs privateSubmorphs:)
('accessing-backstop' target:)
('e-toy support' adaptToWorld: allMorphsAndBookPagesInto: asNumber: automaticViewing currentPlayerDo: cursor cursor: decimalPlacesForGetter: defaultValueOrNil embeddedInMorphicWindowLabeled: embedInWindow getNumericValue gridFormOrigin:grid:background:line: handUserASibling isAViewer isTileEditor makeGraphPaper makeGraphPaperGrid:background:line: mustBeBackmost noteDecimalPlaces:forGetter: objectViewed referencePlayfield rotationStyle rotationStyle: setAsActionInButtonProperties: setNumericValue: setStandardTexture textureParameters unlockOneSubpart updateCachedThumbnail wantsRecolorHandle wrappedInWindowWithTitle: wrappedInWindow:)
('geniestubs' allowsGestureStart: isGestureStart: mouseStillDownStepRate redButtonGestureDictionaryOrName: yellowButtonGestureDictionaryOrName:)
('*morphic-Postscript Canvases' asPostscript clipPostscript drawPostscriptOn: fullDrawPostscriptOn: printPSToFile)
('player' assureExternalName okayToDuplicate shouldRememberCostumes)
('player commands' playSoundNamed:)
('button' doButtonAction)
('model access' models)
('player viewer' openViewerForArgument)
('other' removeAllButFirstSubmorph)
('selected object' selectedObject)
('polymorph' modalLockTo: modalUnlockFrom: openModal:)
('*Etoys-card in a stack' abstractAModel addStackItemsTo: assuredCardPlayer beAStackBackground becomeSharedBackgroundField containsCard: couldHoldSeparateDataForEachInstance currentDataInstance currentDataValue explainDesignations goToNextCardInStack goToPreviousCardInStack holdsSeparateDataForEachInstance insertAsStackBackground insertCard installAsCurrent: isStackBackground makeHoldSeparateDataForEachInstance newCard reassessBackgroundShape relaxGripOnVariableNames reshapeBackground setAsDefaultValueForNewCard showBackgroundObjects showDesignationsOfObjects showForegroundObjects stack stackDo: stopHoldingSeparateDataForEachInstance tabHitWithEvent: variableDocks wrapWithAStack)
('*Etoys' accumlatePlayersInto:andSelectorsInto: actorState addPlayerItemsTo: assuredPlayer boundsSignatureHash categoriesForViewer choosePenColor: choosePenSize currentVocabulary ensuredButtonProperties forward: getPenColor getPenDown getPenSize isPlayer:ofReferencingTile: isTurtleRow liftPen lowerPen moveWithPenDownBy: newPlayerInstance penColor: penUpWhile: putOnBackground putOnForeground scriptPerformer selectorsForViewer selectorsForViewerIn: showPlayerMenu trailMorph traverseRowTranslateSlotOld:of:to: traverseRowTranslateSlotOld:to: turn: understandsBorderVocabulary unfilteredCategoriesForViewer)
('*Etoys-support' adoptVocabulary: affiliatedSelector appearsToBeSameCostumeAs: asWearableCostume asWearableCostumeOfExtent: beep: buttonProperties buttonProperties: changeAllBorderColorsFrom:to: configureForKids copyCostumeStateFrom: creationStamp defaultVariableName definePath deletePath enclosingEditor enforceTileColorPolicy fenceEnabled fire firedMouseUpCode followPath getCharacters handMeTilesToFire hasButtonProperties isCandidateForAutomaticViewing jumpTo: listViewLineForFieldList: makeFenceSound noteNegotiatedName:for: pinkXButton restoreBaseGraphic set: slotSpecifications succeededInRevealing: tanOButton topEditor updateLiteralLabel)
('*Etoys-scripting' arrowDeltaFor: asEmptyPermanentScriptor bringTileScriptingElementsUpToDate bringUpToDate defaultFloatPrecisionFor: filterViewerCategoryDictionary: isTileLike isTileScriptingElement jettisonScripts makeAllTilesColored makeAllTilesGreen restoreTypeColor scriptEditorFor: tearOffTile triggerScript: useUniformTileColor viewAfreshIn:showingScript:at: wantsConnectionVocabulary)
('*Etoys-customevents-scripting' instantiatedUserScriptsDo: removeAllEventTriggers removeAllEventTriggersFor: removeEventTrigger: removeEventTrigger:for: renameScriptActionsFor:from:to: triggerCustomEvent: triggerEtoyEvent: triggerEtoyEvent:from:)
('*Etoys-geometry' addTransparentSpacerOfSize: cartesianBoundsTopLeft cartesianXY: color:sees: colorUnder getIndexInOwner goHome move:toPosition: scale: scaleFactor: setIndexInOwner: simplySetVisible: touchesColor: transparentSpacerOfSize: wrap x x: x:y: y y:)
('*Etoys-latter day support' isEtoyReadout)
('*MorphicExtras-postscript' asEPS asPostscriptPrintJob exportAsEPS exportAsEPSNamed:)
('*Morphic-Sound-piano rolls' addMorphsTo:pianoRoll:eventTime:betweenTime:and: encounteredAtTime:inScorePlayer:atIndex:inEventTrack:secsPerTick: justDroppedIntoPianoRoll:event: pauseFrom: resetFrom: resumeFrom: triggerActionFromPianoRoll)
('*MorphicExtras' nextOwnerPage previousOwnerPage)
('events-filtering-bubbling' addEventBubbleFilter: addKeyboardBubbleFilter: addMouseBubbleFilter: eventBubbleFilters eventBubbleFilters: keyboardBubbleFilters keyboardBubbleFilters: mouseBubbleFilters mouseBubbleFilters: removeEventBubbleFilter: removeKeyboardBubbleFilter: removeMouseBubbleFilter:)
('events-filtering-capturing' addEventCaptureFilter: addKeyboardCaptureFilter: addMouseCaptureFilter: eventCaptureFilters eventCaptureFilters: keyboardCaptureFilters keyboardCaptureFilters: mouseCaptureFilters mouseCaptureFilters: removeEventCaptureFilter: removeKeyboardCaptureFilter: removeMouseCaptureFilter:)
('events-filtering' addFilter:to: eventFilterDocumentation removeFilter:from:)
('*Etoys-Squeakland-halo notification' aboutToBeBrownDragged aboutToBeGrownViaHalo aboutToBeRotatedViaHalo aboutToBeScaledViaHalo brownDragConcluded growConcluded rotationConcluded scaleConcluded)
('*Etoys-Squeakland-menu & halo' addLockingItemsTo: menuButton offerMenu)
('*Etoys-Squeakland-WiW support' addMorphInLayer:centeredNear:)
('*Etoys-Squeakland-geometry' boundsInStagingArea collapsible spanContainerVertically: stagingArea)
('*Etoys-Squeakland-Etoys-SpeechBubbles' bubble bubble: say: sayGraphic: sayObject: showGraphic:inBubbleType: showMessage:inBubbleType: showObject:inBubbleType: stopSayingOrThinking think: thinkGraphic: thinkObject:)
('*Etoys-Squeakland-meta-actions' changeColorSimply changeColorTarget:selector:originalColor:hand:showPalette: embedEnabled openAppropriatePropertySheet showEmbedMenu targetFromMenu:popupAt:)
('*Etoys-Squeakland-visual properties' changeGraphPaper useGraphPaperFill)
('*Etoys-Squeakland-e-toy support' chosenColor: enclosingTestTile fixLayoutOfSubmorphs hideWillingnessToAcceptDropFeedback outmostScriptEditor putUpGraphPaperPanel removeViewersOnSubsIn: showWillingnessToAcceptDropFeedback unembedSubmorphsInWindow)
('*Etoys-Squeakland-accessing - extension' convertExtension)
('*Etoys-Squeakland-object fileIn' convertNovember2000DropShadow:using:)
('*Etoys-Squeakland-accessing' deepSubpartNamed: eventRoll)
('*Etoys-Squeakland-classification' defersHaloToInterior defersHaloToInteriorMorph: fontsForText)
('*Etoys-Squeakland-misc' doesColorAndBorder)
('*Etoys-Squeakland-display' editMenuButtonDefinition)
('*Etoys-Squeakland-latter day support' encouragesHaloTransferToEnclosedPasteUpMorph)
('*Etoys-Squeakland-viewing' establishGraphPaperFrom:)
('*Etoys-Squeakland-miscellaneous' finalTilePadSubmorph)
('*Etoys-Squeakland-other' fixUpCarets)
('*Etoys-Squeakland-debug and other' inspectMorphsProperties)
('*Etoys-Squeakland-layout' justAddedAsTileRow)
('*Etoys-Squeakland-drop outside' mimeTypes)
('*Etoys-Squeakland-initialization' naviHeight: openInWorldOrWorldlet openNearTopLeftOfScreen)
('*Etoys-Squeakland-submorphs-accessing' ownerSatisfying:)
('*Etoys-Squeakland-event roll' putEventsOnto: suitableForDroppingIntoEventRoll)
('*Etoys-Squeakland-structure' referenceWorld referenceWorldViaOwnwer)
('*Etoys-Squeakland-dropping/grabbing' repelEnabledForMorph:)
('*Etoys-Squeakland-geometry eToy')
('*Etoys-Squeakland-fileIn/out' saveOnFile:)
('*Etoys-Squeakland-translation' traverseSearchForKedamaTurtleIfFound:)
('*Etoys-Squeakland-testing' isButton wantsGraphPaperAlternative)
('*60Deprecated-user-interface' becomeModal)
('*ToolBuilder-Morphic-opening' buildWith: openAsTool)
('*60Deprecated-meta-actions' blueButtonDown: blueButtonUp: handlerForBlueButtonDown: handlerForMetaMenu:)
('*60Deprecated-accessing' doesBevels)
('*60Deprecated-MorphicExtras-accessing' highlightOnlySubmorph:)
('*Squot-trackable' squotInitializeStoreInfo:)
('*signals-morphic' emitInOwnerChain emitSignalInOwnerChain:arguments:sender: sgConnectSignal:to:selector: sgConnectSignal:to:selector:pattern: sgConnectSignal:toSelector: sgConnectSignal:toSelector:pattern: sgDisconnectSignal:from:selector: sgDisconnectSignal:fromSelector: signalConnectionsForOwnerChain)
('*animations-core' animations fullDrawAnimatedOn: hasAnimationRunning ignoresColorMappings ignoresColorMappings: redraw redrawLater transformedCanvasFrom:)
('*animations-support' compositeAnimations darkenAnimation)
('*animations-examples' darken fadeIn fadeInThen: fadeOut fadeOutThen: lighten pulse walkToPosition: warpToPosition:)
('*animations-control' deleteAnimations pauseAnimations resumeAnimations stopAnimations)
('*widgets-signals-processing' disconnectAllSignals hasSignalConnections signalConnections signalMutex)
('*widgets-events' enabled enabled: grabKeyboard grabMouse keyboardFocusChange:inSubmorph: releaseKeyboard releaseMouse)
('*widgets-geometry-override' extent: privateMoveBy:)
('*widgets-signals' extentChanged: positionChanged:)
('*widgets' frameFractions frameFractions: frameOffsets frameOffsets: fullDrawCacheOn: hideFull isTransformMorph isUiContainer showFull)
('*widgets-events-testing' hasAnyKeyboard hasKeyboard hasMouse hasSubmorphKeyboard)
('*widgets-geometry' visibleBounds)
('*60Deprecated-dropping/grabbing' toggleDragNDrop)
('*vivide-layout' boundsInOwner: edgeCell edgeCell: edgeCellPositioning edgeCellPositioning: edgeSide edgeSide: extentInOwner: gridCell gridCell: gridSpan gridSpan: topLeftInOwner: updateCellPositioningForEdge)
('*vivide' ide isOverlayConnector isPane isPaneView showFlash showFlashCross showFlashMini)
('*vivide-morphic' fastFramingOn shrinkWrap)
('geometry - misc' align:with: fitIntoExtent: gridPoint: griddedPoint: positionSubmorphs setConstrainedPosition:hangOut: shiftSubmorphsOtherThan:by: transformedBy: worldBounds worldBoundsForHalo)
('*MorphicTestingFramework' asMorphWrapper)
('geometry - local/global' bounds:from: bounds:in: boundsIn: boundsInWorld fullBoundsInWorld globalPointToLocal: intersects: localPointToGlobal: point:from: point:in: pointFromWorld: pointInWorld: positionInWorld)
('geometry - layout' innerBounds innerBounds: innerExtent innerExtent: innerPosition innerPosition: layoutBounds layoutBounds: layoutExtent layoutExtent: layoutPosition layoutPosition: minimumExtent minimumExtent: minimumHeight minimumHeight: minimumWidth minimumWidth: outerBounds outerBounds: outerExtent outerExtent: outerPosition outerPosition:)
('geometry - etoys' overlapsShadowForm:bounds: screenLocation screenRectangle)
('*XmasDecorations' drawXmasDecorationsOn:)
('*XmasDecorations-events-alarms')
('*XmasDecorations-windows' xmasDrawRoofOn: xmasRoofForm xmasShouldCoverRoof)
('*60Deprecated-text-anchor' changeDocumentAnchor changeInlineAnchor changeParagraphAnchor hasDocumentAnchorString hasInlineAnchorString hasParagraphAnchorString relativeTextAnchorPosition relativeTextAnchorPosition: textAnchorType textAnchorType:)
('*Multilingual-ImmPlugin')
('Multilingual-ImmPlugin' preferredKeyboardBounds preferredKeyboardPosition)
('*60Deprecated-rotate scale and flex' degreesOfFlex)
('*60Deprecated-initialization' inATwoWayScrollPane)
('*Pheno-Styles' addStyleClass: addStyleClasses: assureWidgetParent isWidget styleContext)
('*Rack-UI' openRackStandardMorph worldIconMorph worldIconText)
('as yet unclassified' justDropped:into:event: resumeAfterError)
('*ToolBuilder-Morphic' inspectorClass)
!

"Postscript:
Leave the line above, and replace the rest of this comment by a useful one.
Executable statements should follow this comment, and should
be separated by periods, with no exclamation points (!!).
Be sure to put any further comments in double-quotes, like this one."
!

