'From Squeak3.7gamma of ''17 July 2004'' [latest update: #5976] on 17 July 2004 at 11:09:12 am'! "Change Set: WorldDrawingClass-nk Date: 12 June 2004 Author: Ned Konz The pre-existing method PasteUpMorph>>drawingClass was not being used consistently when constructing SketchMorphs to be handed to the user. This change set replaces references to SketchMorph where sketches are created (where appropriate) with 'World drawingClass'. Some changes to allow new kinds of SketchMorph to be used (for instance, in Connectors). Does not change the behavior of a stock image. This change set also allows replacement SketchMorph classes to not be subclasses of SketchMorph, if desired (there was code that expected all SketchMorph-like things to be subinstances of SketchMorph). "! !ExternalDropHandler class methodsFor: 'class initialization' stamp: 'nk 6/12/2004 16:15'! registerStandardExternalDropHandlers "ExternalDropHandler registerStandardExternalDropHandlers" self registeredHandlers add: ( ExternalDropHandler type: 'image/' extension: nil action: [:stream :pasteUp :event | pasteUp addMorph: (World drawingClass withForm: (Form fromBinaryStream: stream binary)) centeredNear: event position])! ! !ExternalDropHandler class methodsFor: 'private' stamp: 'nk 6/12/2004 09:24'! defaultImageHandler | image sketch | ^ExternalDropHandler type: 'image/' extension: nil action: [:stream :pasteUp :event | stream binary. image _ Form fromBinaryStream: ((RWBinaryOrTextStream with: stream contents) reset). Project current resourceManager addResource: image url: (FileDirectory urlForFileNamed: stream name) asString. sketch _ World drawingClass withForm: image. pasteUp addMorph: sketch centeredNear: event position] fixTemps! ! !FileList2 methodsFor: 'own services' stamp: 'nk 1/6/2004 12:36'! openImageInWindow "Handle five file formats: GIF, JPG, PNG, Form stoteOn: (run coded), and BMP. Fail if file format is not recognized." | image myStream | myStream _ (directory readOnlyFileNamed: fileName) binary. image _ Form fromBinaryStream: myStream. myStream close. Smalltalk isMorphic ifTrue: [(World drawingClass withForm: image) openInWorld] ifFalse: [FormView open: image named: fileName]! ! !Form class methodsFor: 'file list services' stamp: 'nk 1/6/2004 12:36'! openImageInWindow: fullName "Handle five file formats: GIF, JPG, PNG, Form storeOn: (run coded), and BMP. Fail if file format is not recognized." | image myStream | myStream _ (FileStream readOnlyFileNamed: fullName) binary. image _ self fromBinaryStream: myStream. myStream close. Smalltalk isMorphic ifTrue:[ Project current resourceManager addResource: image url: (FileDirectory urlForFileNamed: fullName) asString. ]. Smalltalk isMorphic ifTrue: [(World drawingClass withForm: image) openInWorld] ifFalse: [FormView open: image named: fullName]! ! !HTTPSocket class methodsFor: 'utilities' stamp: 'nk 6/12/2004 09:24'! showImage: image named: imageName Smalltalk isMorphic ifTrue: [HandMorph attach: (World drawingClass withForm: image)] ifFalse: [FormView open: image named: imageName]! ! !MailMessage methodsFor: 'printing/formatting' stamp: 'nk 6/12/2004 09:36'! viewImageInBody | stream image | stream _ self body contentStream. image _ Form fromBinaryStream: stream. (World drawingClass withForm: image) openInWorld! ! !Morph methodsFor: 'e-toy support' stamp: 'nk 1/6/2004 12:37'! asWearableCostume "Return a wearable costume for some player" ^(World drawingClass withForm: self imageForm) copyCostumeStateFrom: self! ! !Morph methodsFor: 'fileIn/out' stamp: 'nk 1/6/2004 12:38'! updateFromResource | pathName newMorph f | (pathName := self valueOfProperty: #resourceFilePath) ifNil: [^self]. (pathName asLowercase endsWith: '.morph') ifTrue: [newMorph := (FileStream readOnlyFileNamed: pathName) fileInObjectAndCode. (newMorph isMorph) ifFalse: [^self error: 'Resource not a single morph']] ifFalse: [f := Form fromFileNamed: pathName. f ifNil: [^self error: 'unrecognized image file format']. newMorph := World drawingClass withForm: f]. newMorph setProperty: #resourceFilePath toValue: pathName. self owner replaceSubmorph: self by: newMorph! ! !BookMorph methodsFor: 'menu' stamp: 'nk 6/12/2004 09:23'! loadImagesIntoBook "PowerPoint stores GIF presentations as individual slides named Slide1, Slide2, etc. Load these into the book. mjg 9/99" | directory filenumber form newpage | directory := ((StandardFileMenu oldFileFrom: FileDirectory default) ifNil: [^nil]) directory. directory isNil ifTrue: [^nil]. "Start loading 'em up!!" filenumber := 1. [directory fileExists: 'Slide' , filenumber asString] whileTrue: [Transcript show: 'Slide' , filenumber asString; cr. Smalltalk bytesLeft < 1000000 ifTrue: ["Make some room" (self valueOfProperty: #url) isNil ifTrue: [self savePagesOnURL] ifFalse: [self saveAsNumberedURLs]]. form := Form fromFileNamed: (directory fullNameFor: 'Slide' , filenumber asString). newpage := PasteUpMorph new extent: form extent. newpage addMorph: (World drawingClass withForm: form). self pages addLast: newpage. filenumber := filenumber + 1]. "After adding all, delete the first page." self goToPage: 1. self deletePageBasic. "Save the book" (self valueOfProperty: #url) isNil ifTrue: [self savePagesOnURL] ifFalse: [self saveAsNumberedURLs]! ! !FlashPlayerMorph methodsFor: 'e-toy support' stamp: 'nk 1/6/2004 12:36'! asWearableCostumeOfExtent: extent "Return a wearable costume for some player" | image oldExtent | oldExtent _ self extent. self extent: extent. image _ self imageForm. self extent: oldExtent. image mapColor: self color to: Color transparent. ^(World drawingClass withForm: image) copyCostumeStateFrom: self! ! !GraphicalDictionaryMenu methodsFor: 'menu commands' stamp: 'nk 1/6/2004 12:36'! handMeOne self currentHand attachMorph: (World drawingClass new form: (formChoices at: currentIndex))! ! !GraphicalDictionaryMenu methodsFor: 'menu commands' stamp: 'nk 1/6/2004 12:37'! repaintEntry "Let the user enter into painting mode to repaint the item and save it back." | aWorld bnds sketchEditor aPaintBox formToEdit | (aWorld _ self world) assureNotPaintingElse: [^ self]. aWorld prepareToPaint. aWorld displayWorld. formToEdit _ formChoices at: currentIndex. bnds _ (submorphs second boundsInWorld origin extent: formToEdit extent) intersect: aWorld bounds. bnds _ (aWorld paintingBoundsAround: bnds center) merge: bnds. sketchEditor _ SketchEditorMorph new. aWorld addMorphFront: sketchEditor. sketchEditor initializeFor: ((World drawingClass withForm: formToEdit) position: submorphs second positionInWorld) inBounds: bnds pasteUpMorph: aWorld paintBoxPosition: bnds topRight. sketchEditor afterNewPicDo: [:aForm :aRect | formChoices at: currentIndex put: aForm. baseDictionary at: (entryNames at: currentIndex) put: aForm. self updateThumbnail. (aPaintBox _ aWorld paintBoxOrNil) ifNotNil: [aPaintBox delete]] ifNoBits: [(aPaintBox _ aWorld paintBoxOrNil) ifNotNil: [aPaintBox delete]]. ! ! !PasteUpMorph methodsFor: 'painting' stamp: 'nk 1/6/2004 12:39'! backgroundForm: aForm self backgroundSketch: (self drawingClass new center: self center; form: aForm)! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'nk 1/6/2004 12:38'! extractScreenRegion: poly andPutSketchInHand: hand "The user has specified a polygonal area of the Display. Now capture the pixels from that region, and put in the hand as a Sketch." | screenForm outline topLeft innerForm exterior | outline _ poly shadowForm. topLeft _ outline offset. exterior _ (outline offset: 0@0) anyShapeFill reverse. screenForm _ Form fromDisplay: (topLeft extent: outline extent). screenForm eraseShape: exterior. innerForm _ screenForm trimBordersOfColor: Color transparent. innerForm isAllWhite ifFalse: [hand attachMorph: (self drawingClass withForm: innerForm)]! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'nk 1/6/2004 12:39'! grabFloodFromScreen: evt "Allow the user to plant a flood seed on the Display, and create a new drawing morph from the resulting region. Attach the result to the hand." | screenForm exterior p1 box | Cursor crossHair showWhile: [p1 _ Sensor waitButton]. box _ Display floodFill: Color transparent at: p1. exterior _ ((Display copy: box) makeBWForm: Color transparent) reverse. self world invalidRect: box; displayWorldSafely. (box area > (Display boundingBox area // 2)) ifTrue: [^ PopUpMenu notify: 'Sorry, the region was too big']. (exterior deepCopy reverse anyShapeFill reverse) "save interior bits" displayOn: exterior at: 0@0 rule: Form and. screenForm _ Form fromDisplay: box. screenForm eraseShape: exterior. screenForm isAllWhite ifFalse: [evt hand attachMorph: (self drawingClass withForm: screenForm)]! ! !SARInstaller methodsFor: 'client services' stamp: 'nk 6/12/2004 10:03'! openGraphicsFile: memberOrName | member morph | member _ self memberNamed: memberOrName. member ifNil: [ ^self errorNoSuchMember: memberOrName ]. morph _ (World drawingClass fromStream: member contentStream binary). morph ifNotNil: [ morph openInWorld ]. self installed: member.! ! !SketchMorph methodsFor: 'e-toy support' stamp: 'nk 6/12/2004 10:04'! asWearableCostume "Return a wearable costume for some player" ^(World drawingClass withForm: originalForm) copyCostumeStateFrom: self! ! !SpeakerMorph methodsFor: 'initialization' stamp: 'nk 6/12/2004 10:05'! addGraphic | graphic | graphic _ World drawingClass withForm: self speakerGraphic. graphic position: bounds center - (graphic extent // 2). self addMorph: graphic. ! ! !TabbedPalette methodsFor: 'palette menu' stamp: 'nk 6/12/2004 10:05'! addMenuTab "Add the menu tab. This is ancient code, not much in the spirit of anything current" | aMenu aTab aGraphic sk | aMenu _ MenuMorph new defaultTarget: self. aMenu stayUp: true. "aMenu add: 'clear' translated action: #showNoPalette." aMenu add: 'sort tabs' translated action: #sortTabs:. aMenu add: 'choose new colors for tabs' translated action: #recolorTabs. aMenu setProperty: #paletteMenu toValue: true. "aMenu add: 'make me the Standard palette' translated action: #becomeStandardPalette." aTab _ self addTabForBook: aMenu withBalloonText: 'a menu of palette-related controls' translated. aTab highlightColor: tabsMorph highlightColor; regularColor: tabsMorph regularColor. tabsMorph laySubpartsOutInOneRow; layoutChanged. aGraphic _ ScriptingSystem formAtKey: 'TinyMenu'. aGraphic ifNotNil: [aTab removeAllMorphs. aTab addMorph: (sk _ World drawingClass withForm: aGraphic). sk position: aTab position. sk lock. aTab fitContents]. self layoutChanged! ! !TabbedPalette class methodsFor: 'scripting' stamp: 'nk 6/12/2004 10:05'! authoringPrototype | aTabbedPalette aBook aTab | aTabbedPalette _ self new markAsPartsDonor. aTabbedPalette pageSize: 200 @ 300. aTabbedPalette tabsMorph highlightColor: Color red regularColor: Color blue. aTabbedPalette addMenuTab. aBook _ BookMorph new setNameTo: 'one'; pageSize: aTabbedPalette pageSize. aBook color: Color blue muchLighter. aBook removeEverything; insertPage; showPageControls. aBook currentPage addMorphBack: (World drawingClass withForm: ScriptingSystem squeakyMouseForm). aTab _ aTabbedPalette addTabForBook: aBook. aBook _ BookMorph new setNameTo: 'two'; pageSize: aTabbedPalette pageSize. aBook color: Color red muchLighter. aBook removeEverything; insertPage; showPageControls. aBook currentPage addMorphBack: CurveMorph authoringPrototype. aTabbedPalette addTabForBook: aBook. aTabbedPalette selectTab: aTab. aTabbedPalette beSticky. aTabbedPalette tabsMorph hResizing: #spaceFill. ^ aTabbedPalette! ! !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 graphModel pasteUpMorphOrWorld releaseGraphModels) ('*connectors-accessing' playerRepresented) ('*connectors-buttons' makerButtonImage) ('*connectors-classification' isConnector) ('*connectors-connection' addConnectedMorphsTo: addHorizontalAttachmentPoints: addVerticalAttachmentPoints: allowsDetachmentFromEnd:ofConnector: attachFrom:at: attachFrom:atNearestSpecTo: attachmentPointAndSpecNearest: attachmentPointNearest: attachmentPointSpecNearest: attachmentPointSpecs attachmentPointSpecs: attachmentPoints connectionTarget createHorizontalAttachmentPoints: createVerticalAttachmentPoints: defaultAttachmentPointSpecs disconnectAllConstraints endShapeBorderColor: endShapeBorderWidth: endShapeColor: endShapeWidth: isConnectable isConstrainedBy: lineAttachmentOffset lineAttachmentOffset: movableAttachments movableAttachments: preferredConnection preferredConnection: preferredConnectionSelector 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: highlightForConnection: highlightMorphForAPRect: highlightMorphForBoundaryRect: highlightedForConnection isHighlight) ('*connectors-queries' connectedConstraints connectedMorphs connections connectionsAtAttachmentPoint: connectionsAtAttachmentPointNumbered: connectionsDo: constraints incomingConnections isConstraint outgoingConnections) ('*connectors-structure' rootInPasteUp) ('*connectors-submorphs-add/remove' deleteMorphs: dismissViaHalo ensureMorph:behind: ensureMorph:inFrontOf:) ('*connectors-testing' isButton isCurveHandle isHandleMorph isLineMorph isObjectsTool renameTo: wantsConnectorPropertiesSheet wantsTextPropertiesSheet) ('*connectorsGraphModel' assuredGraphContext assuredGraphModel createGraphModel createGraphModelForContext: defaultGraphModelClass graphPropertyChanged:) ('*connectorsGraphModel-override' createGraphContext defaultGraphContextClass duplicateMorphAndShareModel: ensureGraphModelInOwner:andContext: graphContext: graphModel: nameForGraphContext nameForGraphModelInContext: pvtGraphModel:) ('*connectorsPropertyGraphModel' choosePropertyName) ('*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:) ('*flexiblevocabularies-scripting' selectorsForViewer) ('*geniestubs-stubs' allowsGestureStart: isGestureStart: mouseStillDownStepRate redButtonGestureDictionaryOrName: yellowButtonGestureDictionaryOrName:) ('*morphic-Postscript Canvases' asEPS asPostscript asPostscriptPrintJob clipPostscript drawPostscriptOn: fullDrawPostscriptOn: printPSToFile) ('*network-irc' decrementIndexPositionOfSubmorph: incrementIndexPositionOfSubmorph:) ('*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 actorState: actorStateOrNil adoptPaneColor: balloonText balloonTextSelector balloonTextSelector: beFlap: beSticky beUnsticky borderColor borderColor: borderStyle borderStyle: borderStyleForSymbol: borderWidth borderWidth: borderWidthForRounding color color: colorForInsets couldHaveRoundedCorners doesBevels eventHandler eventHandler: 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: scaleFactor setBorderStyle: sqkPage sticky: toggleLocked toggleResistsRemoval toggleStickiness unHighlight unlock unlockContents url userString wantsToBeCachedByHand) ('accessing - extension' assureExtension extension hasExtension initializeExtension privateExtension: resetExtension) ('accessing - properties' hasProperty: otherProperties removeProperty: setProperties: setProperty:toValue: valueOfProperty: valueOfProperty:ifAbsent: valueOfProperty:ifAbsentPut: 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' demandsBoolean 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: 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: clipSubmorphs clipSubmorphs: clippingBounds doesOwnRotation drawDropHighlightOn: drawDropShadowOn: drawErrorOn: drawMouseDownHighlightOn: drawOn: drawRolloverBorderOn: drawSubmorphsOn: expandFullBoundsForDropShadow: expandFullBoundsForRolloverBorder: fullDrawOn: hasClipSubmorphsString hide highlightForMouseDown highlightForMouseDown: highlightedForMouseDown imageForm imageForm:forRectangle: imageFormDepth: imageFormForRectangle: imageFormWithout:andStopThere: refreshWorld shadowForm show visible visible:) ('drop shadows' addDropShadow addDropShadowMenuItems:hand: changeShadowColor hasDropShadow hasDropShadow: hasDropShadowString hasRolloverBorder hasRolloverBorder: removeDropShadow setShadowOffset: shadowColor shadowColor: shadowOffset shadowOffset: shadowPoint: toggleDropShadow) ('dropping/grabbing' aboutToBeGrabbedBy: disableDragNDrop dragEnabled dragEnabled: dragNDropEnabled dragSelectionColor dropEnabled dropEnabled: dropHighlightColor dropSuccessColor enableDrag: enableDragNDrop enableDragNDrop: enableDrop: formerOwner formerOwner: formerPosition formerPosition: grabTransform highlightForDrop highlightForDrop: highlightedForDrop justDroppedInto:event: justGrabbedFrom: nameForUndoWording rejectDropMorphEvent: 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: configureForKids containingWindow copyCostumeStateFrom: currentPlayerDo: cursor cursor: decimalPlacesForGetter: defaultValueOrNil defaultVariableName definePath deletePath embedInWindow embeddedInMorphicWindowLabeled: enclosingEditor enforceTileColorPolicy fenceEnabled followPath getCharacters getNumericValue gridFormOrigin:grid:background:line: isAViewer isCandidateForAutomaticViewing isTileEditor listViewLineForFieldList: makeGraphPaper makeGraphPaperGrid:background:line: mustBeBackmost noteDecimalPlaces:forGetter: noteNegotiatedName:for: objectViewed referencePlayfield rotationStyle rotationStyle: setAsActionInButtonProperties: setNaturalLanguageTo: setNumericValue: setStandardTexture slotSpecifications succeededInRevealing: textureParameters topEditor unlockOneSubpart updateCachedThumbnail wantsRecolorHandle wrappedInWindow: wrappedInWindowWithTitle:) ('event handling' click click: cursorPoint doubleClick: doubleClickTimeout: dropFiles: firstClickTimedOut: handlesKeyboard: handlesMouseDown: handlesMouseOver: handlesMouseOverDragging: handlesMouseStillDown: hasFocus keyDown: keyStroke: keyUp: keyboardFocusChange: mouseDown: mouseEnter: mouseEnterDragging: mouseLeave: mouseLeaveDragging: mouseMove: mouseStillDown: mouseStillDownThreshold mouseUp: on:send:to: on:send:to:withValue: removeLink: restoreSuspendedEventHandler startDrag: suspendEventHandler transformFrom: transformFromOutermostWorld transformFromWorld wantsDropFiles: wantsEveryMouseMove wantsKeyboardFocusFor: wouldAcceptKeyboardFocus wouldAcceptKeyboardFocusUponTab) ('events-accessing' actionMap updateableActionMap) ('events-alarms' addAlarm:after: addAlarm:at: addAlarm:with:after: addAlarm:with:at: addAlarm:with:with:after: addAlarm:with:with:at: addAlarm:withArguments:after: addAlarm:withArguments:at: alarmScheduler removeAlarm: removeAlarm:at:) ('events-processing' containsPoint:event: defaultEventDispatcher handleDropFiles: handleDropMorph: handleEvent: handleFocusEvent: handleKeyDown: handleKeyUp: handleKeystroke: handleListenEvent: handleMouseDown: handleMouseEnter: handleMouseLeave: handleMouseMove: handleMouseOver: handleMouseStillDown: handleMouseUp: handleUnknownEvent: mouseDownPriority processEvent: processEvent:using: rejectDropEvent: rejectsEvent: transformedFrom:) ('events-removing' releaseActionMap) ('fileIn/out' attachToResource prepareToBeSaved reserveUrl: saveAsResource saveDocPane saveOnFile saveOnURL saveOnURL: saveOnURLbasic updateAllFromResources updateFromResource) ('filter streaming' drawOnCanvas:) ('geometry' align:with: bottom bottom: bottomCenter bottomLeft bottomLeft: bottomRight bottomRight: bounds bounds: bounds:from: bounds:in: boundsIn: boundsInWorld center center: extent extent: fullBoundsInWorld globalPointToLocal: gridPoint: griddedPoint: height height: innerBounds left left: leftCenter localPointToGlobal: minimumExtent minimumExtent: nextOwnerPage outerBounds point:from: point:in: pointFromWorld: pointInWorld: position position: positionInWorld positionSubmorphs previousOwnerPage right right: rightCenter screenLocation screenRectangle setConstrainedPosition:hangOut: shiftSubmorphsBy: shiftSubmorphsOtherThan:by: top top: topCenter topLeft topLeft: topRight topRight: transformedBy: width width: worldBounds worldBoundsForHalo) ('geometry eToy' addTransparentSpacerOfSize: beTransparent cartesianBoundsTopLeft cartesianXY: color:sees: colorUnder degreesOfFlex forwardDirection: getIndexInOwner goHome heading heading: move:toPosition: referencePosition referencePosition: referencePositionInWorld referencePositionInWorld: rotationCenter rotationCenter: 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 removeHalo setBalloonText: setBalloonText:maxLineLength: setCenteredBalloonText: showBalloon: showBalloon:hand: transferHalo:from: wantsBalloon wantsDirectionHandles wantsDirectionHandles: wantsHalo wantsHaloFor: wantsHaloFromClick wantsHaloHandleWithSelector:inHalo: wantsScriptorHaloHandle wantsSimpleSketchMorphHandles) ('initialization' basicInitialize defaultBounds defaultColor inATwoWayScrollPane initialize intoWorld: openCenteredInWorld openInHand openInMVC openInWindow openInWindowLabeled: openInWindowLabeled:inWorld: openInWorld openInWorld: outOfWorld: resourceJustLoaded standardPalette) ('layout' absoluteLayoutFrame acceptDroppingMorph:event: adjustLayoutBounds doLayoutIn: fullBounds 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 cellPositioning: cellPositioningString: cellSpacing cellSpacing: cellSpacingString: disableTableLayout disableTableLayout: hResizing hResizing: hResizingString: layoutFrame layoutFrame: layoutInset layoutInset: layoutPolicy layoutPolicy: layoutProperties layoutProperties: listCentering listCentering: listCenteringString: listDirection listDirection: listDirectionString: listSpacing listSpacing: listSpacingString: maxCellSize maxCellSize: minCellSize minCellSize: reverseTableCells reverseTableCells: rubberBandCells rubberBandCells: spaceFillWeight spaceFillWeight: vResizeToFit: vResizing vResizing: vResizingString: wrapCentering wrapCentering: wrapCenteringString: wrapDirection wrapDirection: wrapDirectionString:) ('macpal' currentVocabulary flash scriptPerformer) ('menu' addBorderStyleMenuItems:hand: addGestureMenuItems:hand:) ('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: lockUnlockMorph lockedString 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: changeColorTarget:selector:originalColor:hand: copyToPasteBuffer: duplicateMorph: embedInto: grabMorph: handlerForBlueButtonDown: handlerForMetaMenu: inspectAt:event: invokeMetaMenu: invokeMetaMenuAt:event: makeMultipleSiblings: makeNewPlayerInstance: makeSiblings: makeSiblingsLookLikeMe: maybeDuplicateMorph maybeDuplicateMorph: openAButtonPropertySheet openAPropertySheet openATextPropertySheet potentialEmbeddingTargets resizeFromMenu resizeMorph: saveAsPrototype showActions showHiders subclassMorph) ('miscellaneous' setExtentFromHalo:) ('naming' choosePartName downshiftedNameOfObjectRepresented name: nameForFindWindowFeature nameInModel nameOfObjectRepresented setNamePropertyTo: setNameTo: specialNameInModel tryToRenameTo: updateAllScriptingElements) ('object fileIn' convertAugust1998:using: convertNovember2000DropShadow:using:) ('objects from disk' convertToCurrentVersion:refStream: objectForDataStream: storeDataOn:) ('other' removeAllButFirstSubmorph) ('other events' menuButtonMouseEnter: menuButtonMouseLeave:) ('parts bin' inPartsBin initializeToStandAlone isPartsBin isPartsDonor isPartsDonor: markAsPartsDonor partRepresented residesInPartsBin) ('pen' choosePenColor: choosePenSize getPenColor getPenDown getPenSize liftPen lowerPen penColor: penUpWhile: trailMorph) ('player' assureExternalName assuredCardPlayer assuredPlayer 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 rotationDegrees) ('rounding' cornerStyle: roundedCorners roundedCornersString toggleCornerRounding wantsRoundedCorners) ('scripting' 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 startStepping:at:arguments:stepTime: startSteppingIn: startSteppingSelector: 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 renderedMorph root rootAt: topPasteUp topRendererOrSelf withAllOwners withAllOwnersDo: world) ('submorphs-accessing' allKnownNames allMorphs allMorphsDo: allNonSubmorphMorphs allSubmorphNamesDo: findA: findDeepSubmorphThat:ifAbsent: findDeeplyA: findSubmorphBinary: firstSubmorph hasSubmorphWithProperty: hasSubmorphs indexOfMorphAbove: lastSubmorph morphsAt: morphsAt:behind:unlocked: morphsAt:unlocked: morphsAt:unlocked:do: morphsInFrontOf:overlapping:do: morphsInFrontOverlapping: morphsInFrontOverlapping:do: noteNewOwner: rootMorphsAt: rootMorphsAtGlobal: shuffleSubmorphs submorphAfter submorphBefore submorphCount submorphNamed: submorphNamed:ifNone: submorphOfClass: submorphThat:ifNone: submorphWithProperty: submorphs submorphsBehind:do: submorphsDo: submorphsInFrontOf:do: submorphsReverseDo: submorphsSatisfying:) ('submorphs-add/remove' abandon actWhen actWhen: addAllMorphs: addAllMorphs:after: addMorph: addMorph:after: addMorph:asElementNumber: addMorph:behind: addMorph:fullFrame: addMorph:inFrontOf: addMorphBack: addMorphCentered: addMorphFront: addMorphFront:fromWorldPosition: addMorphFrontFromWorldPosition: addMorphNearBack: comeToFront copyWithoutSubmorph: delete deleteSubmorphsWithProperty: goBehind privateDelete removeAllMorphs removeAllMorphsIn: removeMorph: removedMorph: replaceSubmorph:by: submorphIndexOf:) ('system primitives' creationStamp) ('testing' canDrawAtHigherResolution canDrawBorder: completeModificationHash isFlexed isMorph isSketchMorph isViewOfProject knownName modificationHash projectsViewed shouldDropOnMouseUp stepTime wantsSteps) ('text-anchor' addTextAnchorMenuItems:hand: changeDocumentAnchor changeInlineAnchor changeParagraphAnchor hasDocumentAnchorString hasInlineAnchorString hasParagraphAnchorString relativeTextAnchorPosition relativeTextAnchorPosition: textAnchorType textAnchorType:) ('texture support' isValidWonderlandTexture isValidWonderlandTexture: wonderlandTexture wonderlandTexture:) ('thumbnail' demandsThumbnailing morphRepresented permitsThumbnailing readoutForField: representativeNoTallerThan:norWiderThan:thumbnailHeight: updateThumbnailUrl updateThumbnailUrlInBook:) ('translation' isPlayer:ofReferencingTile: traverseRowTranslateSlotOld:of:to: traverseRowTranslateSlotOld:to:) ('undo' commandHistory undoMove:redo:owner:bounds:predecessor:) ('updating' changed) ('user interface' defaultLabelForInspector initialExtent) ('viewer' externalName) ('visual properties' canHaveFillStyles cornerStyle defaultBitmapFillForm fillStyle fillStyle: fillWithRamp:oriented: useBitmapFill useDefaultFill useGradientFill useSolidFill) ('private' moveWithPenDownBy: moveWithPenDownByRAA: privateAddAllMorphs:atIndex: privateAddMorph:atIndex: privateBounds: privateColor: privateDeleteWithAbsolutelyNoSideEffects privateFullBounds: privateFullMoveBy: privateMoveBy: privateOwner: privateRemove: privateRemoveMorph: privateRemoveMorphWithAbsolutelyNoSideEffects: 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) ('*connectors-scripting-override' categoriesForViewer) !