'From etoys2.2 of 16 November 2007 [latest update: #1793] on 3 December 2007 at 1:40:24 am'! "Change Set: asyncXdnd-tak Date: 3 December 2007 Author: Takashi Yamamiya Serialize DnD data asynchronously using EventTypeDragDropFiles. This change set fix a but that you can't drag a morph to another window which overlaps on Squeak's window. This change set only works with Takashi's experimental VM http://squeakvm.org/svn/squeak/branches/takashi-branch/ Revision 1793 I'll merge it to olpc trunc soon. It shoud not harm on other VM, just dnd is ignored. "! !Morph methodsFor: 'drop outside' stamp: 'tak 12/2/2007 20:10'! mimeTypes "Supported mime types for drag out" ^ #('image/png')! ! !HandMorph methodsFor: 'events-processing' stamp: 'tak 12/1/2007 23:35'! handleEvent: anEvent | evt ofs | owner ifNil:[^self]. evt _ anEvent. EventStats ifNil:[EventStats _ IdentityDictionary new]. EventStats at: #count put: (EventStats at: #count ifAbsent:[0]) + 1. EventStats at: evt type put: (EventStats at: evt type ifAbsent:[0]) + 1. evt isMouseOver ifTrue:[^self sendMouseEvent: evt]. ShowEvents == true ifTrue:[ Display fill: (0@0 extent: 250@120) rule: Form over fillColor: Color white. ofs _ (owner hands indexOf: self) - 1 * 60. evt printString displayAt: (0@ofs) + (evt isKeyboard ifTrue:[0@30] ifFalse:[0@0]). self keyboardFocus printString displayAt: (0@ofs)+(0@45). ]. "Notify listeners" self sendListenEvent: evt to: self eventListeners. evt isWindowEvent ifTrue: [ self sendEvent: evt focus: nil. ^self mouseOverHandler processMouseOver: lastMouseEvent]. evt isKeyboard ifTrue:[ self sendListenEvent: evt to: self keyboardListeners. self sendKeyboardEvent: evt. ^self mouseOverHandler processMouseOver: lastMouseEvent]. evt isDropEvent ifTrue:[ self sendEvent: evt focus: nil. ^self mouseOverHandler processMouseOver: lastMouseEvent]. evt isMouse ifTrue:[ self sendListenEvent: evt to: self mouseListeners. lastMouseEvent _ evt]. "Check for pending drag or double click operations." mouseClickState ifNotNil:[ (mouseClickState handleEvent: evt from: self) ifFalse:[ "Possibly dispatched #click: or something and will not re-establish otherwise" ^self mouseOverHandler processMouseOver: lastMouseEvent]]. evt isMove ifTrue:[ self position: evt position. self sendMouseEvent: evt. ] ifFalse:[ "Issue a synthetic move event if we're not at the position of the event" (evt position = self position) ifFalse:[self moveToEvent: evt]. "Drop submorphs on button events" (self hasSubmorphs) ifTrue:[self dropMorphs: evt] ifFalse:[self sendMouseEvent: evt]. ]. ShowEvents == true ifTrue:[self mouseFocus printString displayAt: (0@ofs) + (0@15)]. self mouseOverHandler processMouseOver: lastMouseEvent. ! ! !HandMorph methodsFor: 'grabbing/dropping' stamp: 'tak 12/1/2007 23:22'! dropMorphs: anEvent "Drop the morphs at the hands position" self handleDropOutMorph: self submorphs first. self submorphsReverseDo:[:m| "Drop back to front to maintain z-order" self dropMorph: m event: anEvent. ].! ! !HandMorph methodsFor: 'grabbing/dropping' stamp: 'tak 12/1/2007 23:06'! grabMorph: aMorph from: formerOwner "Grab the given morph (i.e., add it to this hand and remove it from its current owner) without changing its position. This is used to pick up a morph under the hand's current position, versus attachMorph: which is used to pick up a morph that may not be near this hand." | grabbed offset targetPoint grabTransform fullTransform | self releaseMouseFocus. "Break focus" grabbed _ aMorph. aMorph keepsTransform ifTrue:[ grabTransform _ fullTransform _ IdentityTransform new. ] ifFalse:[ "Compute the transform to apply to the grabbed morph" grabTransform _ formerOwner ifNil: [IdentityTransform new] ifNotNil: [formerOwner grabTransform]. "Compute the full transform for the grabbed morph" fullTransform _ formerOwner ifNil: [IdentityTransform new] ifNotNil: [formerOwner transformFrom: owner]. ]. "targetPoint is point in aMorphs reference frame" targetPoint _ fullTransform globalPointToLocal: self position. "but current position will be determined by grabTransform, so compute offset" offset _ targetPoint - (grabTransform globalPointToLocal: self position). "apply the transform that should be used after grabbing" grabbed _ grabbed transformedBy: grabTransform. grabbed == aMorph ifFalse: [grabbed setProperty: #addedFlexAtGrab toValue: true]. "offset target to compensate for differences in transforms" grabbed position: grabbed position - offset asIntegerPoint. "And compute distance from hand's position" targetOffset _ grabbed position - self position. self addMorphBack: grabbed. grabbed justGrabbedFrom: formerOwner. self dragOutStart: grabbed! ! !HandMorph methodsFor: 'private events' stamp: 'tak 12/2/2007 20:01'! generateDropFilesEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" "Note: This is still in an experimental phase and will need more work" | position buttons modifiers stamp numFiles dragType | stamp := evtBuf second. stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. dragType := evtBuf third. position := evtBuf fourth @ evtBuf fifth. buttons := 0. modifiers := evtBuf sixth. buttons := buttons bitOr: (modifiers bitShift: 3). numFiles := evtBuf seventh. dragType = 4 ifTrue: ["e.g., drop" owner borderWidth: 0. ^DropFilesEvent new setPosition: position contents: numFiles hand: self]. "the others are currently not handled by morphs themselves" dragType = 1 ifTrue: ["experimental drag enter" owner borderWidth: 4; borderColor: owner color asColor negated]. dragType = 2 ifTrue: ["experimental drag move" ]. dragType = 3 ifTrue: ["experimental drag leave" owner borderWidth: 0]. dragType = 5 ifTrue: [self handleDropOut]. ^nil! ! !HandMorph methodsFor: 'external dragging' stamp: 'tak 12/2/2007 19:58'! dragOutStart: aMorph | types nullSeparated | types := aMorph mimeTypes. nullSeparated := String streamContents: [:str | types do: [:type | str nextPutAll: type] separatedBy: [str nextPut: (Character value: 0)]]. self primitiveDndOutStart: nullSeparated! ! !HandMorph methodsFor: 'external dragging' stamp: 'tak 12/3/2007 01:40'! handleDragOutside: anEvent ! ! !HandMorph methodsFor: 'external dragging' stamp: 'tak 12/2/2007 20:06'! handleDropOut | morph stream writer type | morph := self valueOfProperty: #dragOutMorph ifAbsent: [^ self]. type := self primitiveDndOutAcceptedType. type = 'image/png' ifTrue: [stream := ByteArray new writeStream. writer := PNGReadWriter on: stream binary. writer nextPutImage: morph imageForm. writer close. stream contents. ^ self primitiveDndOutSend: stream contents]. type = 'UTF8_STRING' ifTrue: [^ self primitiveDndOutSend: (morph getCharacters convertToEncoding: 'utf8')]! ! !HandMorph methodsFor: 'external dragging' stamp: 'tak 12/2/2007 12:11'! handleDropOutMorph: aMorph self setProperty: #dragOutMorph toValue: aMorph.! ! !HandMorph methodsFor: 'external dragging' stamp: 'tak 12/3/2007 01:15'! primitiveDndOutAcceptedType ! ! !HandMorph methodsFor: 'external dragging' stamp: 'tak 11/30/2007 12:48'! primitiveDndOutSend: aByteArray ! ! !HandMorph methodsFor: 'external dragging' stamp: 'tak 12/3/2007 01:15'! primitiveDndOutStart: aByteArray ! ! !StringMorph methodsFor: 'drop outside' stamp: 'tak 12/2/2007 19:49'! mimeTypes "Supported mime types for drag out" ^ #('UTF8_STRING')! ! !TextMorph methodsFor: 'drop outside' stamp: 'tak 12/2/2007 19:50'! mimeTypes "Supported mime types for drag out. TODO: UTF8_STRING is too Sugar specific. It should be generic name like text/plain" ^ #('UTF8_STRING')! ! !TextMorph reorganize! ('accessing' asText autoFit: backgroundColor backgroundColor: borderWidth: contents contents: contents:wrappedTo: contentsAsIs: contentsWrapped: crAction crAction: cursor cursorWrapped: editor elementCount getCharacters getFirstCharacter getLastCharacter hasTranslucentColor isAutoFit isWrapped margins margins: newContents: restoreText: setCharacters: setFirstCharacter: setLastCharacter: text textAlignment textAlignmentSymbol textColor textColor: textStyle userString wrapFlag:) ('alignment' centered justified leftFlush rightFlush) ('anchors' adjustTextAnchor: anchorMorph:at:type:) ('caching' loadCachedState releaseCachedState) ('card & stack' newContents:fromCard: setNewContentsFrom:) ('card in a stack' couldHoldSeparateDataForEachInstance) ('change reporting' ownerChanged) ('classification' isTextMorph) ('containment' occlusionsOnOff recognizerArena setContainer:) ('copying' copy updateReferencesUsing: veryDeepFixupWith: veryDeepInner:) ('drawing' areasRemainingToFill: debugDrawLineRectsOn: drawNullTextOn: drawOn: drawOnTest:) ('drop outside' mimeTypes) ('e-toy support' configureForKids getNumericValue setNumericValue:) ('editing' acceptContents acceptOnCR cancelEdits chooseAlignment chooseEmphasis chooseEmphasisOrAlignment chooseFont chooseStyle enterClickableRegion: handleEdit: handleInteraction:fromEvent: hasUnacceptedEdits: passKeyboardFocusTo: prefereredKeyboardPosition setCompositionWindow xeqLinkText:withParameter:) ('event handling' handlesKeyboard: handlesMouseDown: hasFocus keyStroke: keyboardFocusChange: mouseDown: mouseMove: mouseUp: wouldAcceptKeyboardFocusUponTab) ('events-processing' handleKeystroke: handleMouseMove:) ('geometry' bounds container defaultLineHeight extent: minimumExtent privateMoveBy: textBounds) ('geometry testing' containsPoint:) ('initialization' beAllFont: defaultColor initialize setTextStyle: string:fontName:size: string:fontName:size:wrap:) ('layout' acceptDroppingMorph:event:) ('linked frames' addPredecessor: addSuccessor: firstCharacterIndex firstInChain isLinkedTo: lastCharacterIndex predecessor recomposeChain startingIndex successor withSuccessorsDo:) ('menu' addFillStyleMenuItems:hand: autoFitOnOff autoFitString changeColorSimply changeMargins: changeTextColor changeTextColorSimply followCurve holderForCharacters promptForFont reverseCurveDirection setCurveBaseline: shiftedYellowButtonActivity wrapOnOff wrapString yellowButtonActivity) ('objects from disk' convertToCurrentVersion:refStream: fixUponLoad:seg:) ('player' currentDataValue variableDocks) ('printing' fullPrintOn:) ('scripting access' getAllButFirstCharacter insertCharacters: insertContentsOf: setAllButFirstCharacter:) ('submorphs-add/remove' addMorphFront:fromWorldPosition: delete goBehind) ('testing' basicType) ('visual properties' color: fillStyle fillStyle:) ('private' adjustLineIndicesBy: clippingRectangle composeToBounds compositionRectangle editorClass fit installEditor installEditorToReplace: paragraph paragraphClass predecessor:successor: predecessorChanged privateOwner: releaseEditor releaseParagraph releaseParagraphReally removedMorph: selectionChanged selectionColor selectionColor: setDefaultContentsIfNil setPredecessor: setSuccessor: text:textStyle: text:textStyle:wrap:color:predecessor:successor: updateFromParagraph) ('*connectors-accessing' fontName:pointSize: fontName:size: font: selectAll selectFrom:to: selection) ('*connectorsshapes-containment' avoidsOcclusions fillingOnOff fillsOwner fillsOwner:) ('*connectorsshapes-menu' addCustomMenuItems:hand:) ('property sheet' openAppropriatePropertySheet openATextPropertySheet) ('localization' addTranslationItemsTo: localeChanged setLocale: toggleTranslatable translatable translatableString translatable: translations) ('menus' addFitAndWrapItemsTo: addTextMenuItemsTo:event:) ! !StringMorph reorganize! ('accessing' contents contentsClipped: contents: fitContents getCharacters handsWithMeForKeyboardFocus interimContents: label:font: measureContents minimumWidth setWidth: userString valueFromContents) ('drawing' drawOn: lookTranslucent) ('drop outside' mimeTypes) ('editing' acceptContents acceptValue: cancelEdits doneWithEdits launchMiniEditor: lostFocusWithoutAccepting wantsKeyboardFocusOnShiftClick) ('event handling' handlesMouseDown: hasFocus mouseDown: wouldAcceptKeyboardFocus) ('font' emphasis: font fontName:size: fontToUse font: font:emphasis:) ('halos and balloon help' addOptionalHandlesTo:box: boundsForBalloon) ('initialization' defaultColor initialize initWithContents:font:emphasis:) ('layout' fullBounds) ('menu' addCustomMenuItems:hand: changeEmphasis changeFont) ('parts bin' initializeToStandAlone) ('printing' balloonTextForClassAndMethodString balloonTextForLexiconString balloonTextForMethodString fullPrintOn: printOn:) ('objects from disk' fixUponLoad:seg:) ('*connectors-layout' minHeight) ('*connectors-testing' isStringMorph) ! HandMorph removeSelector: #dragOut:! HandMorph removeSelector: #primitiveDndOutStart:dataFormat:! !Morph reorganize! ('*StandardYellowButtonMenus-event handling' handlerForYellowButtonDown: yellowButtonActivity:) ('*StandardYellowButtonMenus-event handling-override' handlerForMouseDown:) ('*StandardYellowButtonMenus-menus' addGraphModelYellowButtonItemsTo:event: addModelYellowButtonItemsTo:event: addMyYellowButtonMenuItemsToSubmorphMenus addNestedYellowButtonItemsTo:event: addYellowButtonMenuItemsTo:event: hasYellowButtonMenu outermostOwnerWithYellowButtonMenu) ('*StandardYellowButtonMenus-model access' models) ('*cgprereqs-structure' graphContext graphContextOrNil graphContext: graphModel graphModel: pasteUpMorphOrWorld releaseGraphModels) ('*connectors-accessing' playerRepresented) ('*connectors-buttons' makerButtonImage makerButtonImageOfColor: nameForButton nameForButton:) ('*connectors-classification' isConnector) ('*connectors-connection' addConnectedMorphsTo: allowsDetachmentFromEnd:ofConnector: attachFrom:atNearestSpecTo: attachFrom:at: connectionTarget disconnectAllConstraints disconnectAllMyConstraints endShapeBorderColor: endShapeBorderWidth: endShapeColor: endShapeWidth: isConnectable isConstrainedBy: lineAttachmentOffset lineAttachmentOffset: preferredConnection preferredConnectionSelector preferredConnection: wantsAttachmentFromEnd:ofConnector:) ('*connectors-copying' duplicateForEmbedding usableSiblingInstance2) ('*connectors-dropping/grabbing' alignAttachmentPointsWithGridNear: asButtonPrototype movedFromFormerPosition slideToTrash:) ('*connectors-geometry' bottomLeftCorner bottomRightCorner centerX centerY closestOrthogonalPointTo: closestPointTo: firstIntersectionWithLineFrom:to: intersectionWithLineSegmentFromCenterTo: intersects: isEntirelyWithinOutlineOf: isEntirelyWithinShadowForm: isEntirelyWithinShadowForm:bounds: isShadowVisibleIn: overlapsOutlineOf: overlapsShadowForm:bounds: pointAtOffset: topLeftCorner topRightCorner) ('*connectors-graphs' addAllPredecessorsTo: addAllSuccessorsTo: allPredecessors allSuccessors depthFirstSearchVisitNodeBlock:edgeBlock:states:postOrder: depthFirstSearchVisitPre:post:edgeBlock:states: immediatelyFollows: immediatelyPrecedes: neighbors predecessors successors wantsGraphModel withAllPredecessors withAllSuccessors) ('*connectors-labels' boundsSignatureHash deleteAllLabels labels nudgeForLabel: relocateLabelFrom:) ('*connectors-menus' model) ('*connectors-meta-actions' dismissMorph dismissMorph:) ('*connectors-naming' innocuousName) ('*connectors-notifications' connectedToBy: connectedToEnd:ofConnector: disconnectedFromBy: disconnectedFromEnd:ofConnector:) ('*connectors-private' connectConstraint: disconnectConstraint: highlightedForConnection highlightForConnection: highlightMorphForAPRect: highlightMorphForBoundaryRect: isHighlight) ('*connectors-queries' connectedConstraints connectedMorphs connections connectionsAtAttachmentPointNumbered: connectionsAtAttachmentPoint: connectionsDo: constraints hasConnectedConstraints incomingConnectionCount incomingConnections isConstraint myConnectionsDo: outgoingConnectionCount outgoingConnections) ('*connectors-structure' rootInPasteUp) ('*connectors-submorphs-add/remove' deleteMorphs: ensureMorph:behind: ensureMorph:inFrontOf:) ('*connectors-testing' isButton isCurveHandle isHandleMorph isLineMorph isObjectsTool isPinMorph isSelectionMorph isStringMorph justTornOffFromPartsBin renameInternal: renameTo: wantsConnectorPropertiesSheet wantsTextPropertiesSheet) ('*connectorsGraphModel') ('*connectorsGraphModel-override') ('*connectorsPropertyGraphModel') ('*connectorsgraphmodel-override') ('*connectorstools-menus' makeButton:) ('*connectorstools-private' displayAttachmentPointsFor: displayedAttachmentPoints setAttachmentPointsFromDisplayed) ('*connectorstools-testing' isAttachmentPointAdjuster) ('*customevents-scripting' instantiatedUserScriptsDo: removeAllEventTriggers removeAllEventTriggersFor: removeEventTrigger: removeEventTrigger:for: renameScriptActionsFor:from:to: triggerCustomEvent: triggerEtoyEvent: triggerEtoyEvent:from:) ('*flexiblevocabularies-scripting' categoriesForViewer selectorsForViewer selectorsForViewerIn: understandsBorderVocabulary unfilteredCategoriesForViewer) ('*geniestubs-stubs' allowsGestureStart: isGestureStart: mouseStillDownStepRate redButtonGestureDictionaryOrName: yellowButtonGestureDictionaryOrName:) ('*morphic-Postscript Canvases' asEPS asPostscript asPostscriptPrintJob clipPostscript drawPostscriptOn: fullDrawPostscriptOn: printPSToFile) ('*network-irc') ('*sound-piano rolls' addMorphsTo:pianoRoll:eventTime:betweenTime:and: encounteredAtTime:inScorePlayer:atIndex:inEventTrack:secsPerTick: justDroppedIntoPianoRoll:event: pauseFrom: resetFrom: resumeFrom: triggerActionFromPianoRoll) ('WiW support' addMorphInFrontOfLayer: addMorphInLayer: eToyRejectDropMorph:event: morphicLayerNumber morphicLayerNumberWithin: randomBoundsFor: shouldGetStepsFrom:) ('accessing' actorState actorStateOrNil actorState: adoptPaneColor: balloonText balloonTextSelector balloonTextSelector: beFlap: beSticky beUnsticky borderColor borderColor: borderStyle borderStyleForSymbol: borderStyle: borderWidth borderWidthForRounding borderWidth: color colorForInsets color: couldHaveRoundedCorners doesBevels eventHandler eventHandler: eventRoll forwardDirection hasTranslucentColor highlight highlightColor highlightColor: highlightOnlySubmorph: insetColor isFlap isLocked isShared isSticky lock lock: methodCommentAsBalloonHelp modelOrNil player player: presenter raisedColor regularColor regularColor: rememberedColor rememberedColor: resistsRemoval resistsRemoval: setBorderStyle: sqkPage sticky: toggleLocked toggleResistsRemoval toggleStickiness unHighlight unlock unlockContents url userString wantsToBeCachedByHand wantsToBeTopmost) ('accessing - extension' assureExtension convertExtension extension hasExtension initializeExtension privateExtension: resetExtension) ('accessing - properties' hasProperty: otherProperties removeProperty: setProperties: setProperty:toValue: valueOfProperty: valueOfProperty:ifAbsentPut: valueOfProperty:ifAbsent: valueOfProperty:ifPresentDo:) ('button' doButtonAction fire firedMouseUpCode) ('button properties' buttonProperties buttonProperties: ensuredButtonProperties hasButtonProperties) ('caching' fullLoadCachedState fullReleaseCachedState loadCachedState releaseCachedState) ('card in a stack' abstractAModel beAStackBackground becomeSharedBackgroundField containsCard: couldHoldSeparateDataForEachInstance currentDataInstance explainDesignations goToNextCardInStack goToPreviousCardInStack holdsSeparateDataForEachInstance insertAsStackBackground insertCard installAsCurrent: isStackBackground makeHoldSeparateDataForEachInstance newCard reassessBackgroundShape relaxGripOnVariableNames reshapeBackground setAsDefaultValueForNewCard showBackgroundObjects showDesignationsOfObjects showForegroundObjects stack stackDo: stopHoldingSeparateDataForEachInstance tabHitWithEvent: wrapWithAStack) ('change reporting' addedMorph: addedOrRemovedSubmorph: colorChangedForSubmorph: invalidRect: invalidRect:from: ownerChanged privateInvalidateMorph: userSelectedColor:) ('classification' defersHaloToInterior demandsBoolean fontsForText isAlignmentMorph isBalloonHelp isFlapOrTab isFlapTab isFlashMorph isFlexMorph isHandMorph isModalShell isPlayfieldLike isRenderer isStandardViewer isSyntaxMorph isTextMorph isWorldMorph isWorldOrHandMorph) ('converting' asDraggableMorph) ('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 handMeTilesToFire inspectArgumentsPlayerInMorphic: inspectMorphsProperties inspectOwnerChain installModelIn: mouseUpCodeOrNil ownerChain programmedMouseDown:for: programmedMouseEnter:for: programmedMouseLeave:for: programmedMouseUp:for: programmedMouseUp:for:with: removeMouseUpAction resumeAfterDrawError resumeAfterStepError tempCommand viewMorphDirectly) ('dispatching' disableSubmorphFocusForHand:) ('drawing' areasRemainingToFill: boundingBoxOfSubmorphs boundsWithinCorners changeClipSubmorphs clipLayoutCells clipLayoutCells: clippingBounds clipSubmorphs clipSubmorphs: doesOwnRotation drawDropHighlightOn: drawDropShadowOn: drawErrorOn: drawMouseDownHighlightOn: drawOn: drawRolloverBorderOn: drawSubmorphsOn: expandFullBoundsForDropShadow: expandFullBoundsForRolloverBorder: flashBounds fullDrawOn: hasClipSubmorphsString hide highlightedForMouseDown highlightForMouseDown highlightForMouseDown: imageForm imageFormDepth: imageFormForRectangle: imageFormWithout:andStopThere: imageForm:backgroundColor:forRectangle: imageForm:forRectangle: refreshWorld shadowForm show visible visible:) ('drop shadows' addDropShadow addDropShadowMenuItems:hand: changeShadowColor hasDropShadow hasDropShadowString hasDropShadow: hasRolloverBorder hasRolloverBorder: removeDropShadow setShadowOffset: shadowColor shadowColor: shadowOffset shadowOffset: shadowPoint: toggleDropShadow) ('drop outside' mimeTypes) ('dropping/grabbing' aboutToBeGrabbedBy: disableDragNDrop dragEnabled dragEnabled: dragNDropEnabled dragSelectionColor dropEnabled dropEnabled: dropHighlightColor dropSuccessColor enableDragNDrop enableDragNDrop: enableDrag: enableDrop: formerOwner formerOwner: formerPosition formerPosition: grabTransform highlightedForDrop highlightForDrop highlightForDrop: justDroppedInto:event: justGrabbedFrom: morphToDropInPasteUp: nameForUndoWording rejectDropMorphEvent: repelEnabledForMorph: repelsMorph:event: resetHighlightForDrop separateDragAndDrop slideBackToFormerSituation: startDrag:with: toggleDragNDrop transportedMorph undoGrabCommand vanishAfterSlidingTo:event: wantsDroppedMorph:event: wantsToBeDroppedInto: wantsToBeOpenedInWorld willingToBeDiscarded) ('e-toy support' adaptToWorld: adoptVocabulary: allMorphsAndBookPagesInto: appearsToBeSameCostumeAs: asNumber: asWearableCostume asWearableCostumeOfExtent: automaticViewing changeAllBorderColorsFrom:to: chosenColor: configureForKids containingWindow copyCostumeStateFrom: currentPlayerDo: cursor cursor: decimalPlacesForGetter: defaultValueOrNil defaultVariableName definePath deletePath embeddedInMorphicWindowLabeled: embedInWindow enclosingEditor enclosingTestTile enforceTileColorPolicy fenceEnabled followPath getCharacters getNumericValue gridFormOrigin:grid:background:line: handUserASibling hideWillingnessToAcceptDropFeedback isAViewer isCandidateForAutomaticViewing isTileEditor listViewLineForFieldList: makeGraphPaper makeGraphPaperGrid:background:line: mustBeBackmost noteDecimalPlaces:forGetter: noteNegotiatedName:for: objectViewed outmostScriptEditor referencePlayfield removeViewersOnSubsIn: rotationStyle rotationStyle: setAsActionInButtonProperties: setNumericValue: setStandardTexture showWillingnessToAcceptDropFeedback slotSpecifications succeededInRevealing: tanOButton textureParameters topEditor unembedSubmorphsInWindow unlockOneSubpart updateCachedThumbnail wantsRecolorHandle wrappedInWindowWithTitle: wrappedInWindow:) ('event handling' click click: cursorPoint doubleClickTimeout: doubleClick: dropFiles: firstClickTimedOut: handlesKeyboard: handlesMouseDown: handlesMouseOverDragging: handlesMouseOver: handlesMouseStillDown: hasFocus keyboardFocusChange: keyDown: keyStroke: keyUp: mouseDown: mouseEnterDragging: mouseEnter: mouseLeaveDragging: mouseLeave: mouseMove: mouseStillDownThreshold mouseStillDown: mouseUp: on:send:to: on:send:to:withValue: prefereredKeyboardBounds prefereredKeyboardPosition removeLink: restoreSuspendedEventHandler startDrag: suspendEventHandler tabAmongFields transformFromOutermostWorld transformFromWorld transformFrom: wantsDropFiles: wantsEveryMouseMove wantsKeyboardFocusFor: wantsWindowEvents: windowEvent: wouldAcceptKeyboardFocus wouldAcceptKeyboardFocusUponTab) ('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:) ('events-processing' containsPoint:event: defaultEventDispatcher handleDropFiles: handleDropMorph: handleEvent: handleFocusEvent: handleKeyDown: handleKeystroke: handleKeyUp: handleListenEvent: handleMouseDown: handleMouseEnter: handleMouseLeave: handleMouseMove: handleMouseOver: handleMouseStillDown: handleMouseUp: handleUnknownEvent: handleWindowEvent: mouseDownPriority processEvent: processEvent:using: rejectDropEvent: rejectsEvent: transformedFrom:) ('events-removing' releaseActionMap) ('fileIn/out' attachToResource prepareToBeSaved reserveUrl: saveAsResource saveDocPane saveOnFile saveOnURL saveOnURLbasic saveOnURL: updateAllFromResources updateFromResource) ('filter streaming' drawOnCanvas:) ('geometry' align:with: bottom bottomCenter bottomLeft bottomLeft: bottomRight bottomRight: bottom: bounds boundsInStagingArea boundsInWorld boundsIn: bounds: bounds:from: bounds:in: center center: extent extent: fullBoundsInWorld globalPointToLocal: griddedPoint: gridPoint: height height: innerBounds left leftCenter left: localPointToGlobal: minimumExtent minimumExtent: nextOwnerPage outerBounds pointFromWorld: pointInWorld: point:from: point:in: position positionInWorld positionSubmorphs position: previousOwnerPage right rightCenter right: screenLocation screenRectangle setConstrainedPosition:hangOut: shiftSubmorphsBy: shiftSubmorphsOtherThan:by: stagingArea top topCenter topLeft topLeft: topRight topRight: top: transformedBy: width width: worldBounds worldBoundsForHalo) ('geometry eToy' addTransparentSpacerOfSize: beTransparent cartesianBoundsTopLeft cartesianXY: colorUnder color:sees: degreesOfFlex forwardDirection: getIndexInOwner goHome heading heading: move:toPosition: referencePosition referencePositionInWorld referencePositionInWorld: referencePosition: rotationCenter rotationCenter: scaleFactor scaleFactor: scale: setDirectionFrom: setIndexInOwner: touchesColor: transparentSpacerOfSize: wrap x x: x:y: y y:) ('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: boundsForBalloon comeToFrontAndAddHalo 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:hand: transferHalo:from: wantsBalloon wantsDirectionHandles wantsDirectionHandles: wantsHalo wantsHaloFor: wantsHaloFromClick wantsHaloHandleWithSelector:inHalo: wantsScriptorHaloHandle wantsSimpleSketchMorphHandles wantsTransfarHaloFromClick) ('initialization' basicInitialize defaultBounds defaultColor dismissViaHalo inATwoWayScrollPane initialize intoWorld: naviHeight: openCenteredInWorld openInHand openInMVC openInWindow openInWindowLabeled: openInWindowLabeled:inWorld: openInWorld openInWorld: openNearTopLeftOfScreen outOfWorld: resourceJustLoaded standardPalette) ('layout' acceptDroppingMorph:event: adjustLayoutBounds doLayoutIn: fullBounds justAddedAsTileRow layoutBounds layoutBounds: layoutChanged layoutInBounds: layoutProportionallyIn: minExtent minHeight minHeight: minWidth minWidth: privateFullBounds submorphBounds) ('layout-menu' addCellLayoutMenuItems:hand: addLayoutMenuItems:hand: addTableLayoutMenuItems:hand: changeCellInset: changeClipLayoutCells changeDisableTableLayout changeLayoutInset: changeListDirection: changeMaxCellSize: changeMinCellSize: changeNoLayout changeProportionalLayout changeReverseCells changeRubberBandCells changeTableLayout hasClipLayoutCellsString hasDisableTableLayoutString hasNoLayoutString hasProportionalLayoutString hasReverseCellsString hasRubberBandCellsString hasTableLayoutString layoutMenuPropertyString:from:) ('layout-properties' assureLayoutProperties assureTableProperties cellInset cellInset: cellPositioning cellPositioningString: cellPositioning: cellSpacing cellSpacingString: cellSpacing: 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' currentVocabulary flash scriptPerformer) ('menu' addBorderStyleMenuItems:hand: addGestureMenuItems:hand: offerCostumeViewerMenu:) ('menus' absorbStateFromRenderer: addAddHandMenuItemsForHalo:hand: addCopyItemsTo: addCustomHaloMenuItems:hand: addCustomMenuItems:hand: addExportMenuItems:hand: addFillStyleMenuItems:hand: addHaloActionsTo: addMiscExtrasTo: addPaintingItemsTo:hand: addPlayerItemsTo: addStackItemsTo: addStandardHaloMenuItemsTo:hand: addTitleForHaloMenu: addToggleItemsToHaloMenu: adhereToEdge adhereToEdge: adjustedCenter adjustedCenter: allMenuWordings changeColor changeDirectionHandles changeDragAndDrop chooseNewGraphic chooseNewGraphicCoexisting: chooseNewGraphicFromHalo collapse defaultArrowheadSize dismissButton doMenuItem: exportAsBMP exportAsGIF exportAsJPEG exportAsPNG hasDirectionHandlesString hasDragAndDropEnabledString helpButton inspectInMorphic inspectInMorphic: lockedString lockUnlockMorph makeNascentScript maybeAddCollapseItemTo: menuItemAfter: menuItemBefore: presentHelp printPSToFileNamed: putOnBackground putOnForeground reasonableBitmapFillForms reasonableForms resetForwardDirection resistsRemovalString setArrowheads setRotationCenter setRotationCenterFrom: setToAdhereToEdge: snapToEdgeIfAppropriate stickinessString transferStateToRenderer: uncollapseSketch) ('messenger' affiliatedSelector) ('meta-actions' addEmbeddingMenuItemsTo:hand: applyStatusToAllSiblings: beThisWorldsModel blueButtonDown: blueButtonUp: bringAllSiblingsToMe: buildHandleMenu: buildMetaMenu: changeColorSimply changeColorTarget:selector:originalColor:hand: changeColorTarget:selector:originalColor:hand:showPalette: copyToPasteBuffer: duplicateMorph: embedEnabled grabMorph: handlerForBlueButtonDown: handlerForMetaMenu: indicateAllSiblings inspectAt:event: invokeMetaMenuAt:event: invokeMetaMenu: makeMultipleSiblings: makeNewPlayerInstance: makeSiblingsLookLikeMe: makeSiblings: maybeDuplicateMorph maybeDuplicateMorph: openAButtonPropertySheet openAPropertySheet openAppropriatePropertySheet openATextPropertySheet potentialEmbeddingTargets resizeFromMenu resizeMorph: saveAsPrototype showActions showEmbedMenu showHiders subclassMorph) ('miscellaneous' finalTilePadSubmorph setExtentFromHalo: setFlexExtentFromHalo:) ('naming' choosePartName downshiftedNameOfObjectRepresented nameForFindWindowFeature nameInModel nameOfObjectRepresented name: setNamePropertyTo: setNameTo: specialNameInModel tryToRenameTo: updateAllScriptingElements) ('object fileIn' convertAugust1998:using: convertNovember2000DropShadow:using:) ('objects from disk' convertToCurrentVersion:refStream: objectForDataStream: storeDataOn:) ('other' fixUpCarets removeAllButFirstSubmorph) ('other events' menuButtonMouseEnter: menuButtonMouseLeave:) ('parts bin' initializeToStandAlone inPartsBin isPartsBin isPartsDonor isPartsDonor: markAsPartsDonor partRepresented residesInPartsBin) ('pen' choosePenColor: choosePenSize getPenColor getPenDown getPenSize liftPen lowerPen penColor: penUpWhile: trailMorph) ('player' assuredCardPlayer assuredPlayer assureExternalName currentDataValue newPlayerInstance okayToDuplicate shouldRememberCostumes showPlayerMenu variableDocks) ('player commands' beep: jumpTo: makeFenceSound playSoundNamed: set:) ('player viewer' openViewerForArgument updateLiteralLabel) ('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 keepsTransform newTransformationMorph removeFlexShell rotationDegrees) ('rounding' cornerStyle: roundedCorners roundedCornersString toggleCornerRounding wantsRoundedCorners) ('scripting' arrowDeltaFor: asEmptyPermanentScriptor bringTileScriptingElementsUpToDate bringUpToDate defaultFloatPrecisionFor: isTileLike isTileScriptingElement jettisonScripts makeAllTilesColored makeAllTilesGreen restoreTypeColor scriptEditorFor: tearOffTile triggerScript: useUniformTileColor viewAfreshIn:showingScript:at:) ('stepping and presenter' arrangeToStartStepping arrangeToStartSteppingIn: isStepping isSteppingSelector: start startStepping startSteppingIn: startSteppingSelector: startStepping:at:arguments:stepTime: step stepAt: stop stopStepping stopSteppingSelector: stopSteppingSelfAndSubmorphs) ('structure' activeHand allOwners allOwnersDo: firstOwnerSuchThat: hasOwner: isInWorld morphPreceding: nearestOwnerThat: orOwnerSuchThat: outermostMorphThat: outermostWorldMorph owner ownerThatIsA: ownerThatIsA:orA: pasteUpMorph pasteUpMorphHandlingTabAmongFields primaryHand referenceWorldViaOwnwer renderedMorph root rootAt: topPasteUp topRendererOrSelf withAllOwners withAllOwnersDo: world) ('submorphs-accessing' allKnownNames allMorphs allMorphsDo: allNonSubmorphMorphs allSubmorphNamesDo: findA: findDeeplyA: findDeepSubmorphThat:ifAbsent: findSubmorphBinary: firstSubmorph hasSubmorphs hasSubmorphWithProperty: indexOfMorphAbove: lastSubmorph morphsAt: morphsAt:behind:unlocked: morphsAt:unlocked: morphsAt:unlocked:do: morphsInFrontOf:overlapping:do: morphsInFrontOverlapping: morphsInFrontOverlapping:do: noteNewOwner: ownerSatisfying: 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: addMorphBack: addMorphCentered: addMorphFront: addMorphFront:fromWorldPosition: addMorphNearBack: addMorph: addMorph:after: addMorph:asElementNumber: addMorph:behind: addMorph:fullFrame: addMorph:inFrontOf: comeToFront copyWithoutSubmorph: deleteSubmorphsWithProperty: goBehind privateDelete removeAllMorphs removeAllMorphsIn: removeMorph: replaceSubmorph:by: submorphIndexOf:) ('system primitives' creationStamp) ('testing' canDrawAtHigherResolution canDrawBorder: completeModificationHash couldMakeSibling isFlexed isMorph isSketchMorph isTileMorph knownName modificationHash shouldDropOnMouseUp stepTime wantsSteps) ('text-anchor' addTextAnchorMenuItems:hand: changeDocumentAnchor changeInlineAnchor changeParagraphAnchor hasDocumentAnchorString hasInlineAnchorString hasParagraphAnchorString relativeTextAnchorPosition relativeTextAnchorPosition: textAnchorType textAnchorType:) ('texture support' isValidWonderlandTexture) ('thumbnail' demandsThumbnailing icon iconOrThumbnail morphRepresented permitsThumbnailing readoutForField: representativeNoTallerThan:norWiderThan:thumbnailHeight: updateThumbnailUrl updateThumbnailUrlInBook:) ('translation' accumlatePlayersInto:andSelectorsInto: isPlayer:ofReferencingTile: isTurtleRow traverseRowTranslateSlotOld:of:to: traverseRowTranslateSlotOld:to: traverseSearchForKedamaTurtleIfFound:) ('undo' commandHistory undoMove:redo:owner:bounds:predecessor:) ('updating' changed) ('user interface' becomeModal defaultLabelForInspector doCancel initialExtent) ('viewer' externalName) ('visual properties' canHaveFillStyles cornerStyle defaultBitmapFillForm fillStyle fillStyle: fillWithRamp:oriented: useBitmapFill useDefaultFill useGradientFill useSolidFill) ('private' moveWithPenDownByRAA: moveWithPenDownBy: privateAddAllMorphs:atIndex: privateAddMorph:atIndex: privateBounds: privateColor: privateDeleteWithAbsolutelyNoSideEffects privateFullBounds: privateFullMoveBy: privateMoveBy: privateOwner: privateRemoveMorphWithAbsolutelyNoSideEffects: privateRemoveMorph: privateRemove: privateSubmorphs privateSubmorphs:) ('*connectingGenie-gestures') ('*genie-geometry') ('*genie-gestures') ('*genie-initialization') ('*genie-testing') ('*connectors-gestures' preferredConnectorFor:ortho:curved: preferredConnectorName prototypeContainer prototypesSuchThat:ifNone: prototypesSuchThat:sortedBy:ifNone:) ('*connectors-initialization' uniqueNameLike: uniqueNameLike:in:) ('*connectors-scripting' wantsConnectionVocabulary wantsConnectorVocabulary wantsEmbeddingsVocabulary) ('*connectors-scripting-override' filterViewerCategoryDictionary:) ('scripting-override') ('latter day support' encouragesHaloTransferToEnclosedPasteUpMorph isEtoyReadout) ('*connectors-attachment points' addHorizontalAttachmentPoints: addVerticalAttachmentPoints: allAttachmentPointSpecs allAttachmentPoints attachmentPointAndSpecNearest: attachmentPointNearest: attachmentPointSpecNearest: attachmentPointSpecs attachmentPointSpecs: attachmentPoints connectionTargetsWithin:ofPoint:forEnd:ofConnector:do: createHorizontalAttachmentPoints: createVerticalAttachmentPoints: defaultAttachmentPointSpecs definesAttachmentPointSpecs embeddedPinsDo: embeddedPlayersDo: movableAttachments movableAttachments: nonDefaultAttachmentPointSpecs pinCount) ('*connectors-embeddings' addMorphFrontFromWorldPosition: allConnectableMorphsDo: allConnectedMorphsDo: allConnectedSubmorphsDo: allMorphsWithPlayersDo: allowsConnectionToSubmorphs allowsConnectionToSubmorph: allowsEmbeddingOf: attachmentPointForEmbeddedMorph: attachmentPointWhenEmbedded connectedSubmorphs embedInto: removedMorph: shouldAddSlotForEmbeddedMorph: shouldPromptForSlotForEmbeddedMorph: wantsConnectionWhenEmbedded wantsConnectionWhenEmbedded:) ('misc' doesColorAndBorder roundUpStrays) ('display' editMenuButtonDefinition) ('halo notification' aboutToBeBrownDragged aboutToBeGrownViaHalo aboutToBeRotatedViaHalo aboutToBeScaledViaHalo brownDragConcluded growConcluded rotationConcluded scaleConcluded) ('*green' delete menuButton offerMenu offsetForAttachingToHand openInWorldOrWorldlet) ('event roll' putEventsOnto: suitableForDroppingIntoEventRoll) ('*siss-interface' referenceWorld sissScanObjectsForMorphCopy sissScanObjectsWithoutOwner sissWriteValue uniqueNameForReferenceOrNil) ('menu & halo' addLockingItemsTo:) !