The purpose of this chapter is to provide basic information on every kind of Morph in Etoys, so that a person who understands the Squeak IDE tools described elsewhere in this manual can find out the rest of the details. Clues as to which tools can be used to get at various kinds of information are also provided. This is necessary in part because not all Morphs have Morphic object classes, so that they are not trivial to find in the system. There are other important details about how Morphs are initialized and their structure and usage that is not obvious in much the same way.
No attempt is made to explain the usage of these morphs beyond noting which other classes make use of them, and showing how to find the methods in which that happens.
Information about the Squeak objects corresponding to an Etoys object can be found via object inspectors and explorers. One inspector is provided via the halo menu of the object. On the debug submenu select inspect it. For the car in the home view of Etoys, the values shown are in this form.
Title: a SketchMorph
self: a SketchMorph
owner: a TransformationMorph<Car>(2040) on a SketchMorph(1216)
Further information is provided via the Etoys Players tool, which is in the Object Catalog in the Scripting category. Open an object of the kind desired, and open its viewer. It will appear in the listing in Players. On the menu for that object in Players, select inspect object. For the same car in the home view, a different set of values is displayed, in the following form.
Title: aPlayer140132117123
self: a Player140132117123 (2162) named Car
costume: a TransformationMorph<Car>(2040) on a SketchMorph(1216)
Each object has a player, a costume, and an owner. Composite objects have submorphs.
In Etoys 5.0, this information is available in the object's viewer if the eToyFriendly preference is turned off. Select the as object category.
Many objects are implemented using UnscriptedPlayer (when no scripts are defined for that object) and Player, with Morphs as costumes. Some have players of other classes, such as NCCurveMorph. In some cases, the costume is defined in a class method, and is not itself an instance of a class of its own.
Some objects are composites of other Etoys objects such as Alignments of Buttons and other controls. These are dissected out in the Objects and More Objects chapters in Volume I of this manual.
Some objects are implemented using multiple Squeak classes. Chess is an example, where it is necessary to define the board, the pieces, the moves, game records, and other data. These are noted where applicable.
This list was generated first by sorting the result of print it on the expression
Morph withAllSubclasses
in a Squeak Workspace window in instances of Etoys 4.0 and 5.0, and taking a diff of the results. Execute the following in a Workspace to see the version of any running Etoys.
SystemVersion current version.
Th list below was checked by examining the subclass tree of Morph in a Hierarchy Browser. One can get a similar result by examining the various Morphic-Extras, Etoys, and other such categories in a System Browser.
In addition to these Morph classes, there are objects created as special cases of Morphs using particular class methods. Such objects occur under
You can test most of these Morphs by opening a Workspace from the Open menu or with the keyboard shortcut ctrl-k in World (not in an object, where this shortcut brings up a font menu). Type the name of the Morph, then either of the command strings "new openInWorld" or "new openInHand". For example,
EllipseMorph new openInWorld
Select this line with the mouse, and then do it, either from the left-button menu within the workspace or with the keyboard shortcut ctrl-d. The morph will appear at the top left of the World. Some of it may be outside the Etoys window. Opening a Morph in hand puts it at the cursor, allowing the user to place it anywhere. The user can then explore the properties of the Morph in its Viewer and its Halo menu, including the name of its Etoys player.
Morphs created as specializations require a different syntax, in this form.
MorphName objectPrototoype openInHandFor each Morph discussed below, its entry gives its name, its Class definition (superclass, variable names, System Browser category), its Class comment (if any), a summary of objects that refer to it in any way (if any), and any Etoys object that it implements.
To explore an object in a System Browser,
AbstractMediaEventMorph
RectangleMorph subclass: #AbstractMediaEventMorph instanceVariableNames: 'startTimeInScore endTimeInScore' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
An abstract representation of media events to be placed in a PianoRollScoreMorph (or others as they are developed)
Senders of it:
There are no senders of AbstractMediaEventMorph
AcceptableCleanTextMorph
PluggableTextMorph subclass: #AcceptableCleanTextMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
No class comment.
Senders of it:
ChangeList buildMorphicCodePaneWith: editString
AlignmentMorph
RectangleMorph subclass: #AlignmentMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
Used for layout.
Since all morphs now support layoutPolicy the main use of this class is no longer needed.
Kept around for compatibility.
Supports a few methods not found elsewhere that can be convenient, eg. newRow
Senders of it: 215 users
AlignmentMorphBob1
AlignmentMorph subclass: #AlignmentMorphBob1 instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalSupport'
A quick and easy to space things vertically in absolute or proportional amounts.[sic]
Senders of it:
EtoyDAVLoginMorph
FancyMailComposition
GenericPropertiesMorph
PasteUpMorph
AllPlayersTool
AlignmentMorph subclass: #AllPlayersTool instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A tool that lets you see find, view, and obtain tiles for all the active players in the project.
Senders of it:
PasteUpMorph galleryOfPlayers
"Put up a tool showing all the players in the receiver's presenter. This would normally be all players in the world, but in the case of a 'private presenter', such as a so-called Scripting Area, the gallery will show only players within the presenter's scope."
AllScriptsTool
AlignmentMorph subclass: #AllScriptsTool instanceVariableNames: 'showingOnlyActiveScripts showingAllInstances showingOnlyTopControls' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A tool for controlling and viewing all scripts in a project. The tool has an open and a closed form. In the closed form, stop-step-go buttons are available, plus a control for opening the tool up. In the open form, it has a second row of controls that govern which scripts should be shown, followed by the individual script items.
Senders of it: Presenter
Optionally associated with a PasteUpMorph, provides a local scope for the running of scripts.
Once more valuable, may be again, but at present occupies primarily a historical niche.
Maintains a playerList cache.
Holds, optionally three 'standard items' -- standardPlayer standardPlayfield standardPalette -- originally providing idiomatic support of ongoing squeak-team internal work, but now extended to more general applicability.
Costume for All Scripts (Scripting category), implemented in this class.
AnimatedImageMorph
ImageMorph subclass: #AnimatedImageMorph instanceVariableNames: 'images delays stepTime nextTime imageIndex stepper' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalMorphs'
I am an ImageMorph that can hold more than one image. Each image has its own delay time.
Senders of it:
ExternalDropHandler
Form
AnonymousSoundMorph
AbstractMediaEventMorph subclass: #AnonymousSoundMorph instanceVariableNames: 'sound interimName' classVariableNames: '' poolDictionaries: '' category: 'Sound-Interface'
Holds a free-standing sound, i.e. one not associated with the system's sound library.
Can be played by hitting Play button, and can stop its playing by hitting Stop.
Can be dropped into a piano roll or into an event roll
Can also be named and added to the system sound library, by hitting the save button.
Senders of it:
RecordingControls, A facelifted version of John Maloney's original RecordingControlsMorph.
ArchiveViewer
SystemWindow subclass: #ArchiveViewer instanceVariableNames: 'archive fileName memberIndex viewAllContents' classVariableNames: '' poolDictionaries: '' category: 'Tools-ArchiveViewer'
This is a viewer window that allows editing and viewing of Zip archives.
Senders of it:
There are no senders of ArchiveViewer
Zip Tool is implemented in this class.
AssignmentTileMorph
TileMorph subclass: #AssignmentTileMorph instanceVariableNames: 'assignmentRoot assignmentSuffix dataType' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
No class comment.
Senders of it:
Morph (3 methods)
PhraseTileMorph (6 methods)
AtomMorphEllipseMorph subclass: #AtomMorph instanceVariableNames: 'velocity' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
AtomMorph represents an atom used in the simulation of
an ideal gas. It's container is typically a BouncingAtomsMorph.
Try:
BouncingAtomsMorph new openInWorld
to open the gas simulation or:
AtomMorph example
to open an instance in the current world
Senders of it:
BouncingAtomsMorph (3 methods)
Attachment Adjuster
This is implemented in the NCAttachmentPointAdjuster class, a subclass of EllipseMorph, and in the NCAttachmentPointAdjusterWindow class, a subclass of PasteUpMorph, both in the ConnectorsTools category in Squeak.
BackgroundMorph
Morph subclass: #BackgroundMorph instanceVariableNames: 'image offset delta running' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
This morph incorporates tiling and regular motion with the intent of supporting, eg, panning of endless (toroidal) backgrounds.
The idea is that embedded morphs get displayed at a moving offset relative to my position. Moreover this display is tiled according to the bounding box of the submorphs (subBounds), as much as necesary [sic] to fill the rest of my bounds.
Senders of it:
BackgroundMorph test
BalloonMorph
PolygonMorph subclass: #BalloonMorph instanceVariableNames: 'target offsetFromTarget balloonOwner' classVariableNames: 'BalloonColor BalloonFont' poolDictionaries: '' category: 'Morphic-Widgets'
A balloon with text used for the display of explanatory information.
Balloon help is integrated into Morphic as follows:
If a Morph has the property #balloonText, then it will respond to #showBalloon by adding a text balloon to the world, and to #deleteBalloon by removing the balloon.
Moreover, if mouseOverEnabled is true (see class msg), then the Hand will arrange to cause display of the balloon after the mouse has lingered over the morph for a while, and removal of the balloon when the mouse leaves the bounds of that morph. In any case, the Hand will attempt to remove any such balloons before handling mouseDown events, or displaying other balloons.
Balloons should not be duplicated with veryDeepCopy unless their target is also duplicated at the same time.
Senders of it:
MenuMorph Keystroke:
Morph (3 methods)
MorphWorldController
NCMakerButton
PasteUpMorph
Preferences
SugarNavigatorBar
Balloon is implemented in this BalloonMorph class.
BalloonRectangleMorph
RectangleMorph subclass: #BalloonRectangleMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Balloon-Geometry'
BalloonRectangleMorph is an example for drawing using the BalloonEngine.
Senders of it:
There are no senders of BalloonRectangleMorph
BasicButton
RectangleMorph subclass: #BasicButton instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
A minimalist button-like object intended for use with the tile-scripting system.
Senders of it:
PasteUpMorph buildShowClickableButton
"Return a button that momentarily highlights all clickable objects on the screen. Showing the highlights takes a second or two, so press and be patient.
BOBTransformationMorph
TransformationMorph subclass: #BOBTransformationMorph instanceVariableNames: 'worldBoundsToShow useRegularWarpBlt' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalSupport'
No Class comment.
Senders of it:
NetworkTerminalMorph openScaled
PasteUpMorph (3 methods)
BooklikeMorph
AlignmentMorph subclass: #BooklikeMorph instanceVariableNames: 'pageSize newPagePrototype' classVariableNames: 'PageFlipSoundOn' poolDictionaries: '' category: 'MorphicExtras-Books'
A common superclass for BookMorph and WebBookMorph
Senders of it:
There are no senders of BooklikeMorph
BookMorph
BooklikeMorph subclass: #BookMorph instanceVariableNames: 'pages currentPage' classVariableNames: 'MethodHolders VersionNames VersionTimes' poolDictionaries: '' category: 'MorphicExtras-Books'
A collection of pages, each of which is a place to put morphs. Allows one or another page to show; orchestrates the page transitions; offers control panel for navigating among pages and for adding and deleting pages.
Normal bookMorphs live in an image. "Squeak Pages" live on a server.
To write a book out to the disk or to a file server, decide what folder it goes in. Construct a url to a typical page:
file://myDisk/folder/myBook1.sp
or
ftp://aServer/folder/myBook1.sp
Choose "send all pages to server" from the book's menu (press the <> part of the controls). Choose "use page numbers". Paste in the url.
To load an existing book, find its ".bo" file in the file list browser. Choose "load as book".
To load an existing book from its url, execute:
¦(URLMorph grabURL: 'ftp://aServer/folder/myBook1.sp') book: true.
Multiple people may modify a book. If other people may have changed a book you have on your screen, choose "reload all from server".
Add or modify a page, and choose "send this page to server".
The polite thing to do is to reload before changing a book. Then write one or all pages soon after making your changes. If you store a stale book, it will wipe out changes that other people made in the mean time.
Pages may be linked to each other. To create a named link to a new page, type the name of the page in a text area in a page. Select it and do Cmd-6. Choose 'link to'. A new page of that name will be added at the back of the book. Clicking on the blue text flips to that page.
To create a link to an existing page, first name the page. Go to that page and Cmd-click on it. The name of the page is below the page. Click in it and backspace and type. Return to the page you are linking from. Type the name. Cmd-6, 'link to'.
Text search: Search for a set of fragments. allStrings collects text of fields. Turn to page with all fragments on it and highlight the first one. Save the container and offset in properties: #searchContainer, #searchOffset, #searchKey. Search again from there. Clear those at each page turn, or change of search key.
[rules about book indexes and pages: Index and pages must live in the same directory. They have the same file prefix, followed by .bo for the index or 4.sp for a page (or x4.sp). When a book is moved to a new directory, the load routine gets the new urls for all pages and saves those in the index. Book stores index url in property #url.
Allow mulitple indexes (books) on the same shared set of pages. If book has a url in same directory as pages, allow them to have different prefixes.
save all pages first time, save one page first time, fromRemoteStream: (first time)
save all pages normal , save one page normal, reload
where I check if same dir]
URLMorph holds url of both page and book.
Senders of it:
36 methods
Book is implemented in BookMorph.
BookPageSorterMorph
AlignmentMorph subclass: #BookPageSorterMorph instanceVariableNames: 'book pageHolder' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Books'
No Class comment.
Senders of it:
BooklikeMorph sortPages
BookPageThumbnailMorph
SketchMorph subclass: #BookPageThumbnailMorph instanceVariableNames: 'page pageNumber bookMorph flipOnClick' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Books'
A small picture representing a page of a BookMorph here or somewhere else. When clicked, make that book turn to the page and do a visual effect and a noise.
page either the morph of the page, or a url
pageNumber
bookMorph either the book, or a url
flipOnClick
Senders of it:
BookMorph (4 methods)
PasteUpMorph (4 methods)
BooleanScriptEditor
ScriptEditorMorph subclass: #BooleanScriptEditor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
A ScriptEditor required to hold a Boolean
Senders of it:
CompoundTileMorph initialize
BooleanTile
ScriptEditorMorph subclass: #BooleanScriptEditor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
A tile whose result type is boolean.
Senders of it:
Presenter systemQueryPhraseWithActionString: labelled:
StandardScriptingSystem tilesForQuery: label:
BorderedMorph
ScriptEditorMorph subclass: #BooleanScriptEditor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
BorderedMorph introduce borders to morph. Borders have the instanceVariables borderWidth and borderColor.
BorderedMorph new borderColor: Color red; borderWidth: 10; openInWorld.
BorderedMorph also have a varaity of border styles: simple, inset, raised, complexAltFramed, complexAltInset, complexAltRaised, complexFramed, complexInset, complexRaised.
These styles are set using the classes BorderStyle, SimpleBorder, RaisedBorder, InsetBorder and ComplexBorder.
BorderedMorph new borderStyle: (SimpleBorder width: 1 color: Color white); openInWorld.
BorderedMorph new borderStyle: (BorderStyle inset width: 2); openInWorld.
Senders of it:
12 methods
Bordered is implemented in this BorderedMorph.
BorderedStringMorph
ScriptEditorMorph subclass: #BooleanScriptEditor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCButtonBar class buttonTarget: target action: selector arguments: args icon: iconName label: label
"Construct an IconicButton with the given icon and label
and make it send selector to target with args
BorderedSubpaneDividerMorph
BorderedMorph subclass: #BorderedSubpaneDividerMorph instanceVariableNames: 'resizingEdge' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
THIS CLASS HAS NO COMMENT!
Senders of it:
20 methods providing dividers within windows
BouncingAtomsMorph
Morph subclass: #BouncingAtomsMorph instanceVariableNames: 'damageReported infectionHistory transmitInfection recentTemperatures temperature' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
This morph shows how an ideal gas simulation might work. When it gets step messages, it makes all its atom submorphs move along their velocity vectors, bouncing when they hit a wall. It also exercises the Morphic damage reporting and display architecture. Here are some things to try:
1. Resize this morph as the atoms bounce around.
2. In an inspector on this morph, evaluate "self addAtoms: 10."
3. Try setting quickRedraw to false in invalidRect:. This gives the
default damage reporting and incremental redraw. Try it for
100 atoms.
4. In the drawOn: method of AtomMorph, change drawAsRect to true.
5. Create a HeaterCoolerMorph and embed it in the simulation. Extract
it and use an inspector on it to evaluate "self velocityDelta: -5", then
re-embed it. Note the effect on atoms passing over it.
Senders of it:
PasteUpMorph class newWorldTesting {project}
Bouncing Atoms is implemented in this BouncingAtomsMorph class.
BroomMorph
Morph subclass: #BroomMorph instanceVariableNames: 'centered drawBroomIcon filter hotspot lastHotspot moved span start transient unmoved width' classVariableNames: 'BroomIcon' poolDictionaries: '' category: 'BroomMorphs-Base'
This is a Morph (actually a family of Morphs) that do alignment of other morphs.
BroomMorphs become: an object of one of their subclasses when dragged far enough.
Drag a BroomMorph in some direction and it becomes a broom that can align the Morphs it touches.
This idea is borrowed from the GEF framework (http://gef.tigris.org)
If you want to pick up a BroomMorph, you can use the Shift key.
Hitting the ESC key will re-position all moved Morphs to their original position.
BroomMorph newTransient will give you a BroomMorph that will delete itself on mouse up.
unmoved the set of Morphs that I won't move
moved the set of Morphs that I might move
start my first hotspot
span how wide to make (each half of) my bar initially
width the width of the main lines
hotspot my active position
lastHotspot my last active position
drawBroomIcon true if I look like a broom while idle (false=look like a +)
transient if true, then I delete myself on mouse-up
Senders of it:
BroomMorph basicClass {private}
BroomMorphDown
BroomMorph subclass: #BroomMorphDown instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BroomMorphs-Base'
I am a BroomMorph that pushes morphs down.
Senders of it:
BroomMorph morphIfNecessary: {stepping and presenter}
BroomMorphLeft
BroomMorphRight subclass: #BroomMorphLeft instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BroomMorphs-Base'
I am a BroomMorph that pushes morphs left.
Senders of it:
BroomMorph morphIfNecessary: {stepping and presenter}
BroomMorphRight
BroomMorph subclass: #BroomMorphRight instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BroomMorphs-Base'
I am a BroomMorph that pushes morphs right.
Senders of it:
BroomMorph morphIfNecessary: {stepping and presenter}
BroomMorphUp
BroomMorphDown subclass: #BroomMorphUp instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BroomMorphs-Base'
I am a BroomMorph that pushes morphs up.
Senders of it:
BroomMorph morphIfNecessary: {stepping and presenter}
BrowserCommentTextMorph
PluggableTextMorph subclass: #BrowserCommentTextMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Tools-Browser'
I am a PluggableTextMorph that knows enough to make myself invisible when necessary.
Senders of it:
Browser buildMorphicCommentPane {class comment pane}
ButtonPropertiesMorph
GenericPropertiesMorph subclass: #ButtonPropertiesMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Experimental'
ButtonPropertiesMorph basicNew
targetMorph: self;
initialize;
openNearTarget
Senders of it:
Morph openAButtonPropertySheet {meta-actions}
CachingMorph
Morph subclass: #CachingMorph instanceVariableNames: 'damageRecorder cacheCanvas' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Kernel'
This morph can be used to cache the picture of a morph that takes a long time to draw. It should be used with judgement, however, since heavy use of caching can consume large amounts of memory.
Senders of it:
There are no senders of CachingMorph.
CalendarMorph
Morph subclass: #CalendarMorph instanceVariableNames: 'date stepTime shouldUpdate' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Calendar'
CalendarMorph, by Ricardo Moran, 2011, with some changes by Scott Wallace, January 2012.
A CalendarMorph is single-month calendar that is scriptable using tiles in its viewer. It always has a 'selected' date, for which the correct month and year are shown; the actual day corresponding to the selected date is highlighted on the calendar.
Senders of it:
Vocabulary class initializeStandardVocabularies {class initialization}
CategoryViewer
Viewer subclass: #CategoryViewer instanceVariableNames: 'namePane chosenCategorySymbol' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A viewer on an object. Consists of three panes:
Header pane -- category-name, arrows for moving among categories, etc.
List pane -- contents are a list of subparts in the chosen category.
Editing pane -- optional, a detail pane with info relating to the selected element of the list pane.
Senders of it:
13 methods in StandardViewer and various tile Classes.
CenterBroomMorphDown
BroomMorphDown subclass: #CenterBroomMorphDown instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BroomMorphs-Base'
THIS CLASS HAS NO COMMENT!
Senders of it:
BroomMorph morphIfNecessary: {stepping and presenter}
CenterBroomMorphLeft
BroomMorphLeft subclass: #CenterBroomMorphLeft instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BroomMorphs-Base'
THIS CLASS HAS NO COMMENT!
Senders of it:
BroomMorph morphIfNecessary: {stepping and presenter}
CenterBroomMorphRight
BroomMorphRight subclass: #CenterBroomMorphRight instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BroomMorphs-Base'
THIS CLASS HAS NO COMMENT!
Senders of it:
BroomMorph morphIfNecessary: {stepping and presenter}
CenterBroomMorphUp
BroomMorphUp subclass: #CenterBroomMorphUp instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BroomMorphs-Base'
THIS CLASS HAS NO COMMENT!
Senders of it:
BroomMorph morphIfNecessary: {stepping and presenter}
ChessMorph
BorderedMorph subclass: #ChessMorph instanceVariableNames: 'board history redoList animateMove autoPlay' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games-Chess'
This class defines the user interface for a fine game of chess.
Senders of it:
ChessPieceMorph wantsToBeDroppedInto: {dropping/grabbing}
ChessPieceMorph
ImageMorph subclass: #ChessPieceMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games-Chess'
THIS CLASS HAS NO COMMENT!
Senders of it:
ChessMorph newPiece:white: {initialize}
ChineseCheckerPiece
EllipseMorph subclass: #ChineseCheckerPiece instanceVariableNames: 'boardLoc myBoard' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
I represent a player piece for Chinese Checkers. Mostly I act as an ellipse, but my special methods ensure that I cannot be picked up or dropped except in the proper circumstances.
Structure:
myBoard a ChineseCheckers morph
boardLoc my current logical position on the board.
Senders of it:
ChineseCheckers, 4 methods
ChineseCheckers
BorderedMorph subclass: #ChineseCheckers instanceVariableNames: 'board sixDeltas teams homes autoPlay whoseMove plannedMove plannedMovePhase colors movePhase animateMoves pathMorphs' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
An implementation of Chinese Checkers by Dan Ingalls. April 9, 2000.
board: A 19x19 rhombic array, addressed by row@col points, in which is imbedded the familiar six-pointed layout of cells. A cell outside the board is nil (-).
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - 5 - - - - -
- - - - - - - - - - - - 5 5 - - - - -
- - - - - - - - - - - 5 5 5 - - - - -
- - - - - - - - - - 5 5 5 5 - - - - -
- - - - - 6 6 6 6 0 0 0 0 0 4 4 4 4 -
- - - - - 6 6 6 0 0 0 0 0 0 4 4 4 - -
- - - - - 6 6 0 0 0 0 0 0 0 4 4 - - -
- - - - - 6 0 0 0 0 0 0 0 0 4 - - - -
- - - - - 0 0 0 0 0 0 0 0 0 - - - - -
- - - - 1 0 0 0 0 0 0 0 0 3 - - - - -
- - - 1 1 0 0 0 0 0 0 0 3 3 - - - - -
- - 1 1 1 0 0 0 0 0 0 3 3 3 - - - - -
- 1 1 1 1 0 0 0 0 0 3 3 3 3 - - - - -
- - - - - 2 2 2 2 - - - - - - - - - -
- - - - - 2 2 2 - - - - - - - - - - -
- - - - - 2 2 - - - - - - - - - - - -
- - - - - 2 - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
Cells within the board contain 0 if empty, or a team number (1..6) if occupied by a piece of that team. An extra border of nils around the whole reduces bounds checking to a nil test.
sixDeltas: An array giving the x@y deltas for the 6 valid steps in CCW order from a given cell. For team 1 they are: in fr, fl, l, bl, br, r. To get, eg fl for a given team, use (sixDeltas atWrap: team+1).
teams: An array of six teams, each of which is an array of the x@y locations of the 10 pieces.
homes: The x@y coordinates of the six home points, namely 14@2, 18@6, 14@14, 6@18, 2@14, 6@6. The goal, or farthest point in destination triangle, is thus (homes atWrap: teamNo+3).
autoPlay: An array of booleans, parallel to teams, where true means that Squeak will make the moves for the corresponding team.
whoseMove: A team number specifying whose turn it is next. Set to 0 when game is over.
plannedMove: If not nil, it means the board is in a state where it is animating the next move to be made so that it can be seen.
movePhase: Holds the state of display of the planned move so that, eg, it can appear one jump at a time. Advances from 1 to (plannedMove size * 2).
A move is an array of locs which are the path of the move.
Once the morph is open, the menu command 'reset...' allows you to reset the board and change the number of players. The circle at turnIndicatorLoc indicates the color of the team whose turn it is. If it is a human, play waits for drag and drop of a piece of that color.
The current strategy is very simple: generate all moves, score them and pick the best. Beyond this, it will look ahead a number of moves, but this becomes very expensive without pruning. Pruning would help the speed of play, especially in the end game where we look a little deeper. A more effective strategy would consider opponents' possible moves as well, but this is left as an exercise for the serious programmer.
Senders of it:
ChineseCheckerPiece mouseDown: {event handling}
CipherPanel
WordGamePanelMorph subclass: #CipherPanel instanceVariableNames: 'originalText quote originalMorphs decodingMorphs' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
The CipherPanel, as its name suggests, is a tool for decoding simple substitution codes, such as are presented on the puzzle pages of many Sunday newspapers. Most of the capability is inherited from the two WordGame classes used. To try it out, choose newMorph/Games/CipherPanel in a morphic project, or execute, in any project:
CipherPanel new openInWorld
Senders of it:
CipherPanel squeakCipher {menu}
Cipher is implemented in this CipherPanel class.
CircleMorph
EllipseMorph subclass: #CircleMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
I am a specialization of EllipseMorph that knows enough to remain circular.
Senders of it:
CircleMorph class supplementaryPartsDescriptions {as yet unclassified}
NCLineEndConstraintMorph class filledCircleShape {line end shapes}
NCLineEndConstraintMorph class junctionDotShape {line end shapes}
Circle is implemented in this CircleMorph class.
ClassRepresentativeMorph
ObjectRepresentativeMorph subclass: #ClassRepresentativeMorph instanceVariableNames: 'classRepresented' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of ClassRepresentativeMorph
Note: This Class has neither instance nor class methods of its own, only those it inherits.
ClipboardMorph
TextMorph subclass: #ClipboardMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
A morph that always displays the current contents of the text clipboard.
Senders of it:
There are no senders of ClipboardMorph
ClockMorph
StringMorph subclass: #ClockMorph instanceVariableNames: 'showSeconds show24hr nowTime' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
ClockMorph class registerInFlapsRegistry {class initialization}
Flaps class defaultsQuadsDefiningSuppliesFlap {flaps registry}
Flaps class defaultsQuadsDefiningWidgetsFlap {flaps registry}
Flaps class newLoneSuppliesFlap {predefined
CodecDemoMorph
RectangleMorph subclass: #CodecDemoMorph instanceVariableNames: 'codecClassName' classVariableNames: '' poolDictionaries: '' category: 'Sound-Interface'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of CodecDemoMorph
CollapsedMorph
SystemWindow subclass: #CollapsedMorph instanceVariableNames: 'uncollapsedMorph' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
THIS CLASS HAS NO COMMENT!
Senders of it:
Morph collapse {menus}
TileMorph handReferentMorph {misc}
ColorPickerMorph
SketchMorph subclass: #ColorPickerMorph instanceVariableNames: 'selectedColor sourceHand deleteOnMouseUp updateContinuously target selector argument originalColor theSelectorDisplayMorph command isModal clickedTranslucency noChart' classVariableNames: 'ColorChart DeleteBox DragBox FeedbackBox OpenFullBox RevertBox TransparentBox TransText' poolDictionaries: '' category: 'Morphic-Widgets'
A gui for setting color and transparency. Behaviour can be changed with the Preference modalColorPickers.
Senders of it:
27 methods
ColorPicker is implemented in this class.
ColorSeerTile
ColorTileMorph subclass: #ColorSeerTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
THIS CLASS HAS NO COMMENT!
Senders of it:
CategoryViewer addColorSeesDetailTo: {entries}
PhraseTileMorph isColorSeer {code generation}
ScriptEditorMorphBuilder specialSend:with:with: {reconstituting scripting tiles }
Viewer colorSeesPhrase {special phrases}
ColorSwatch
UpdatingRectangleMorph subclass: #ColorSwatch instanceVariableNames: 'argument' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
THIS CLASS HAS NO COMMENT!
Senders of it:
Preferences class windowSpecificationPanel {window colors}
ColorTileMorph
TileMorph subclass: #ColorTileMorph instanceVariableNames: 'colorSwatch showPalette' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
THIS CLASS HAS NO COMMENT!
Senders of it:
10 methods
CommandTilesMorph
TileLikeMorph subclass: #CommandTilesMorph instanceVariableNames: 'morph playerScripted' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
An entire Smalltalk statement in tiles. A line of code.
Senders of it:
There are no senders of CommandTilesMorph.
ComponentLayout
PasteUpMorph subclass: #ComponentLayout instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Components'
THIS CLASS HAS NO COMMENT!
Senders of it:
Component justDroppedInto:event: {drag and drop}
ComponentLikeModel justDroppedInto:event: {dropping/grabbing}
ComponentLikeModel
MorphicModel subclass: #ComponentLikeModel instanceVariableNames: 'pinSpecs' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Components'
THIS CLASS HAS NO COMMENT!
Senders of it:
SystemDictionary computeImageSegmentation {shrinking}
CompoundTileMorph
TileLikeMorph subclass: #CompoundTileMorph instanceVariableNames: 'type testPart yesPart noPart justGrabbedFromViewer' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A statement with other whole statements inside it. If-Then. Test.
Senders of it:
Used in ImageSegment, Morph, PhraseTileForTest, ScriptEditorMorph, StandardScriptingSystem, and StandardViewer.
ConnectorPropertiesMorph
GenericPropertiesMorph subclass: #ConnectorPropertiesMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Tools'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCAAConnectorMorph openAConnectorPropertySheet {visual properties}
CrosticPanel
WordGamePanelMorph subclass: #CrosticPanel instanceVariableNames: 'crosticPanel quotePanel cluesCol2 answers quote clues cluesPanel' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
The CrosticPanel, as its name suggests, is a tool for decoding acrostic puzzles, such as are presented on the puzzle pages of some Sunday newspapers. Much of the capability is inherited from the two WordGame classes used. To try it out, choose newMorph/Games/CrosticPanel in a morphic project, or execute, in any project:
CrosticPanel new openInWorld
The instance variables of this class include...
letterMorphs (in superclass) a collection of all the letterMorphs in this panel
quote a string, being the entire quote in uppercase with no blanks
clues a collection of the clue strings
answers a collection of the answer indices.
For each answer, this is an array of the indices into the quote string.
The final structure of a CrosticPanel is as follows
self a CrosticPanel the overall holder
quotePanel a CrosticQuotePanel holds the grid of letters from the quote
cluesPanel an AlignmentMorph holds most of the clue rows
cluesCol2 an AlignmentMorph holds the rest of the clue rows
Each clue row is a horizontal AlignmentMorph with a textMorph and another alignmentMorph full of the letterMorphs for the answer.
Senders of it:
CrosticPanel openFile {menu}
CrosticPanel quote:clues:answers:quotePanel: {initialization}
CrosticQuotePanel quote:answers:cluesPanel: {initialization}
CrosticQuotePanel
WordGamePanelMorph subclass: #CrosticQuotePanel instanceVariableNames: 'cluesPanel' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
THIS CLASS HAS NO COMMENT!
Senders of it:
CrosticPanel initializeToStandAlone {parts bin}
CrosticPanel class newFromFile: {instance creation}
CurveMorph
PolygonMorph subclass: #CurveMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
This is really only a shell for creating Shapes with smooth outlines.
Senders of it:
CurveMorph class registerInFlapsRegistry {*MorphicExtras-class initialization}
CurveMorph class supplementaryPartsDescriptions {*MorphicExtras-parts bin}
TabbedPalette class authoringPrototype {scripting}
DoCommandOnceMorph
BorderedMorph subclass: #DoCommandOnceMorph instanceVariableNames: 'target command actionBlock innerArea deleteAfterExecution' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
I am used to execute a once-only command. My first use was in loading/saving the current project. In such cases it is necessary to be in another project to do the actual work. So an instance of me is added to a new world/project and that project is entered. I do my stuff (save/load followed by a re-enter of the previous project) and everyone is happy.
Senders of it:
Project armsLengthCommand:withDescription: {file in/out}
Project class enterNewWithInitialBalloons {instance creation}
DoubleClickExample
RectangleMorph subclass: #DoubleClickExample instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Demo'
Illustrates the double-click capabilities of Morphic.
If you have a kind of morph you wish to have respond specially to a double-click, it should:
(1) Respond "true" to #handlesMouseDown:
(2) In its mouseDown: method, send #waitForClicksOrDrag:event: to the hand.
(3) Reimplement #click: to react to single-clicked mouse-down.
(4) Reimplement #doubleClick: to make the appropriate response to a double-click.
(5) Reimplement #drag: to react to non-clicks. This message is sent continuously until the button is released. You can check the event argument to react differently on the first, intermediate, and last calls.
Senders of it:
There are no senders of DoubleClickExample.
DownloadingImageMorph
Morph subclass: #DownloadingImageMorph instanceVariableNames: 'url altText defaultExtent image downloadQueue imageMapName formatter' classVariableNames: '' poolDictionaries: '' category: 'Network-HTML-Formatter'
a placeholder for an image that is downloading
Senders of it:
HtmlImage addToFormatter: {formatting}
HtmlInput addImageButtonToFormatter: {formatting}
DrawErrorMorph
Morph subclass: #DrawErrorMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Experimental'
This morph simply invokes errors during drawing and stepping.
Senders of it:
There are no senders of DrawErrorMorph.
DrGArcMorph (v5)
DrGPolylineMorph subclass: #DrGArcMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGAngle3PointsCostume instantiateMorph {initialize-release}
DrGAngle3PointsCostume redrawArc {updating}
DrGArcCostume instantiateMorph {initialize-release}
DrGArcCostume redraw {updating}
DrGCircleMorph (v5)
DrGMorph subclass: #DrGCircleMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGCircleCostume instantiateMorph {initialize-release}
DrGDrawable (v5)
PasteUpMorph subclass: #DrGDrawable instanceVariableNames: 'balloonTarget tipOn selection app ox oy scale' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-App'
I represent the area/place where a Drgeo figure is drawn. It is a subpart of the GeometricView
Senders of it:
DrGService initialize {initialize-release}
DrGLabelMorph (v5)
DrGStringMorph subclass: #DrGLabelMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGMathItemCostume textMorph: {accessing}
DrGLineMorph (v5)
DrGSegmentMorph subclass: #DrGLineMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
A DGLineMorph is extented to the boundary of its parent morph, a drawable in Dr. Geo jargon.
Senders of it:
DrGCircleCostume redrawAsLine {updating}
DrGLineCostume instantiateMorph {initialize-release}
DrGLocusMorph (v5)
DrGPolylineMorph subclass: #DrGLocusMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGLocusCostume instantiateMorph {initialize-release}
DrGMorph (v5)
BorderedMorph subclass: #DrGMorph instanceVariableNames: 'costume blink' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of DrGMorph.
DrGPointMorph (v5)
DrGMorph subclass: #DrGPointMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGPointCostume instantiateMorph {initialize-release}
DrGPolygoneMorph[sic] (v5)
DrGPolylineMorph subclass: #DrGPolygoneMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
MCStReader typeOfSubclass: {as yet unclassified}
DrGPolylineMorph (v5)
PolygonMorph subclass: #DrGPolylineMorph instanceVariableNames: 'blink costume' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGAngle3PointsCostume redrawRec {updating}
DrGRayMorph (v5)
DrGSegmentMorph subclass: #DrGRayMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
A DGRayMorph is extended in one 'sens' to the boundary of its parents morph, a drawable in Dr. Geo jargon.
Senders of it:
DrGRayCostume instantiateMorph {initialize-release}
DrGSegmentMorph (v5)
DrGPolylineMorph subclass: #DrGSegmentMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGArcCostume redraw {updating}
DrGSegmentCostume instantiateMorph {initialize-release}
DrGService (v5)
BorderedMorph subclass: #DrGService instanceVariableNames: 'app area' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-App'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGRayCostume instantiateMorph {initialize-release}
DrGStringMorph (v5)
StringMorph subclass: #DrGStringMorph instanceVariableNames: 'costume blink' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of DrGStringMorph.
DrGValueMorph (v5)
DrGStringMorph subclass: #DrGValueMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGValueCostume instantiateMorph {initialize-release}
DrGVectorMorph (v5)
DrGSegmentMorph subclass: #DrGVectorMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-Item-View'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGVectorCostume instantiateMorph {initialize-release}
DrGWizard (v5)
RectangleMorph subclass: #DrGWizard instanceVariableNames: 'pages currentPage' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-UI'
A DrGMacroMorph is an abstractact dialog to build and play macro.
It emits event when
- the user changes the page with the next and previous buttons
- the user press apply and cancel
Instance Variables
pages: dictionary of pages Morph
pages
- xxxxx
Senders of it:
There are no senders of DrGWizard.
DrGWizardMacroBuild (v5)
DrGWizard subclass: #DrGWizardMacroBuild instanceVariableNames: 'builder' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-UI'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGMacroBuilder initialize {initialize-release}
DrGWizardMacroPlay (v5)
DrGWizard subclass: #DrGWizardMacroPlay instanceVariableNames: 'builder macroFactories' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-UI'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGMacroPlayer initialize {initialize-release}
DrGWizardPage (v5)
Morph subclass: #DrGWizardPage instanceVariableNames: 'cancel previous nextOrApply buttons model content' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-UI'
A DrGWizardPage is a page morph to add in a wizard dialog..
Content can be added with the #content: message
Alternatively, it can be subclassed this class, to do so
override intialiaze with super call and at the end of
initialize use #content: message
Instance Variables
buttons: <Object>
cancel: <Object>
content: <Object>
model: <Object>
nextOrApply: <Object>
previous: <Object>
buttons
- xxxxx
cancel
- xxxxx
content
- xxxxx
model
- xxxxx
nextOrApply
- xxxxx
previous
- xxxxx
Senders of it:
DrGWizard goPage: {accessing}
DrGWizard class example {as yet unclassified}
DrGWizardMacroBuild firstPage {initialization}
DrGWizardMacroBuild fourthPage {initialization}
DrGWizardMacroBuild secondPage {initialization}
DrGWizardMacroBuild thirdPage {initialization}
DrGWizardMacroPlay firstPage {initialization}
DrGWizardMacroPlay secondPage {initialization}
DrGWizardScript firstPage {initialization}
DrGWizardScript secondPage {initialization}
DrGWizardScript (v5)
DrGWizard subclass: #DrGWizardScript instanceVariableNames: 'builder methodList instanceList' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-UI'
THIS CLASS HAS NO COMMENT!
Senders of it:
DrGScriptPlayer initialize {initialization}
DropDownChoiceMorph
PopUpChoiceMorph subclass: #DropDownChoiceMorph instanceVariableNames: 'items border' classVariableNames: 'SubMenuMarker' poolDictionaries: '' category: 'MorphicExtras-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
HtmlSelect addToFormatter: {formatting}
DumberMenuMorph
MenuMorph subclass: #DumberMenuMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Explorer'
Contributed by Bob Arning as part of the ObjectExplorer package.
Senders of it:
EToyHierarchicalTextGizmo genericMenu: {as yet unclassified}
EllipseMorph
BorderedMorph subclass: #EllipseMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
A round BorderedMorph. Supports borderWidth and borderColor.
Only simple borderStyle is implemented.
EllipseMorph new borderWidth:10; borderColor: Color green; openInWorld.
EllipseMorph new borderStyle:(SimpleBorder width: 5 color: Color blue); openInWorld.
Senders of it:
31 methods
EmbeddedWorldBorderMorph
AlignmentMorph subclass: #EmbeddedWorldBorderMorph instanceVariableNames: 'heights minWidth minHeight' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalSupport'
THIS CLASS HAS NO COMMENT!
Senders of it:
PasteUpMorph installAsActiveSubprojectIn:at:titled: {world state}
PasteUpMorph repairEmbeddedWorlds {world state}
ThreadNavigationMorph deleteCurrentPage {navigation}
EnvelopeEditorMorph
RectangleMorph subclass: #EnvelopeEditorMorph instanceVariableNames: 'sound soundName envelope hScale vScale graphArea pixPerTick limits limitXs limitHandles line prevMouseDown sampleDuration showAllEnvelopes denominator keyboard' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
THIS CLASS HAS NO COMMENT!
Senders of it:
AbstractSound class updateScorePlayers {sound library-file in/out}
MidiInputMorph atChannel:from:selectInstrument: {as yet unclassified}
ScorePlayerMorph atTrack:from:selectInstrument: {controls}
EnvelopeLineMorph
PolygonMorph subclass: #EnvelopeLineMorph instanceVariableNames: 'editor' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
THIS CLASS HAS NO COMMENT!
Senders of it:
EnvelopeEditorMorph addCurves {construction}
EToyChatMorph
EToyChatOrBadgeMorph subclass: #EToyChatMorph instanceVariableNames: 'listener receivingPane myForm recipientForm acceptOnCR sendingPane' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Collaborative'
EToyChatMorph new open setIPAddress: '1.2.3.4'
"
EToyChatMorph represents a chat session with another person. Type your message in the top text pane and press cmd-S.
"
Senders of it:
EToyChatMorph class chatWindowForIP:name:picture:inWorld: {as yet unclassified}
EToyIncomingMessage class handleNewChatFrom:sentBy:ipAddress: {handlers}
EToyIncomingMessage class handleNewSeeDesktopFrom:sentBy:ipAddress: {handlers}
EToyIncomingMessage class handleNewStatusRequestFrom:sentBy:ipAddress: {handlers}
EToySenderMorph startChat: {as yet unclassified}
EToyChatOrBadgeMorph
EToyCommunicatorMorph subclass: #EToyChatOrBadgeMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Experimental'
THIS CLASS HAS NO COMMENT!
Senders of it:
EToyChatOrBadgeMorph class includeInNewMorphMenu {new-morph participation}
Badge is implemented in this EtoyChatOrBadgeMorph class.
EToyCommunicatorMorph
AlignmentMorphBob1 subclass: #EToyCommunicatorMorph instanceVariableNames: 'fields resultQueue' classVariableNames: 'LastFlashTime' poolDictionaries: '' category: 'Etoys-Experimental'
====== find and report all instances =====
EToySenderMorph instanceReport
====== zap a bunch of ipAddresses =====
EToySenderMorph allInstances do: [ :each |
each ipAddress = '11.11.11.11' ifTrue: [each ipAddress: 'whizzbang']
].
==================== now change one of the whizzbang's back to the right address=====
====== delete the whizzbangs ======
EToySenderMorph allInstances do: [ :each |
each ipAddress = 'whizzbang' ifTrue: [each stopStepping; delete]
].
Senders of it:
EToyChatMorph
EToyCommunicatorMorph
EToyIncomingMessage
EToyMultiChatMorph
EtoyDAVLoginMorph
AlignmentMorphBob1 subclass: #EtoyDAVLoginMorph instanceVariableNames: 'theName theNameMorph thePassword thePasswordMorph actionBlock cancelBlock panel' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Experimental'
THIS CLASS HAS NO COMMENT!
Senders of it:
FileList2 loginHit {private}
EToyFridgeMorph
EToyCommunicatorMorph subclass: #EToyFridgeMorph instanceVariableNames: 'recipients incomingRow recipientRow updateCounter groupMode' classVariableNames: 'FridgeRecipients NewItems TheFridgeForm UpdateCounter' poolDictionaries: '' category: 'Nebraska-Morphic-Collaborative'
EToyFridgeMorph new openInWorld
Senders of it:
EToyIncomingMessage class handleNewFridgeMorphFrom:sentBy:ipAddress: {handlers}
EToySenderMorph aboutToBeGrabbedBy: {dropping/grabbing}
EToySenderMorph startChat: {as yet unclassified}
EToyGateKeeperEntry
MorphicModel subclass: #EToyGateKeeperEntry instanceVariableNames: 'ipAddress accessAttempts lastTimes acceptableTypes latestUserName attempsDenied lastRequests' classVariableNames: 'KnownIPAddresses' poolDictionaries: '' category: 'Nebraska-Morphic-Experimental'
THIS CLASS HAS NO COMMENT!
Senders of it:
EToyGateKeeperMorph class entryForIPAddress: {as yet unclassified}
EToyGenericDialogMorph
AlignmentMorphBob1 subclass: #EToyGenericDialogMorph instanceVariableNames: 'namedFields' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of EToyGenericDialogMorph.
EToyHierarchicalTextMorph
SimpleHierarchicalListMorph subclass: #EToyHierarchicalTextMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Outliner'
THIS CLASS HAS NO COMMENT!
Senders of it:
EToyHierarchicalTextGizmo notInAWindow {as yet unclassified}
EToyHierarchicalTextMorph class new {instance creation}
EToyListenerMorph
EToyCommunicatorMorph subclass: #EToyListenerMorph instanceVariableNames: 'listener updateCounter' classVariableNames: 'GlobalIncomingQueue GlobalListener QueueSemaphore UpdateCounter WasListeningAtShutdown' poolDictionaries: '' category: 'Nebraska-Morphic-Collaborative'
EToyListenerMorph new open
EToyListenerMorph startListening.
EToyListenerMorph stopListening.
"
EToyListenerMorph listens for messgaes from other EToy communicators. You need one of these open to receive messages from elsewhere.
- Received Morphs are shown in a list. Items can be grabbed (a copy) or deleted.
- Chat messages are sent to an appropriate EToyChatMorph (created if necessary)
"
Senders of it:
EToyListenerMorph class ensureListenerInCurrentWorld {as yet unclassified}
EToyPeerToPeer makeOptionalHeader {sending}
EtoyLoginMorph
AlignmentMorphBob1 subclass: #EtoyLoginMorph instanceVariableNames: 'theName theNameMorph actionBlock cancelBlock' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
THIS CLASS HAS NO COMMENT!
Senders of it:
ProjectLauncher doEtoyLogin {eToy login}
EToyMorphsWelcomeMorph
EToyCommunicatorMorph subclass: #EToyMorphsWelcomeMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Collaborative'
EToyMorphsWelcomeMorph new openInWorld
Senders of it:
EToyIncomingMessage class handleNewMorphFrom:sentBy:ipAddress: {handlers}
EToyMultiChatMorph
EToyChatMorph subclass: #EToyMultiChatMorph instanceVariableNames: 'targetIPAddresses' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Collaborative'
THIS CLASS HAS NO COMMENT!
Senders of it:
EToyIncomingMessage class handleNewMultiChatFrom:sentBy:ipAddress: {handlers}
EToyProjectDetailsMorph
EToyProjectRenamerMorph subclass: #EToyProjectDetailsMorph instanceVariableNames: 'projectDetails' classVariableNames: 'AgeTriplets RegionTriplets SubjectTriplets' poolDictionaries: '' category: 'Etoys-Experimental'
THIS CLASS HAS NO COMMENT!
Senders of it:
FileList2 loginHit {private}
InternalThreadNavigationMorph insertNewProject {navigation}
Project validateProjectNameIfOK: {menu messages}
ProjectNavigationMorph editProjectInfo {the actions}
ProjectSorterMorph insertNewProject: {menu commands}
EToyProjectHistoryMorph
EToyCommunicatorMorph subclass: #EToyProjectHistoryMorph instanceVariableNames: 'changeCounter' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
EToyProjectHistoryMorph new openInWorld
EToyProjectHistoryMorph provides a quick reference of the most recent projects. Click on one to go there.
Senders of it:
ProjectNavigationMorph gotoAnother {the actions}
EToyProjectQueryMorph
EToyProjectDetailsMorph subclass: #EToyProjectQueryMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
THIS CLASS HAS NO COMMENT!
Senders of it:
ProjectNavigationMorph findSomethingOnSuperSwiki {the buttons}
EToyProjectRenamerMorph
EToyGenericDialogMorph subclass: #EToyProjectRenamerMorph instanceVariableNames: 'actionBlock theProject' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
Nowadays, anyway, EToyProjectRenamerMorph only occurs as an abstract superclass for EToyProjectQueryMorph and EToyProjectDetailsMorph.
Senders of it:
MCStReader typeOfSubclass: {as yet unclassified}
EToySenderMorph
EToyChatOrBadgeMorph subclass: #EToySenderMorph instanceVariableNames: 'userPicture' classVariableNames: 'DEBUG' poolDictionaries: '' category: 'Nebraska-Morphic-Collaborative'
EToySenderMorph
new
userName: 'Bob Arning'
userPicture: nil
userEmail: 'arning@charm.net'
userIPAddress: '1.2.3.4';
position: 200@200;
open
"
EToySenderMorph represents another person to whom you wish to send things. Drop a morph on an EToySenderMorph and a copy of that morph is sent to the person represented. Currently only peer-to-peer communications are supported, but other options are planned.
"
Senders of it:
EToyChatMorph startOfMessageFromMe {as yet unclassified}
EToyChatMorph class chatFrom:name:text: {as yet unclassified}
EToyChatMorph class chatWindowForIP:name:picture:inWorld: {as yet unclassified}
EToyFridgeMorph acceptDroppingMorph:event: {layout}
EToyFridgeMorph handlesMouseDown: {event handling}
EToyFridgeMorph mouseEnterEither: {as yet unclassified}
EToyMultiChatMorph acceptDroppingMorph:event: {layout}
EToyMultiChatMorph wantsDroppedMorph:event: {dropping/grabbing}
EToySenderMorph class nameForIPAddress: {as yet unclassified}
EToySenderMorph class pictureForIPAddress: {as yet unclassified}
NebraskaClient initialize: {initialization}
SugarBuddy makeBadge {actions}
SugarLauncher badgeFor: {presence}
EToyTextNode
TextMorph subclass: #EToyTextNode instanceVariableNames: 'children firstDisplay' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Outliner'
THIS CLASS HAS NO COMMENT!
Senders of it:
EToyHierarchicalTextGizmo class example {as yet unclassified}
EToyHierarchicalTextMorph class new {instance creation}
EToyTextNode addNewChildAfter: {as yet unclassified}
EtoyUpdatingThreePhaseButtonMorph
UpdatingThreePhaseButtonMorph subclass: #EtoyUpdatingThreePhaseButtonMorph instanceVariableNames: '' classVariableNames: 'CheckedForm MouseDownForm UncheckedForm' poolDictionaries: '' category: 'Etoys-Widgets'
A slight variation wherein the actionSelector and getSelector both take argument(s).
Senders of it:
AlignmentMorphBob1 simpleToggleButtonFor:attribute:help: {as yet unclassified}
EToyFridgeMorph groupToggleButton {as yet unclassified}
GenericPropertiesMorph directToggleButtonFor:getter:setter:help: {as yet unclassified}
ParameterDescription asBooleanMorph {creation}
ParameterDescription asExtentMorph {creation}
Each of the methods above requires some further context to define the button's actions. Look at their senders for examples.
EToysLauncher
Morph subclass: #EToysLauncher instanceVariableNames: 'window showGallery' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Demo'
I am a simple launcher for recent projects.
EToysLauncher new openInHand
- I find latest ten projects in "My Squeak" and image directories (see: EToysLauncher>>directories).
- A thumbnail can be shown if there is "project name.gif" file.
- You can enter a project when you click a thumbnail.
- The list is updated when you go and back project.
Senders of it:
Sketch5 click
EventMorph
RectangleMorph subclass: #EventMorph instanceVariableNames: 'event' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
An abstract superclass for KeyboardEventMorph, MediaEventMorph, and MouseEventSequenceMorph. These are morphs used on an EventRoll to represent events on an event tape.
Senders of it:
There are no senders of EventMorph.
EventPlaybackButton
IconicButton subclass: #EventPlaybackButton instanceVariableNames: 'caption contentArea tape autoStart autoDismiss initialPicture finalPicture' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
Obsolete -- the functionality of this class was subsumed in March 2007 by class PlaybackInvoker.
Class retained "temporarily" in support of pre-existing content. Probably can now be gotten rid of...
Formerly:
A button which, when clicked, will open up an event-playback space, in which the user can play an event "movie".
caption - a String --the label beneath the button's icon.
contentArea - a Worldlet - a veryDeepCopy of the contentArea of the contributing MentoringEventRecorder at the time the recording was made.
tape - an Array of MorphicEvent objects.
voiceRecorder - a copy of the voiceRecorder of the contributing MentoringEventRecorder.
Senders of it:
There are no senders of EventPlaybackButton.
EventPlaybackSpace
EventRecordingSpace subclass: #EventPlaybackSpace instanceVariableNames: 'autoStart autoDismiss' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
An area used for playback of event-recorded movies, as it were.
Senders of it:
EventPlaybackButton launchPlayback {initialization}
PlaybackInvoker launchPlayback {initialization}
EventRecorderMorph
AlignmentMorph subclass: #EventRecorderMorph instanceVariableNames: 'tape state time deltaTime recHand playHand lastEvent lastDelta tapeStream saved statusLight voiceRecorder startSoundEvent recordMeter caption journalFile noCondense areaBounds areaOffset lastInterpolation' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalSupport'
During recording, the EventRecorder subscribes to all events of the normal morphic hand, and saves them as they occur.
For replay, a second playback hand is created that reads events from the recorder and plays the events back in the world.
Recording a second time erases the previous recording (in this recorder). A tape of events can be saved to a file, which is then safe on the disk.
noCondense = true during a brush stroke in the paint system, which we do not want to condense or remove any points from.
The EventRecorder began with the work of Ted Kaehler and John Maloney. This was then signifcantly expanded by Leandro Caniglia and Valeria Murgia as a tutorial aid for the Morphic Wrapper project.
Since that time, I have...
Changed to a simple inboard array for the tape (event storage).
Provided the ability to condense linear mouse movement with interpolation at replay.
Made simple provisions for wrap-around of the millisecond clock.
Eliminated step methods in favor of using the processEvents cycle in the playback hand.
Provided a pause/resume mechanism that is capable of surviving project changes.
Added the ability to spawn a simple 'play me' button that can be saved as a morph.
Caused the playback hand to display its cursor double size for visibility.
Integrated a voice recorder with on-the-fly compression.
This currently does NOT survive project changes, nor is its data stored on the tape.
Right now it can only be saved by saving the entire recorder as a morph.
This will be fixed by adding a startSound event at each project change.
We will also convert read/write file to use saveOnFile.
Added a journal-file facility to help debug recording sequences that end in a crash.
The above two features can be engaged via the ER's morph menu.
- Dan Ingalls 3/6/99
Changes for OLPC by TK:
Don't condense brush strokes in painting.
Notice when we are recording inside of a Scripting Area (property #tutorial).
The bounds of the Scripting Area is noted in the inst var areaBounds (stream (UnknownEvent type #tutorialBounds)). Upon playback, the events are translated for the enclosing Scripting Area's new origin.
Handling of events is done relative to the Scripting Area to let playback work when some other object occludes it.
An ajdustment for screen size area change and still opening Flaps?
Senders of it:
EventPlaybackButton duration {initialization}
EventRecorderMorph createPlayButton {commands}
EventRecorderMorph spawnStartingState {commands}
FileList class initialize {class initialization}
HandMorph eventRecorders {listeners}
HandMorph pauseEventRecorderIn: {event handling}
EventRecordingSpace
AlignmentMorph subclass: #EventRecordingSpace instanceVariableNames: 'contentArea controlsPanel soundPanel publishButton abandonButton menuButton recordButton recordAgainButton recordVoiceoverButton stopRecordingVoiceoverButton scriptButton playButton rewindButton stopButton pauseButton resumeButton captionMorph showingSoundButton eventRecorder state initialContentArea balloonHelpString initialPicture finalPicture showingSoundPanel eventRoll priorVersions' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
Externally called the Event Theatre, this is a tool for authoring event-recorded sequences with possible voiceover. Event "tapes" created with an Event Theatre can be edited using the Event Roll.
Values for the "state" instance variable, which characterizes the combined state of an Event-Theatre + MentoringEventRecorder complex:
readyToRecord No recording ever made
rewound Recording exists; not actively doing anything, and recently rewound.
atEndOfPlayback Recording exists; not actively doing anything; played since last rewind.
recordingWithSound Currently making primary recording, with sound
recording Currently making primary recording, sans sound
playback
playbackAddingVoiceover Currently running playback while recording a voiceover for a portion of it
suspendedPlayback In the midst of playback, user hit the Pause button
Senders of it:
EventPlaybackButton changeCaption {menu }
EventPlaybackButton openInRecordingSpace {button}
EventPlaybackSpace openForScoreEditing {commands}
EventRecordingSpace class openFromPlaybackButton: {instance creation}
InteriorSugarNavBar setupSuppliesFlap {initialization}
PlaybackInvoker changeCaption {menu }
PlaybackInvoker openInRecordingSpace {menu }
TheWorldMenu openMenu {construction}
EventRecordingSpaceNavigator
ProjectNavigationMorph subclass: #EventRecordingSpaceNavigator instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Navigators'
A custom navigator to use within the content area of an EventRecordingSpace.
Senders of it:
EventRecordingSpace addNavigatorFlap {flaps}
EventRollCursor
Morph subclass: #EventRollCursor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A Morph serving as the cursor on an EventTimeline in an EventRoll.
At present, there is no real benefit to having a separate class for the cursor, since it has no unique behavior yet. However, in the future we may wish for the cursor to be more dynamic, and this gives us a way in for doing things like that.
Senders of it:
EventRollMorph initialize {initialization}
EventRollMorph
AlignmentMorph subclass: #EventRollMorph instanceVariableNames: 'startTime millisecondsPerPixel totalDuration eventTheatre rawEventTape mouseTrack keyboardTrack mediaTrack actualRoll eventPlaybackCursor' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A tool used in conjunction with an event-recording-space to view and edit events in an event score.
Senders of it:
EventPlaybackButton putEventsOnto: {event roll}
EventRecordingSpace makeHorizontalRoll {commands}
Morph eventRoll {accessing}
SoundTile putEventsOnto: {event handling}
EventTimeline
PasteUpMorph subclass: #EventTimeline instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
An EventTimeline is the scrollable surface on which the events are laid out in the EventRoll.
Senders of it:
EventMorph justDroppedInto:event: {drag and drop}
EventRollMorph formulate {processing}
FatBitsPaint
SketchMorph subclass: #FatBitsPaint instanceVariableNames: 'formToEdit magnification brush brushSize brushColor lastMouse currentTools currentSelectionMorph selectionAnchor backgroundColor' classVariableNames: 'FormClipboard' poolDictionaries: '' category: 'MorphicExtras-AdditionalWidgets'
Extensions to FatBitsPaint
With the goal of making FatBitsPaint a fairly nifty Form fixer-upper in the Squeak/morphic environment, I have started this set of extensions. It will probably be updated as the mood strikes, so keep an eye out for new versions.
First, some basic operating instructions:
Get a Form and send it the message #morphEdit. To get started, you can try:
(Form fromUser) morphEdit
And there is the form in all its glory. Control click on the form to get theFatBitsPaint menu and choose the "keep this menu up" item. This will be your main tool/command palette. With it you can:
¥ Change the magnification
¥ Change the brush size (in original scale pixels)
¥ Change the brush color (via a ColorPickerMorph)
Now to some of the enhancements:
(25 September 1999 2:38:25 pm )
¥ ColorPickerMorphs now have a label below that indicates their use (you might have more than one open)
¥ A quirk that could get the brush size out of alignment with the pixel size is fixed.
¥ A background has been added so that you can see the full extent of the Form and so that you can observe the effect of translucent pixels in the form.
¥ A menu item has been added to change the background color so that you can simulate the real environment the form will be displayed in.
¥ The magnification and brush size menus now highlight their current value.
¥ An inspect option has been added to the menu so that you can do arbitrary things to the form.
¥ A file out option has been added to write the form to a file.
(25 September 1999 10:02:13 pm )
¥ New menu item: Tools allows you to choose between (for now) Paint Brush (all there was before) and Selections. Selections allows you to select rectangular regions of the form where the next menu takes over.
¥ New menu item: Selections gives you choices:
¥ edit separately - opens a new editor on the selected rectangle. Useful for cropping.
¥ copy - copies the selection rectangle to a clipboard. Can be pasted to this or another FatBitsPaint.
¥ cut - does a copy and clears the selection to transparent.
¥ paste - paints the contents of the clipboard over the current selection. Only the starting point of the selection matters - the extent is controlled by the clipboard.
Senders of it:
Form bitEdit {editing}
Form morphEdit {editing}
FillInTheBlankMorph
RectangleMorph subclass: #FillInTheBlankMorph instanceVariableNames: 'response done textPane responseUponCancel' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
THIS CLASS HAS NO COMMENT!
Senders of it:
22 methods
FishEyeMorph
MagnifierMorph subclass: #FishEyeMorph instanceVariableNames: 'gridNum d clipRects toRects quads savedExtent' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of FishEyeMorph.
FlapTab
ReferenceMorph subclass: #FlapTab instanceVariableNames: 'flapShowing edgeToAdhereTo slidesOtherObjects popOutOnDragOver popOutOnMouseOver inboard dragged lastReferentThickness edgeFraction labelString referentMargin' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Flaps'
The tab associated with a flap.
nb: slidesOtherObjects and inboard are instance variables relating to disused features. The feature implementations still exist in the system, but the UI to them has been sealed off.
Senders of it:
39 methods
Flaps are implemented also in the Flaps class, a subclass of Object, and ViewerFlapTab, a subclass of Flaptab.
Flaps newNavigatorFlap openInHand. Flaps newObjectsFlap openInHand. Flaps newPaintingFlap openInHand. Flaps newSqueakFlap openInHand. Flaps newStackToolsFlap openInHand. Flaps newSugarNavigatorFlap openInHand. Flaps newSuppliesFlap openInHand. Flaps newToolsFlap openInHand. Flaps newWidgetsFlap openInHand.
FlashButtonMorph
FlashCharacterMorph subclass: #FlashButtonMorph instanceVariableNames: 'events sounds target' classVariableNames: 'ActionHelpText' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashMorphReader recordDefineButton: {defining buttons}
FlashCharacterMorph
FlashMorph subclass: #FlashCharacterMorph instanceVariableNames: 'id stepTime frame renderTime vData mData dData cmData rData' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashMorphReader recordEndSprite: {misc}
FlashMorphReader recordShapeEnd: {composing shapes}
Flasher
EllipseMorph subclass: #Flasher instanceVariableNames: 'onColor' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
A simple example - a circle that flashes.
The "onColor" instance variable indicates the color to use when "on", A darker color is used to represent "off".
The #step method, called every 500ms. by default, alternatively makes the flasher show its "on" and its "off" color.
Senders of it:
Player availableCostumeNames {costume}
SmartRefStream initKnownRenames {read write}
FlashGlyphMorph
FlashMorph subclass: #FlashGlyphMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashMorphReader recordFontShapeEnd:with: {defining text}
FlashMorph
MatrixTransformMorph subclass: #FlashMorph instanceVariableNames: 'colorTransform' classVariableNames: 'FlashSoundVolume' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashMorphReader recordButton:character:state:layer:matrix:colorTransform: {defining buttons}
PasteUpMorph isSafeToServe {Nebraska}
FlashMorphingMorph
FlashCharacterMorph subclass: #FlashMorphingMorph instanceVariableNames: 'srcShapes dstShapes morphShapes' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashMorphReader recordMorphShapeEnd: {composing morphs}
FlashPlayerMorph
FlashSpriteMorph subclass: #FlashPlayerMorph instanceVariableNames: 'activationKeys activeMorphs localBounds sourceUrl progressValue' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashMorphReader on: {initialize}
FlashPlayerMorph copyMovieFrom:to: {copying}
HtmlEmbedded class initialize {initialize}
FlashPlayerWindow
SystemWindow subclass: #FlashPlayerWindow instanceVariableNames: 'startButton stopButton progress' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashPlayerMorph openInMVC {initialize}
FlashPlayerMorph openInWorld {initialize}
FlashShapeMorph
FlashMorph subclass: #FlashShapeMorph instanceVariableNames: 'shape' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashCharacterMorph shape {testing}
FlashMorphingMorph from:to: {initialize}
FlashMorphReader endShape {computing shapes}
FlashSorterMorph
TransformMorph subclass: #FlashSorterMorph instanceVariableNames: 'player' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashPlayerMorph openSorter {menu}
FlashSpriteMorph
FlashMorph subclass: #FlashSpriteMorph instanceVariableNames: 'playing maxFrames loadedFrames frameNumber stepTime damageRecorder sounds actions labels lastStepTime useTimeSync' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashMorphReader recordBeginSprite:frames: {misc}
FlashTextMorph
FlashCharacterMorph subclass: #FlashTextMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashMorphReader recordTextStart:bounds:matrix: {defining text}
FlashThumbnailMorph
BorderedMorph subclass: #FlashThumbnailMorph instanceVariableNames: 'player frameNumber image selected' classVariableNames: '' poolDictionaries: '' category: 'Flash-Morphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashSorterMorph addThumbnails: {initialization}
FlexMorph
SketchMorph subclass: #FlexMorph instanceVariableNames: 'originalMorph borderWidth borderColor' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalMorphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
BookMorph reserveUrlsIfNeeded {menu}
BookPageThumbnailMorph makeFlexMorphFor: {as yet unclassified}
FloatingBookControlsMorph
AlignmentMorph subclass: #FloatingBookControlsMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Navigators'
THIS CLASS HAS NO COMMENT!
Senders of it:
BookMorph buildFloatingPageControls {navigation}
FollowingWatcher (v5)
WatcherWrapper subclass: #FollowingWatcher instanceVariableNames: 'attachmentEdge offset' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
A watcher that follows its watchee around.
attachmentEdge: can be #left, #right #bottom, #top, #topLeft, #topRight, #bottomLeft, #bottomRight, #center)
offset: (x,y) offset from the nominal attachment point.
Senders of it:
Morph addGraphLocationPlotter {*MorphicExtras-accessing}
Player tearOffAttachedLabeledWatcherFor: {slots-user}
Player tearOffAttachedWatcherFor: {slots-user}
FrameRateMorph
StringMorph subclass: #FrameRateMorph instanceVariableNames: 'lastDisplayTime framesSinceLastDisplay' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
Flaps class defaultsQuadsDefiningWidgetsFlap {flaps registry}
FrameRateMorph class registerInFlapsRegistry {class initialization}
FreeCell
AlignmentMorph subclass: #FreeCell instanceVariableNames: 'board cardsRemainingDisplay elapsedTimeDisplay gameNumberDisplay lastGameLost state autoMoveRecursionCount myFillStyle' classVariableNames: 'Statistics' poolDictionaries: '' category: 'Morphic-Games'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of FreeCell.
FreeCellBoard
AlignmentMorph subclass: #FreeCellBoard instanceVariableNames: 'cardDeck lastCardDeck freeCells homeCells stacks target actionSelector hardness' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
The model of a freecell game. Holds the stacks of cards.
cardDeck
lastCardDeck
freeCells
homeCells
stacks array of CardDecks of the columns of cards.
----
Hardness: a number from 1 to 10000.
After dealing, count down the number. For each count, go to next column, pick a ramdom card (with same generator as deck) and move it one place in its stack. This is a kind of bubble sort. Interesting that the slowness of bubble sort is a plus -- gives fine gradation in the hardness.
Moving a card: Move red cards to deep half, black to shallow (or vice versa). Within a color, put low cards deep and high cards shallow.
If speed is an issue, move several steps at once, decrementing counter.
(May make it easier? If running columns, need a way to make harder in other ways.)
Senders of it:
FreeCell board {accessing}
FunctionComponent
TextComponent subclass: #FunctionComponent instanceVariableNames: 'inputSelectors functionSelector outputSelector outputValue' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Components'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of FunctionComponent.
FunctionNameTile
TileMorph subclass: #FunctionNameTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
An operator tile holding the name of a function; used in conjunction with a FunctionTile which is always its owner.
Senders of it:
FunctionTile operator:wording:helpString:pad: {initialization}
FunctionTile
TileMorph subclass: #FunctionTile instanceVariableNames: 'functionNameTile argumentPad' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A scripting tile consisting of a function-name and an argument pad, and representing a call to a numeric function of a single argument.
Senders of it:
BooleanScriptEditor wantsDroppedMorph:event: {dropping/grabbing}
CategoryViewer booleanPhraseFromPhrase: {support}
Flaps class defaultsQuadsDefiningScriptingFlap {flaps registry}
FunctionTile class randomNumberTile {scripting}
Morph class supplementaryPartsDescriptions {*MorphicExtras-parts bin}
Presenter valueTiles {tile support}
ScriptEditorMorph handUserFunctionTile {other}
ScriptEditorMorph handUserRandomTile {other}
ScriptEditorMorphBuilder functionSend:with:with: {reconstituting scripting tiles }
StandardScriptingSystem randomNumberTile {gold box}
StandardScriptingSystem seminalFunctionTile {gold box}
TileMorph couldAddSuffixArrow {arrows}
TileMorph showSuffixChoices {arrows}
TileMorph wrapPhraseInFunction {arrows}
TilePadMorph wrapInFunction {miscellaneous}
GeeBookMorph
BookMorph subclass: #GeeBookMorph instanceVariableNames: 'geeMail' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-GeeMail'
THIS CLASS HAS NO COMMENT!
Senders of it:
GeeMailMorph convertToBook {as yet unclassified}
TextPlusPasteUpMorph acceptDroppingMorph:event: {layout}
TextPlusPasteUpMorph wantsDroppedMorph:event: {dropping/grabbing}
GeeBookPageMorph
PasteUpMorph subclass: #GeeBookPageMorph instanceVariableNames: 'geeMail geeMailRectangle' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-GeeMail'
THIS CLASS HAS NO COMMENT!
Senders of it:
GeeBookMorph initialize {initialization}
GeeBookMorph rebuildPages {as yet unclassified}
GeeMailMorph
ScrollPane subclass: #GeeMailMorph instanceVariableNames: 'theTextMorph thePasteUp' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-GeeMail'
GeeMail is a scrolling playfield with a text morph (typically on the left) and room on the right for other morphs to be placed. The morphs on the right can be linked to text selections on the left so that they remain positioned beside the pertinent text as the text is reflowed. Probably the best thing is and example and Alan will be making some available soon.
Senders of it:
Flaps class defaultsQuadsDefiningWidgetsFlap {flaps registry}
TextPlusMorph parentGeeMail {as yet unclassified}
GeePrinterDialogMorph
AlignmentMorphBob1 subclass: #GeePrinterDialogMorph instanceVariableNames: 'printSpecs printBlock' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-GeeMail'
THIS CLASS HAS NO COMMENT!
Senders of it:
GeePrinter doPages {Postscript Canvases}
GenericPropertiesMorph
AlignmentMorphBob1 subclass: #GenericPropertiesMorph instanceVariableNames: 'myTarget thingsToRevert' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of GenericPropertiesMorph.
GoldBoxMenu
AlignmentMorph subclass: #GoldBoxMenu instanceVariableNames: 'scriptor lastItemMousedOver' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A graphical menu that is put up whe the user requests it from the gold-box icon in the header of a Blue scriptor.
Senders of it:
ScriptEditorMorph goldBoxMenu {gold box}
GrabPatchMorph
ImageMorph subclass: #GrabPatchMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
When an instance of GrabPatchMorph is dropped by the user, it signals a desire to do a screen-grab of a rectangular area.
Senders of it:
Flaps class defaultsQuadsDefiningPlugInSuppliesFlap {predefined flaps}
GradientFillMorph
RectangleMorph subclass: #GradientFillMorph instanceVariableNames: 'fillColor2 gradientDirection colorArray colorDepth' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
Class GradientFillMorph is obsolete. For getting gradient fills use a BorderedMorph with an appropriate fill style, e.g.,
| morph fs |
morph _ BorderedMorph new.
fs _ GradientFillStyle ramp: {0.0 -> Color red. 1.0 -> Color green}.
fs origin: morph bounds center.
fs direction: (morph bounds width // 2) @ 0.
fs radial: true.
morph fillStyle: fs.
World primaryHand attachMorph: morph.
Here's the old (obsolete) comment:
GradientFills cache an array of bitpatterns for the colors across their rectangle. It costs a bit of space, but makes display fast enough to eschew the use of a bitmap. The array must be recomputed whenever the colors, dimensions or display depth change.
Senders of it:
SmartRefStream gradientFillbosfcepbbfgcc0 {conversion}
GraphicalDictionaryMenu
GraphicalMenu subclass: #GraphicalDictionaryMenu instanceVariableNames: 'baseDictionary entryNames lastSearchString' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalWidgets'
A morph that allows you to view, rename, and remove elements from a dictionary whose keys are strings and whose values are forms.
Senders of it:
Imports viewImages {images}
StandardScriptingSystem inspectFormDictionary {form dictionary}
GraphicalMenu
AlignmentMorph subclass: #GraphicalMenu instanceVariableNames: 'target selector argument currentIndex formChoices formDisplayMorph coexistWithOriginal' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalWidgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
BitmapFillStyle chooseNewGraphicIn:event: {*Morphic-Balloon}
Morph chooseNewGraphicCoexisting: {menus}
GraphicTile
TileMorph subclass: #GraphicTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A tile representing a graphic image.
Senders of it:
GraphicType defaultArgumentTile {*Etoys-tiles}
ScriptEditorMorphBuilder literal: {reconstituting scripting tiles }
GraphMorph
RectangleMorph subclass: #GraphMorph instanceVariableNames: 'data dataColor cursor cursorColor cursorColorAtZeroCrossings startIndex minVal maxVal cachedForm hasChanged' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
I display a graph of numbers, normalized so the full range of values just fits my height. I support a movable cursor that can be dragged with the mouse.
Implementation notes: Some operations on me may be done at sound sampling rates (e.g. 11-44 thousand times/second). To allow such high bandwidth application, certain operations that change my appearance do not immediately report a damage rectangle. Instead, a flag is set indicating that my display needs to refreshed and a step method reports the damage rectangle if that flag is set. Also, I cache a bitmap of my graph to allow the cursor to be moved without redrawing the graph.
Senders of it:
BouncingAtomsMorph showInfectionHistory: {other}
SpectrumAnalyzerMorph showSignal {private}
SpectrumAnalyzerMorph showSpectrum {private}
SystemDictionary discardSoundSynthesis {shrinking}
WaveEditor initialize {initialization}
GraphPaperPanel (v5)
GenericPropertiesMorph subclass: #GraphPaperPanel instanceVariableNames: 'backgroundColor gridColor gridEvery showDarkerGridAlso darkerGridColor darkerGridEvery offset' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Experimental'
A panel for authoring "graph paper"
backgroundColor -- the color of the ground
gridColor -- the color of the fine lines
gridEvery -- number of pixels between fine grid lines.
darkerGridColor -- color of the secondary, less-frequently-drawn grid
darkerLineEvery -- number of primary grid units between darker grid lines
offset -- the offset of the InfiniteForm produced.
Senders of it:
ColorPickerMorph allowsTranslucency {event handling}
GraphPaperPanel class supplementaryPartsDescriptions {parts-bin}
Morph makeGraphPaper {e-toy support}
Morph putUpGraphPaperPanel {e-toy support}
GStreamerDisplayMorph
Morph subclass: #GStreamerDisplayMorph instanceVariableNames: 'frameBuffer gstreamer running desiredFrameRate repeat soundTrack volume stopFrame fullScreen pendingMoviePosition' classVariableNames: '' poolDictionaries: '' category: 'GStreamer-UI'
THIS CLASS HAS NO COMMENT!
Senders of it:
GStreamerMoviePlayerMorph initialize {initialization}
GStreamerMoviePlayerMorph
AlignmentMorph subclass: #GStreamerMoviePlayerMorph instanceVariableNames: 'moviePlayer positionSlider volumeSlider' classVariableNames: '' poolDictionaries: '' category: 'GStreamer-UI'
THIS CLASS HAS NO COMMENT!
Senders of it:
GStreamerDisplayMorph toggleFullScreen {menu}
GStreamerMoviePlayerMorph class registerInFlapsRegistry {class initialization}
HaloMorph
Morph subclass: #HaloMorph instanceVariableNames: 'target innerTarget positionOffset angleOffset minExtent growingOrRotating directionArrowAnchor haloBox simpleMode originalExtent' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
This morph provides a halo of handles for its target morph. Dragging, duplicating, rotating, and resizing to be done by mousing down on the appropriate handle. There are also handles for help and for a menu of infrequently used operations.
Senders of it:
Morph addHalo: {halos and balloon help}
Morph addMagicHaloFor: {halos and balloon help}
Morph haloClass {halos and balloon help}
PasteUpMorph abandonReplayHandsAndHalos {olpc}
PasteUpMorph abandonReplayHandsAndHalosFor: {olpc}
PasteUpMorph acceptDroppingMorph:event: {dropping/grabbing}
SelectionMorph selectSubmorphsOf: {private}
HandleMorph
EllipseMorph subclass: #HandleMorph instanceVariableNames: 'pointBlock lastPointBlock' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
A HandleMorph provides mouse-up control behavior.
Senders of it:
19 methods
HandMorph
Morph subclass: #HandMorph instanceVariableNames: 'mouseFocus keyboardFocus eventListeners mouseListeners keyboardListeners mouseClickState mouseOverHandler lastMouseEvent targetOffset damageRecorder cacheCanvas cachedCanvasHasHoles temporaryCursor temporaryCursorOffset hasChanged savedPatch userInitials lastEventBuffer genieGestureProcessor keyboardInterpreter modal' classVariableNames: 'CompositionWindowManager DoubleClickTime EventStats NewEventRules NormalCursor PasteBuffer ShowEvents' poolDictionaries: 'EventSensorConstants' category: 'Morphic-Kernel'
The cursor may be thought of as the HandMorph. The hand's submorphs hold anything being carried by dragging.
There is some minimal support for multiple hands in the same world.
Senders of it:
22 methods
HandMorphForReplay
HandMorph subclass: #HandMorphForReplay instanceVariableNames: 'recorder suspended' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalSupport'
I am a hand for replaying events stored in an EventRecorderMorph. When there are no more events, I delete myself.
Senders of it:
EventRecorderMorph resumePlayIn: {pause/resume}
EventRecorderMorph userStopReplayMaybe: {pause/resume}
MentoringEventRecorder resumePlayIn: {pause/resume}
MentoringEventRecorder userStopReplayMaybe: {pause/resume}
Morph openInWorldOrWorldlet {initialization}
PasteUpMorph abandonReplayHandsAndHalos {olpc}
PasteUpMorph abandonReplayHandsAndHalosFor: {olpc}
HeadingMorph
RectangleMorph subclass: #HeadingMorph instanceVariableNames: 'degrees magnitude' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no Users of HeadingMorph.
HelpFlap
AlignmentMorph subclass: #HelpFlap instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Help'
THIS CLASS HAS NO COMMENT!
Senders of it:
StandardScriptingSystem openInfoFlapWithLabel:helpContents:edge: {help in a flap}
HighlightMorph (v5)
Morph subclass: #HighlightMorph instanceVariableNames: 'target lastHash stepTime' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Debugger'
THIS CLASS HAS NO COMMENT!
Senders of it:
EtoysDebugger highlight: {highlighting}
HorizontalNumberLineMorph (v5)
NumberLineMorph subclass: #HorizontalNumberLineMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Charts'
A number line horizontally oriented.
Senders of it:
GraphPaperPanel class classicCartesianGraph {examples}
Player getXOnGraph {*morphicExtras-Charts}
Player setXOnGraph: {*morphicExtras-Charts}
HTTPProxyEditor
SystemWindow subclass: #HTTPProxyEditor instanceVariableNames: 'serverName port serverNameWidget portWidget serverNameLabelWidget portLabelWidget acceptWidget cancelWidget' classVariableNames: '' poolDictionaries: '' category: 'Network-UI'
An editor for the http proxy settings.
To open it evaluate:
HTTPProxyEditor open.
or use the World Menu (open... >> http proxy editor).
Senders of it:
HTTPProxyEditor class registerInOpenMenu {class initialization}
IconicButton
SimpleButtonMorph subclass: #IconicButton instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
A "Simple Button" in which the appearance is provided by a Form.
Senders of it:
23 methods
IconicButtonWithLabel
IconicButton subclass: #IconicButtonWithLabel instanceVariableNames: 'label labelMorph' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
PartsBin listDirection:quadList:withPreviousEntries: {initialization}
ImageMorph
Morph subclass: #ImageMorph instanceVariableNames: 'image' classVariableNames: 'DefaultForm' poolDictionaries: '' category: 'Morphic-Basic'
ImageMorph is a morph that displays a picture (Form). My extent is determined by the extent of my form.
Use #image: to set my picture.
Structure:
instance var Type Description
image Form The Form to use when drawing
Code examples:
ImageMorph new openInWorld; grabFromScreen
(Form fromFileNamed: 'myGraphicsFileName') asMorph openInWorld
Relationship to SketchMorph: ImageMorph should be favored over SketchMorph, a parallel, legacy class -- see the Swiki FAQ for details ( http://minnow.cc.gatech.edu/squeak/1372 ).
Senders of it:
55 methods
ImageMorphWithSpotlight
ImageMorph subclass: #ImageMorphWithSpotlight instanceVariableNames: 'spotImage spotShape spotBuffer spotOn' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Demo'
This class implements an image that appears one way or another depending upon whether it lies within a spotlight shape that moves with the cursor. As delivered, the shape is a simple circle, the spotlighted appearance is that of a ColorForm, and the non-highlighted apperarance is a derived gray-scale form.
The implementation will space-efficient if supplied with a ColorForm, because the gray-scale derived form will share the same bitmap.
In general, any two images can be used -- one could be blurred, the other sharp -- and the masking form can be any shape.
At some point this class should be merged somehow with ScreeningMorph.
Senders of it:
There are no senders of ImageMorphWithSpotlight.
IndentingListItemMorph
StringMorph subclass: #IndentingListItemMorph instanceVariableNames: 'indentLevel isExpanded complexContents firstChild container nextSibling' classVariableNames: '' poolDictionaries: '' category: 'Tools-Explorer'
An IndentingListItemMorph is a StringMorph that draws itself with an optional toggle at its left, as part of the display of the SimpleHierarchicalListMorph.
It will also display lines around the toggle if the #showLinesInHierarchyViews Preference is set.
Instance variables:
indentLevel <SmallInteger> the indent level, from 0 at the root and increasing by 1 at each level of the hierarchy.
isExpanded <Boolean> true if this item is expanded (showing its children)
complexContents <ListItemWrapper> an adapter wrapping my represented item that can answer its children, etc.
firstChild <IndentingListItemMorph|nil> my first child, or nil if none
container <SimpleHierarchicalListMorph> my container
nextSibling <IndentingListItemMorph|nil> the next item in the linked list of siblings, or nil if none.
Contributed by Bob Arning as part of the ObjectExplorer package.
Don't blame him if it's not perfect. We wanted to get it out for people to play with.
Senders of it:
SimpleHierarchicalListMorph indentingItemClass {initialization}
VeryPickyMorph justDroppedInto:event: {dropping/grabbing}
IndentingListParagraphMorph
IndentingListItemMorph subclass: #IndentingListParagraphMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Outliner'
THIS CLASS HAS NO COMMENT!
Senders of it:
EToyHierarchicalTextMorph indentingItemClass {as yet unclassified}
IndexTabs
PasteUpMorph subclass: #IndexTabs instanceVariableNames: 'highlightColor regularColor basicHeight basicWidth verticalPadding fixedWidth' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Palettes'
Used in conjunction wi[th a TabbedPalette -- each TabbedPalette has one. Each submorph of an IndexTabs is a TabMorph. When you click on one of the tabs, a corresponding action is taken -- sometimes, the existing palette gets replaced by the new one, other times, the tab results in some selector being invoked; in any case, tab highlighting takes place accordingly.
Senders of it:
ReferenceMorph setLabelFontTo: {menu}
ReferenceMorph tabSelected {events}
ReferenceMorph useGraphicalTab {menu}
ReferenceMorph useTextualTab {menu}
TabbedPalette initialize {initialization}
TabbedPalette newTabs: {initialization}
TabMorph tabSelected {as yet unclassified}
InfoStringMorph
StringMorph subclass: #InfoStringMorph instanceVariableNames: 'stepTime block' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Demo'
A generalization of the clock morph
Try
InfoStringMorph new openInWorld
or
(InfoStringMorph on: [Smalltalk vmParameterAt: 9])
stepTime: 50;
openInWorld
Senders of it:
There are no senders of InfoStringMorph.
InterimSoundMorph
RectangleMorph subclass: #InterimSoundMorph instanceVariableNames: 'graphic sound' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
THIS CLASS HAS NO COMMENT!
Senders of it:
RecordingControlsMorph makeTile {button commands}
InteriorFlapTab
FlapTab subclass: #InteriorFlapTab instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A Flap Tab that clings to an edge of a PasteUpMorph that is not a World.
Senders of it:
EventRecordingSpace addNavigatorFlap {flaps}
EventRecordingSpace addSuppliesFlap {flaps}
InteriorSolidSugarSuppliesTab
InteriorFlapTab subclass: #InteriorSolidSugarSuppliesTab instanceVariableNames: 'sugarNavBar' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A "solid" flap tab used in conjunction with the sugar supplies bin used on the interior of an event theatre.
Senders of it:
EventRecordingSpace sugarSuppliesFlapTab {sugar flaps}
InteriorSugarNavBar
SugarNavigatorBar subclass: #InteriorSugarNavBar instanceVariableNames: 'edgeToAdhereTo' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
Used for the "fake sugar navigator bar" that optionally appears at the top of an Event Theatre.
Senders of it:
EventRecordingSpace addSugarNavigatorFlap {flaps}
EventRecordingSpace removeSugarNavigatorFlap {sugar flaps}
EventRecordingSpace sugarNavBarOrNil {flaps}
EventRecordingSpace sugarNavigatorFlapOrNil {flaps}
InteriorSugarSuppliesTab
InteriorFlapTab subclass: #InteriorSugarSuppliesTab instanceVariableNames: 'sugarNavBar' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
DISUSED... Superseded by InteriorSolidSugarSuppliesTab. Retained for a while for backward compatability, in consideration of existing content.
A flap-tab for the the *fake* fake Sugar supplies flap at the top of an event-recording theatre or event-playback theatre.
Because this object cannot inherit both from InteriorFlapTab and from SugarSuppliesTab, it inherits only from the former, with code copied over from the latter as needed.
Senders of it:
There are no Users of InteriorSugarSuppliesTab.
InternalThreadNavigationMorph
ThreadNavigationMorph subclass: #InternalThreadNavigationMorph instanceVariableNames: 'threadName preferredIndex' classVariableNames: 'CachedThumbnails KnownThreads' poolDictionaries: '' category: 'MorphicExtras-Navigators'
THIS CLASS HAS NO COMMENT!
Senders of it:
BookMorph buildThreadOfProjects {menu}
InternalThreadNavigationMorph loadPageWithProgress {private}
Project makeThumbnail {menu messages}
ProjectHistory mostRecentThread {accessing}
ProjectSorterMorph clickFromSorterEvent:morph: {as yet unclassified}
ProjectSorterMorph sorterMorphForProjectNamed: {as yet unclassified}
JoystickMorph
SketchMorph subclass: #JoystickMorph instanceVariableNames: 'handleMorph xScale yScale radiusScale lastAngle autoCenter realJoystickIndex lastRealJoystickValue button1 button2' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
A widget that simulates a joystick. Mosly used in etoy scripting.
Senders of it:
EventRecordingSpace sugarPartsBinQuads {sugar flaps}
Flaps class defaultsQuadsDefiningPlugInSuppliesFlap {predefined flaps}
Flaps class defaultsQuadsDefiningScriptingFlap {flaps registry}
Flaps class defaultsQuadsDefiningSuppliesFlap {flaps registry}
Flaps class newLoneSuppliesFlap {predefined flaps}
JoystickMorph class registerInFlapsRegistry {class initialization}
NCAttachmentPointAdjusterWindow makeButtons {buttons}
KedamaCategoryViewer
CategoryViewer subclass: #KedamaCategoryViewer instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-StarSqueak'
THIS CLASS HAS NO COMMENT!
Senders of it:
KedamaStandardViewer categoryViewerFor: {categories}
KedamaStandardViewer replaceTargetsWithExampler {turtle view}
KedamaStandardViewer replaceTargetsWithStub {turtle view}
KedamaGetColorComponentTile
TileMorph subclass: #KedamaGetColorComponentTile instanceVariableNames: 'patchTile' classVariableNames: '' poolDictionaries: '' category: 'Etoys-StarSqueak'
I provide the red, green or blue component getter tile.
Senders of it:
PhraseTileMorph operatorNodeWith: {code generation}
PhraseTileMorph setGetColorComponentOperator:componentName:type:rcvrType:argType: {initialization}
PhraseTileMorph sexpOperatorWith: {code generation}
Viewer colorComponentPhraseFor: {special phrases}
KedamaMorph
Morph subclass: #KedamaMorph instanceVariableNames: 'dimensions wrapX wrapY pixelsPerPatch patchesToDisplay patchVarDisplayForm lastTurtleID turtleCount turtlesDict turtlesDictSemaphore turtlesToDisplay magnifiedDisplayForm autoChanged topEdgeMode bottomEdgeMode leftEdgeMode rightEdgeMode topEdgeModeMnemonic bottomEdgeModeMnemonic leftEdgeModeMnemonic rightEdgeModeMnemonic defaultPatch drawRequested changePending' classVariableNames: 'RandomSeed' poolDictionaries: '' category: 'Etoys-StarSqueak'
A tile-scriptable variant of StarSqueak.
Senders of it:
20 methods
KedamaPatchMorph
Morph subclass: #KedamaPatchMorph instanceVariableNames: 'form displayMax shiftAmount useLogDisplay displayForm diffusionRate scaledEvaporationRate sniffRange formChanged tmpForm displayType kedamaWorld changePending' classVariableNames: '' poolDictionaries: '' category: 'Etoys-StarSqueak'
I represent the patch variable.
Senders of it:
CategoryViewer isSpecialPatchCase:and: {support}
CategoryViewer isSpecialPatchReceiver:and: {support}
KedamaMorph defaultPatch {drawing}
KedamaPatchMorph class migrateInstancesWithoutChangePending {class initialization}
KedamaPatchType defaultArgumentTileFor: {tile protocol}
PhraseTileMorph replacePlayerWith: {kedama}
Player addPatchVarNamed: {slot-kedama}
Player newPatch {slot-kedama}
Player newPatchForSet {slot-kedama}
SyntaxMorph resultType {type checking}
TileCommandWithArgumentMorph setArgumentDefaultTo: {all}
TileMorph resultType {accessing}
TileMorph sexpWith: {code generation}
KedamaPatchTile
TileMorph subclass: #KedamaPatchTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-StarSqueak'
A special Tile that represents the Patch.
Senders of it:
KedamaPatchType defaultArgumentTileFor: {tile protocol}
PhraseTileMorph replacePlayerInReadoutWith: {kedama}
PhraseTileMorph replacePlayerWith: {kedama}
KedamaSetColorComponentTile
AssignmentTileMorph subclass: #KedamaSetColorComponentTile instanceVariableNames: 'patchTile' classVariableNames: '' poolDictionaries: '' category: 'Etoys-StarSqueak'
I provide the red, green or blue component setter tile.
Senders of it:
PhraseTileMorph setColorComponentRoot:componentName:type:rcvrType:argType:vocabulary: {initialization}
PhraseTileMorph updatingOperatorNodeWith: {code generation}
KedamaSetPixelValueTile
AssignmentTileMorph subclass: #KedamaSetPixelValueTile instanceVariableNames: 'patchTile' classVariableNames: '' poolDictionaries: '' category: 'Etoys-StarSqueak'
I provide the special tile of 'patchValueIn' setter.
Senders of it:
PhraseTileMorph setPixelValueRoot:type:rcvrType:argType:vocabulary: {initialization}
PhraseTileMorph updatingOperatorNodeWith: {code generation}
KedamaStandardViewer
StandardViewer subclass: #KedamaStandardViewer instanceVariableNames: 'stub restrictedIndex restrictedWho' classVariableNames: '' poolDictionaries: '' category: 'Etoys-StarSqueak'
THIS CLASS HAS NO COMMENT!
Senders of it:
KedamaWhoSearchingViewer doSearchFrom:interactive: {search}
Presenter nascentPartsViewerFor: {viewer}
Presenter updateViewer:forceToShow: {viewer}
KedamaTurtleMorph
Morph subclass: #KedamaTurtleMorph instanceVariableNames: 'kedamaWorld turtleCount isGroup' classVariableNames: '' poolDictionaries: '' category: 'Etoys-StarSqueak'
The exampler[sic] of turtles.
Senders of it:
CategoryViewer isSpecialPatchCase:and: {support}
KedamaPatchType defaultArgumentTileFor: {tile protocol}
Player newTurtle {slot-kedama}
Player newTurtleForSet {slot-kedama}
Player newTurtleSilently {slot-kedama}
KedamaWhoSearchingViewer
CategoryViewer subclass: #KedamaWhoSearchingViewer instanceVariableNames: 'searchString' classVariableNames: '' poolDictionaries: '' category: 'Etoys-StarSqueak'
THIS CLASS HAS NO COMMENT!
Senders of it:
KedamaStandardViewer categoryViewerFor: {categories}
KedamaStandardViewer searchingViewerMorphs {turtle view}
KeyboardEventMorph
EventMorph subclass: #KeyboardEventMorph instanceVariableNames: 'character' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A morph representing a keyboard event.
Senders of it:
EventRollMorph setKeyboardEventMorphs {display}
EventRollMorph setKeystrokeEventMorphs {display}
EventTapeParser ambientTrack {accessing}
KeyboardMorphForInput
PianoKeyboardMorph subclass: #KeyboardMorphForInput instanceVariableNames: 'pianoRoll duration durationModifier articulation buildingChord insertMode prevSelection startOfNextNote numberOfKeys' classVariableNames: '' poolDictionaries: '' category: 'Sound-Scores'
This class adds state and controls to the basic PianoKeyboardMorph so that notes of reliable duration can be keyed into a score without the need for a real keyboard.
To try this out, execute...
| n score | n _ 3.
score _ (MIDIScore new tracks: ((1 to: n) collect: [:i | Array new]);
trackInfo: ((1 to: n) collect: [:i | 'Instrument' , i printString]);
tempoMap: nil; ticksPerQuarterNote: 96).
ScorePlayerMorph openOn: score title: 'empty score'
Then open a pianoRoll and, from that, open a keyboard. The rule is that the keyboard will append after the current selection. If the current selection is muted or nil, then input will go to the end of the first non-muted track.
Senders of it:
PianoRollScoreMorph addKeyboard {menu}
KeyPressMorph (v5)
Morph subclass: #KeyPressMorph instanceVariableNames: 'currentKey lastTimePressed isWaitingToSetCurrentKey' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Input'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of KeyPressMorph.
KidNavigationMorph
ProjectNavigationMorph subclass: #KidNavigationMorph instanceVariableNames: '' classVariableNames: 'PreExistingProjects' poolDictionaries: '' category: 'Morphic-Navigators'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no Users of KidNavigationMorph.
LanguageEditor (v4 but not v5)
SystemWindow subclass: #LanguageEditor instanceVariableNames: 'translator translations untranslated selectedTranslation selectedTranslations selectedUntranslated translationsList untranslatedList translationText translationsFilter untranslatedFilter newerKeys' classVariableNames: 'CheckMethods' poolDictionaries: '' category: 'Multilingual-Editor'
Editor for Babel's languages.
Open it from
World Menu >> open... >> Language Editor (to open on default language)
World Menu >> open... >> Language Editor for... (to choose the language)
Or click:
LanguageEditor openOnDefault.
LanguageEditor open.
See http://swiki.agro.uba.ar/small_land/191 for documentation
Senders of it:
There are no senders of LanguageEditor.
LassoPatchMorph
ImageMorph subclass: #LassoPatchMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
When dropped by the user, a cursor is presented, allowing the user to grab a rectangular patch from the screen.
Senders of it:
Flaps class defaultsQuadsDefiningPlugInSuppliesFlap {predefined flaps}
LazyListMorph
Morph subclass: #LazyListMorph instanceVariableNames: 'listItems font selectedRow selectedRows listSource' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
The morph that displays the list in a PluggableListMorph. It is "lazy" because it will only request the list items that it actually needs to display.
Senders of it:
PluggableListMorph listMorphClass {as yet unclassified}
LedCharacterMorph
Morph subclass: #LedCharacterMorph instanceVariableNames: 'char highlighted' classVariableNames: 'BSegments CHSegmentOrigins CHSegments CVSegmentOrigins CVSegments DSegments TSegments' poolDictionaries: '' category: 'MorphicExtras-Leds'
char 36 is SPACE
Senders of it:
LedMorph chars: {accessing}
LedDigitMorph
Morph subclass: #LedDigitMorph instanceVariableNames: 'digit highlighted' classVariableNames: 'HSegmentOrigins HSegments VSegmentOrigins VSegments' poolDictionaries: '' category: 'MorphicExtras-Leds'
I am a 7-segment LED that can display a decimal digit
Senders of it:
LedMorph digits: {accessing}
LedMorph
Morph subclass: #LedMorph instanceVariableNames: 'digits chars value flashing flash string scroller scrollLoop' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Leds'
I am a collection of LED digits that can display a decimal value. The display can be set to flash by sending flash: true.
LedMorph can now display characters:
LedMorph new string:'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; openInWorld
Lowercase letters will be converted to Uppercase. Carachters not in the examle
above will be shown as SPACE which is char 36 in LedCharacterMorph.
LedMorph new chars: 10; string:' I must get a life';flash:true;scrollLoop:true; openInWorld
The number of letters is set by chars.
If chars is not specified it will be set to the string size.
When the string size is bigger than chars
the string will scroll across the led. WOW!
scrollLoop let's you set the scrolling to start over once its finished.
Enjoy.
Senders of it:
FreeCell makeCardsRemainingDisplay {initialization}
FreeCell makeGameNumberDisplay {initialization}
Mines makeControls {initialize}
SameGame makeControls {initialization}
Tetris showScoreDisplay {initialization}
LedTimerMorph
LedMorph subclass: #LedTimerMorph instanceVariableNames: 'counting startSeconds' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Leds'
THIS CLASS HAS NO COMMENT!
Senders of it:
FreeCell makeElapsedTimeDisplay {initialization}
Mines makeControls {initialize}
LineMorph
PolygonMorph subclass: #LineMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
This is really only a shell for creating single-segment straight-line Shapes.
Senders of it:
BorderedMorph changeBorderWidth: {menu}
DrGIcons class segmentMorph:color:dash: {form}
FlexMorph changeBorderWidth: {as yet unclassified}
HaloMorph addDirectionHandles {private}
NCAAConnectorMorph changeBorderWidthInteractively: {menus}
NCAAConnectorMorph changeLineWidthInteractively: {menus}
NCLineMorph changeArrowScaleInteractively: {arrows}
PolygonMorph customizeArrows: {menu}
PolygonMorph class fromHandFreehand: {instance creation}
PolygonMorph class fromHand: {instance creation}
TextMorph changeMargins: {menu}
TransferMorphLineAnimation initPolygon {initialization}
ListComponent
PluggableListMorph subclass: #ListComponent instanceVariableNames: 'selectedItem setSelectionSelector' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Components'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no Users of ListComponent.
ListViewLine
ObjectRepresentativeMorph subclass: #ListViewLine instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
THIS CLASS HAS NO COMMENT!
Senders of it:
Morph listViewLineForFieldList: {*Etoys-support}
MagnifierMorph
BorderedMorph subclass: #MagnifierMorph instanceVariableNames: 'magnification trackPointer srcExtent showPointer roundness' classVariableNames: 'RecursionLock' poolDictionaries: '' category: 'MorphicExtras-Demo'
MagnifierMorph instances are magnifying lenses that magnify the morphs below them (if grabbed or if trackPointer is false) or the area around the mouse pointer.
Instance variables:
magnification <Number> The magnification to use. If non-integer, smooths the magnified form.
trackPointer <Boolean> If set, magnifies the area around the Hand. If not, magnfies the area underneath the magnifier center.
showPointer <Boolean> If set, display a small reversed rectangle in the center of the lens. Also enables the display of Morphs in the Hand itself.
srcExtent <Rectangle> The extent of the source rectangle.
Class variables:
RecursionLock <MagnifierMorph|nil> Used to avoid infinite recursion when getting the source patch to display.
Senders of it:
Flaps class defaultsQuadsDefiningWidgetsFlap {flaps registry}
Flaps class newLoneSuppliesFlap {predefined flaps}
MagnifierMorph class registerInFlapsRegistry {class initialization}
MagnifierMorph class supplementaryPartsDescriptions {parts bin}
MarqueeMorph
Morph subclass: #MatrixTransformMorph instanceVariableNames: 'transform' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Balloon'
MatrixTransformMorph is similar to TransformMorph but uses a MatrixTransform2x3 instead of a MorphicTransform. It is used by clients who want use the BalloonEngine for vector-based scaling instead of the standard WarpBlt pixel-based mechanism.
Senders of it:
BalloonRectangleMorphnewTransformationMorph
TTSampleFontMorph newTransformationMorph
MatrixTransformMorph
Morph subclass: #MatrixTransformMorph instanceVariableNames: 'transform' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Balloon'
MatrixTransformMorph is similar to TransformMorph but uses a MatrixTransform2x3 instead of a MorphicTransform. It is used by clients who want use the BalloonEngine for vector-based scaling instead of the standard WarpBlt pixel-based mechanism.
Senders of it:
BalloonRectangleMorph newTransformationMorph {rotate scale and flex}
TTSampleFontMorph newTransformationMorph {rotate scale and flex}
MediaEventMorph
EventMorph subclass: #MediaEventMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
An EventMorph representing a media event, such as the playing of a sound or a movie clip.
Senders of it:
EventRollMorph setMediaEventMorphs {display}
MentoringEventRecorder
EventRecorderMorph subclass: #MentoringEventRecorder instanceVariableNames: 'recordingSpace startPlaybackTime millisecondsIntoPlayback' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A custom subclass of the EventRecorderMorph used within the olpc mentoring system. The event theatre's "state" constitutes the state for the MentoringEventRecorder itself as well. These are not the same states that are used by the vanilla EventRcorderMorph superclass.
The states are:
readyToRecord No recording ever made
rewound After a rewind. Not recording, not playing
atEndOfPlayback After a playback Not recording, not playing
recordingWithSound Currently making primary recording, with sound
recording Currenty making primary recoring, sans sound
playback Amid playback
playbackAddingVoiceover Recording a voiceover while while playing back
suspendedPlayback User hit Pause while doing playback
Senders of it:
EventPlaybackButton durationInMilliseconds {accessing}
EventRecordingSpace initialize {initialization}
Morph openInWorldOrWorldlet {initialization}
MenuItemMorph
StringMorph subclass: #MenuItemMorph instanceVariableNames: 'isEnabled subMenu isSelected target selector arguments icon extraIcon' classVariableNames: 'SubMenuMarker' poolDictionaries: '' category: 'Morphic-Menus'
I represent an item in a menu.
Instance variables:
isEnabled <Boolean> True if the menu item can be executed.
subMenu <MenuMorph | nil> The submenu to activate automatically when the user mouses over the item.
isSelected <Boolean> True if the item is currently selected.
target <Object> The target of the associated action.
selector <Symbol> The associated action.
arguments <Array> The arguments for the associated action.
icon <Form | nil> An optional icon form to be displayed to my left.
If I have a dynamic marker, created by strings like <yes> or <no> in my contents, it will be installed as a submorph.
Senders of it:
MenuItemMorph deselectItem {private}
MenuMorph add:subMenu: {construction}
MenuMorph add:subMenu:target:selector:argumentList: {construction}
MenuMorph add:target:selector:argumentList: {construction}
MenuMorph deleteIfPopUp {control}
MenuMorph detachSubMenu: {menu}
MenuMorph displayFiltered: {keyboard control}
MenuMorph doButtonAction {menu}
MenuMorph items {accessing}
MenuMorph lastItem {accessing}
MenuMorph moveSelectionDown:event: {keyboard control}
NCConstraintMorph selectShapeMenu {menus}
PasteUpMorph actionButtonsDo: {e-toy support}
SugarNavigatorBar shareMenu {the actions}
TabSorterMorph acceptSort {as yet unclassified}
MenuLineMorph
Morph subclass: #MenuLineMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Menus'
THIS CLASS HAS NO COMMENT!
Senders of it:
MenuMorph addLine {construction}
TabSorterMorph acceptSort {as yet unclassified}
MenuMorph
AlignmentMorph subclass: #MenuMorph instanceVariableNames: 'defaultTarget selectedItem stayUp popUpOwner activeSubMenu' classVariableNames: 'CloseBoxImage PushPinImage' poolDictionaries: '' category: 'Morphic-Menus'
Instance variables:
defaultTarget <Object> The default target for creating menu items
selectedItem <MenuItemMorph> The currently selected item in the receiver
stayUp <Boolean> True if the receiver should stay up after clicks
popUpOwner <MenuItemMorph> The menu item that automatically invoked the receiver, if any.
activeSubMenu <MenuMorph> The currently active submenu.
Senders of it:
202 methods
MenuTile
TileMorph subclass: #MenuTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A tile representing a menu item
Senders of it:
MenuType defaultArgumentTile {*Etoys-tiles}
ScriptEditorMorphBuilder literal: {reconstituting scripting tiles }
MethodMorph
PluggableTextMorph subclass: #MethodMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
THIS CLASS HAS NO COMMENT!
Senders of it:
BookMorph installRollBackButtons {scripting}
BookMorph methodHolders {scripting}
MethodHolder doItReceiver {menu}
MethodHolder class isolatedCodePaneForClass:selector: {instance creation}
ScriptEditorMorph methodNode {customevents-buttons}
ScriptEditorMorph methodString {other}
ScriptEditorMorph renameScriptTo: {other}
MIDIControllerMorph
AlignmentMorph subclass: #MIDIControllerMorph instanceVariableNames: 'channel controller midiPort lastValue' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
THIS CLASS HAS NO COMMENT!
Senders of it:
MIDIPianoKeyboardMorph makeMIDIController: {as yet unclassified}
ScorePlayerMorph makeMIDIController: {layout}
MIDIPianoKeyboardMorph
PianoKeyboardMorph subclass: #MIDIPianoKeyboardMorph instanceVariableNames: 'midiPort channel velocity' classVariableNames: '' poolDictionaries: '' category: 'Sound-Interface'
I implement a piano keyboard that can be played with the mouse. I can output to a MIDI port, if MIDI is supported on this platform. I can also spawn controllers for other MIDI parameters, such as pitch bend.
Senders of it:
There are no senders of MIDIPianoKeyboardMorph.
MidiInputMorph
AlignmentMorph subclass: #MidiInputMorph instanceVariableNames: 'midiPortNumber midiSynth instrumentSelector' classVariableNames: '' poolDictionaries: '' category: 'Sound-Scores'
I am the user interface for a simple software MIDI synthesizer that is driven by external MIDI input. I come with controls for a single MIDI channel (channel 1), but allow channel controls for additional MIDI channels to be added by the user. The volume, pan, and instrument of each channel can be controlled independently.
Senders of it:
There are no senders of MidiInputMorph.
Mines
AlignmentMorph subclass: #Mines instanceVariableNames: 'board minesDisplay timeDisplay helpText' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of Mines.
MinesBoard
AlignmentMorph subclass: #MinesBoard instanceVariableNames: 'protoTile rows columns flashCount tileCount target actionSelector arguments gameStart gameOver' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
THIS CLASS HAS NO COMMENT!
Senders of it:
Mines board {access}
MinesTile
SimpleSwitchMorph subclass: #MinesTile instanceVariableNames: 'switchState disabled oldSwitchState isMine nearMines palette mineFlag' classVariableNames: 'PreferredColor' poolDictionaries: '' category: 'Morphic-Games'
THIS CLASS HAS NO COMMENT!
Senders of it:
MinesBoard protoTile {accessing}
ModifyVariableDialogMorph (v5)
NewVariableDialogMorph subclass: #ModifyVariableDialogMorph instanceVariableNames: 'slot' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
THIS CLASS HAS NO COMMENT!
Senders of it:
Player changeSlotInfo: {slots-user}
MonthMorph
AlignmentMorph subclass: #MonthMorph instanceVariableNames: 'month todayCache tileRect model' classVariableNames: '' poolDictionaries: '' category: 'Morphic-PDA'
A widget that displays the dates of a month in a table.
Senders of it:
PDA openAsMorphIn: {initialization}
PDA openMonthView {initialization}
Morph
Object subclass: #Morph instanceVariableNames: 'bounds owner submorphs fullBounds color extension' classVariableNames: 'EmptyArray' poolDictionaries: '' category: 'Morphic-Kernel'
A Morph (from the Greek "shape" or "form") is an interactive graphical object. General information on the Morphic system can be found at http://minnow.cc.gatech.edu/squeak/30.
Morphs exist in a tree, rooted at a World (generally a PasteUpMorph). The morphs owned by a morph are its submorphs. Morphs are drawn recursively; if a Morph has no owner it never gets drawn. To hide a Morph and its submorphs, set its #visible property to false using the #visible: method.
The World (screen) coordinate system is used for most coordinates, but can be changed if there is a TransformMorph somewhere in the owner chain.
My instance variables have accessor methods (e.g., #bounds, #bounds:). Most users should use the accessor methods instead of using the instance variables directly.
Structure:
instance var Type Description
bounds Rectangle A Rectangle indicating my position and a size that will enclose me.
owner Morph My parent Morph, or nil for the top-level Morph, which is a
or nil world, typically a PasteUpMorph.
submorphs Array My child Morphs.
fullBounds Rectangle A Rectangle minimally enclosing me and my submorphs.
color Color My primary color. Subclasses can use this in different ways.
extension MorphExtension Allows extra properties to be stored without adding a
or nil storage burden to all morphs.
By default, Morphs do not position their submorphs. Morphs may position their submorphs directly or use a LayoutPolicy to automatically control their submorph positioning.
Although Morph has some support for BorderStyle, most users should use BorderedMorph if they want borders.
Senders of it:
150 methods
MorphExample
RectangleMorph subclass: #MorphExample instanceVariableNames: 'phase ball star' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Demo'
This is a example of how to use a morph. It consists of only two
methods, initialize and step.
DoIt:
MorphExample new openInWorld.
Senders of it:
There are no senders of MorphExample.
MorphicModel
BorderedMorph subclass: #MorphicModel instanceVariableNames: 'model slotName open' classVariableNames: 'TimeOfError' poolDictionaries: '' category: 'Morphic-Kernel'
MorphicModels are used to represent structures with state and behavior as well as graphical structure. A morphicModel is usually the root of a morphic tree depicting its appearance. The tree is constructed concretely by adding its consituent morphs to a world.
When a part is named in a world, it is given a new slot in the model. When a part is sensitized, it is named, and a set of mouse-driven methods is also generated in the model. These may be edited to induce particular behavior. When a variable is added through the morphic world, it is given a slot in the model, along with a set of access methods.
In addition for public variables (and this is the default for now), methods are generated and called in any outer model in which this model gets embedded, thus propagating variable changes outward.
Senders of it:
MorphicModel nameFor: {compilation}
MorphicModel removeAll {compilation}
MorphicModel class acceptsLoggingOfCompilation {compiling}
MorphicModel class officialClass {testing}
MorphicModel class removeUninstantiatedModels {housekeeping}
MorphicModel class wantsChangeSetLogging {compiling}
PasteUpMorph createCustomModel {model}
SystemDictionary majorShrink {shrinking}
MorphThumbnail
SketchMorph subclass: #MorphThumbnail instanceVariableNames: 'morphRepresented' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Books'
A morph whose appearance is a thumbnail of some other morph.
Senders of it:
Morph representativeNoTallerThan:norWiderThan:thumbnailHeight: {thumbnail}
MorphThumbnail representativeNoTallerThan:norWiderThan:thumbnailHeight: {thumbnail}
PasteUpMorph morphToDropFrom: {dropping/grabbing}
PasteUpMorph updateSubmorphThumbnails {*Etoys-viewing}
MouseActionIndicatorMorph
Morph subclass: #MouseActionIndicatorMorph instanceVariableNames: 'siblings' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
I am used to highlight morphs which have a special mouseup action
Senders of it:
There are no senders of MouseActionIndicatorMorph.
MouseEventEditor
PasteUpMorph subclass: #MouseEventEditor instanceVariableNames: 'mouseEventSequenceMorph' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A nascent graphical editor for the mouse events constituting a mouse-event sequence. This is just a beginning -- there is no UI yet for propagating the results of edits back to the originating mouse-event sequence.
Senders of it:
MouseEventSequenceMorph openExpandedView {menu}
MouseEventSequenceMorph openExpandedView: {menu}
MouseEventSequenceMorph
EventMorph subclass: #MouseEventSequenceMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A morph representing a related sequence of mouse events.
Senders of it:
EventRollMorph setMouseEventMorphs {display}
EventTimeline acceptDroppingMorph:event: {dropping/grabbing}
MouseEventToken
EllipseMorph subclass: #MouseEventToken instanceVariableNames: 'index event' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A token representing a single mouse event. Used in mouse-event sequence editors.
Senders of it:
MouseEventEditor discRepresentingEvent:index: {initialization}
MovieClipEndMorph
MovieClipStartMorph subclass: #MovieClipEndMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Movies-Player'
The idea is that soon we will show the soundtrack extending between the start cue and the end morph.
Senders of it:
MovieClipStartMorph setEndFrameNumber:tickTime: {private}
MovieClipStartMorph
MovieFrameSyncMorph subclass: #MovieClipStartMorph instanceVariableNames: 'movieClipPlayer movieClipFileName soundTrackFileName soundTrackPlayerReady soundTrackMorph soundTrackTimeScale scoreEvent endMorph clipColor colorMorph' classVariableNames: '' poolDictionaries: '' category: 'Movies-Player'
This class and its subclasses act to syncronize movie players with the progress of a MIDI score and further background can be found in the comment for MoviePlayerMorph.
MovieClipStartMorphs are used where you have a movie clip player plex. You can create such a plex by opening a midi score, spawning a piano roll (by the button of that name), and then choosing 'add movie clip player' from the piano roll menu. Much simpler, you can open a MoviePlayerMorph as a new morph, and then choose 'make a new movie' from its menu. This plex then serves as a central editable score for composing movie clips.
To add a new movie clip to the score, open a movie from the fileList (or as a new morph followed by 'open a movie'). Play or otherwise position the clip to the desired starting position, and then tear off a thumbnail and drop it into the score at the desired time. The starting thumbnail (MovieClipStartMorph) will appear in the score, tied to an endMorph by a colored stripe. The ending time will be chosen based on the total length of the clip, a default starting clip length (200 frames), and possible interference with other clips that follow it.
To reposition a clip, you can pick up its clipStart with halo black handle, and drop it elsewhere. The rest of the clip will follow as best it can. To delete a clip, delete its clipStart. To change the duration of a clip, play the composition up to some point in that clip, and pause it. Then use the controls on the central movie player to move forward or backward to the desired ending frame, and choose 'end clip here' from the player menu.
Senders of it:
MoviePlayerMorph makeThumbnailInHand: {private}
MovieFrameSyncMorph
ImageMorph subclass: #MovieFrameSyncMorph instanceVariableNames: 'moviePlayerMorph frameNumber' classVariableNames: 'ColorIndex' poolDictionaries: '' category: 'Movies-Player'
This class and its subclasses act to syncronize[sic] movie players with the progress of a MIDI score and further background can be found in the comment for MoviePlayerMorph.
There are two main forms of synchroniztion.[sic]
MovieFrameSyncMorphs are used where you have a MIDI score open with a piano roll, and a separate MoviePlayer Morph. A MovieFrameSyncMorph can be torn off from the MoviePlayer with a shift-drag gesture or menu command, and can then be dropped into a MIDI score. They are used to start a movie player at a given place in the score, and then to stretch or compress the movie frame rate so that certain frames are synchronized with the corresponding points in the score.
MovieClipStartMorphs (q.v.) and MovieClipEndMorphs are used for the other kind of synchronization, namely where you wish to assemble a number of movie clips in a sequence.
Senders of it:
MovieClipStartMorph justDroppedInto:event: {dropping/grabbing}
MovieFrameSyncMorph justDroppedInto:event: {dropping/grabbing}
MovieMorph
Morph subclass: #MovieMorph instanceVariableNames: 'playMode msecsPerFrame rotationDegrees scalePoint frameList currentFrameIndex dwellCount' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
THIS CLASS HAS NO COMMENT!
Senders of it:
Morph addPaintingItemsTo:hand: {menus}
MovieMorph addCustomMenuItems:hand: {menu}
MovieMorph insertIntoMovie: {menu}
SketchMorph insertIntoMovie: {menu}
SketchMorph replaceSelfWithMovie {other}
MoviePlayerMorph
BookMorph subclass: #MoviePlayerMorph instanceVariableNames: 'movieFileName movieFile frameSize frameDepth frameNumber frameCount playDirection msSinceStart msAtStart msAtLastSync frameAtLastSync msPerFrame frameBufferIfScaled soundTrackFileName scorePlayer soundTrackForm soundTrackMorph pianoRoll cueMorph' classVariableNames: '' poolDictionaries: '' category: 'Movies-Player'
MoviePlayerMorph plays images from a file using async io. The file format is simple but non-standard (see below).
The heart of the play logic is in the step method. Note that play is driven by a simulated time since start. For a movie with a sound score, this is the millisecondsSinceStart of the score player, whereas a movie by itself gets this from the millisecondClock minus msAtStart.
Movie players are designed to be used in three ways
1. Select a movie in the file list, 'open as movie', and play it.
2. As in (1), but drop thumbnails for various frames into a
MIDI piano roll to synchronize video with music.
3. Open a MoviePlayerMorph as a 'new morph', and choose
'make a new movie' from the menu.
In (1) and (2), a shift-drag is used to 'tear off' a thumbnail reference morph to the currently visible frame of this clips. The thumbnail can then be dropped in a MIDI score player to either syncronize that frame with what point in the music, or to cause that clip to being playing in the shared player of a SqueakMovie plex.
When making a new movie, an empty score and piano roll are linked to the movie player, as a SqueakMovie plex. You can then open another movie as a clip, and drop a thumbnail morph into the score to start that clip playing at that frame in the shared player. If you pause while playing that clip, you can manually play the clip forward and backward in the current clip. if you stop at a given frame, you can choose 'end clip here' from the shared player menu to shorten or lengthen the clip.
Clips can be moved by picking up the starting thumbnail (use halo black handle), and dropping them elsewhere. If you try to place one clip in the middle of another, it will slide to the end. If you position one clip close to the end of another, it will sidle up to make them contiguous.
If you wish a soundtrack to be included with a clip, make sure it has been opened in the source clip player before tearing off the starting thumbnail.
About the .movie file format...
The following code was used to convert 27 files into a movie. They were named
'BalloonDrop10fps003.bmp' through 'BalloonDrop10fps081.bmp'
incrementing by 003. Each was known to be a 320x240 image in 32-bit BMP format.
Note the 27 in the 5th line is the number of frames, = (3 to: 81 by: 3) size.
| ps zps f32 out ff |
out _ FileStream newFileNamed: 'BalloonDrop10fps.movie'.
out binary.
ff _ Form extent: 320@240 depth: 16.
#(22 320 240 16 27 100000) , (7 to: 32)
do: [:i | out nextInt32Put: i].
3 to: 81 by: 3 do:
[:i | ps _ i printString. zps _ ps padded: #left to: 3 with: $0.
f32 _ Form fromFileNamed:
'BalloonDrop10fps' , zps , '.bmp'.
f32 displayOn: ff at: 0@0. "Convert down to 16 bits"
ff display; writeOnMovie: out].
out close.
Senders of it:
FileList class initialize {class initialization}
PianoRollScoreMorph addMovieClipPlayer {*movies}
MovingEyeMorph
EllipseMorph subclass: #MovingEyeMorph instanceVariableNames: 'inner iris' classVariableNames: 'IrisSize' poolDictionaries: '' category: 'Morphic-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of MovingEyeMorph.
MPEGDisplayMorph
Morph subclass: #MPEGDisplayMorph instanceVariableNames: 'frameBuffer mpegFile running desiredFrameRate allowFrameDropping repeat soundTrack volume startMSecs startFrame stopFrame subtitles fullScreen subtitlesDisplayer' classVariableNames: '' poolDictionaries: '' category: 'Movies-Player'
I am a simple display screen for an MPEG movie player. My step method advances the movie according to the current frame rate. If necessary, frames as skipped to maintain the desired frame rate. However, since even skipping frames takes time, it may not be possible to achieve fast frame rates with large frame sizes on slow machines.
Senders of it:
MPEGMoviePlayerMorph initialize {initialization}
MPEGMoviePlayerMorph
AlignmentMorph subclass: #MPEGMoviePlayerMorph instanceVariableNames: 'moviePlayer positionSlider volumeSlider' classVariableNames: '' poolDictionaries: '' category: 'Movies-Player'
I provide the user-interface for playing MPEG movies, including play/stop/rewind buttons and volume and position sliders. To create an instance of me, evaluate:
MPEGMoviePlayerMorph new openInWorld
Then use the "open" button to open an MPEG movie file. This class supplies the front panel; the real work is done by MPEGDisplayMorph and StreamingMP3Sound.
Senders of it:
FileList class initialize {class initialization}
Flaps class defaultsQuadsDefiningWidgetsFlap {flaps registry}
MPEGDisplayMorph toggleFullScreen {menu}
MPEGMoviePlayerMorph class registerInFlapsRegistry {class initialization}
MPEGSubtitlesDisplayer
UpdatingTextMorph subclass: #MPEGSubtitlesDisplayer instanceVariableNames: 'font' classVariableNames: '' poolDictionaries: '' category: 'Movies-Player'
THIS CLASS HAS NO COMMENT!
Senders of it:
MPEGDisplayMorph initializeSubtitlesDisplayer {private}
MulticolumnLazyListMorph
LazyListMorph subclass: #MulticolumnLazyListMorph instanceVariableNames: 'columnWidths' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
A variant of LazyListMorph that can display multi-column lists.
Senders of it:
PluggableMultiColumnListMorph listMorphClass {accessing}
MultiuserTinyPaint
SketchMorph subclass: #MultiuserTinyPaint instanceVariableNames: 'drawState' classVariableNames: 'LastMouseIndex PenColorIndex PenIndex PenSizeIndex' poolDictionaries: '' category: 'Morphic-Widgets'
A very simple paint program that handles multiple users (hands).
Each user has their own brush size and color.
Senders of it:
There are no senders of MultiuserTinyPaint.
MVCMenuMorph
MenuMorph subclass: #MVCMenuMorph instanceVariableNames: 'done mvcSelection' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Menus'
I simulate the MVC menu classes PopUpMenu, SelectionMenu, and CustomMenu when running in a Morphic world. I am also used to implement Utilities>informUser:during:.
Senders of it:
Flaps class addLocalFlap {new flap}
MoviePlayerMorph invokeBookMenu {menu}
PartsWindow invokePartsWindowMenu {as yet unclassified}
PopUpMenu startUpWithCaption:at:allowKeyboard: {basic control sequence}
PopUpMenu startUpWithCaption:at:allowKeyboard:centered: {basic control sequence}
SecurityManager generateKeyPairInBackground {private}
Utilities class informUserDuring: {user interface}
Utilities class informUser:during: {user interface}
MVCWiWPasteUpMorph
WiWPasteUpMorph subclass: #MVCWiWPasteUpMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'ST80-Morphic'
A subclass of WiWPasteUpMorph that supports Morphic worlds embedded in MVC Views.
Senders of it:
Model containingWindow {dependents}
Morph containingWindow {e-toy support}
MorphWorldView class convertToMVCWiWPasteUpMorph {instance creation}
MorphWorldView class openWorld {instance creation}
MorphWorldView class openWorldWith:labelled: {instance creation}
Object currentWorld {macpal}
Preferences class windowSpecificationPanel {window colors}
PreferencesPanel class isAPreferenceViewToKill: {cleanup}
Utilities class windowMenuWithLabels:colorPattern:targets:selections:title: {durable menus}
Utilities class windowMenuWithLabels:colorPattern:targets:selections:wordingSelectors:title: {durable menus}
NameStringInHalo
UpdatingStringMorph subclass: #NameStringInHalo instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
Shows the name of the morph in the halo.
Senders of it:
HaloMorph acceptNameEdit {initialization}
HaloMorph addNameBeneath:string: {private}
NCAAConnectorMorph
QHsmMorph subclass: #NCAAConnectorMorph instanceVariableNames: 'constraints line graphModel' classVariableNames: 'ArrowGlyphs' poolDictionaries: '' category: 'Connectors-Base'
This is the Anti-Aliased ConnectorMorph, part of Connectors2.
Senders of it:
Senders of NCAAConnectorMorph [13]
ConnectorArrowNameType choices {queries}
ConnectorArrowNameType initialize {initialization}
Flaps class quadsDefiningClassDiagramConnectorsFlap {*connectors-shapes-flaps}
Flaps class quadsDefiningConnectorsFlap {*connectors-shapes-flaps}
Flaps class quadsDefiningFSMConnectorsFlap {*connectors-shapes-flaps}
NCAAConnectorMorph class supplementaryPartsDescriptions {new-morph participation}
NCArrowDictionaryMenu glyphDictionary {accessing}
NCButtonBar class newClassDiagramToolbar {instance creation}
NCButtonBar class newFSMToolbar {instance creation}
NCClassHierarchyDiagrammer connectParentFor:morph: {drawing}
NCClassHierarchyDiagrammer connectSubclassesFor:morph: {drawing}
NCGlyphEditor install {button actions}
PasteUpMorph defaultConnectorClass {*connectors-misc}
Implements the following costumes in its class methods:
NCAAConnectorMorph newAssociation openInHand. NCAAConnectorMorph newCurvyArrow openInHand. NCAAConnectorMorph newCurvyConnector openInHand. NCAAConnectorMorph newDirectionalAssociation openInHand. NCAAConnectorMorph newGeneralizationRelationship openInHand. NCAAConnectorMorph newImplementationRelationship openInHand. NCAAConnectorMorph newMakerButton openInHand. NCAAConnectorMorph newNoteConnector openInHand. NCAAConnectorMorph newRandomButton openInHand. NCAAConnectorMorph newStateTransition openInHand. NCAAConnectorMorph newWithArrow openInHand.
NCArrowDictionaryMenu
GraphicalDictionaryMenu subclass: #NCArrowDictionaryMenu instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Tools'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCAAConnectorMorph chooseArrowGlyphFor: {menus}
NCAAConnectorMorph class chooseArrowGlyphFor:selector:argument: {arrows}
NCAttachmentPointAdjuster
GraphicalDictionaryMenu subclass: #NCArrowDictionaryMenu instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Tools'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCAAConnectorMorph chooseArrowGlyphFor: {menus}
NCAAConnectorMorph class chooseArrowGlyphFor:selector:argument: {arrows}
Attachment Adjuster is implemented in this NCAttachmentPointAdjuster class.
NCAttachmentPointAdjusterWindow
PasteUpMorph subclass: #NCAttachmentPointAdjusterWindow instanceVariableNames: 'joystick originalPosition target' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Tools'
This is a tool that allows you to adjust the attachment points of a dropped Morph.
There are two buttons: one turns the grid on or off, and the other selects between movable and non-movable attachment points. The difference is that if a Connector with not attachment preference is attached to a Morph with non-movable attachment points, the attachment will remain stuck to that position.
This is appropriate for (for instance) schematic drawings.
Senders of it:
Flaps class quadsDefiningConnectorsFlap {*connectors-shapes-flaps}
NCAttachmentPointAdjuster justDroppedInto:event: {stepping and presenter}
NCBasicEllipseMorph
EllipseMorph subclass: #NCBasicEllipseMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
This adds a standard yellow-button menu to EllipseMorph.
Senders of it:
There are no senders of NCBasicEllipseMorph.
NCBasicShapeMorph
EllipseMorph subclass: #NCBasicEllipseMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
This adds a standard yellow-button menu to EllipseMorph.
Senders of it:
There are no senders of NCBasicShapeMorph.
NCBroomMorph
BroomMorph subclass: #NCBroomMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BroomMorphs-Connectors'
This is a BroomMorph that won't move labels or connectors.
Senders of it:
NCBroomMorph basicClass {initialization}
NCButtonBar
AlignmentMorph subclass: #NCButtonBar instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Tools'
I am a general purpose toolbar that usually holds buttons of some kind, especially NCMakerButtons.
Senders of it:
Flaps class quadsDefiningConnectorsFlap {*connectors-shapes-flaps}
NCButtonBar class supplementaryPartsDescriptions {instance creation}
NCMakerButton handlesMouseDown: {menus}
NCCircleMorph
NCEllipseMorph subclass: #NCCircleMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of NCCircleMorph.
NCCompositeStateMorph
NCBasicShapeMorph subclass: #NCCompositeStateMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
I am a shape intended as a container for other Morphs.
Senders of it:
Flaps class quadsDefiningClassDiagramConnectorsFlap {*connectors-shapes-flaps}
Flaps class quadsDefiningFSMConnectorsFlap {*connectors-shapes-flaps}
NCButtonBar class newClassDiagramToolbar {instance creation}
NCButtonBar class newFSMToolbar {instance creation}
NCCompositeStateMorph class supplementaryPartsDescriptions {instance creation}
NCStateDiagramMorph becomeComposite {menus}
NCConstraintMorph
Morph subclass: #NCConstraintMorph instanceVariableNames: 'constrained constraint dieWithInput inputs lastTarget stepTime lastTargetBounds' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Base'
I apply the result of a pluggable MessageSend to some inputs, and then
take the value of that MessageSend and apply it to some other object.
Typically the result of the MessageSend is a Point, and I constrain the other object by moving it to that Point.
The MessageSend (if I have a single input) is assumed to return a Point in the coordinate system of my input. I translate this to my coordinate system prior to applying it.
I do this in my step method.
Senders of it:
There are no senders of NCConstraintMorph.
NCCurveHandleMorph
Morph subclass: #NCCurveHandleMorph instanceVariableNames: 'dragStartPoint targetPoint desiredPoint getPoint setPoint offset' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Lines and Curves'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCCurveMorph handles {curve editing}
NCLineMorph handleForPosition:addAllowed: {editing}
NCLineMorph handles {arrows}
NCCurveMorph
NCTextRectangleMorph subclass: #NCCurveMorph instanceVariableNames: 'curve shadowForm' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCCurveMorph class happyFace {contours library}
NCCurveMorph class pointingHand2 {instance creation}
NCCurveMorph class sadFace {instance creation}
NCCurveMorph class supplementaryPartsDescriptions {parts bin}
NCGlyphEditor createCurveMorph {button actions}
Implements the following costumes in its class methods:
NCCurveMorph andGate openInHand.
NCDisplayTextMorph
NCTextMorph subclass: #NCDisplayTextMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Text'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCButtonBar addLabel: {label}
NCDisplayTextMorph class supplementaryPartsDescriptions {parts bin}
NCEllipseMorph
NCTextRectangleMorph subclass: #NCEllipseMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
This adds a standard yellow-button menu to EllipseMorph.
Senders of it:
Flaps class quadsDefiningFSMConnectorsFlap {*connectors-shapes-flaps}
NCButtonBar class newFSMToolbar {instance creation}
NCEllipseMorph class supplementaryPartsDescriptions {parts bin}
NCGlyphEditor
BorderedMorph subclass: #NCGlyphEditor instanceVariableNames: 'font glyph transform fontSample rotation joinPoint endPoint showDots clickPoints transformedClickPoints arrowScale sampleLine' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Tools'
This is a tool that lets you define NCLineArrowGlyphs from TrueType fonts.
Senders of it:
NCArrowDictionaryMenu openGlyphEditor {menu commands}
NCArrowDictionaryMenu showMenu {menu commands}
NCGrabbableDisplayTextMorph
NCDisplayTextMorph subclass: #NCGrabbableDisplayTextMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Text'
THIS CLASS HAS NO COMMENT!
Senders of it:
Flaps class quadsDefiningConnectorsFlap {*connectors-shapes-flaps}
NCGrabbableDisplayTextMorph class supplementaryPartsDescriptions {parts bin}
NCLabelMorph class textClass {defaults}
NCTextRectangleMorph class textClass {nil}
NCHighlightMorph
Morph subclass: #NCHighlightMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Base'
THIS CLASS HAS NO COMMENT!
Senders of it:
Morph highlightMorphForAPRect: {*connectors-private}
Morph highlightMorphForBoundaryRect: {*connectors-private}
NCLabelMorph
NCOffsetConstraintMorph subclass: #NCLabelMorph instanceVariableNames: 'label' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Text-Base'
I am a ConstraintMorph that owns a TextMorph. I follow attempts to
move myself by remembering an offset.
I am movable by pressing the shift key, or by selecting my edge.
My menu has an "attach to" choice that lets the user pick what object
to connect to.
I prtetend[sic] to be a TextMorph, and delegate any message not understood
to my label.
Senders of it:
Flaps class quadsDefiningClassDiagramConnectorsFlap {*connectors-shapes-flaps}
Flaps class quadsDefiningConnectorsFlap {*connectors-shapes-flaps}
Flaps class quadsDefiningFSMConnectorsFlap {*connectors-shapes-flaps}
NCAAConnectorMorph labelClass {connectors-labels}
NCLabelMorph class supplementaryPartsDescriptions {instance creation}
NCLineEndConstraintMorph
NCConstraintMorph subclass: #NCLineEndConstraintMorph instanceVariableNames: 'firstVertex lineAttachmentPoint' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Base'
My constrained object is one end of an open PolygonMorph (a/k/a LineMorph).
Senders of it:
NCAAConnectorMorph class defaultLineEndConstraintClass {defaults}
NCLineMorph
BorderedMorph subclass: #NCLineMorph instanceVariableNames: 'lineWidth fillStyle smoothCurve vertices segments contours arrows arrowForms arrowScales arrowJoints' classVariableNames: 'CurveDebug' poolDictionaries: '' category: 'Connectors-Lines and Curves'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCAAConnectorMorph class defaultLineClass {defaults}
NCGlyphEditor sample {accessing}
NCMakerButton
IconicButton subclass: #NCMakerButton instanceVariableNames: 'triggerEventType' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Tools'
I am an IconicButton that holds on to a prototype instance of a Morph.
When I am pressed, I duplicate my target and send it my selector with my arguments.
By default, this causes the new Morph to be grabbed by the Hand.
Senders of it:
Flaps class preferredConnectorsButtonClass {*connectors-shapes-flaps}
Flaps class quadsDefiningConnectorsFlap {*connectors-shapes-flaps}
Morph makeButton: {*connectors-tools-menus}
NCAAConnectorMorph addBasicMenuItemsTo:event: {menus}
NCAAConnectorMorph class newMakerButton {instance creation}
NCAAConnectorMorph class newRandomButton {instance creation}
NCAAConnectorMorph class supplementaryPartsDescriptions {new-morph participation}
NCBasicShapeMorph addBasicMenuItemsTo:event: {menus}
NCButtonBar class buttonClass {instance creation}
NCButtonBar class buttonTarget:action:arguments:icon:label: {instance creation}
NCDisplayTextMorph addBasicMenuItemsTo:event: {event handling}
NCLineEndConstraintMorph class updateOldShapes26June2002 {conversion}
NCPartsBin morphToDropFrom: {*connectors-tools-menus}
NCPartsBin class buttonClass {as yet unclassified}
NCSketchMorph addYellowButtonMenuItemsTo:event: {menu}
RandomConnector is implemented in this class.
NCNoteMorph
NCTextRectangleMorph subclass: #NCNoteMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
This is a rectangular shape with text inside and an angled top left corner.
Senders of it:
Flaps class quadsDefiningClassDiagramConnectorsFlap {*connectors-shapes-flaps}
NCButtonBar class newClassDiagramToolbar {instance creation}
NCNoteMorph class supplementaryPartsDescriptions {instance creation}
NCOffsetConstraintMorph
NCConstraintMorph subclass: #NCOffsetConstraintMorph instanceVariableNames: 'offset' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Base'
I am a ConstraintMorph with an offset. The point I get from evaluating my MessageSend is offset by a point.
Senders of it:
There are no senders of NCOffsetConstraintMorph.
NCPartsBin
PartsBin subclass: #NCPartsBin instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
I am a parts bin that holds NCMakerButtons, for use in a flap.
Senders of it:
Flaps class preferredConnectorsFlapBinClass {*connectors-shapes-flaps}
NCMakerButton addYellowButtonMenuItemsTo:event: {menus}
NCMakerButton handlesMouseDown: {menus}
NCMakerButton isLabeled {accessing}
NCPinMorph
CircleMorph subclass: #NCPinMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
I am a circle that wants to act as a connection pin.
I offer to embed myself on drop.
When embedded, I will create a Player-valued variable in my new owner.
Senders of it:
CircleMorph class supplementaryPartsDescriptions {as yet unclassified}
NCSchematicConnectorMorph
NCAAConnectorMorph subclass: #NCSchematicConnectorMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Base'
This is a Connector that automatically sets its connection mode as appropriate for use in electronic schematic diagrams.
It also automatically decorates its ends that are attached to other Connectors with junction dots.
Senders of it:
There are no senders of NCSchematicConnectorMorph.
Schematic Connector is implemented in this class.
NCScrolledCompositeStateMorph
NCCompositeStateMorph subclass: #NCScrolledCompositeStateMorph instanceVariableNames: 'scrollPane' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
This is a shape with a scrolled playfield in its center and a name tab attached.
Senders of it:
Flaps class quadsDefiningFSMConnectorsFlap {*connectors-shapes-flaps}
NCButtonBar class newClassDiagramToolbar {instance creation}
NCButtonBar class newFSMToolbar {instance creation}
NCScrolledCompositeStateMorph class supplementaryPartsDescriptions {parts bin}
NCSketchMorph
SketchMorph subclass: #NCSketchMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
I am a SketchMorph that has similar user interaction to the NCBasicShapeMorph (menus, etc.)
Senders of it:
There are no senders of NCSketchMorph.
NCSmartLabelMorph
NCLabelMorph subclass: #NCSmartLabelMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Text-Base'
I am a label that attempts to keep out of the way of any connectors I'm attached to.
Senders of it:
Flaps class quadsDefiningClassDiagramConnectorsFlap {*connectors-shapes-flaps}
Flaps class quadsDefiningConnectorsFlap {*connectors-shapes-flaps}
Flaps class quadsDefiningFSMConnectorsFlap {*connectors-shapes-flaps}
NCAAConnectorMorph labelClass {connectors-labels}
NCButtonBar class newClassDiagramToolbar {instance creation}
NCSmartLabelMorph class supplementaryPartsDescriptions {parts bin}
NCSTUMLDiagramMorph
NCUMLDiagramMorph subclass: #NCSTUMLDiagramMorph instanceVariableNames: 'className' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCClassHierarchyDiagrammer draw: {drawing}
NCSTUMLDiagramMorph class supplementaryPartsDescriptions {instance creation}
NCUMLDiagramMorph newStateSymbol openInHand. NCUMLDiagramMorph newUMLClassSymbol openInHand.
NCStateDiagramMorph
NCUMLDiagramMorph subclass: #NCStateDiagramMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCButtonBar class newFSMToolbar {instance creation}
NCTestUUIDMorph
NCTextRectangleMorph subclass: #NCTestUUIDMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of NCTestUUIDMorph.
NCTextMorph
TextMorph subclass: #NCTextMorph instanceVariableNames: 'acceptOnCR acceptOnFocusLoss' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Text-Base'
I am a subclass of TextMorph that can be told to accept on either focus loss and/or CR.
Senders of it:
NCLabelMorph class textClass {defaults}
NCTextRectangleMorph
NCBasicShapeMorph subclass: #NCTextRectangleMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
I am a shape that has one or more embedded TextMorphs, with optional lines between them.
Senders of it:
Flaps class quadsDefiningClassDiagramConnectorsFlap {*connectors-shapes-flaps}
Flaps class quadsDefiningConnectorsFlap {*connectors-shapes-flaps}
Flaps class quadsDefiningFSMConnectorsFlap {*connectors-shapes-flaps}
NCButtonBar class newClassDiagramToolbar {instance creation}
NCCompositeStateMorph initialize {initialization}
NCTextRectangleMorph class supplementaryPartsDescriptions {instance creation}
NCUMLDiagramMorph
NCTextRectangleMorph subclass: #NCUMLDiagramMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Connectors-Shapes'
THIS CLASS HAS NO COMMENT!
Senders of it:
NCTextRectangleMorph class newStateSymbol {instance creation}
NCTextRectangleMorph class newUMLClassSymbol {instance creation}
NCUMLDiagramMorph class supplementaryPartsDescriptions {as yet unclassified}
Class is implemented in this NCUMLDiagramMorph class.
NebraskaNavigationMorph
ProjectNavigationMorph subclass: #NebraskaNavigationMorph instanceVariableNames: 'nebraskaBorder nebraskaTerminal' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Remote'
THIS CLASS HAS NO COMMENT!
Senders of it:
NetworkTerminalMorph openScaled {initialization}
NebraskaServerMorph
AlignmentMorphBob1 subclass: #NebraskaServerMorph instanceVariableNames: 'server slowCounter previousBacklog lastFullUpdateTime currentStatusString fullDisplay previousClients currentBacklogString' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Remote'
A cheezy morph that simply steps a Nebraska server instance over and over.
Senders of it:
NebraskaServerMorph class killOldServers {as yet unclassified}
NebraskaServerMorph class serveWorldButton {as yet unclassified}
NebraskaServerMorph class supplementaryPartsDescriptions {as yet unclassified}
ProjectNavigationMorph shareThisWorld {*nebraska-*nebraska-Morphic-Remote}
SugarNavigatorBar startNebraska {sharing}
SugarNavigatorBar stopSharing {sharing}
NetworkTerminalBorderMorph
EmbeddedWorldBorderMorph subclass: #NetworkTerminalBorderMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Remote'
THIS CLASS HAS NO COMMENT!
Senders of it:
NetworkTerminalMorph openScaled {initialization}
NetworkTerminalMorph
Morph subclass: #NetworkTerminalMorph instanceVariableNames: 'connection decoder eventEncoder backgroundForm enteringHand' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Remote'
A morph used to communicate with a remote image. It sends all mouse/keyboard events to the remote side, and it displays canvas commands that are sent back.
Senders of it:
EToySenderMorph startNebraskaClient {as yet unclassified}
NebraskaNavigationMorph wantsToBeDroppedInto: {dropping/grabbing}
NebraskaServer acceptPhonyConnection {networking}
NewHandleMorph
HandleMorph subclass: #NewHandleMorph instanceVariableNames: 'hand offset waitingForClickInside' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
EToyFridgeMorph acceptDroppingMorph:event: {layout}
EToySenderMorph acceptDroppingMorph:event: {layout}
NCConstraintMorph addSelectedMorph: {menus}
NCConstraintMorph attachToSelectedMorph: {menus}
NCConstraintMorph selectPointWith:thenDo: {menus}
NetworkTerminalMorph acceptDroppingMorph:event: {layout}
NewWorldWindow spawnReframeHandle: {resize/collapse}
PinMorph startWiring: {wires}
ProjectViewMorph acceptDroppingMorph:event: {layout}
SelectionMorph extendByHand: {initialization}
SimpleSelectionMorph extendByHand: {extending}
SystemWindow spawnOffsetReframeHandle:divider: {resize/collapse}
SystemWindow spawnPaneFrameHandle: {resize/collapse}
SystemWindow spawnReframeHandle: {resize/collapse}
TextPlusPasteUpMorph acceptDroppingMorph:event: {layout}
TextPlusPasteUpMorph wantsDroppedMorph:event: {dropping/grabbing}
NewVariableDialogMorph (v5)
GenericPropertiesMorph subclass: #NewVariableDialogMorph instanceVariableNames: 'varNameText varTypeButton decimalPlacesButton' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
THIS CLASS HAS NO COMMENT!
Senders of it:
Player addInstanceVariable {slots-user}
NewWorldWindow
SystemWindow subclass: #NewWorldWindow instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
THIS CLASS HAS NO COMMENT!
Senders of it:
PasteUpMorph installAsActiveSubprojectIn:at:titled: {world state}
NoHaloMorph
Morph subclass: #NoHaloMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Sugar'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of NoHaloMorph.
NullTerminalMorph
NetworkTerminalMorph subclass: #NullTerminalMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Remote'
THIS CLASS HAS NO COMMENT!
Senders of it:
NebraskaServer acceptNullConnection {networking}
NumberLineMorph (v5)
Morph subclass: #NumberLineMorph instanceVariableNames: 'minValue actualColor axis showZero pixelsPerUnit unitsPerMark marksPerLegend' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Charts'
An abstract superclass for VerticalNumberLine and HorizontalNumberLine.
minValue - Number - the value corresponding to the left edge of the line.
pixelsPerUnit - Integer - the number of pixels on the graph that correspond to a single unit in the metric space of the line.
actualColor - the color borne by the axis
axis - a two-vertex PolygonMorph which is the actual line
showZero - Boolean - if false, then a 0 legend will *not* be show.
Senders of it:
There are no senders of NumberLineMorph.
NumericReadoutTile
TileMorph subclass: #NumericReadoutTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A readout tile for Number-valued variables.
If it bears property #PointValued, it will actually represent a Point-valued variable.
Senders of it:
NumberType newReadoutTile {*Etoys-tiles}
NumericReadoutTile class supplementaryPartsDescriptions {instance creation}
PointType newReadoutTile {tiles}
SyntaxMorph readOut {accessing}
UpdatingStringMorph valueFromContents {accessing}
ObjectPropertiesMorph
GenericPropertiesMorph subclass: #ObjectPropertiesMorph instanceVariableNames: 'simplePanel' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
THIS CLASS HAS NO COMMENT!
Senders of it:
Morph openAPropertySheet {meta-actions}
ObjectRepresentativeMorph
AlignmentMorph subclass: #ObjectRepresentativeMorph instanceVariableNames: 'objectRepresented' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of ObjectRepresentativeMorph.
ObjectsTool
AlignmentMorph subclass: #ObjectsTool instanceVariableNames: 'searchString modeSymbol currentCategory asStandAlone' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-PartsBin'
I am a Master Parts Bin that allows the user to drag out a new Morph from a voluminous iconic list.
Choose "objects" from the world menu, or type Alt-o (Cmd-o on the Mac).
To add a new kinds of Morphs:
In the class of the Morph, implement the message:
descriptionForPartsBin
^ self partName: 'Rectangle'
categories: #('Graphics' ' Basic 1 ')
documentation: 'A rectangular shape, with border and fill style'
The partName is the title that will show in the lower pane of the Object Tool.
When is categories mode, an object can be seen in more than one category. The list above tells which ones.
Documentation is what will show in the balloon help for each object thumbnail.
The message #initializeToStandAlone creates the actual instance.
To make a second variant object prototype coming from the same class, implement #supplementaryPartsDescriptions. In it, you get to specify the nativitySelector. It is sent to the class to get the variant objects. Often it is #authoringPrototype. (A class may supply supplementaryPartsDescriptions without implementing descriptionForPartsBin. This gives you better control.)
Senders of it:
ConnectorsBasicDistroInfo class rebuildObjectsToolIcons {distribution}
EventRecordingSpace sugarPartsBinQuads {sugar flaps}
Flaps class defaultsQuadsDefiningPlugInSuppliesFlap {predefined flaps}
Flaps class defaultsQuadsDefiningWidgetsFlap {flaps registry}
Flaps class newObjectsFlap {predefined flaps}
ObjectsTool class registerInFlapsRegistry {class initialization}
PasteUpMorph activateObjectsTool {world menu}
TheWorldMenu createStandardPartsBin {*MorphicExtras-action}
TheWorldMenu launchCustomPartsBin {*MorphicExtras-action}
OLPCHelpDisplayer
AlignmentMorphBob1 subclass: #OLPCHelpDisplayer instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A scrolling help displayer.
Senders of it:
StandardScriptingSystem buildPanelTitled: {utilities}
PaintBoxColorPicker
ImageMorph subclass: #PaintBoxColorPicker instanceVariableNames: 'currentColor locOfCurrent' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Support'
A pop-up, 32-bit color palette used as part of a PaintBoxMorph.
Senders of it:
PaintBoxMorph loadColorChooser {initialization}
PaintBoxMorph
ImageMorph subclass: #PaintBoxMorph instanceVariableNames: 'action tool currentCursor thumbnail currentColor currentBrush colorMemory colorPatch stampHolder rotationTabForm scaleTabForm colorMemoryThin brushes focusMorph weakDependents recentColors' classVariableNames: 'AllOffImage AllOnImage AllPressedImage ColorChart OriginalBounds Prototype RecentColors' poolDictionaries: '' category: 'MorphicExtras-Support'
This is the set of controls for painting. Has tool section, color section, stamps pull-down, shape tool pull-down.
The class variable Prototype holds the master PaintBoxMorph. It is veryDeepCopied to get a new one. See #new.
action the selector used for mouseMove of this tool. paint: or erase:
tool the actual buttonMorph that the user last clicked on
currentCursor
thumbnail
currentColor
currentBrush
colorMemory The colorPicker with current color marked
colorPatch
stampHolder not a morph
rotationTabForm
scaleTabForm
colorMemoryThin when closed
brushes
focusMorph The sketch we are painting
weakDependents
recentColors OrderedCollection of colors
Senders of it:
19 methods
PaintInvokingMorph
ImageMorph subclass: #PaintInvokingMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
When this is dropped inside some appropriate place, then painting is invoked for that place.
Senders of it:
Flaps class defaultsQuadsDefiningScriptingFlap {flaps registry}
Flaps class defaultsQuadsDefiningWidgetsFlap {flaps registry}
Flaps class newLoneSuppliesFlap {predefined flaps}
PaintInvokingMorph class registerInFlapsRegistry {class initialization}
PasteUpMorph newDrawingFromMenu: {world menu}
ParameterTile
TileMorph subclass: #ParameterTile instanceVariableNames: 'scriptEditor' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
Represents a parameter in a user-defined script in "classic" tile-scripting. The type of a script's parameter is declared in the ScriptEditor for the script, and a parameter tile gets its type from the script. But because the user can change the parameter type *after* having created parameter tiles, we can later have type mismatches. Which however we at least deal with reasonably cleverly.
Senders of it:
BooleanScriptEditor wantsDroppedMorph:event: {dropping/grabbing}
CategoryViewer booleanPhraseFromPhrase: {support}
ScriptEditorMorph assureParameterTilesValid {dropping/grabbing}
ScriptEditorMorph handUserParameterTile {other}
ScriptEditorMorphBuilder variable: {reconstituting scripting tiles }
PartsBin
PasteUpMorph subclass: #PartsBin instanceVariableNames: '' classVariableNames: 'Thumbnails' poolDictionaries: '' category: 'MorphicExtras-PartsBin'
THIS CLASS HAS NO COMMENT!
Senders of it:
21 methods
PartsWindow
SystemWindow subclass: #PartsWindow instanceVariableNames: 'book prevButton nextButton menuButton openForEditing' classVariableNames: '' poolDictionaries: '' category: 'Morphic-PartsBin'
Disused. Instances may persist in users' images, so this obsolete code is kept around for the time being. Supplanted by the ObjectsTool.
Senders of it:
There are no senders of PartsWindow.
PasteUpMorph
BorderedMorph subclass: #PasteUpMorph instanceVariableNames: 'presenter model cursor padding backgroundMorph turtleTrailsForm turtlePen lastTurtlePositions isPartsBin autoLineLayout indicateCursor resizeToFit wantsMouseOverHalos worldState griddingOn' classVariableNames: 'DisableDeferredUpdates MinCycleLapse StillAlive WindowEventHandler' poolDictionaries: '' category: 'Morphic-Worlds'
A morph whose submorphs comprise a paste-up of rectangular subparts which "show through". Anything called a 'Playfield' is a PasteUpMorph.
Facilities commonly needed on pages of graphical presentations and on simulation playfields, such as the painting of new objects, turtle trails, gradient fills, background paintings, parts-bin behavior, collision-detection, etc., are (or will be) provided.
A World, the entire Smalltalk screen, is a PasteUpMorph. A World responds true to isWorld. Morph subclasses that have specialized menus (BookMorph) build them in the message addBookMenuItemsTo:hand:. A PasteUpMorph that is a world, builds its menu in HandMorph buildWorldMenu.
presenter A Presenter in charge of stopButton stepButton and goButton,
mouseOverHalosEnabled soundsEnabled fenceEnabled coloredTilesEnabled.
model <not used>
cursor ??
padding ??
backgroundMorph A Form that covers the background.
turtleTrailsForm Moving submorphs may leave trails on this form.
turtlePen Draws the trails.
lastTurtlePositions A Dictionary of (aPlayer -> aPoint) so turtle trails can be drawn
only once each step cycle. The point is the start of the current stroke.
isPartsBin If true, every object dragged out is copied.
autoLineLayout ??
indicateCursor ??
resizeToFit ??
wantsMouseOverHalos If true, simply moving the cursor over a submorph brings up its halo.
worldState If I am also a World, keeps the hands, damageRecorder, stepList etc.
griddingOn If true, submorphs are on a grid
Senders of it:
76 methods
PDAChoiceMorph
PopUpChoiceMorph subclass: #PDAChoiceMorph instanceVariableNames: 'backgroundColor' classVariableNames: '' poolDictionaries: '' category: 'Morphic-PDA'
See PDA comment.
Senders of it:
PDA openAsMorphIn: {initialization}
PDAClockMorph
WatchMorph subclass: #PDAClockMorph instanceVariableNames: 'backgroundColor' classVariableNames: '' poolDictionaries: '' category: 'Morphic-PDA'
See PDA comment. '
Senders of it:
PDA openAsMorphIn: {initialization}
PDAMorph
SystemWindow subclass: #PDAMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-PDA'
See PDA comment.
Senders of it:
PDA openMonthView {initialization}
PhraseTileForTest
PhraseTileMorph subclass: #PhraseTileForTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
THIS CLASS HAS NO COMMENT!
Senders of it:
CategoryViewer phraseForTest {entries}
PhraseTileForTimesRepeat
PhraseTileMorph subclass: #PhraseTileForTimesRepeat instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A place-holder for a Times-Repeat complex of etoy tiles. Used in a Viewer; when the user drags one of these, he ends up with a fully-instantiated Times/Repeat complex of tiles in his hand; if he drops such a group on the desktop, a new script is created for the object associated with the Viewer in question, with the Times/Repeat as its initial contents.
Senders of it:
CategoryViewer phraseForTimesRepeat {entries}
PhraseTileMorph
TileLikeMorph subclass: #PhraseTileMorph instanceVariableNames: 'resultType brightenedOnEnter userScriptSelector justGrabbedFromViewer vocabulary vocabularySymbol' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
Phrase Tile World: A single smalltalk expression in tiles. Like (car forwardBy: number), having 3 tiles.
type = command
rcvrType = #actor
In the Old Single tile world: Holder for a phrase of tiles as it came from the viewer and while it is being dragged by the hand.
Senders of it:
60 methods
PhraseWrapperMorph
AlignmentMorph subclass: #PhraseWrapperMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
An alignment morph designed for use in scripting Viewers; it wraps a set of phrases in a category viewer, and repels attempts to drop phrases upon it.
Senders of it:
There are no senders of PhraseWrapperMorph.
PianoKeyboardMorph
RectangleMorph subclass: #PianoKeyboardMorph instanceVariableNames: 'whiteKeyColor blackKeyColor playingKeyColor nOctaves target noteOnSelector noteOffSelector soundPrototype soundPlaying frequency allowingChord soundPlayingList' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
THIS CLASS HAS NO COMMENT!
Senders of it:
EnvelopeEditorMorph addKeyboard {construction}
WaveEditor initialize {initialization}
PianoRollNoteMorph
Morph subclass: #PianoRollNoteMorph instanceVariableNames: 'trackIndex indexInTrack hitLoc editMode selected notePlaying' classVariableNames: 'SoundPlaying' poolDictionaries: '' category: 'Sound-Scores'
A PianoRollNoteMorph is drawn as a simple mroph, but it carries the necessary state to locate its source sound event via its owner (a PianorRollScoreMorph) and the score therein. Simple editing of pitch and time placement is provided here.
Senders of it:
PianoRollNoteMorph mouseDown: {event handling}
PianoRollScoreMorph addNotes {drawing}
PianoRollScoreMorph deleteSelection {editing}
PianoRollScoreMorph notesInRect: {scrolling}
PianoRollScoreMorph
RectangleMorph subclass: #PianoRollScoreMorph instanceVariableNames: 'scorePlayer score colorForTrack lowestNote leftEdgeTime timeScale indexInTrack lastUpdateTick lastMutedState cursor selection timeSignature beatsPerMeasure notePerBeat showMeasureLines showBeatLines soundsPlaying soundsPlayingMorph movieClipPlayer' classVariableNames: 'NotePasteBuffer' poolDictionaries: '' category: 'Sound-Scores'
A PianoRollScoreMorph displays a score such as a MIDIScore, and will scroll through it tracking the progress of a ScorePlayerMorph (from which it is usually spawned).
timeScale is in pixels per score tick.
Currently the ambient track (for synchronizing thumbnails, eg) is treated specially here and in the score. This should be cleaned up by adding a trackType or something like it in the score.
Senders of it:
AnonymousSoundMorph justDroppedInto:event: {piano roll}
MovieClipStartMorph delete {submorphs-add/remove}
MovieClipStartMorph justDroppedInto:event: {dropping/grabbing}
MovieFrameSyncMorph justDroppedInto:event: {dropping/grabbing}
MoviePlayerMorph makeAMovie {menu}
ScorePlayerMorph makePianoRoll {layout}
PinMorph
ImageMorph subclass: #PinMorph instanceVariableNames: 'component pinForm pinSpec wires' classVariableNames: 'InputPinForm IoPinForm OutputPinForm' poolDictionaries: '' category: 'Morphic-Components'
THIS CLASS HAS NO COMMENT!
Senders of it:
ComponentLikeModel addPinFromSpec: {components}
ComponentLikeModel extent: {geometry}
ComponentLikeModel pinsDo: {components}
PinMorph startWiring: {wires}
PlaybackInvoker
SketchMorph subclass: #PlaybackInvoker instanceVariableNames: 'caption contentArea tape beforeBitmap afterBitmap initialPicture finalPicture timesPlayed offeringHint autoStart autoDismiss whereToAppear postPlaybackImageFeature' classVariableNames: 'HintForm' poolDictionaries: '' category: 'Morphic-Mentoring'
When clicked on by the user, open up an EventPlaybackSpace positioned within the receiver's container, ready to play back a given event tape with a given optional voice track.
caption A textual title for the exercise
contentArea The reference bounds to which the coordinates in the tape are bound.
tape An EventRecorder tape
voiceRecorder An optional SoundRecorder
beforeBitmap The bitmap of the receiver before the first time the user has requested the hint
afterBitmap The bitmap of the receiver after the first time the user has requested the hint
timesPlayed How many times the hint has been invoked
autoStart If true, playback will happen automatically when the playback unit is opened.
autoDismiss If true, as soon as playback ends, the playback unit will go away, revealing the "afterBitmap" view of the receiver.
Senders of it:
EventRecordingSpace openTextualPlaybackButton {processing}
EventRecordingSpace openUnhintedPlaybackButton {processing}
PlaybackInvoker changeCaption {menu }
PlayerReferenceReadout
ThumbnailMorph subclass: #PlayerReferenceReadout instanceVariableNames: 'putSelector' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
A thumbnail that serves as the value readout for a player-valued slot in a Viewer. Clicking on it allows the user to select a new object for the slot to point to.
Senders of it:
PlayerType updatingTileForTarget:partName:getter:setter: {tiles}
PlayerSurrogate
AlignmentMorph subclass: #PlayerSurrogate instanceVariableNames: 'playerRepresented' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
An morph representing an E-Toy "Player" in an AllPlayersTool.
Senders of it:
Player entryForPlayersTool: {misc}
PlayingCardDeck
AlignmentMorph subclass: #PlayingCardDeck instanceVariableNames: 'layout stackingPolicy stackingOrder emptyDropPolicy target acceptCardSelector cardDroppedSelector cardDoubleClickSelector cardDraggedSelector seed' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
THIS CLASS HAS NO COMMENT!
Senders of it:
FreeCellBoard cardCell {layout}
FreeCellBoard pickGame: {initialization}
FreeCellBoard stack {card in a stack}
PlayingCardDeck subDeckStartingAt: {accessing}
PlayingCardMorph justDroppedInto:event: {dropping/grabbing}
PlayingCardMorph
ImageMorph subclass: #PlayingCardMorph instanceVariableNames: 'cardNumber suitNumber' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
This class displays images from the PlayingCard class as morphs. It attempts to be space-efficient by only producing its images on demand.
Senders of it:
FreeCellBoard cardCell {layout}
FreeCellBoard cellsRowSpacer {layout}
PlayingCardDeck newDeck {initialization}
PlayingCardDeck newSuit: {initialization}
PlayingCardDeck repelsMorph:event: {dropping/grabbing}
PlayingCardMorph class test {testing}
PlayWithMe1
MorphicModel subclass: #PlayWithMe1 instanceVariableNames: 'slider1 valuePrinter scrollBar1 listPane1 listPane2' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Models'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of PlayWithMe1.
PluggableButtonMorph
AlignmentMorph subclass: #PluggableButtonMorph instanceVariableNames: 'model label getStateSelector actionSelector getLabelSelector getMenuSelector shortcutCharacter askBeforeChanging triggerOnMouseDown offColor onColor feedbackColor showSelectionFeedback allButtons arguments argumentsProvider argumentsSelector' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
A PluggableButtonMorph is a combination of an indicator for a boolean value stored in its model and an action button. The action of a button is often, but not always, to toggle the boolean value that it shows. Its pluggable selectors are:
getStateSelector fetch a boolean value from the model
actionSelector invoke this button's action on the model
getLabelSelector fetch this button's lable from the model
getMenuSelector fetch a pop-up menu for this button from the model
Any of the above selectors can be nil, meaning that the model does not supply behavior for the given action, and the default behavior should be used. For example, if getStateSelector is nil, then this button shows the state of a read-only boolean that is always false.
The model informs its view(s) of changes by sending #changed: to itself with getStateSelector as a parameter. The view tells the model when the button is pressed by sending actionSelector.
If the actionSelector takes one or more arguments, then the following are relevant:
arguments A list of arguments to provide when the actionSelector is called.
argumentsProvider The object that is sent the argumentSelector to obtain arguments, if dynamic
argumentsSelector The message sent to the argumentProvider to obtain the arguments.
Options:
askBeforeChanging have model ask user before allowing a change that could lose edits
triggerOnMouseDown do this button's action on mouse down (vs. up) transition
shortcutCharacter a place to record an optional shortcut key
Senders of it:
ArchiveViewer createButtonBar {initialization}
Browser buildMorphicSwitches {initialize-release}
ChangeList optionalButtonRow {menu actions}
CodeHolder buttonWithSelector: {controls}
CodeHolder optionalButtonRow {controls}
Debugger customButtonRow {initialize}
Debugger optionalButtonRow {initialize}
HTTPProxyEditor createLabel: {initialization}
HtmlInput addFileInputToFormatter: {formatting}
HtmlInput addToFormatter: {formatting}
Lexicon customButtonRow {control buttons}
MailComposition openInMorphic {interface}
MCTool buttonRow: {morphic ui}
PluggableButtonMorph class example {example}
PluggableFileList openAsMorphLabel:inWorld: {initialize-release}
SimpleServiceEntry buttonToTriggerIn: {performing service}
SystemWindow setWindowColor: {menu}
PluggableListMorph
ScrollPane subclass: #PluggableListMorph instanceVariableNames: 'list getListSelector getListSizeSelector getListElementSelector getIndexSelector setIndexSelector keystrokeActionSelector autoDeselect lastKeystrokeTime lastKeystrokes lastClickTime doubleClickSelector handlesBasicKeys potentialDropRow listMorph' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
...
When a PluggableListMorph is in focus, type in a letter (or several
letters quickly) to go to the next item that begins with that letter.
Special keys (up, down, home, etc.) are also supported.
Senders of it:
48 methods
PluggableListMorphByItem
PluggableListMorph subclass: #PluggableListMorphByItem instanceVariableNames: 'itemList' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
ChangeSetBrowser openAsMorphIn:rect: {initialization}
ChangeSorter openAsMorphIn:rect: {creation}
PluggableListMorphOfMany
PluggableListMorph subclass: #PluggableListMorphOfMany instanceVariableNames: 'dragOnOrOff getSelectionListSelector setSelectionListSelector' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
A variant of its superclass that allows multiple items to be selected simultaneously. There is still a distinguished element which is selected, but each other element in the list may be flagged on or off.
Senders of it:
ChangeList openAsMorphName:multiSelect: {initialization-release}
MCTool multiListMorph:selection:listSelection:menu: {morphic ui}
PluggableMessageCategoryListMorph
PluggableListMorph subclass: #PluggableMessageCategoryListMorph instanceVariableNames: 'getRawListSelector priorRawList' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
A variant of PluggableListMorph designed specially for efficient handling of the --all-- feature in message-list panes. In order to be able *quickly* to check whether there has been an external change to the list, we cache the raw list for identity comparison (the actual list is a combination of the --all-- element and the the actual list).
Senders of it:
Browser buildMorphicMessageCatList {initialize-release}
PluggableMultiColumnListMorph
PluggableListMorph subclass: #PluggableMultiColumnListMorph instanceVariableNames: 'lists' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
This morph can be used to show a list having multiple columns, The columns are self width sized to make the largest entry in each list fit. In some cases the pane may then be too narrow.
Use it like a regular PluggableListMorph except pass in an array of lists instead of a single list.
There are base assumptions made here that each list in the array of lists is the same size.
Also, the highlight color for the selection is easy to modify in the #highlightSelection method. I used blue
when testing just to see it work.
Senders of it:
MCWorkingCopyBrowser workingCopyListMorph {morphic ui}
SoundLibraryTool addSoundList {initialization}
PluggableMultiColumnListMorphByItem
PluggableMultiColumnListMorph subclass: #PluggableMultiColumnListMorphByItem instanceVariableNames: 'itemList' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of PluggableMultiColumnListMorphByItem.
PluggableTabBarMorph
Morph subclass: #PluggableTabBarMorph instanceVariableNames: 'target tabs activeTab' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
This morph manages a set of PluggableTabButtonMorphs. Each tab should be added in the left to right order that they should be displayed. Each tab will be evenly sized to fit the available space. This morph intercepts mouse clicks, figures out which tab was clicked, pops up the new tab as the active tab and triggers the registered event. See PluggableTabButtonMorph for information on what a tab can consist of.
Example:
(PluggableTabBarMorph on: nil)
addTab: (Text fromString: 'Test') withAction: [Transcript show: 'Test'; cr];
addTab: (Text fromString: 'Another') withAction: [Transcript show: 'Another'; cr];
width: 200;
openInHand
Senders of it:
There are no senders of PluggableTabBarMorph .
PluggableTabButtonMorph
Morph subclass: #PluggableTabButtonMorph instanceVariableNames: 'active model textSelector arcLengths subMorph' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
This is a specialized pluggable button morph that is meant to represent a tab in a set of tabs arranged horizontally. Each tab will overlap slightly when drawn. All but one tab will be drawn in left to right order in the specified color, but lighter. The active tab will be drawn last in the full color and slightly taller to indicate that it is selected. Clicking the active tab has no effect but clicking any other tab will change the active tab to the clicked tab.
This morph does not itself accept any events. The parent tab set will grab the mouse clicks and handle notifying the appropriate tabs that they have been activated or deactivated.
There is a single selector which provides the text for the button label and affects the width of the tab. When the width changes the tab will inform its parent that it has changed and that the layout needs to be updated. The model for the text selector of course should be the client for the tab set.
The button label can be a String, Text, or Morph. Texts work better than plain Strings.
Senders of it:
PluggableTabBarMorph addTab:withAction: {access}
PluggableTextMorph
ScrollPane subclass: #PluggableTextMorph instanceVariableNames: 'textMorph getTextSelector setTextSelector getSelectionSelector hasUnacceptedEdits askBeforeDiscardingEdits selectionInterval hasEditingConflicts' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
70 methods
PluggableTextMorphPlus (v5)
PluggableTextMorph subclass: #PluggableTextMorphPlus instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Morphic'
THIS CLASS HAS NO COMMENT!
Senders of it:
MCTool codePane: {morphic ui}
PluggableTextMorphWithModel
PluggableTextMorph subclass: #PluggableTextMorphWithModel instanceVariableNames: 'myContents' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of PluggableTextMorphWithModel.
PluggableTileScriptorMorph
TwoWayScrollPane subclass: #PluggableTileScriptorMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Tile Scriptors'
THIS CLASS HAS NO COMMENT!
Senders of it:
CodeHolder installTextualCodingPane {diffs}
CodeHolder installTilesForSelection {tiles}
Lexicon acceptTiles {*Etoys-tiles}
Lexicon installTilesForSelection {tiles}
SyntaxMorph inAPluggableScrollPane {initialization}
PolygonMorph
BorderedMorph subclass: #PolygonMorph instanceVariableNames: 'vertices vertexCursor closed filledForm arrows arrowForms smoothCurve curveState borderDashSpec handles borderForm' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
This class combines the old Polygon and Curve classes.
The 1-bit fillForm to make display and containment tests reasonably fast. However, this functionality is in the process of being supplanted by balloon capabilities, which should eventually provide anti-aliasing as well.
Senders of it:
35 methods
Implements the following costumes in its class methods:
PolygonMorph curvePrototype openInHand PolygonMorph arrowPrototype openInHand PolygonMorph trianglePrototype openInHand.
PopUpChoiceMorph
StringMorph subclass: #PopUpChoiceMorph instanceVariableNames: 'target actionSelector arguments getItemsSelector getItemsArgs choiceSelector choiceArgs' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
EnvelopeEditorMorph addControls {construction}
FreeTranslation class translatePanel:fromTo: {translation}
MidiInputMorph channelNumAndMuteButtonFor: {as yet unclassified}
ScorePlayerMorph trackNumAndMuteButtonFor: {layout}
PreDebugWindow
SystemWindow subclass: #PreDebugWindow instanceVariableNames: 'proceedButton debugButton' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
THIS CLASS HAS NO COMMENT!
Senders of it:
Debugger buildMorphicNotifierLabelled:message: {nil}
PrintComponent
TextComponent subclass: #PrintComponent instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Components'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of PrintComponent.
ProgressBarMorph
BorderedMorph subclass: #ProgressBarMorph instanceVariableNames: 'value progressColor lastValue' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
FlashPlayerWindow addProgressIndicator {as yet unclassified}
FlashPlayerWindow addProgressIndicator: {as yet unclassified}
ProgressMorph initProgressMorph {initialization}
ProgressMorph
RectangleMorph subclass: #ProgressMorph instanceVariableNames: 'labelMorph subLabelMorph progress' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
ProgressMorph class example {example}
ProjectNavigationMorph
AlignmentMorphBob1 subclass: #ProjectNavigationMorph instanceVariableNames: 'mouseInside soundSlider' classVariableNames: 'LastManualPlacement' poolDictionaries: '' category: 'MorphicExtras-Navigators'
THIS CLASS HAS NO COMMENT!
Senders of it:
EventRecordingSpace inspectNavBar {sugar flaps}
Flaps class newNavigatorFlap {predefined flaps}
PasteUpMorph windowEvent: {event handling}
Project assureNavigatorPresenceMatchesPreference {menu messages}
Project finalEnterActions {menu messages}
Project finalExitActions {enter}
Project setFlaps {language}
ProjectNavigationMorph class preferredNavigator {as yet unclassified}
ProjectSorterMorph
BookPageSorterMorph subclass: #ProjectSorterMorph instanceVariableNames: 'sizeOfEachMorph' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Navigators'
THIS CLASS HAS NO COMMENT!
Senders of it:
InternalThreadNavigationMorph editThisThread {navigation}
ProjectViewMorph
ImageMorph subclass: #ProjectViewMorph instanceVariableNames: 'project lastProjectThumbnail mouseDownTime string' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
I am a Morphic view of a project. I display a scaled version of the project's thumbnail, which itself is a scaled-down snapshot of the screen taken when the project was last exited. When I am displayed, I check to see if the project thumbnail has changed and, if so, I update my own view of that thumbnail.
Senders of it:
20 methods
QHsmMorph
Morph subclass: #QHsmMorph instanceVariableNames: 'eventHandler' classVariableNames: '' poolDictionaries: '' category: 'FSM-Morphic'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of QHsmMorph.
QHsmTestMorph
QHsmMorph subclass: #QHsmTestMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'FSM-Tests'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of QHsmTestMorph.
QuickGuideGenerator
Morph subclass: #QuickGuideGenerator instanceVariableNames: 'input output inputMorph outputMorph fileList' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Books'
Used to generate .sexp files for the Quick Guides. These are the help system for Etoys.
How to use:
Pressing the Help button [?] at the top left of the screen, brings up the QuickGuides flap. The index page has categories of help. The Jump To... button allows you to get to any help guide.
To create a new guide, copy the bookmorph out of the flap. Use the halos to completely change the contents. Create help pages for a new topic.
When you are done, write the entire project out using "Keep the current project". It is now a .pr file.
If you put the .pr into the QuickGuides folder, you will be able to see it in the Help flap. (Click the Help button [?] once to close help, and once again to open it.)
You can test a .pr file in the QuickGuides folder, but it is not in the proper format to include in the OLPC build.
The purpose of QuickGuideGenerator is to put a guide in to the proper format for distribution.
0) Get the new Guides from http://tinlizzie.org/quickguides
1) Make a folder called "To-Be-Translated" at the top level of your file system. Put the .pr files of all new guides into this folder.
1.5) Make a folder called "Newer" in the folder that has the Etoys image file. Must be a fresh new folder.
2) Start Etoys. You will NOT save this image.
3) Execute
QuickGuideGenerator new openInWorld.
4) Wait until a new window appears.
5) Find the folder "To-Be-Translated" in the list and click on it. It's path will appear in the top pane.
6) Press the "Generate" button. Wait.
7) Quit Etoys.
8) "Newer" will now have a .sexp file for each guide that was a .pr file. Files ending in .sexp contain Yoshiki's S-expression linearization of object trees.
9) Copy the .sexp files to QuickGuides, and delete the .pr files of the same name.
10) Rename Newer to be Newer-day-month-year
11) Copy Newer-xx to http://tinlizzie.org/share/QG-compressed
12) copy the .sexp files into http://tinlizzie.org/share/QG-compressed/Quickguides
Senders of it:
There are no senders of QuickGuideGenerator.
QuickGuideHolderMorph
PasteUpMorph subclass: #QuickGuideHolderMorph instanceVariableNames: 'guideName guideNameInWords guideCategory' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Books'
This is the Flap that holds the Guides. Shows one guide at a time,
Senders of it:
QuickGuideMorph guideToWebWithJPEGs: {write web pages}
QuickGuideMorph initialize {initialization}
QuickGuideMorph jPegOutDir: {write web pages}
QuickGuideMorph loadPages {initialization}
QuickGuideMorph order: {initialization}
QuickGuideMorph
BookMorph subclass: #QuickGuideMorph instanceVariableNames: 'control order' classVariableNames: 'Categories FileNameStems HTMLJumpTo IndexPage IndexPageMimeString PagesForCategory' poolDictionaries: '' category: 'Morphic-Books'
A BookMorph that holds QuickGuides.
World
an AlignmentMorph (the flap)
an AlignmentMorph
a QuickGuideMorph (one page per guide, 54 pages.
Page may be a stub if guide not in)
a QuickGuideHolderMorph
a BookMorph (4 pages)
a PasteUpMorph (a page)
QuickGuides are stored in Contents/Resources/QuickGuides/
or by language in Contents/Resources/locale/<id>/QuickGuides/
(see guidePath)
Categories = OrderedCollection of {catKey. catTitle}
where catKey appears at the start of a file name 'Menu'
catTitle may be UTF-8 full name.
PagesForCategory dictionary of (catKey -> list). list has elements {guideName. guideTitle}. guideName is last part of a file name and guideTitle may be in UTF-8.
Senders of it:
Project helpGuideIfOpen {flaps support}
QuickGuideGenerator generate {all}
QuickGuideHolderMorph load {file in/file out}
QuickGuideMorph checkForIndexOnDisk {transition}
QuickGuideMorph class fileNameStems {defaults}
QuickGuideMorph class loadIndex {initialization}
QuickGuideMorph class loadIndexAndPeekOnDisk {initialization}
ReleaseBuilderSqueakland buildInitialScreen {squeakland}
ReleaseBuilderSqueakland finalStripping {utilities}
SugarNavigatorBar buildAndOpenHelpFlap {help flap}
SugarNavigatorBar toggleHelp {help flap}
RandomNumberTile
TileMorph subclass: #RandomNumberTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
Disused; retained "temporarily" for backward compatibility. The duties formerly served by the RandomNumberTile are now handled by the generic FunctionTile.
Senders of it:
RandomNumberTile class registerInFlapsRegistry {class initialization}
RecordingControls
AlignmentMorph subclass: #RecordingControls instanceVariableNames: 'recorder recordingStatusLight recordMeter recordingSaved' classVariableNames: '' poolDictionaries: '' category: 'Sound-Interface'
A facelifted version of John Maloney's original RecordingControlsMorph.
Senders of it:
EventRecordingSpace sugarPartsBinQuads {sugar flaps}
Flaps class defaultsQuadsDefiningPlugInSuppliesFlap {predefined flaps}
Flaps class defaultsQuadsDefiningWidgetsFlap {flaps registry}
Flaps class newLoneSuppliesFlap {predefined flaps}
RecordingControls class registerInFlapsRegistry {class initialization}
RecordingControlsMorph
AlignmentMorph subclass: #RecordingControlsMorph instanceVariableNames: 'recorder recordingStatusLight recordMeter' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
THIS CLASS HAS NO COMMENT!
Senders of it:
RecordingControlsMorph class registerInFlapsRegistry {class initialization}
RectangleMorph
BorderedMorph subclass: #RectangleMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
A subclass of BorderedMorph that supports different fillStyles.
RectangleMorph diagonalPrototype openInWorld.
RectangleMorph gradientPrototype openInWorld.
Senders of it:
65 methods
ReferenceMorph
BorderedMorph subclass: #ReferenceMorph instanceVariableNames: 'referent isHighlighted' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Palettes'
Serves as a reference to any arbitrary morph; used, for example, as the tab in a tabbed palette The wrapper intercepts mouse events and fields them, passing them on to their referent morph.
Senders of it:
IndexTabs addTabForBook: {tabs}
IndexTabs addTabFor:font: {tabs}
IndexTabs tabMorphs {tabs}
TabbedPalette tabNamed: {user-interface}
TabMorph convertToReferenceMorph {as yet unclassified}
RemoteControlledHandMorph
HandMorph subclass: #RemoteControlledHandMorph instanceVariableNames: 'eventDecoder viewExtent nebraskaClient' classVariableNames: '' poolDictionaries: '' category: 'Nebraska-Morphic-Remote'
Used as part of the Nebraska system. It is controlled by commands sent through a socket. The encoding is interpreted via a MorphicEventDecoder.
Senders of it:
NebraskaClient initialize: {initialization}
RemoteHandMorph
HandMorph subclass: #RemoteHandMorph instanceVariableNames: 'remoteWorldExtent remoteAddress sendSocket sendBuffer sendState socket waitingForConnection receiveBuffer' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalSupport'
THIS CLASS HAS NO COMMENT!
Senders of it:
PasteUpMorph connectRemoteUserWithName:picture:andIPAddress: {world menu}
PasteUpMorph disconnectAllRemoteUsers {world menu}
WorldState doOneCycleInBackground {*MorphicExtras-update cycle}
RulerMorph
RectangleMorph subclass: #RulerMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of RulerMorph.
SameGame
AlignmentMorph subclass: #SameGame instanceVariableNames: 'board scoreDisplay selectionDisplay helpText' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
See SameGame>>helpString for an explanation of how to play
helpString
^ 'The object of SameGame is to maximize your score by removing tiles from the board. Tiles are selected and removed by clicking on a tile that has at least one adjacent tile of the same color (where adjacent is defined as up, down, left, or right).
The first click selects a group of adjacent tiles, a second click in that group will remove it from the board, sliding tiles down and right to fill the space of the removed group. If you wish to select a different group, simply click on it instead.
The score increases by "(selection - 2) squared", so you want to maximize the selection size as much as possible. However, making small strategic selections may allow you to increase the size of a later selection.
If you are having a hard time finding a group, the "Hint" button will find one and select it for you (although it is likely not the best group to select!).
When there are no more groups available, the score display will flash with your final score. Your final score is reduced by 1 for each tile remaining on the board. If you manage to remove all tiles, your final score is increased by a bonus of 5 times the number of tiles on a full board.
Come on, you can beat that last score! Click "New game" ;-)
SameGame was originally written by Eiji Fukumoto for UNIX and X; this version is based upon the same game concept, but was rewritten from scratch.' translated
Senders of it:
There are no senders of SameGame.
SameGameBoard
AlignmentMorph subclass: #SameGameBoard instanceVariableNames: 'protoTile rows columns palette selection selectionColor flashColor flash target actionSelector arguments' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
I am an MxN array of SameGameTiles, and implement most of the logic to play the SameGame, including adjacent tile selection and removal.
Senders of it:
SameGame board {access}
SameGameTile
SimpleSwitchMorph subclass: #SameGameTile instanceVariableNames: 'switchState disabled oldSwitchState' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
I am a single tile for the SameGame. I act much like a switch.
Senders of it:
SameGameBoard protoTile {accessing}
ScorePlayerMorph
AlignmentMorph subclass: #ScorePlayerMorph instanceVariableNames: 'scorePlayer trackInstNames instrumentSelector scrollSlider' classVariableNames: 'LastMIDIPort' poolDictionaries: '' category: 'Sound-Scores'
A ScorePlayerMorph mediates between a score such as a MIDIScore, a PianoRollScoreMorph, and the actual SoundPlayer synthesizer.
It provides control over volume, tempo, instrumentation, and location in the score.
Senders of it:
AbstractSound class updateScorePlayers {sound library-file in/out}
ExternalDropHandler class defaultMidiHandler {private}
FileList class initialize {class initialization}
MIDIFileReader class playFileNamed: {as yet unclassified}
MIDIFileReader class playStream: {as yet unclassified}
MIDIFileReader class playURLNamed: {as yet unclassified}
MoviePlayerMorph makeAMovie {menu}
ScratchClientMorph (v5)
Morph subclass: #ScratchClientMorph instanceVariableNames: 'connectionIndicatorPane connectionIndicator indicators scratchHost scratchPort scratchSocket isVerbose isDebugMode' classVariableNames: '' poolDictionaries: '' category: 'ScratchConnect-Etoys'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of ScratchClientMorph.
ScreeningMorph
Morph subclass: #ScreeningMorph instanceVariableNames: 'screenForm displayMode passingColor passElseBlock' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
ScreeningMorph uses its first submorph as a screen, and its second submorph as a source. It also wants you to choose (when showing only the screen) the passing color in the screen. It then makes up a 1-bit mask which clips the source, and displays transparently outside it.
Senders of it:
MagnifierMorph class newRound {instance creation}
ScriptActivationButton
SimpleButtonMorph subclass: #ScriptActivationButton instanceVariableNames: 'uniclassScript' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A button associated with a particular player and script. You can "tear off" such a button for any etoy script, using menu items available in both Viewers and Scriptors. The button initially is given a label reflecting its player and script name, but this can be edited via the button's halo menu, as can its other appearance parameters. Such buttons are automatically kept in synch when the object's name or the script name change.
Senders of it:
MethodWithInterface allScriptActivationButtons {script editor}
Player tearOffButtonToFireScriptForSelector: {costume}
UniclassScript allScriptGoverningButtons {script editor}
ScriptableButton
UpdatingSimpleButtonMorph subclass: #ScriptableButton instanceVariableNames: 'scriptSelector' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A button intended for use with the card architecture and the user-scripting system.
Senders of it:
EventRecordingSpace sugarPartsBinQuads {sugar flaps}
Flaps class defaultsQuadsDefiningScriptingFlap {flaps registry}
Flaps class defaultsQuadsDefiningStackToolsFlap {flaps registry}
Flaps class defaultsQuadsDefiningSuppliesFlap {flaps registry}
NebraskaServerMorph class serveWorldButton {as yet unclassified}
PartsBin listDirection:quadList:withPreviousEntries: {initialization}
Project displayProgressWithJump: {menu messages}
Project displayProgressWithMessage: {menu messages}
ScriptableButton class registerInFlapsRegistry {class initialization}
ScriptEditorMorph
AlignmentMorph subclass: #ScriptEditorMorph instanceVariableNames: 'scriptName firstTileRow timeStamp playerScripted handWithTile showingMethodPane threadPolygon previousDropHandPosition dropSpaces' classVariableNames: 'Evaluator GenerateParseNodeDirectly Rewrite TrackedEditor WritingUniversalTiles' poolDictionaries: '' category: 'Etoys-Scripting'
Presents an EToy script to the user on the screen. Has in it:
a Morph with the controls for the script.
a Morph with the tiles. Either PhraseMorphs and TileMorphs,
or a TwoWayScroller with SyntaxMorphs in it.
WritingUniversalTiles -- only vlaid while a project is being written out.
True if using UniversalTiles in that project.
Senders of it:
51 methods
ScriptingTileHolder
AlignmentMorph subclass: #ScriptingTileHolder instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
Serves as a wrapper for a scripting-tile element that otherwise would be bare on the desktop.
Senders of it:
AnonymousSoundMorph addToSoundLibrary {menu}
ImageSegment comeFullyUpOnReload: {fileIn/Out}
PhraseTileMorph morphToDropInPasteUp: {mouse}
SystemQueryPhrase morphToDropInPasteUp: {miscellaneous}
TileLikeMorph morphToDropInPasteUp: {mouse}
TileMorph morphToDropInPasteUp: {event handling}
ScriptNameTile
SymbolListTile subclass: #ScriptNameTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A tile which refers to a script name. The choices available to the user, via the arrows and via the pop-up she gets when she clicks on the current script-name, are the names of all the user scripts in any Players in the active World.
Senders of it:
PasteUpMorph attemptCleanupReporting: {*Etoys-world menu}
ScriptEditorMorphBuilder literal: {reconstituting scripting tiles }
ScriptNameType defaultArgumentTile {tiles}
ScriptNameType newReadoutTile {tile}
ScriptOpeningButtonMorph (v5)
SimpleButtonMorph subclass: #ScriptOpeningButtonMorph instanceVariableNames: 'affiliatedScriptor' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Buttons'
THIS CLASS HAS NO COMMENT!
Senders of it:
ScriptEditorMorph buttonToOpenOrCloseThisScript {customevents-other}
UniclassScript allScriptGoverningButtons {script editor}
ScriptStatusControl
AlignmentMorph subclass: #ScriptStatusControl instanceVariableNames: 'tickPauseWrapper tickPauseButtonsShowing scriptInstantiation' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A structure consisting of a TickIndicatorMorph and an UpdatingSimpleButtonMorph, used to control the status of a given script for a given object. Used both in the headers of ScriptEditorMorphs and in Viewers.
Senders of it:
PasteUpMorph attemptCleanupReporting: {*Etoys-world menu}
ScriptEditorMorph updateStatus {buttons}
ScriptInstantiation statusControlMorph {status control}
ScriptInstantiation updateAllStatusMorphs {status control}
ScriptStatusLine
AlignmentMorph subclass: #ScriptStatusLine instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
THIS CLASS HAS NO COMMENT!
Senders of it:
ScriptInstantiation statusControlRowIn: {misc}
ScrollableField
PluggableTextMorphWithModel subclass: #ScrollableField instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
Flaps class defaultsQuadsDefiningStackToolsFlap {flaps registry}
ScrollableField class registerInFlapsRegistry {class initialization}
ScrollBar
Slider subclass: #ScrollBar instanceVariableNames: 'menuButton upButton downButton pagingArea scrollDelta pageDelta interval menuSelector timeOfMouseDown timeOfLastScroll nextPageDirection currentScrollDelay' classVariableNames: 'ArrowImagesCache BoxesImagesCache CachedImages UpArrow UpArrow8Bit' poolDictionaries: '' category: 'Morphic-Windows'
Inspired by an oiginal design of Hans-Martin Mosner, this ScrollBar is intended to exercise the handling of input events in Morphic. With sufficient flexibility in this area, all particular behavior can be concentrated in this single class with no need to specialize any other morphs to achieve button, slider and menu-button behavior.
Once we have this working, put in logic for horizontal operation as well.
CachedImages was added to reduce the number of forms created and thrown away. This will be helpful for Nebraska and others as well.
Senders of it:
MethodMorph installRollBackButtons: {as yet unclassified}
ScrollBar class arrowSamples {images - samples}
ScrollBar class boxSamples {images - samples}
ScrollPane flatColoredScrollBarLook {access}
ScrollPane hInitScrollBarTEMPORARY {initialization}
ScrollPane initializeScrollBars {initialization}
TwoWayScrollPane createScrollBarNamed: {initialization}
ScrollPane
ComponentLikeModel subclass: #ScrollPane instanceVariableNames: 'scrollBar scroller retractableScrollBar scrollBarOnLeft getMenuSelector getMenuTitleSelector scrollBarHidden hasFocus hScrollBar' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
The scroller (a transform) of a scrollPane is driven by the scrollBar. The scroll values vary from 0.0, meaning zero offset to 1.0 meaning sufficient offset such that the bottom of the scrollable material appears 3/4 of the way down the pane. The total distance to achieve this range is called the totalScrollRange.
Senders of it:
AllPlayersTool playersOnDisplay {reinvigoration}
AllPlayersTool reinvigorate {reinvigoration}
BookPageSorterMorph book:morphsToSort: {as yet unclassified}
EventRollMorph formulate {processing}
FlashSorterMorph openInWindow {initialization}
SuperSwikiServer showQueryAsPVM: {testing}
SystemWindow areasRemainingToFill: {drawing}
SystemWindow fullScreen {menu}
SystemWindow fullScreenMaximumExtent {menu}
SystemWindow mouseLeaveEvent:fromPane: {resize/collapse}
SearchingViewer
CategoryViewer subclass: #SearchingViewer instanceVariableNames: 'searchString' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A SearchingViewer is a custom Viewer which has a type-in 'search' pane; the user types a word or fragment into the search pane and hits the 'search' button (or hits Return or Enter) and the pane gets populated with all the phrases that match (in the currently-installed language) the search-string.
Senders of it:
StandardViewer categoryViewerFor: {categories}
StandardViewer searchingViewerMorphs {categories}
SectorMorph (v5)
PolygonMorph subclass: #SectorMorph instanceVariableNames: 'angle' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-AdditionalMorphs'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of SectorMorph.
SelectionMorph
BorderedMorph subclass: #SelectionMorph instanceVariableNames: 'selectedItems slippage dupLoc dupDelta itemsAlreadySelected otherSelection undoProperties' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Support'
A selectionMorph supports the selection of multiple objects in a morphic world or pasteUp.
Structure:
selectedItems an OrderedCollection of Morphs
These are the morphs that have been selected
slippage a Point
Keeps track of actual movement between the
steps of gridded movement
dupLoc a Point
Notes the position when first duplicate request occurs from halo
dupDelta a Point
Holds the final delta of the first duplicate plus subsequent moves.
Senders of it:
DrGDrawable mouseMove: {event handling}
KedamaMorph class newSet {class initialization}
PasteUpMorph dragThroughOnDesktop: {world state}
ShowEmptyTextMorph
TextMorph subclass: #ShowEmptyTextMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
A slight modification on TextMorph to show empty fields just as one would fields with data: with a cursor and without the pink field
Senders of it:
EToyGenericDialogMorph genericTextFieldNamed: {as yet unclassified}
SimpleButtonDelayedMenuMorph
SimpleButtonMorph subclass: #SimpleButtonDelayedMenuMorph instanceVariableNames: 'didMenu' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
Project setFlaps {language}
ProjectNavigationMorph makeButton:balloonText:for: {as yet unclassified}
ThreadNavigationMorph makeButton:balloonText:for: {initialization}
SimpleButtonMorph
RectangleMorph subclass: #SimpleButtonMorph instanceVariableNames: 'target actionSelector arguments actWhen oldColor mouseDownTime' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
I am labeled, rectangular morph which allows the user to click me. I can be configured to send my "target" the message "actionSelector" with "arguments" when I am clicked. I may have a label, implemented as a StringMorph.
Example:
SimpleButtonMorph new
target: Smalltalk;
label: 'Beep!';
actionSelector: #beep;
openInWorld
Structure:
instance var Type Description
target Object The Object to notify upon a click
actionSelector Symbol The message to send to Target (#messageName)
arguments Array Arguments to send with #actionSelection (optional)
actWhen Symbol When to take action: may be #buttonUp (default), #buttonDown,
#whilePressed, or #startDrag
oldColor Color Used to restore color after click
Another example: a button which quits the image without saving it.
SimpleButtonMorph new
target: Smalltalk;
label: 'quit';
actionSelector: #snapshot:andQuit:;
arguments: (Array with: false with: true);
openInWorld
Senders of it:
113 Methods
SimpleHierarchicalListMorph
ScrollPane subclass: #SimpleHierarchicalListMorph instanceVariableNames: 'selectedMorph getListSelector keystrokeActionSelector autoDeselect columns sortingSelector getSelectionSelector setSelectionSelector potentialDropMorph lineColor' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Explorer'
Display a hierarchical list of items. Each item should be wrapped with a ListItemWrapper.
For a simple example, look at submorphsExample. For beefier examples, look at ObjectExplorer or FileList2.
Senders of it:
DBusExplorer notInAWindow {opening}
FileList2 isDirectoryList: {drag'n'drop}
FileList2 morphicDirectoryTreePaneFiltered: {user interface}
MCTool treeMorph:selection:menu: {morphic ui}
MCWorkingCopyBrowser workingCopyTreeMorph {morphic ui}
NebraskaServerMorph rebuild {initialization}
ObjectExplorer explorerFor: {accessing}
QuickGuideGenerator makeInputDirList {all}
SimpleHierarchicalListMorph class submorphsExample {examples}
SMLoader buildMorphicCategoriesList {interface}
SMLoader buildMorphicPackagesList {interface}
SimpleSelectionMorph
Morph subclass: #SimpleSelectionMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Support'
A morph used in the implementaiton of Karl Ramberg's omnidirectional grab-patch tool
Senders of it:
PasteUpMorph grabDrawingFromScreen: {world menu}
SimpleSliderMorph
Slider subclass: #SimpleSliderMorph instanceVariableNames: 'target arguments minVal maxVal truncate' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
36 methods
SimpleSwitchMorph
SimpleButtonMorph subclass: #SimpleSwitchMorph instanceVariableNames: 'onColor offColor' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
I represent a switch that can be either on or off. I chnage my state in response to a mouse click. When clicked, I also send my actionSelector to my target, just like a SimpleButtonMorph.
Senders of it:
FlashPlayerMorph makeControls {initialize}
KeyboardMorphForInput addRecordingControls {initialization}
KeyboardMorphForInput articulation:onOff: {note controls}
KeyboardMorphForInput duration:onOff: {note controls}
KeyboardMorphForInput durMod:onOff: {note controls}
MidiInputMorph channelNumAndMuteButtonFor: {as yet unclassified}
MidiInputMorph makeControls {as yet unclassified}
Mines makeControls {initialize}
MonthMorph highlightToday {initialization}
SameGame makeControls {initialization}
ScorePlayerMorph makeControls {layout}
ScorePlayerMorph trackNumAndMuteButtonFor: {layout}
WeekMorph tile {all}
WeekMorph tileLabeled: {all}
SketchEditorMorph
Morph subclass: #SketchEditorMorph instanceVariableNames: 'hostView palette ticksToDwell rotationCenter registrationPoint newPicBlock emptyPicBlock paintingForm dimForm formCanvas rotationButton scaleButton cumRot cumMag undoBuffer enclosingPasteUpMorph forEachHand' classVariableNames: 'SketchTimes' poolDictionaries: '' category: 'MorphicExtras-Support'
Inst vars (converting to morphic events)
hostView -- SketchMorph we are working on.
stampForm -- Stamp is stored here.
canvasRectangle -- later use bounds
palette -- the PaintBox interface Morph
dirty -- not used
currentColor
ticksToDwell rotationCenter registrationPoint
newPicBlock -- do this after painting
action -- selector of painting action
paintingForm -- our copy
composite -- now paintArea origin. world relative. stop using it.
dimForm -- SketchMorph of the dimmed background. Opaque.
installed behind the editor morph.
buff
brush -- 1-bit Form of the brush,
paintingFormPen
formCanvas -- Aim it at paintingForm to allow it to draw ovals, rectangles, lines, etc.
picToComp dimToComp compToDisplay -- used to composite -- obsolete
picToBuff brushToBuff buffToBuff buffToPic
rotationButton scaleButton -- submorphs, handles to do these actions.
strokeOrigin -- During Pickup, origin of rect.
cumRot cumMag -- cumulative for multiple operations from same original
undoBuffer
lastEvent
currentNib -- 1 bit deep form.
For now, we do not carry the SketchMorph's registration point, rotation center, or ticksToDwell.
New -- using transform morphs to rotate the finished player. How get it rotated back and the rotationDegrees to be right? We cancel out rotationDegrees, so how remember it?
Registration point convention:
In a GraphicFrame, reg point is relative to this image's origin.
During painting, it is relative to canvasRectangle origin, and thus us absolute within the canvas. To convert back, subract newBox origin.
Be sure to convert back and forth correctly. In deliverPainting. initializeFromFrame:inView:
Senders of it:
EventRecordingSpace dismantlePaintBoxArtifacts {commands}
EventRecordingSpace pausePlayback {commands}
GraphicalDictionaryMenu repaintEntry {menu commands}
Morph class allSketchMorphForms {testing}
PaintBoxMorph focusMorph {other}
PasteUpMorph makeNewDrawing:at: {world menu}
PasteUpMorph sketchEditorOrNil {world state}
SketchMorph editDrawingIn:forBackground: {menu}
StandardScriptingSystem benchmarkPainter {benchmarks}
TabbedPalette selectTab: {user-interface}
TabbedPalette showNoPaletteAndHighlightTab: {misc menu items}
TrashCanMorph findActivePaintBox {private}
SketchMorph
Morph subclass: #SketchMorph instanceVariableNames: 'originalForm rotationStyle scalePoint framesToDwell rotatedForm' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
The morph that results when the user draws a color bitmap using the PaintBox (SketchEditorMorph and PaintBoxMorph).
forwardDirection is the angle at which the object will go forward. When the rotationStyle is not #normal, then forwardDirection is any angle, while the rotation is highly restricted. If flexed, this is remembered by the Transform morph. For non-normal rotationStyle, it is rotationDegrees.
setupAngle (a property) is where the user put the green arrow to indicate which direction on the picture is forward. When #normal, draw the morph initially at (0.0 - setupAngle). The enclosing TransformationMorph then rotates it to the true angle.
rotationDegrees In a #normal object, rotationDegrees is constant an equal to setupAngle.
For non-normal, it is the direction the object is going.
When repainting, set it back to its original state. The green arrow is set to setupAngle, and the sketch is shown as drawn originally (rotationDegrees = 0).
rotationStyle = normal (turns), leftRight, upDown, fixed.
When leftRight upDown or fixed, bit map has severe restrictions.
Senders of it:
34 methods
Slider
MorphicModel subclass: #Slider instanceVariableNames: 'slider value setValueSelector sliderShadow sliderColor descending' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of Slider.
SMLoader
SystemWindow subclass: #SMLoader instanceVariableNames: 'squeakMap packagesList selectedItemWrapper selectedCategoryWrapper filters categoriesToFilterIds' classVariableNames: 'DefaultCategoriesToFilterIds DefaultFilters' poolDictionaries: '' category: 'SMLoader'
A simple package loader that is the standard UI for SqueakMap.
Senders of it:
SMLoader reOpen {private}
TheWorldMenu class openPackageLoader {open-menu registry}
SolidSugarSuppliesTab
FlapTab subclass: #SolidSugarSuppliesTab instanceVariableNames: 'sugarNavTab' classVariableNames: '' poolDictionaries: '' category: 'Sugar'
Represents the horizontal "solid" tab by which the sugar-supplies flap can be resized. When the supplies flap is *closed*, the tab is invisible.
Senders of it:
Flaps class newSuppliesFlapFromQuads:positioning:withPreviousEntries: {predefined flaps}
PasteUpMorph sissWriteValue {*siss-interface}
Sonogram
ImageMorph subclass: #Sonogram instanceVariableNames: 'lastX scrollDelta columnForm minVal maxVal pixValMap' classVariableNames: '' poolDictionaries: '' category: 'Sound-Synthesis'
Sonograms are imageMorphs that will repeatedly plot arrays of values as black on white columns moving to the right in time and scrolling left as necessary.
Senders of it:
SampledSound sonogramMorph:from:to:nPoints: {sound tracks}
SpectrumAnalyzerMorph showSonogram {private}
SystemDictionary computeImageSegmentation {shrinking}
SorterTokenMorph
BorderedMorph subclass: #SorterTokenMorph instanceVariableNames: 'morphRepresented' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Palettes'
THIS CLASS HAS NO COMMENT!
Senders of it:
ReferenceMorph sorterToken {misc}
TabSorterMorph acceptSort {as yet unclassified}
SoundDemoMorph
AlignmentMorph subclass: #SoundDemoMorph instanceVariableNames: 'soundColumn' classVariableNames: '' poolDictionaries: '' category: 'Sound-Interface'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of SoundDemoMorph.
SoundEventMorph
AbstractMediaEventMorph subclass: #SoundEventMorph instanceVariableNames: 'sound' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
A morph representing a Sound event.
Senders of it:
RecordingControlsMorph makeSoundMorph {button commands}
SoundLibraryTool
AlignmentMorph subclass: #SoundLibraryTool instanceVariableNames: 'listBox button soundIndex currentSound showCompression' classVariableNames: '' poolDictionaries: '' category: 'Sound-Interface'
A tool for browsing and managing the sound library.
Offers a self-updating, scrolling list of all the sounds in the library.
Has a row of buttons to initiate various functions on the selected sound; the buttons are:
Play Play the selected sound
Stop Stop playing selected sound (if it is playing)
Tile Hand the user a tile for the selected sound.
Rename Rename the selected sound.
Delete Delete the selected sound from the ibrary
Load Load a sound into the sound library from a file.
Additionally, a wave-editor can be invoked via an item in the tool's halo menu.
The Sound Library tool can be launched from the Objects catalog, and also from the authoring-tools menu
Senders of it:
TheWorldMenu fullScriptingMenu {*Etoys}
TheWorldMenu scriptingMenu {*Etoys}
SoundLoopMorph
RectangleMorph subclass: #SoundLoopMorph instanceVariableNames: 'samplesUntilNextControl seqSound cursor controlIndex' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
THIS CLASS HAS NO COMMENT!
Senders of it:
SoundSequencerMorph initialize {initialization}
SoundMorph
ImageMorph subclass: #SoundMorph instanceVariableNames: 'sound' classVariableNames: '' poolDictionaries: '' category: 'Sound-Interface'
Note: as of December 2000, this does not work. SoundMorph>>buildImage requires the sound to implement #volumeEnvelopeScaledTo: and as yet, no one does.
Senders of it:
There are no senders of SoundMorph.
SoundReadoutTile
SymbolListTile subclass: #SoundReadoutTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A tile comprising a readout for a sound-valued instance variable in a Viewer. It sports up/down arrows, and a click on the sound name results in a pop-up menu, offering the user the opportunity to choose a new one.
Senders of it:
SoundType newReadoutTile {*Etoys-tiles}
SoundSequencerMorph
RectangleMorph subclass: #SoundSequencerMorph instanceVariableNames: 'controlPanel' classVariableNames: '' poolDictionaries: '' category: 'Sound-Interface'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of SoundSequencerMorph.
SoundTile
TileMorph subclass: #SoundTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A scripting tile representing a 'sound' constant. Sounds are represented by their names, which are strings; the actual sounds live in SampleSound's SoundLibrary.
Senders of it:
AnonymousSoundMorph addToSoundLibrary {menu}
CodecDemoMorph wantsDroppedMorph:event: {dropping/grabbing}
PasteUpMorph prepareToBeSaved {misc}
RecordingControls saveButtonHit {button commands}
RecordingControlsMorph makeTile {button commands}
ScriptEditorMorphBuilder literal: {reconstituting scripting tiles }
SoundLibraryTool handMeATile {menu}
SoundType defaultArgumentTile {*Etoys-tiles}
StandardScriptingSystem removeFromSoundLibrary: {sound library}
StandardScriptingSystem renameSound:newName: {sound library}
SpeakerMorph
Morph subclass: #SpeakerMorph instanceVariableNames: 'bufferSize buffer lastConePosition sound' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
THIS CLASS HAS NO COMMENT!
Senders of it:
Player stopProgramatically {scripts-execution}
ScriptInstantiation presentScriptStatusPopUp {customevents-status control}
SpectrumAnalyzerMorph
AlignmentMorph subclass: #SpectrumAnalyzerMorph instanceVariableNames: 'soundInput statusLight levelMeter graphMorph sonogramMorph fft displayType' classVariableNames: '' poolDictionaries: '' category: 'Sound-Interface'
I am a tool for analyzing sound data from a microphone, CD, or other input source in real time. I have several display modes:
signal snapshots of the raw signal data as it arrives
spectrum frequency spectrum of the signal data as it arrives
sonogram scrolling plot of the frequency spectrum over time,
where the vertical axis is frequency, the horizontal
axis is time, and amount of energy at a given
frequency is shown as a grayscale value with
larger values being darker
To use this tool, be sure that you have selected the proper sound source using you host OS facilities. Set the desired sampling rate and FFT size (try 22050 samples/sec and an FFT size of 512) then click on the 'start' button. Use the slider to adjust the level so that the yellow level indicator peaks somewhere between the middle and the right edge at the maximum signal level.
Note that if the level meter peaks hit the right edge, you will get 'clipping', which creates a bunch of spurious high frequency noise in the frequency spectrum. If the display is set to 'signal' mode, you can actually see the tops and bottoms of the waveform being cut off when clipping occurs.
Many machines may not be able to perform spectrum analysis in real time, especially at higher sampling rates and larger FFT sizes. In both 'signal' and 'spectrum' modes, this tool will skip data to try to keep up with real time. However, in 'sonogram' mode it always processes all the data, even if it falls behind. This allows you to get a complete sonogram without dropouts even on a slower machine. However, as the sonogram display falls behind there will be a larger and larger time lag between when a sound is input and when it appears on the display.
The smaller the FFT size, the less frequency resolution you get. The lower the sampling rate, the less total frequency range you get. For an FFT size of N and a sampling rate of R, each of the N/2 'bins' of the frequency spectrum has a frequency resolution of R / N. For example, at a sampleing rate of 22050 samples/second, the total frequency range is 0 to 11025 Hz and an FFT of size 256 would divide this range into 128 bins (the output of an FFT of size N has N/2 bins), each of which covers a frequency band about 86 Hz wide.
To increase time resolution, increase the sampling rate and decrease the FFT size.
Senders of it:
There are no senders of SpectrumAnalyzerMorph.
SpeechBubbleMorph (v5)
Morph subclass: #SpeechBubbleMorph instanceVariableNames: 'type balloon tail target lastHash stepTime msgMorph' classVariableNames: '' poolDictionaries: '' category: 'Etoys-SpeechBubbles'
THIS CLASS HAS NO COMMENT!
Senders of it:
Morph showGraphic:inBubbleType: {*Etoys-SpeechBubbles}
Morph showMessage:inBubbleType: {*Etoys-SpeechBubbles}
Morph showObject:inBubbleType: {*Etoys-SpeechBubbles}
SpeechBubbleMorph class supplementaryPartsDescriptions {parts bin}
SquishedNameMorph
Morph subclass: #SquishedNameMorph instanceVariableNames: 'target getSelector setSelector' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Navigators'
THIS CLASS HAS NO COMMENT!
Senders of it:
InternalThreadNavigationMorph addButtons {initialization}
StackMorph
BookMorph subclass: #StackMorph instanceVariableNames: 'cards' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Stacks'
A book that is very much like a HyperCard stack.
Each book page represents a different background. The page stays while different cards are projected onto it.
The data for a single card is stored in a CardPlayer. There is a list of objects that only appear on this card (privateMorphs) and the card-specific text to be inserted into the background fields.
Item How it is stored
a background a page of the StackMorph
a card data is in an instance of a subclass of CardPlayer.
A list of CardPlayers is in the 'cards' inst var of the StackMorph.
a background field a TextMorph on a page of the StackMorph
a background picture a morph of any kind on a page of the StackMorph
script for bkgnd button method in Player. Button is its costume.
text in a background field value of inst var 'field1' in a CardPlayer.
(The CardPlayer is also pointed at by the #cardInstance
property of the bkgnd field (TextMorph))
text in a card field in the TextMorph in privateMorphs in the CardPlayer.
picture on a card a morph of any kind in privateMorphs in the CardPlayer.
script for card button method in the CardPlayer. Button is its costume.
See VariableDock.
Senders of it:
DSCPostscriptCanvas fullDrawBookMorph: {*Etoys-drawing}
Flaps class defaultsQuadsDefiningScriptingFlap {flaps registry}
Flaps class defaultsQuadsDefiningStackToolsFlap {flaps registry}
ImageSegment findStacks {read/write segment}
Morph abstractAModel {*Etoys-card in a stack}
Morph explainDesignations {*Etoys-card in a stack}
Morph insertAsStackBackground {*Etoys-card in a stack}
Morph isStackBackground {*Etoys-card in a stack}
Morph stack {*Etoys-card in a stack}
Morph stackDo: {*Etoys-card in a stack}
Morph wrapWithAStack {*Etoys-card in a stack}
Player stackEmbodied {slot getters/setters}
Project currentStack {project parameters}
StackMorph class registerInFlapsRegistry {class initialization}
StandardViewer
Viewer subclass: #StandardViewer instanceVariableNames: 'firstPanel' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A structure that allows you to view state and behavior of an object; it consists of a header and then any number of CategoryViewers.
Senders of it:
Morph currentVocabulary {*Etoys}
Object offerViewerMenuForEvt:morph: {*Etoys-viewer}
PasteUpMorph allViewersInProject {olpc}
Presenter nascentPartsViewer {viewer}
Presenter nascentPartsViewerFor: {viewer}
StandardScriptingSystem reinvigorateThumbnailsInViewerFlapTabs {*Etoys-utilities}
TabbedPalette viewMorph: {*Etoys-viewer tab}
TileMorph currentVocabulary {macpal}
StarMorph
PolygonMorph subclass: #StarMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
I am a very flexible star..
Grab me from the supplies flap or from the graphic objects.
Add my handles and you can move and resize me.
The up and down arrows increase or reduce the number of my sides.
The right and left arrows change to try out different amounts of pointiness.
Use the arrows right and left of my center or get stars with a specific amount of pointyness. The left side goes from fat to thin and then cycles around again. The right goes from thin to fat. Hold down the shift key if you wish to stop the cycling.
Use the arrows above and below my center or use the menu to change the number of sides if you would like a different number of points.
To add or remove just one side hold the shift key down as you use the arrows or use the menu items for that purpose.
If you add or remove just one point I will have an odd number of sides. When that happens I can only look like a regular polygon. Add or remove just one more side and you can shift drag the outer handle to restore my pointiness.
At some time you will probably shift drag the outer handle thru the center handle.
While I looked round as you shrunk me, I will look very much like an asterisk as you pull me away. What happens is that inside bend shrunk on the way down because it can never be larger than the outer point or it wouldn't be the innerbend would it.
But on the way out it is perfectly happy to remain small. So I look like an asterisk.
To fatten me up (if you haven't already figured this out by fooling around) is to hold the shift down an move the outer handle towards the center (but not quite all the way) then let the shift up and move the outer handle away. A couple of cycles like this and I'll be looking fat and jolly again. Or you can now just use the right arrow to make me fatter.
This is also the reason I don't let the inside bend get larger than the outer point.
If I did the same process that fattened me when I was an asterisk would also grow an asterisk so large squeak would complain about not having enough memory.
Historical note:
The former star had two bugs that are fixed here.
The outer handle now no longer jumps from one point to another.
The other bug prevented some higher order stars from looking right.
Which is why the former star didn't allow you to change the number of points.
Senders of it:
EventRecordingSpace sugarPartsBinQuads {sugar flaps}
Flaps class defaultsQuadsDefiningPlugInSuppliesFlap {predefined flaps}
Flaps class defaultsQuadsDefiningSuppliesFlap {flaps registry}
Flaps class newLoneSuppliesFlap {predefined flaps}
MorphExample initialize {initialization}
StarMorph class registerInFlapsRegistry {class initialization}
StaticTextMorph
TextMorph subclass: #StaticTextMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
A TextMorph that is unwilling to be edited or rotated.
Senders of it:
EToyProjectDetailsMorph popUpEntryNamed: {utilities}
EToyProjectDetailsMorph popUpEntryNamed:menuTitle: {utilities}
StickyPadMorph
RectangleMorph subclass: #StickyPadMorph instanceVariableNames: '' classVariableNames: 'Colors LastColorIndex' poolDictionaries: '' category: 'MorphicExtras-Demo'
A custom item for the Squeakland Supplies bin, as defined by Kim Rose and BJ Con.A parts bin will deliver up translucent, borderless Rectangles in a sequence of 6 colors. It offers some complication to the parts-bin protocols in two ways::
* The multi-colored icon seen in the parts bin is not a thumbnail of any actual instance, all of which are monochrome
* New instances need to be given default names that are not the same as the name seen in the parts bin.
Senders of it:
Flaps class possiblyReplaceEToyFlaps {construction support}
Flaps class twiddleSuppliesButtonsIn: {predefined flaps}
StickyPadMorph class registerInFlapsRegistry {as yet unclassified}
StickySketchMorph
SketchMorph subclass: #StickySketchMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
THIS CLASS HAS NO COMMENT!
Senders of it:
PasteUpMorph backgroundSketch: {*Etoys-playfield}
PasteUpMorph findWindow: {world menu}
StoryboardBookMorph
BookMorph subclass: #StoryboardBookMorph instanceVariableNames: 'alansSliders panAndTiltFactor zoomFactor zoomController' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Books'
A BookMorph variant whose pages are instances of ZoomAndScrollMorph. I have a control area where the user may pan, tilt and zoom over the image shown in the page.
- drag up and down to zoom in and out
- drag left and right to pan
- shift-drag up and down to tilt.
Senders of it:
ZoomAndScrollControllerMorph turnToPage:position:scale:transition: {as yet unclassified}
StretchyImageMorph
AlignmentMorphBob1 subclass: #StretchyImageMorph instanceVariableNames: 'form cache' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
I draw a form to fill whatever bounds I have.
Senders of it:
EToyProjectHistoryMorph rebuild {as yet unclassified}
StringButtonMorph
StringMorph subclass: #StringButtonMorph instanceVariableNames: 'target actionSelector arguments actWhen oldColor' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of StringButtonMorph.
StringMorph
Morph subclass: #StringMorph instanceVariableNames: 'font emphasis contents hasFocus usePango' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
StringMorph is a "lightweight" Morph to display a String. It supports only a single font, color, and emphasis combination. For multiple text styles, use TextMorph.
Structure:
instance var Type Description
font StrikeFont (normally nil; then the accessor #font gives back TextStyle
or nil defaultFont)
emphasis SmallInteger bitmask determining character attributes (underline, bold, italics, narrow, struckout)
contents String The text that will be displayed.
hasFocus Boolean Do I have the keyboard focus or not?
If you shift-click on a StringMorph you can edit its string. This is accomplished the following way: StringMorph can launch a StringMorphEditor if it receives a #mouseDown event.
A StringMorph may also be used like a SimpleButtonMorph to do an action when clicked. Use the menu 'extras' / 'add mouseUpAction'.
The following propery will be defined:
aStringMorph valueOfProperty: #mouseUpCodeToRun
Senders of it:
215 methods
StringMorphEditor
TextMorph subclass: #StringMorphEditor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Text Support'
I am a textMorph used as a pop-up editor for StringMorphs. I present a yellow background and I go away when a CR is typed or when the user clicks elsewhere.
Senders of it:
StringMorph launchMiniEditor: {editing}
UpdatingStringMorph doneWithEdits {editing}
StringReadoutTile
TileMorph subclass: #StringReadoutTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
THIS CLASS HAS NO COMMENT!
Senders of it:
DataType newReadoutTile {*Etoys-tiles}
SugarButton
ThreePhaseButtonMorph subclass: #SugarButton instanceVariableNames: 'mouseDownTime didMenu labelName highLightColor disabledImage' classVariableNames: '' poolDictionaries: '' category: 'Sugar'
THIS CLASS HAS NO COMMENT!
Senders of it:
SugarLibrary makeButton:balloonText:for:target:baseColor:highLightColor: {icon images}
SugarListenerMorph
EToyListenerMorph subclass: #SugarListenerMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Sugar'
THIS CLASS HAS NO COMMENT!
Senders of it:
EToyIncomingMessage class handleNewMorphFrom:sentBy:ipAddress: {handlers}
PasteUpMorph deleteListeners {misc}
SugarNavigatorBar startP2P {sharing}
SugarNavigatorBar
ProjectNavigationMorph subclass: #SugarNavigatorBar instanceVariableNames: 'sugarLib highLightColor paintButton undoButton shareButton stopButton supplies listener suppliesFlap projectNameField isSugar' classVariableNames: '' poolDictionaries: '' category: 'Sugar'
THIS CLASS HAS NO COMMENT!
Senders of it:
Flaps class newSugarNavigatorFlap {predefined flaps}
HelpFlap spanContainerVertically: {geometry}
Project class enterNewWithInitialBalloons {instance creation}
StandardScriptingSystem customizeForEToyUsers: {utilities}
SugarLauncher invite: {commands}
SugarLauncher joinSharedActivity {presence}
SugarLauncher startUp {running}
SugarNavigatorBar class configureCurrentForSqueakland {utilitity}
SugarNavigatorBar class current {instance creation}
SugarNavigatorBar class putUpInitialBalloonHelp {utilitity}
SugarNavigatorBar class supplementaryPartsDescriptions {utilitity}
SugarNavTab nonStandardMorphs {initialization}
TheWorldMenu offerScalingMenu {menu}
SugarNavTab
FlapTab subclass: #SugarNavTab instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Sugar'
THIS CLASS HAS NO COMMENT!
Senders of it:
EventRecordingSpace sugarSuppliesFlapTab {sugar flaps}
Flaps class newSugarNavigatorFlap {predefined flaps}
PasteUpMorph sissWriteValue {*siss-interface}
PasteUpMorph sugarAllowance {world state}
PasteUpMorph toggleFullScreen {menu}
Player hideNavigationBar {misc}
Player showNavigationBar {misc}
Project finalEnterActions {menu messages}
SketchMorph collapse {menus}
SugarNavigatorBar checkForResize {morphic interaction}
ViewerFlapTab spanWorld {positioning}
SugarRoundedField
Morph subclass: #SugarRoundedField instanceVariableNames: 'label mask backgroundColor' classVariableNames: '' poolDictionaries: '' category: 'Sugar'
THIS CLASS HAS NO COMMENT!
Senders of it:
SugarNavigatorBar makeProjectNameLabel {the actions}
SugarSuppliesTab
FlapTab subclass: #SugarSuppliesTab instanceVariableNames: 'sugarNavTab' classVariableNames: '' poolDictionaries: '' category: 'Sugar'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of SugarSuppliesTab.
SymbolListTile
TileMorph subclass: #SymbolListTile instanceVariableNames: 'choices dataType' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
Instances of SymbolListTile are literal tiles whose literals are choosable from a finite list.
Senders of it:
ConnectorArrowNameType class updateNames {as yet unclassified}
ScriptEditorMorphBuilder literal: {reconstituting scripting tiles }
StandardScriptingSystem addUserCustomEventNamed:help: {*Etoys-customevents-custom events}
StandardScriptingSystem removeUserCustomEventNamed: {*Etoys-customevents-custom events}
SymbolListType defaultArgumentTile {*Etoys-tiles}
SymbolListType newReadoutTile {*Etoys-tiles}
Vocabulary class addArrowNamesVocabulary {*connectors}
Vocabulary class addCustomEventsVocabulary {*eToys-customevents-custom events}
SyntaxMorph
AlignmentMorph subclass: #SyntaxMorph instanceVariableNames: 'parseNode markerMorph' classVariableNames: 'AllSpecs ContrastFactor DownRightArrow SelfTile SizeScaleFactor' poolDictionaries: '' category: 'Etoys-Tile Scriptors'
A single class of morph that holds any piece of Smalltalk syntax, and allows it to be a tile. Tiles can be dragged in or out of a method.
In the message list pane of a Browser, choose 'tile scriptor'. Bring up a second one to steal parts from. If you use a Protocol Browser, and choose tiles, there will be two buttons that bring up menus with many tiles on them.
Clicking multiple times selects enclosing phrases of code. Dragging lets you take away a copy. Any tile may be replaced by dropping on it. Shift-click to edit the text of any tile. Change variable and message names, but do not change the part-of-speech (objects to selector).
Each SyntaxMorph holds a ParseNode. After editing, the parseNode is only good as a part-of-speech indicator. Only the Class of a parseNode is important. It's state is not kept up to date with the tile edits (but maybe it should be). (For MessageNodes, whether the receiver slot is nil is significant.)
The correspondence between SyntaxMorphs and parseNodes in the real parse tree is not one-to-one. Several extra levels of SyntaxMorph were added as aligners to make the horizontal and vertical layout right. These sometimes have nil for the parseNode.
When accept the method, we pass over the tree of SyntaxMorphs, gathering their printStrings and inserting punctuation. See (SyntaxMorph>>printOn:indent:). We send the result to the compiler. (We do not use the parse tree we already have.)
To turn on type checking:
Preferences enable: #eToyFriendly
or for testing: World project projectParameters at: #fullCheck put: true.
Colors of tiles: Each tile has a current color (inst car color) and a deselectedColor (a property). The deselectedColor may be governed by the part of speech, or not. (translateColor: is only used when a tile is created, to set deselectedColor.) From deselectedColor (set by #setDeselectedColor), the color changes to:
lightBrown when selected (not the submorphs) in #select
translucent when held in the hand (allMorphs) in #lookTranslucent
green when a drop target (allMorphs) (change the owners back) #dropColor,
#trackDropZones
deselectedColor is moderated by the darkness setting, #scaleColorByUserPref:. (as it is put into color in #color:)
Code to produce an individual tile is:
(SyntaxMorph new) attachTileForCode: '''abc''' nodeType: LiteralNode.
see offerTilesMenuFor:in: for many other phrases that produce useful tiles.
AssignmentNode: If three submorphs, is a statement, and is a noun. If one submorph, is just the left arrow. When dropped on a variable, it creates a new assignment statement.
Senders of it:
CodeHolder installTilesForSelection {tiles}
Debugger createSyntaxMorph {code pane}
Lexicon acceptTiles {*Etoys-tiles}
Lexicon installTilesForSelection {tiles}
Lexicon tilesMenu {*Etoys-tiles}
Lexicon varTilesMenu {*Etoys-tiles}
MessageSend asTilesIn: {*Etoys-tiles}
MessageSend asTilesIn:globalNames: {*Etoys-tiles}
Morph methodCommentAsBalloonHelp {accessing}
ParseNode addCommentToMorph: {*Etoys-tiles}
Player newScriptorAround: {viewer}
Player class tilesFrom: {scripts}
PluggableTileScriptorMorph syntaxMorph {as yet unclassified}
Presenter cacheSpecs: {viewer}
ScriptEditorMorph insertUniversalTilesForClass:selector: {other}
ScriptEditorMorph scriptTitle {buttons}
StringHolder openSyntaxView {*Etoys-tiles}
SyntaxMorph actualObject {accessing}
SyntaxMorph color: {accessing}
SyntaxMorph foldMessage {layout}
SyntaxMorph foldMessageOneArg {layout}
SyntaxMorph instVarTile: {new tiles}
SyntaxMorph morphToDropInPasteUp: {dropping/grabbing}
SyntaxMorph string:toTilesIn: {new tiles}
SyntaxMorph class testAll {as yet unclassified}
SyntaxMorph class testAllMethodsOver: {as yet unclassified}
SyntaxMorph class testClass:andMethod: {as yet unclassified}
SyntaxTestMethods
PasteUpMorph subclass: #SyntaxTestMethods instanceVariableNames: 'letterActors wild leftMargin rightMargin switch current jumpSwitch hotIndex' classVariableNames: 'Goal' poolDictionaries: '' category: 'Etoys-Tile Scriptors'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of SyntaxTestMethods.
SyntaxUpdatingStringMorph
UpdatingStringMorph subclass: #SyntaxUpdatingStringMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Tile Scriptors'
THIS CLASS HAS NO COMMENT!
Senders of it:
SyntaxMorph anUpdatingStringMorphWith:special: {alans styles}
SystemProgressBarMorph
RectangleMorph subclass: #SystemProgressBarMorph instanceVariableNames: 'barSize' classVariableNames: 'BarHeight BarWidth FillColor' poolDictionaries: '' category: 'Morphic-Widgets'
Instances of this morph get used by SystemProgressMoprh to quickly display a progress bar.
Senders of it:
SystemProgressMorph nextSlotFor: {private}
SystemProgressMorph nextSlotUnifiedFor: {private}
SystemProgressMorph
RectangleMorph subclass: #SystemProgressMorph instanceVariableNames: 'activeSlots bars labels font lock' classVariableNames: 'BarHeight BarWidth UniqueInstance' poolDictionaries: '' category: 'Morphic-Widgets'
An single instance of this morph class is used to display progress while the system is busy, eg. while it receives code updates or does a fileIn. To give the user progress information you don't deal directly with SystemProgressMorph. You keep on using the well established way of progress notification, that has been a long time in the system, is widely used and does not depend on the existence of SystemProgressMorph. For more information on this look at the example in this class or look at the comment of the method displayProgressAt:from:to:during: in class String.
SystemProgressMorph is not meant to be used as a component inside other morphs.
You can switch back to the old style of progress display by disabling the morphicProgressStyle setting in the morphic section of the preferences.
Senders of it:
ProgressInitiationException defaultMorphicAction {as yet unclassified}
SystemQueryPhrase
PhraseTileMorph subclass: #SystemQueryPhrase instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
THIS CLASS HAS NO COMMENT!
Senders of it:
Presenter systemQueryPhraseWithActionString:labelled: {palette & parts bin}
StandardScriptingSystem tilesForQuery:label: {*Etoys-parts bin}
SystemWindow
MorphicModel subclass: #SystemWindow instanceVariableNames: 'labelString stripes label closeBox collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame fullFrame isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes allowReframeHandles labelArea expandBox' classVariableNames: 'CloseBoxImage CollapseBoxImage TopWindow' poolDictionaries: '' category: 'Morphic-Windows'
SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing.
The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.
Senders of it:
95 methods
Arrow Editor, Attachment Adjuster are implemented in this class.
SystemWindowWithButton
SystemWindow subclass: #SystemWindowWithButton instanceVariableNames: 'buttonInTitle' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
A SystemWindow with a single extra button in its title bar.
Senders of it:
Preferences class annotationEditingWindow {parameters}
TabbedPalette
BookMorph subclass: #TabbedPalette instanceVariableNames: 'tabsMorph' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Palettes'
A structure of tabs and associated books. Pressing a tab brings into focus the associated book. Some tabs can have simple actions rather than books as their focus -- in this case, the palette is cleared and the action taken.
Senders of it:
Flaps class defaultsQuadsDefiningSuppliesFlap {flaps registry}
Flaps class newLoneSuppliesFlap {predefined flaps}
PartsBin class reconstructAllPartsIcons {thumbnail cache}
Preferences class initializePreferencePanel:in: {preferences panel}
PreferencesPanel findPreferencesMatching: {initialization}
PreferencesPanel switchToCategoryNamed:event: {category switch}
PreferencesPanel class isAPreferenceViewToKill: {cleanup}
ReferenceMorph tabSelected {events}
StandardViewer dismiss {user interface}
TabMorph tabSelected {as yet unclassified}
TabMorph
StringButtonMorph subclass: #TabMorph instanceVariableNames: 'morphToInstall' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Palettes'
A tab in a palette. The contents is the name to be shown. If it represents a book, that book is pointed to in my morphToInstall.
Senders of it:
IndexTabs tabMorphs {tabs}
TabSorterMorph
BookPageSorterMorph subclass: #TabSorterMorph instanceVariableNames: 'originalTabs' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Palettes'
A sorter for the tabs of a TabbedPalette
Senders of it:
TabbedPalette sortTabs: {misc menu items}
TestInWorldMorph (v4 but not v5)
Morph subclass: #TestInWorldMorph instanceVariableNames: 'intoWorldCount outOfWorldCount' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Kernel-Tests'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of TestInWorldMorph.
Tetris
AlignmentMorph subclass: #Tetris instanceVariableNames: 'board scoreDisplay' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
This is a port of JTetris.java 1.0.0.
How to start:
choose new morph.../Games/Tetris
How to play:
1) using buttons
2) using keyboard:
drop - spacebar
move to left - left arrow
move to right - right arrow
rotate clockwise - up arrow
rotate anticlockwise - down arrow
NOTE: mouse must be over Tetris
Senders of it:
TetrisBlock defaultColor {initialization}
TetrisBlock
Morph subclass: #TetrisBlock instanceVariableNames: 'angle shapeInfo board baseCellNumber' classVariableNames: 'ShapeChoices' poolDictionaries: '' category: 'Morphic-Games'
THIS CLASS HAS NO COMMENT!
Senders of it:
TetrisBoard step {stepping and presenter}
TetrisBoard
PasteUpMorph subclass: #TetrisBoard instanceVariableNames: 'paused gameOver delay score currentBlock game' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Games'
THIS CLASS HAS NO COMMENT!
Senders of it:
Tetris initialize {initialization}
TextComponent
PluggableTextMorph subclass: #TextComponent instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Components'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of TextComponent.
TextFieldMorph
RectangleMorph subclass: #TextFieldMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Text Support'
Act as a field in a HyperCard-like setting. Has both properties of a Rectangle, and exposes some proteries of the TextMorph it owns.
Senders of it:
Flaps class defaultsQuadsDefiningScriptingFlap {flaps registry}
Player append: {scripts-standard}
Player includeAtCursor: {scripts-standard}
Player prepend: {scripts-standard}
TextFieldMorph class registerInFlapsRegistry {class initialization}
TextMorph
RectangleMorph subclass: #TextMorph instanceVariableNames: 'textStyle text wrapFlag paragraph editor container predecessor successor backgroundColor margins fillStyle usePango' classVariableNames: 'CaretForm' poolDictionaries: '' category: 'Morphic-Basic'
TextMorphs support display of text with emphasis. They also support reasonable text-editing capabilities, as well as embedded hot links, and the ability to embed submorphs in the text.
Late in life, TextMorph was made a subclass of BorderedMorph to provide border and background color if desired. In order to keep things compatible, protocols have been redirected so that color (preferably textColor) relates to the text, and backgroundColor relates to the inner fill color.
Text display is clipped to the innerBounds of the rectangle, and text composition is normally performed within a rectangle which is innerBounds inset by the margins parameter.
If text has been embedded in another object, one can elect to fill the owner's shape, in which case the text will be laid out in the shape of the owner's shadow image (including any submorphs other than the text). One can also elect to have the text avoid occlusions, in which case it will avoid the bounds of any sibling morphs that appear in front of it. It may be necessary to update bounds in order for the text runaround to notice the presence of a new occluding shape.
The optional autoFitContents property enables the following feature: if the text contents changes, then the bounds of the morph will be adjusted to fit the minimum rectangle that encloses the text (plus any margins specified). Similarly, any attempt to change the size of the morph will be resisted if this parameter is set. Except...
If the wrapFlag parameter is true, then text will be wrapped at word boundaries based on the composition width (innerBounds insetBy: margins) width. Thus an attempt to resize the morph in autofit mode, if it changes the width, will cause the text to be recomposed with the new width, and then the bounds will be reset to the minimum enclosing rectangle. Similarly, if the text contents are changed with the wrapFlag set to true, word wrap will be performed based on the current compostion width, after which the bounds will be set (or not), based on the autoFitcontents property.
Note that fonts can only be applied to the TextMorph as a whole. While you can change the size, color, and emphasis of a subsection of the text and have it apply to only that subsection, changing the font changes the font for the entire contents of the TextMorph.
Still a TextMorph can be composed of several texts of different fonts
| font1 font2 t1 t2 tMorph|
tMorph _ TextMorph new.
font1 _ (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 22)).
font2 _ (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 11)).
t1 _ 'this is font1' asText addAttribute: font1.
t2 _ ' and this is font2' asText addAttribute: font2.
tMorph contents: (t1,t2).
tMorph openInHand.
Yet to do:
Make a comprehensive control for the eyedropper, with border width and color, inner color and text color, and margin widths.
Senders of it:
76 methods
TextMorphForEditView
TextMorph subclass: #TextMorphForEditView instanceVariableNames: 'editView acceptOnCR' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Text Support'
THIS CLASS HAS NO COMMENT!
Senders of it:
ParagraphEditor changeEmphasis: {editing keys}
PluggableTextMorph textMorphClass {private}
TextPlusMorph
TextMorph subclass: #TextPlusMorph instanceVariableNames: 'scrollerOwner ignoreNextUp' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-GeeMail'
THIS CLASS HAS NO COMMENT!
Senders of it:
SmartRefStream alansTextPlusMorphbosfcebbmsopssrsggshtt0 {conversion}
SmartRefStream initKnownRenames {read write}
TextPlusPasteUpMorph acceptDroppingMorph:event: {layout}
TextPlusPasteUpMorph allTextPlusMorphs {as yet unclassified}
TextPlusPasteUpMorph initialize {initialization}
TextPlusPasteUpMorph
category: 'MorphicExtras-GeeMail'
THIS CLASS HAS NO COMMENT!
Senders of it:
GeeMailMorph initializeThePasteUp {initialization}
Morph addMiscExtrasTo: {*MorphicExtras-menus}
TextAnchorPlus emphasizeScanner: {as yet unclassified}
TextPropertiesMorph
GenericPropertiesMorph subclass: #TextPropertiesMorph instanceVariableNames: 'activeTextMorph applyToWholeText lastGlobalColor selectionInterval' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Experimental'
A custom property-sheet for use with TextMorphs. Initially implemented in 2001 by Bob Arning, for Alan Kay.
In this current version, circa May 2007, for an early version of etoys on the olpc, the inboard copy of the text is dispensed with, as are some of the checkboxes, and all operations are reflected directly on the actual TextMorph under edit. The last manual selection the user made in the TextMorph determines the scope of the edits in the property-sheet. After property-sheet edits, the selection highlighting is also dispensed with, so that the user can judge the text's appearance better.
Note that unlike other property-sheet-morphs, the thingsToRevert here is an ordered-collection rather than a dictionary... this is so we can control the order of execution of the restorations.
Senders of it:
Morph openATextPropertySheet {meta-actions}
TextMorph openATextPropertySheet {property sheet}
TextualEventSequenceDisplayer
AlignmentMorph subclass: #TextualEventSequenceDisplayer instanceVariableNames: 'mouseEventSequenceMorph' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
A tool that displays the events comprising a mouse-event-sequence in a scrolling textual list. This is not an editor, not yet anyway... Consider it a tantalizing loose end at the moment.
Senders of it:
MouseEventSequenceMorph openExpandedView: {menu}
MouseEventSequenceMorph openTextualView {menu}
ThreadNavigationMorph
AlignmentMorphBob1 subclass: #ThreadNavigationMorph instanceVariableNames: 'listOfPages currentIndex loadedProject' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Navigators'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of ThreadNavigationMorph.
ThreePhaseButtonMorph
ImageMorph subclass: #ThreePhaseButtonMorph instanceVariableNames: 'offImage pressedImage state target actionSelector arguments actWhen' classVariableNames: 'AuthorModeOwner' poolDictionaries: '' category: 'Morphic-Widgets'
A button morph with separate images for on, off, and pressed with the mouse.
When the event actWhen occurs, send actionSelector with 'arguments' to target. For other events, default to my eventHandler. The current event is not supplied in the arguments to the actionSelector.
image (a.k.a. onImage) may not be nil. offImage and pressedImage may be nil. nil there means be transparent and show the underlying object.
actWhen = #buttonDown :
state is never changed when mouse pressed or released. doButtonAction:
actWhen = #buttonUp :
state is #pressed when mouse pressed.
state is #on when mouse released and the focus is in the button. doButtonAction:
state is #off when mouse released and the focus is out of the button.
actWhen = #whilePressed :
state is #pressed when mouse pressed. doButtonAction:
state is #off when mouse released.
Tools for debugging:
Display the images momentarily under program control (for positioning) (self is an instance).
self state: #on. self state: #off.
self state: #pressed. self state: #off.
Display a rectangle where the button is.
Display fillWithColor: bounds + (self world viewBox origin).
self invalidRect: bounds.
Senders of it:
29 methods
Thumbnail
SketchMorph subclass: #Thumbnail instanceVariableNames: 'maximumWidth minimumHeight' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-PartsBin'
A morph that serves as a thumbnail of a given form.
Senders of it:
GraphicalDictionaryMenu initializeFor:fromDictionary: {initialization}
GraphicalMenu initializeFor:withForms:coexist: {initialization}
IconicButton initializeToShow:withLabel:andSend:to: {*MorphicExtras-initialization}
NCButtonBar class emptyButtonThumbnail {instance creation}
NCMakerButton generateThumbnail {submorphs-add/remove}
PartsBin class cacheSpecialThumbnails {thumbnail cache}
PartsBin class thumbnailForInstanceOf: {thumbnail cache}
PartsBin class thumbnailForPartsDescription: {thumbnail cache}
PartsBin class thumbnailForQuad:color: {thumbnail cache}
VideoMorph class initialize {class initialization}
ThumbnailForAllPlayersTool
ThumbnailMorph subclass: #ThumbnailForAllPlayersTool instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
A thumbnail for use in an All-Players tool
Senders of it:
PlayerSurrogate rebuildRow {accessing}
ThumbnailMorph
RectangleMorph subclass: #ThumbnailMorph instanceVariableNames: 'objectToView viewSelector lastSketchForm lastFormShown drawTime' classVariableNames: 'EccentricityThreshhold RecursionDepth RecursionMax' poolDictionaries: '' category: 'MorphicExtras-Widgets'
A Morph that views another morph, its objectToView.
Senders of it:
GraphicTile useForm: {initialization}
GraphicType updatingTileForTarget:partName:getter:setter: {*Etoys-tiles}
PasteUpMorph restoreMorphicDisplay {world state}
Presenter startRunningScripts {stop-step-go buttons}
StandardScriptingSystem reinvigorateThumbnailsInViewerFlapTabs {*Etoys-utilities}
StandardScriptingSystem spaceReclaimed {*Etoys-utilities}
StandardViewer addHeaderMorphWithBarHeight:includeDismissButton: {initialization}
ViewerFlapTab graphicalMorphForTab {menu}
TickIndicatorMorph
EllipseMorph subclass: #TickIndicatorMorph instanceVariableNames: 'stepTime corners index range isTicking lastTick' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
ScriptStatusControl assurePauseTickControlsShow {initialization}
TileCommandWithArgumentMorph
TileMorph subclass: #TileCommandWithArgumentMorph instanceVariableNames: 'playerTile stringName' classVariableNames: '' poolDictionaries: '' category: 'EToys-Kedama'
THIS CLASS HAS NO COMMENT!
Senders of it:
PhraseTileMorph operatorNodeWith: {code generation}
PhraseTileMorph setAngleToOperator:type:rcvrType:argType: {initialization}
PhraseTileMorph setBounceOnOperator:type:rcvrType:argType: {initialization}
PhraseTileMorph setDistanceToOperator:type:rcvrType:argType: {initialization}
PhraseTileMorph setGetPixelOperator:type:rcvrType:argType: {initialization}
PhraseTileMorph setTurtleOfOperator:type:rcvrType:argType: {initialization}
PhraseTileMorph setUpHillOperator:type:rcvrType:argType: {initialization}
PhraseTileMorph sexpOperatorWith: {code generation}
PhraseTileMorph updatingOperatorNodeWith: {code generation}
Viewer angleToPhrase {special phrases}
Viewer bounceOnPhrase {special phrases}
Viewer distanceToPhrase {special phrases}
Viewer patchUphillPhrase {special phrases}
Viewer patchValuePhrase {special phrases}
Viewer turtleOfPhrase {special phrases}
TileLikeMorph
AlignmentMorph subclass: #TileLikeMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
THIS CLASS HAS NO COMMENT!
Senders of it:
ScriptEditorMorph nextTile {*etoys-debugger}
TileMorph
RectangleMorph subclass: #TileMorph instanceVariableNames: 'type slotName literal operatorOrExpression actualObject downArrow upArrow suffixArrow typeColor lastArrowTick nArrowTicks operatorReadoutString possessive retractArrow vocabulary vocabularySymbol' classVariableNames: 'DownPicture EqualityOperators RetractPicture SuffixArrowAllowance SuffixPicture UpArrowAllowance UpdatingOperators UpPicture' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A tile with up, down and suffix arrows.
To install new Forms for the arrows, just nil out UpPicture, DownPicture,
or SuffixPicture.
Create actors with the picture you want and write it out with these file names:
'tile inc arrow.morph' 'tile dec arrow.morph' 'tile suffix
arrow.morph'. Make sure that file is in the same directory as the image.
Open an EToy.
Properties for pop up arrow
#previousLiteral : Object -- last literal.
#previousPoint : Point -- last mouse position to use dragging arrow.
#isPopArrowNeeded : Boolean -- true if arrows are needed.
#popArrows (of HandMorph) : An array of Morph -- It points arrows for each hand.
Senders of it:
72 methods
TilePadMorph
Morph subclass: #TilePadMorph instanceVariableNames: 'type' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
The drop target for colored tiles. Landing pad. In the hierarchy, but not a tile itself. Would like to eliminate this, but an attempt at it failed.
Senders of it:
52 methods
TimesRepeatMorph
CompoundTileMorph subclass: #TimesRepeatMorph instanceVariableNames: 'numberOfTimesToRepeatPart whatToRepeatPart' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
This class is not used anymore. We keep it to let old projects work.
If we added code to auto-convert old instances of this classs[sic] to TimesRepeatTile instances, we could delete it for good.
Senders of it:
There are no senders of TimesRepeatMorph.
TimesRepeatTile
CompoundTileMorph subclass: #TimesRepeatTile instanceVariableNames: 'timesRow whatToRepeatPart' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A variant on the CompoundTileMorph that allows a section of code to be executed as many times as a numeric-control-field indicates. For reasons of sharing and history, the CompoundTileMorph continues to be the one for test/yes/no, and this subclass disregards those three areas and adds two of its own. An associated class is the TimesRow -- see its class comment.
Senders of it:
PhraseTileForTimesRepeat mouseDown: {mouse}
ScriptEditorMorph handUserTimesRepeatTile {other}
ScriptEditorMorph sissComeFullyUpOnReloadFrom:to: {serializations}
ScriptEditorMorphBuilder loop: {reconstituting scripting tiles }
StandardScriptingSystem timesRepeatComplexOfTiles {gold box}
TileMorph showSuffixChoices {arrows}
TimesRow
AlignmentMorph subclass: #TimesRow instanceVariableNames: 'timesPad' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A custom alignment morph that holds the "times' portion of a Times/Repeat complex
Senders of it:
TileMorph couldAddSuffixArrow {arrows}
TimesRepeatTile initialize {initialization}
TinyPaint
SketchMorph subclass: #TinyPaint instanceVariableNames: 'brush brushSize brushColor lastMouse' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of TinyPaint.
TransferMorph
Morph subclass: #TransferMorph instanceVariableNames: 'transferType passenger draggedMorph source dropNotifyRecipient accepted resultRecipient copy' classVariableNames: 'CopyPlusIcon' poolDictionaries: '' category: 'Morphic-Support'
This is a Morph that is used to visually indicate the progress of a drag operation, and also as a container for various bits of drag state information.
It polls the shift state in its step method to update its copy state (shift pressed = should copy).
And if you hit the Escape key while dragging, it aborts the drag operation.
Senders of it:
FileList wantsDroppedMorph:event:inMorph: {drag'n'drop}
PluggableListMorph startDrag: {drag and drop}
SimpleHierarchicalListMorph startDrag: {event handling}
TransferMorphAnimation
Morph subclass: #TransferMorphAnimation instanceVariableNames: 'transferMorph' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Support'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of TransferMorphAnimation.
TransferMorphLineAnimation
TransferMorphAnimation subclass: #TransferMorphLineAnimation instanceVariableNames: 'polygon' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Support'
THIS CLASS HAS NO COMMENT!
Senders of it:
Browser dragAnimationFor:transferMorph: {drag and drop}
TransformationB2Morph
TransformationMorph subclass: #TransformationB2Morph instanceVariableNames: 'worldBoundsToShow useRegularWarpBlt' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
A transformation which:
- is content to let someone else decide my bounds (I do not try to minimally enclose my submorphs)
- can use bi-linear interpolation
Senders of it:
ZoomAndScrollMorph createInteriorTransform {initialization}
TransformationMorph
TransformMorph subclass: #TransformationMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
A TransformationMorph is like a transformMorph, except that it does not clip, and its bounds include its entire submorph. TransformationMorphs are assumed to have only one submorph -- the idea is that it is a wrapper that enables its submorph to scale and rotate. A TMorph may come to have more than one submorph if, eg, a menu sprouts a sub menu, using the transformationMorph temporarily as its world, but this ability is only sparsely supported (as in layoutChanged).
Senders of it:
EmbeddedWorldBorderMorph myTransformation {as yet unclassified}
EnvelopeEditorMorph buildScalesIn: {editing}
Morph color:sees: {geometry eToy}
Morph newTransformationMorph {rotate scale and flex}
Morph slideBackToFormerSituation: {dropping/grabbing}
Morph touchesColor: {geometry eToy}
PasteUpMorph attemptCleanupReporting: {*Etoys-world menu}
SystemWindow class windowsIn:satisfying: {top window}
TransformationMorph flexing:byTransformation: {initialization}
TransformMorph
Morph subclass: #TransformMorph instanceVariableNames: 'transform smoothing localBounds' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
A TransformMorph introduces a 2-D transformation between its (global) coordinates and the (local) coordinates of its submorphs, while also clipping all display to its bounds. Specifically, with no offset, angle or scaling, a submorph with coordinates (0@0) will appear exactly at the topLeft of the windowMorph (its position). Rotation and scaling are relative to the local origin, (0@0).
instance var type description
transform MorphicTransform The coordinate transform between my coordinates and the
local coordinates of my submorphs.
smoothing Boolean Perform smoothing of my contents during drawing
localBounds Rectangle or nil caches the value of #localSubmorphBounds for performance
TransformMorphs operate with two different display strategies, depending on whether the transformation is a pure translation or not. If so, then they simply use a clipping canvas and display their submorphs with the appropriate offset. If the transformation includes scaling or rotation, then a caching canvas is used, whose active area covers the fullBounds of the submorphs intersected with the source quadrilateral corresponding to the window bounds.
Senders of it:
Lexicon acceptTiles {*Etoys-tiles}
PasteUpMorph modelWakeUp {user interface}
Player getRotationCenter {slots-bonus for geometry}
Player setRotationCenter: {slots-bonus for geometry}
PluggableTileScriptorMorph syntaxMorph {as yet unclassified}
ScrollPane initializeScrollBars {initialization}
SyntaxMorph enclosingPane {accessing}
TwoWayScrollPane createScroller {initialization}
TransitionMorph
Morph subclass: #TransitionMorph instanceVariableNames: 'startMorph endMorph startBlock completionBlock stepNumber nSteps stepTime startForm endForm effect direction' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Widgets'
A transitionMorph inserts itself in the morphic object structure during a visual transition. It has a stepNumber that runs from 1 to nSteps. This class handles a large family of wipe-like transitions by itself. Subclasses may implement other transitions such as dissolves and zooms.
Senders of it:
BookMorph goToPageMorph:transitionSpec: {navigation}
BookMorph goToPageMorph:transitionSpec:runTransitionScripts: {navigation}
BookMorph menuPageVisualFor:event: {menu}
ZASMCameraMarkMorph menuPageVisualFor:event: {as yet unclassified}
ZASMCameraMarkMorph setTransition: {as yet unclassified}
TranslucentProgessMorph
Morph subclass: #TranslucentProgessMorph instanceVariableNames: 'opaqueBackgroundColor' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Windows'
THIS CLASS HAS NO COMMENT!
Senders of it:
ComplexProgressIndicator withProgressDo: {as yet unclassified}
TrashCanMorph
ThreePhaseButtonMorph subclass: #TrashCanMorph instanceVariableNames: '' classVariableNames: 'TrashPic TrashPicOn' poolDictionaries: '' category: 'MorphicExtras-AdditionalWidgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
EventRecordingSpace sugarPartsBinQuads {sugar flaps}
Flaps class defaultsQuadsDefiningPlugInSuppliesFlap {predefined flaps}
Flaps class defaultsQuadsDefiningScriptingFlap {flaps registry}
Flaps class defaultsQuadsDefiningWidgetsFlap {flaps registry}
Flaps class newLoneSuppliesFlap {predefined flaps}
Flaps class newSqueakFlap {predefined flaps}
HaloMorph mouseDownInDimissHandle:with: {private}
Morph dismissViaHalo {submorphs-add/remove}
Morph slideToTrash: {dropping/grabbing}
Morph vanishAfterSlidingTo:event: {dropping/grabbing}
PasteUpMorph onceAgainDismiss: {undo}
Presenter addTrashCan {button creation}
SystemDictionary discardSoundSynthesis {shrinking}
TrashCanMorph class registerInFlapsRegistry {class initialization}
TTSampleFontMorph
BorderedMorph subclass: #TTSampleFontMorph instanceVariableNames: 'font transform smoothing' classVariableNames: '' poolDictionaries: '' category: 'Morphic-TrueType'
An example for using TrueType fonts.
Senders of it:
NCGlyphEditor font: {accessing}
TTFontDescription asMorph {*Morphic-TrueType}
TTSampleStringMorph
TTSampleFontMorph subclass: #TTSampleStringMorph instanceVariableNames: 'string ttBounds' classVariableNames: '' poolDictionaries: '' category: 'Morphic-TrueType'
I allow the display of a string in a TrueType font as a stand-alone morph.
Morph's color changes the inside of the characters.
Morph's borderColor changes the outline.
Many free fonts are stored at www.FontGuy.com.
Use a normal web browser (not our Scamper) and go there.
Choose 'categories' and browse to a font you like.
Hold the mouse down on the example text in that font.
When the menu comes up, choose "Copy this link location".
Come back into Squeak, choose "load font from web..."
from my menu, and paste in the url.
Senders of it:
TTSampleFontMorph createSample {menu}
TTSampleFontMorph font: {accessing}
TwoWayScrollPane
ComponentLikeModel subclass: #TwoWayScrollPane instanceVariableNames: 'getMenuSelector getMenuTitleSelector xScrollBar yScrollBar scroller' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Obsolete'
TwoWayScrollPane is now obsolete. You should be able to use ScrollPane to do both vertical and horizontal scrolling.
As an example, see Morph>>inATwoWayScrollPane and change the first line to create a ScrollPane instead of a TwoWayScrollPane. It will still work.
(EllipseMorph new extent: 200@150) inATwoWayScrollPane openInWorld
Note that user preferences for ScrollPane may be geared toward text scrolling, so that the horizontal scrollbar may be hidden when not needed, while the vertical scrollbar is always shown. Use ScrollPane>>alwaysShowHScrollbar: or its variants to adjust this if you want the vertical & horizontal scrollbars to be shown consistently.
Senders of it:
Morph inATwoWayScrollPane {initialization}
NCScrolledCompositeStateMorph addScrollerTo: {initialization}
Player newScriptorAround: {viewer}
ScriptEditorMorph autoFitOnOff {menu}
ScriptEditorMorph extent: {other}
ScriptEditorMorph hibernate {other}
SyntaxMorph enclosingPane {accessing}
SyntaxMorph class setSize:andMakeResizable: {as yet unclassified}
WorldWindow class test2 {as yet unclassified}
TypeListTile
SymbolListTile subclass: #TypeListTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
A tile that offers a list of supported data types.
Senders of it:
ScriptEditorMorph buttonRowForEditor {buttons}
UndescribedTile
TileMorph subclass: #UndescribedTile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
THIS CLASS HAS NO COMMENT!
Senders of it:
UndefinedObject newTileMorphRepresentative {*Etoys-tiles}
UpdatingBooleanStringMorph
UpdatingStringMorph subclass: #UpdatingBooleanStringMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
A customized updating-string-morph used for displaying and editing boolean values; mouse-down on one of these is inerpreted as a request to toggle.
Senders of it:
There are no senders of UpdatingBooleanStringMorph.
UpdatingMenuItemMorph
MenuItemMorph subclass: #UpdatingMenuItemMorph instanceVariableNames: 'wordingProvider wordingSelector enablementSelector wordingArgument' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Menus'
A menu item whose textual label and whose enablement are updatable. The wordingProvider provides the current wording, upon being being sent the wordingSelector.
The item can also dynamically update whether or not it should be enabled; to do this, give it an enablementSelector, which is also sent to the wordingProvider..
Senders of it:
MenuMorph addUpdating:enablementSelector:target:selector:argumentList: {construction}
MenuMorph addUpdating:target:selector:argumentList: {construction}
MenuMorph addUpdating:target:selector:argumentList:extraIcon: {construction}
MenuMorph addWithLabel:enablementSelector:target:selector:argumentList: {construction}
MenuMorph popUpAt:forHand:in:allowKeyboard: {control}
UpdatingMenuMorph
MenuMorph subclass: #UpdatingMenuMorph instanceVariableNames: 'updater updateSelector' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Menus'
THIS CLASS HAS NO COMMENT!
Senders of it:
PasteUpMorph reformulateUpdatingMenus {menu & halo}
Preferences class fontConfigurationMenu {fonts}
TheWorldMenu flapsMenu {*MorphicExtras-windows & flaps menu}
UpdatingNumericStringMorph
UpdatingStringMorph subclass: #UpdatingNumericStringMorph instanceVariableNames: 'min max' classVariableNames: '' poolDictionaries: '' category: 'VideoForSqueak-Morphic'
Similar to UpdatingStringMorph, but adds some new features for handling numbers.
Senders of it:
ParameterDescription asExtentMorph {creation}
UpdatingRectangleMorph
RectangleMorph subclass: #UpdatingRectangleMorph instanceVariableNames: 'target lastValue getSelector putSelector contents' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
Intended for use as a color swatch coupled to a color obtained from the target, but made just slightly more general than that.
Senders of it:
ColorPickerMorph allowsTranslucency {event handling}
ColorType updatingTileForTarget:partName:getter:setter: {*Etoys-tiles}
PhraseTileMorph replacePlayerInReadoutWith: {kedama}
PhraseTileMorph replacePlayerWith: {kedama}
ViewerLine replacePlayerInReadoutWith: {access}
UpdatingSimpleButtonMorph
SimpleButtonMorph subclass: #UpdatingSimpleButtonMorph instanceVariableNames: 'wordingProvider wordingSelector font' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
Adds to SimpleButtonMorph the ability to keep its own wording up to date by send a given message (indicated by its wordingSelector) to a given object (indicated by its wordingTarget, and normally the same as its target.)
Senders of it:
CodeHolder codePaneProvenanceButton {controls}
Lexicon mostGenericButton {control buttons}
NCAttachmentPointAdjusterWindow standardButton {buttons}
ParameterDescription asOptionMorph {creation}
Presenter reinvigorateAllScriptsTool: {playerList}
ProjectNavigationMorph makeUpdatingButtonWithBalloonText:actionSelector:wordingSelector: {as yet unclassified}
ScriptInstantiation statusControlRowIn: {misc}
ScriptStatusControl initializeFor: {initialization}
Utilities class windowMenuWithLabels:colorPattern:targets:selections:wordingSelectors:title: {durable menus}
UpdatingStringMorph
StringMorph subclass: #UpdatingStringMorph instanceVariableNames: 'format target lastValue getSelector putSelector floatPrecision growable stepTime autoAcceptOnFocusLoss minimumWidth maximumWidth decimalPlaces' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
A StringMorph that constantly tries to show the current data from the target object. When sent #step, it shows what the target objects has (target perform: getSelector). When edited (with shift-click), it writes back to the target.
floatPrecision = 1. to round to integer.
floatPrecision = .1 to round to 1 decimal place, etc.
Even when ((target == nil) or: [getSelector == nil]), the user would still like to edit the string with shift-click.
Senders of it:
62 methods
UpdatingStringMorphWithArgument
UpdatingStringMorph subclass: #UpdatingStringMorphWithArgument instanceVariableNames: 'argumentTarget argumentGetSelector' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of UpdatingStringMorphWithArgument.
UpdatingTextMorph
TextMorph subclass: #UpdatingTextMorph instanceVariableNames: 'target getSelector growable stepTime' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
A TextMorph that constantly tries to show the current data from the target object. When sent #step, it shows what the target objects has (target perform: getSelector).
Senders of it:
There are no senders of UpdatingTextMorph.
UpdatingThreePhaseButtonMorph
ThreePhaseButtonMorph subclass: #UpdatingThreePhaseButtonMorph instanceVariableNames: 'getSelector getArgument' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Widgets'
THIS CLASS HAS NO COMMENT!
Senders of it:
AllScriptsTool addSecondLineOfControls {initialization}
AllScriptsTool openUpButton {toggles}
BooleanPreferenceView representativeButtonWithColor:inPanel: {user interface}
CodeHolder diffButton {diffs}
CodeHolder prettyDiffButton {diffs}
CodeHolder regularDiffButton {diffs}
Command class undoRedoButtons {dog simple ui}
EventRecordingSpace makeStatusButtons {initialization}
HaloThemePreferenceView haloThemeRadioButtons {user interface}
HtmlInput addCheckBoxButtonToFormatter: {formatting}
HtmlInput addRadioButtonToFormatter: {formatting}
Lexicon searchToggleButton {control buttons}
PreferencesPanel class deleteAllPreferencesPanels {cleanup}
ProjectSorterMorph addControls {initialization}
URLMorph
BasicButton subclass: #URLMorph instanceVariableNames: 'url page isBookmark book' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SqueakPage'
This morph represents a URL for a SqueakPage. It displays the thumbnail for the associated page, if available. Used in page sorters and for bookmarks.
This morph has several options:
a. It can act like a thumbnail for sorting (in which case it can be picked up and dragged) or it acts as a bookmark (in which case shift clicking on it activates it).
b. If it has book set to true, it is a page in a book. Clicking fetches the index of the book, opens it to the first page, and puts it in the hand.
A thumbnail on a known book:
(URLMorph grabURL: 'ftp://doltest1.disney.com/squeak/test/p1.sp')
book: true.
A thumbnail on a single PasteUpMorph:
Make a PasteUpMorph with any morphs in it.
Decide where it should live, make a url string, and copy it.
'file://HardDisk/books/book1/myPage.sp'
'ftp://doltest1.disney.com/squeak/test/p1.sp'
Choose 'Save as Web Morph'
Paste in the url.
Drop the resulting thumbnail into some morph.
See SqueakPage's comment for the stages of in/out.
url
page A SqueakPage
isBookmark Boolean
book A Boolean -- whether I represent a whole book or a page.
Senders of it:
BookMorph bookmarkForThisPage {menu}
BookMorph saveAsNumberedURLs {menu}
BookMorph savePagesOnURL {menu}
Morph saveOnURL {fileIn/out}
SqueakPage postChangeNotification {private}
SqueakPageCache class deleteUnreferencedPages {housekeeping}
URLMorph class grabForBook: {instance creation}
UserText
TextMorph subclass: #UserText instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
A text object intended to carry user-created textual content. The default mode is to be non-wrapping, so that the only wrapping that takes place will be that imposed by explicit carriage-returns in the text. The user can manually (from menu) change the wrap setting, and it is also automatically switched to wrap-mode if the user manually resizes the text-object (with the halo) and also if the user, by typing, makes the text object extend off the right edge of the screen.
Senders of it:
SpeechBubbleMorph keyStroke:morph: {event handling}
SpeechBubbleMorph string {accessing}
SpeechBubbleMorph class string:type: {instance creation}
TextMorph class nonwrappingPrototype {scripting}
VariableSpacer
AlignmentMorph subclass: #VariableSpacer instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Basic'
A transparent, space-filling, halo-shy morph, for use in alignment structures.
Senders of it:
AlignmentMorph class newVariableTransparentSpacer {instance creation}
CategoryViewer phraseForVariableFrom: {entries}
VerticalNumberLineMorph (v5)
NumberLineMorph subclass: #VerticalNumberLineMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Charts'
A number line vertically oriented.
Senders of it:
GraphPaperPanel class classicCartesianGraph {examples}
Player getYOnGraph {*morphicExtras-Charts}
Player setYOnGraph: {*morphicExtras-Charts}
VeryPickyMorph
Morph subclass: #VeryPickyMorph instanceVariableNames: 'passengerMorph' classVariableNames: '' poolDictionaries: '' category: 'Tools-Explorer'
Contributed by Bob Arning as part of the ObjectExplorer package.
Senders of it:
There are no senders of VeryPickyMorph.
VideoMorph
RectangleMorph subclass: #VideoMorph instanceVariableNames: 'videoSource form resolution autoExtent configurationDialog showStatistics frameCount timeToCaptureFrames statisticsCounter' classVariableNames: '' poolDictionaries: '' category: 'VideoForSqueak-Morphic'
THIS CLASS HAS NO COMMENT!
Senders of it:
ImageResolutionType initialize {initialization}
Project enter:revert:saveForRevert: {enter}
VideoPropertiesMorph paneForVideoParameters {building}
VideoMorphConfiguration
AlignmentMorph subclass: #VideoMorphConfiguration instanceVariableNames: 'target parameters' classVariableNames: '' poolDictionaries: '' category: 'VideoForSqueak-Morphic'
THIS CLASS HAS NO COMMENT!
Senders of it:
VideoMorph createConfigurationDialog {configuration}
VideoPropertiesMorph
ObjectPropertiesMorph subclass: #VideoPropertiesMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'VideoForSqueak-Morphic'
THIS CLASS HAS NO COMMENT!
Senders of it:
VideoMorph openAppropriatePropertySheet {meta-actions}
Viewer
AlignmentMorph subclass: #Viewer instanceVariableNames: 'scriptedPlayer' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting'
An abstract superclass for both CategoryViewer and StandardViewer. A viewer is always associated with a particular 'scriptedPlayer' -- the object whose protocol it shows in tile form.
Senders of it:
CategoryViewer outerViewer {support}
CompoundTileMorph justDroppedInto:event: {miscellaneous}
Morph objectViewed {e-toy support}
PasteUpMorph sissWriteValue {*siss-interface}
PhraseTileMorph duplicate {kedama}
PhraseTileMorph justDroppedInto:event: {dropping/grabbing}
PhraseTileMorph sproutNewScriptor {miscellaneous}
Presenter viewMorph: {stubs}
Presenter viewObjectDirectly: {stubs}
TabbedPalette viewMorph: {*Etoys-viewer tab}
TileMorph selectorTile:in: {tiles from method}
UpdatingRectangleMorph defaultBorderColor {initialization}
Viewer retargetFrom:to: {transition}
ViewerFlapTab hibernate {transition}
ViewerFlapTab lazyUnhibernate {transition}
ViewerEntry
AlignmentMorph subclass: #ViewerEntry instanceVariableNames: 'helpPane' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of ViewerEntry.
ViewerFlapTab
FlapTab subclass: #ViewerFlapTab instanceVariableNames: 'scriptedPlayer beingOpened' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Flaps'
ViewerFlapTab are flap tabs for etoy scripting viewers.
Senders of it:
Morph removeViewersOnSubsIn: {e-toy support}
PasteUpMorph abandonVocabularyPreference {*Protocols}
PasteUpMorph allViewersInProject {olpc}
PasteUpMorph closedViewerFlapTabs {misc}
PasteUpMorph hideViewerFlaps {misc}
PasteUpMorph hideViewerFlapsOtherThanFor: {misc}
PasteUpMorph installVectorVocabulary {*Protocols}
PasteUpMorph recreateScripts {*Etoys-support}
PasteUpMorph relaunchAllViewers {*Etoys-support}
PasteUpMorph removeAllViewers {world menu}
PasteUpMorph viewerFlapTabFor: {*Etoys-playfield}
Player noteDeletionOf:fromWorld: {customevents-misc}
Player viewerFlapTab {misc}
Project setFlaps {language}
StandardScriptingSystem reinvigorateThumbnailsInViewerFlapTabs {*Etoys-utilities}
ViewerLine
AlignmentMorph subclass: #ViewerLine instanceVariableNames: 'elementSymbol' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
Serves as a wrapper around a line in a Viewer, enforcing the desired layout properties.
Senders of it:
CategoryViewer phraseForCommandFrom: {entries}
CategoryViewer phraseForTest {entries}
CategoryViewer phraseForTimesRepeat {entries}
CategoryViewer phraseForVariableFrom: {entries}
CategoryViewer universalTilesPhraseForVariableFrom: {entries}
KedamaCategoryViewer replaceTargetWith: {support}
ScriptEditorMorph viewerTile {access}
TileMorph acceptNewLiteral {code generation}
ViewerRow
AlignmentMorph subclass: #ViewerRow instanceVariableNames: 'elementSymbol' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Tiles'
THIS CLASS HAS NO COMMENT!
Senders of it:
There are no senders of ViewerRow.
WatcherWrapper
AlignmentMorph subclass: #WatcherWrapper instanceVariableNames: 'player variableName' classVariableNames: '' poolDictionaries: '' category: 'Etoys-Scripting Support'
A wrapper around either kind of watcher. My primary raison d'etre is so that I can automatically change names when my player changes names.
Senders of it:
BooleanScriptEditor wantsDroppedMorph:event: {dropping/grabbing}
Morph handUserGraphLocationPlotter {*MorphicExtras-accessing}
PhraseTileMorph morphToDropInPasteUp: {mouse}
Player changeTypesInWatchersOf: {translation}
Player fancyWatcherFor: {slots-user}
Player noteDeletionOf:fromWorld: {customevents-misc}
Player removeWatchersOfSlotNamed: {translation}
Player renameSlotInWatchersOld:new: {translation}
Player tearOffFancyWatcherFor: {slots-user}
Player tearOffUnlabeledWatcherFor: {slots-user}
TileMorph grabMorph: {event handling}
TilePadMorph canAccept: {mouse}
TilePadMorph morphToDropFrom: {miscellaneous}
WatchMorph
EllipseMorph subclass: #WatchMorph instanceVariableNames: 'fontName cColor handsColor romanNumerals antialias' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Demo'
This class is a representation of a watch.
The labels' font is changeble. Labels' font size increase or decrease when resizing me.
WatchMorph new openInWorld
(WatchMorph fontName: 'ComicPlain' bgColor: Color transparent centerColor: Color transparent) openInWorld " transparent "
(WatchMorph fontName: 'ComicBold' bgColor: Color white centerColor: Color black) openInWorld
Structure:
fontName String -- the labels' font name
cColor Color -- center color
handsColor Color
romanNumerals Boolean
antialias Boolean
Senders of it:
There are no senders of WatchMorph.
WaveEditor
AlignmentMorph subclass: #WaveEditor instanceVariableNames: 'graph samplingRate perceivedFrequency loopEnd loopLength loopCycles possibleLoopStarts keyboard' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-SoundInterface'
This tool was created to aid in the preparation of LoopedSampledSound objects. It includes support for finding good loop points with a little help from the user. Namely, the user must identify a good ending point for the loop (typically just before the decay phase begins) and identify one cycle of the waveform. After that, the "choose loop point" menu command can be invoked to search backwards to find and rank all possible loop starting points. Some experimentation is usually required to find a loop that "breaths" in a natural way.
This tool can also be used as a general viewer of numerical sequences of any kind, such as time-varying functions, FFT data, etc.
Senders of it:
AbstractSound viewSamples {playing}
AIFFFileReader edit {other}
AnonymousSoundMorph openWaveEditorOnSound {menu}
GraphMorph openWaveEditor {*sound}
LoopedSampledSound edit {other}
RecordingControls showEditor {menu commands}
RecordingControlsMorph showEditor {button commands}
SoundLibraryTool edit {menu}
WaveEditor showEnvelope {menu}
WaveEditor showFFTAtCursor {menu}
WebCamMorph (v5)
RectangleMorph subclass: #WebCamMorph instanceVariableNames: 'camNum camIsOn frameExtent displayForm resolution useFrameSize captureDelayMs' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-WebCam'
INTRODUCTION
=========
WebCamMorph together with CameraPlugin (originally from MIT Scratch) provides an easy and cross platform way to use webcam input in Squeak and Etoys. The first version has been created specifically with Etoys in mind. To view a live feed simply drag a "WebCam" tile from the "WebCam" category in the objects tool. Open up a viewer on the morph and display the "camera settings" category to explore the following basic settings:
"camera is on": turn the camera on/off.
"camera number": usually the default of "1" is ok but if you have more than one camera connected then adjust between 1 and 9 for other instances of WebCamMorph.
"max fps": leave as is for now. It is unusual for webcams to capture at higher than 30fps. See later for further explanation of how fps is controlled.
"actual fps": read-only. Indicates the actual fps being achieved which can depend significantly on lighting conditions and capture resolution...
"resolution": webcams can have a range of resolutions but for simplicity three are supported: "low" (160x120), "medium" (320x240) and "high" (640x480). Adjust in good lighting to see if "actual fps" increases.
"use frame size": the resolution used for capturing can differ from the resolution used for display. If this setting is true then WebCamMorph is resized to match the camera resolution. If false then you are free to resize it however you want (via the "resize" halo button, use shift to preserve aspect ratio)
Beyond viewing a live feed WebCamMorph has been designed to support different uses including simple effects, time-lapse photography, stop-motion animation, character recognition, motion detection and more complex processing of every frame for feature detection. The following information is to help you understand how and why WebCamMorph operates so you can adjust it for your particular needs.
"FRAMES PER SECOND", LIGHTING & CAMERA RESOLUTION
==================================
The maximum possible frame rate depends on many factors, some of which are outside of our control. Frame rates differ between cameras and usually depend significantly on chosen resolution and lighting conditions. To ensure a balance between capturing every available frame and keeping everything else responsive, WebCamMorph dynamically adjusts the delay between capturing one frame and the next (does not apply when in "manual capture" mode, see later).
WebCams often include automatic compensation for lighting conditions. In low lighting it takes significantly more time for the camera to get a picture than it does in good lighting conditions. For example 30fps may be possible with good lighting compared to 7fps in low lighting. So for best capture rates ensure you have good lighting!
Cameras have a "native" resolution at which frame rates are usually better than for other resolutions. Note though that the native resolution might be *higher*
than the *minimum* resolution available. It pays to experiment with different resolutions to find which one results in the highest frame rate. Use good lighting conditions when experimenting with resolutions.
"MANUAL CAPTURE" MODE
===============
In simply usage WebCamMorph automatically captures a frame and displays it. To support Etoys scripting a "manual capture" mode is provided where you or your script determines when to capture, when to apply effects (or not) and when to update the display. In between these steps you can do anything you want. Note that frames rates will be lower than that in automatic capture mode and that "skip frames" (described next) will need adjusting at very low capture rates.
Tip: In manual mode the camera can be turned off. It will be turned on automatically when required and return to it's previous state after a frame has been captured. For capture periods of five seconds or more turning the camera off may save power, which can especially useful when running off batteries. For smaller periods leaving the camera on will avoid some delays and could help speed up webcam related scripts.
"SKIP FRAMES"
========
Webcams and their drivers are typically designed for streaming live video and use internal buffering to help speed things up. At low capture rates the picture can appear to lag real-time because what you see is the next available buffer not the *latest* buffer. So for example if you capture a frame every ten seconds and there are three buffers being used then what you actually see may be thirty seconds old. We have little/no control over the number of buffers used and the actual number can vary between cameras and under different circumstances for the same camera. "skip frames" is provided to compensate for buffering so increase it when doing "manual" capturing until you see what you expect to see. Typically a setting of 8 is enough but I have had to use 20 with one particular camera in low lighting.
"SNAPSHOTS"
========
Where as "capturing" is the process of getting an image from the Camera into Squeak/Etoys, a "snapshot" preserves whatever is currently displayed (which may be the captured image after effects have been applied). To store snapshots you need to designate a "holder" which at the moment can be either a "holder" morph or a "movie" morph. Create one of these before proceeding. To assign a holder open up a viewer for WebCamMorph, display the "snapshot" category and click in the box at the right of the entry called "snapshot holder". The cursor will now resemble a cross-hair and can be clicked on the target holder/movie morph. To take a single snapshot at any time click (!) on the left of "take snapshot". In auto-capture mode WebCamMorph can also be set to take multiple consecutive snapshots . First, before turning the camera on, set a sensible limit using "snapshot limit" (to avoid using all the computers memory) then set "auto snapshot" to true. When the camera is next turned on then snapshots are taken for every frame until "snapshot limit" becomes zero. "snapshot limit" is automatically decremented but not reset to avoid problems (although you are free to reset it manually or via a script).
"EFFECTS" - WIP
=========
Similar to snapshots, a holder can be designated as the "effects holder". This holder is intended to be populated with "fx" morphs (coming soon) which will operate on captured frames prior to displaying. Stay tuned ;-)
CLEARING SNAPSHOT & EFFECTS HOLDERS
=========================
Keeping a link to snapshot or effects holders can tie up resources even after the target holders have been deleted and are no longer visible. To ensure this does not happen designate the WebCamMorph itself as the holder (for method see "snapshots" section above).
COMING SOON!
=========
- Built-in basic effects such as brightness, contrast and hue.
- Image "fx" morphs for effects such as those found in MIT Scratch and many other types of effects/ image processing.
- More snapshot options, eg, store to file
- Demo projects
Senders of it:
There are no senders of WebCamMorph.
WeekMorph
AlignmentMorph subclass: #WeekMorph instanceVariableNames: 'week month tileRect' classVariableNames: '' poolDictionaries: '' category: 'Morphic-PDA'
Shows the current week as a row of buttons with numbers on. See MonthMorph
Senders of it:
MonthMorph initializeHeader {initialization}
MonthMorph initializeWeeks {initialization}
MonthMorph selectedDates {access}
WheelMorph (v5)
BorderedMorph subclass: #WheelMorph instanceVariableNames: 'target actionSelector factor circular old angle maxAngle lastRedraw' classVariableNames: '' poolDictionaries: '' category: 'DrGeoII-Core-UI'
A thumb wheel widget control
Senders of it:
DrGeoPresenter horizontalWheel {UI definition}
DrGeoPresenter verticalWheel {UI definition}
DrGeoPresenter zoomWheel {UI definition}
WireMorph
PolygonMorph subclass: #WireMorph instanceVariableNames: 'pins' classVariableNames: 'InputPinForm IoPinForm OutputPinForm' poolDictionaries: '' category: 'Morphic-Components'
THIS CLASS HAS NO COMMENT!
Senders of it:
PinMorph startWiring: {wires}
WiWPasteUpMorph
PasteUpMorph subclass: #WiWPasteUpMorph instanceVariableNames: 'parentWorld hostWindow pendingEvent displayChangeSignatureOnEntry' classVariableNames: 'Debug' poolDictionaries: '' category: 'Morphic-Worlds'
This subclass of PasteUpMorph provides special support for viewing of a world in an inner window (WorldWindow).
Senders of it:
WorldWindow class test1 {as yet unclassified}
WorldWindow class test2 {as yet unclassified}
WordGameLetterMorph
BorderedMorph subclass: #WordGameLetterMorph instanceVariableNames: 'letter originalLetter idString linkedLetters predecessor successor indexInQuote lineMorph letterMorph style' classVariableNames: 'IDFont IDHeight LetterFont LetterHeight' poolDictionaries: '' category: 'Morphic-Games'
WordGameLetterMorph implements letter boxes for type-in and display of letter in word games. Several variant displays are supported, depending on the setting of style, and blanks can be displayed as black boxes or empty letter boxes.
Default support for type-in is distributed between this class and WordGamePaneMorph
letter the Character stored in this morph.
Can be either blank or nil as well as a letter.
indexInQuote a retained copy of the index of this character
Facilitates responses to, eg, clicking or typing in this box.
If indexInQuote==nil, then this is displayed as a black box
predecessor another LetterMorph or nil
Used for linked typing and, eg, word selection
successor another LetterMorph or nil
Used for linked typing and, eg, word selection
style a Symbol, one of #(plain boxed underlined)
Boxed and underlined display further depends on whether
the id strings are nil or not.
Each format has an associated default size
The following two variables are also submorphs, as are the id strings if present.
letterMorph a StringMorph for displaying the letter
Used when changing the letter to be displayed
lineMorph a PolygonMorph used to display the underline
and also to place the id string in underlined format
Senders of it:
CipherPanel encodedQuote: {initialization}
CrosticPanel quote:clues:answers:quotePanel: {initialization}
CrosticQuotePanel quote:answers:cluesPanel: {initialization}
Worldlet
PasteUpMorph subclass: #Worldlet instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Mentoring'
An area with a private Presenter, viz, for which the scope of its stop-step-go buttons is limited to the area's interior.
Senders of it:
EventRecordingSpace initialize {initialization}
EventRecordingSpaceNavigator doNewPainting {the actions}
InteriorSolidSugarSuppliesTab mouseMove: {event handling}
InteriorSugarNavBar doNewPainting {buttons}
Morph stagingArea {geometry}
WorldWindow
SystemWindow subclass: #WorldWindow instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Morphic-Worlds'
A WorldWindow is a SystemWindow whose central area presents an inner Morphic world.
WorldWindows have a red title bar when the world inside is inactive. This changes to green when the world becomes the active world. The world inside becomes activated by clicking in it. When you click outside this world, the parent world resumes control. While its world is inactive, the WorldWindow may be moved and resized like any other.
It would be nice to make the world inside active whenever the WorldWindow was active, but this presents difficulties in moving and resizing, probably related to use of the global World instead of self world in many methods.
This facility is mainly the work of Bob Arning, with a number of tweaks by DI.
Senders of it:
WorldWindow class test1 {as yet unclassified}
WorldWindow class test2 {as yet unclassified}
WsGraphMorph
ImageMorph subclass: #WsGraphMorph instanceVariableNames: 'graphType dataType model data dataColor cursor cursorColor cursorColorAtZeroCrossings startIndex relativeScale minVal maxVal imageFormValid' classVariableNames: '' poolDictionaries: '' category: 'WS-Sound-Interface'
THIS CLASS HAS NO COMMENT!
Senders of it:
WsWorldStethoscopeMorph addSignalGraph {menus}
WsWorldStethoscopeMorph addSpectrumGraph {menus}
WsPhonePadMorph
ImageMorph subclass: #WsGraphMorph instanceVariableNames: 'graphType dataType model data dataColor cursor cursorColor cursorColorAtZeroCrossings startIndex relativeScale minVal maxVal imageFormValid' classVariableNames: '' poolDictionaries: '' category: 'WS-Sound-Interface'
THIS CLASS HAS NO COMMENT!
Senders of it:
WsWorldStethoscopeMorph addSignalGraph {menus}
WsWorldStethoscopeMorph addSpectrumGraph {menus}
WsSignalGraphMorph
WsGraphMorph subclass: #WsSignalGraphMorph instanceVariableNames: 'capacity mouseDown' classVariableNames: '' poolDictionaries: '' category: 'WS-Sound-Interface'
THIS CLASS HAS NO COMMENT!
Senders of it:
WsWorldStethoscopeMorph addDataGraph {menus}
WsSonogram
ImageMorph subclass: #WsSonogram instanceVariableNames: 'model dataColor lastX scrollDelta pixValMap allOne words' classVariableNames: '' poolDictionaries: '' category: 'WS-Sound-Interface'
THIS CLASS HAS NO COMMENT!
Senders of it:
WsWorldStethoscopeMorph addSonogram {menus}
WsSonogram is implemented in this WsSonogram class.
WsWorldStethoscopeMorph
AlignmentMorph subclass: #WsWorldStethoscopeMorph instanceVariableNames: 'statusLight model directModeLight biasModeLight' classVariableNames: '' poolDictionaries: '' category: 'WS-Sound-Interface'
THIS CLASS HAS NO COMMENT!
Senders of it:
WsWorldStethoscopeMorph class registerInFlapsRegistry {class initialization}
WorldStethoscope is implemented in this WsWorldStethoscopeMorph class.
WorldStethoscope is implemented in this WsWorldStethoscopeMorph class.
ZASMCameraMarkMorph
AbstractMediaEventMorph subclass: #ZASMCameraMarkMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
ZASMScriptMorph compileScript {as yet unclassified}
ZASMScriptMorph decompileScript:named:for: {as yet unclassified}
ZASMScriptMorph fixup {as yet unclassified}
ZASMScriptMorph wantsDroppedMorph:event: {dropping/grabbing}
ZoomAndScrollControllerMorph grabCameraPositionEvent:morph: {as yet unclassified}
ZASMCameraMark is implemented in this ZASMCameraMarkMorph class. It is created in a playfield.
ZASMScriptMorph
PasteUpMorph subclass: #ZASMScriptMorph instanceVariableNames: 'somethingChanged' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
ZASMCameraMarkMorph justDroppedInto:event: {dropping/grabbing}
ZoomAndScrollControllerMorph editAScript {as yet unclassified}
ZASMScriptMorph new openInHand. produce a Playfield.
ZASMStepsMorph
StringMorph subclass: #ZASMStepsMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
ZASMScriptMorph compileScript {as yet unclassified}
ZASMScriptMorph decompileScript:named:for: {as yet unclassified}
ZASMScriptMorph fixup {as yet unclassified}
ZASMSteps is implemented in this ZASMStepsMorph class.
ZoomAndScrollControllerMorph
RectangleMorph subclass: #ZoomAndScrollControllerMorph instanceVariableNames: 'mouseDownPoint mouseMovePoint panAndTiltFactor zoomFactor target hasFocus currentKeyDown upDownCodes changeKeysState programmedMoves' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
StoryboardBookMorph initialize {initialization}
ZoomAndScrollController is implemented in this ZoomAndScrollControllerMorph class.
ZoomAndScrollMorph
RectangleMorph subclass: #ZoomAndScrollControllerMorph instanceVariableNames: 'mouseDownPoint mouseMovePoint panAndTiltFactor zoomFactor target hasFocus currentKeyDown upDownCodes changeKeysState programmedMoves' classVariableNames: '' poolDictionaries: '' category: 'MorphicExtras-Demo'
THIS CLASS HAS NO COMMENT!
Senders of it:
StoryboardBookMorph initialize {initialization}
ZoomAndScrollMorph new openInHand. results in a Playfield.
The following Etoys objects are described in the Objects and More Objects chapters. For each one, basic information is given below on its implementation in Squeak, including the class, superclass, and category of its Player and the Morph it wears as a costume. Some objects, such as games with boards and pieces, are implemented using even more classes, which is noted where it is the case.
How are objects created from the Object Catalog? How are objects created from a menu selection?
Morphs can mostly be instantiated using the syntax
Morph new openInHand.
or
Morph new openInWorld.
Where this is not the case some other method is provided.
AllScriptsTool<All Scripts>
NCCurveMorph<AND Gate>
NCCurveMorph andGate openInHand.
PolygonMorph<Arrow>
Accessed in Etoys via the Connector Button (Connectors category)
NCAAConnectorMorph<Arrow2>
NCAAConnectorMorph basicArrow
The Arrow Editor is a GlyphEditor in a SystemWindow. The GlyphEditor toolbar contains nine Buttons and an UpdatingString.
SystemWindow<Arrow Editor>
Arrow Editor is implemented in the newStandAlone method of NCGlyphEditor, which creates both the Arrow Editor and the SystemWindow.
SystemWindow<Attachment Adjuster>
SystemWindow<Attachment Adjuster>
NCAttachmentPointAdjusterWindow adjusterWindow openInHand.
EToySenderMorph<Badge>
How is this invoked? EToySenderMorph new initializeToStandAlone openInHand. creates an ETofSender that looks exactly like a Badge.
BalloonMorph<Balloon>
BookMorph<Book>
Submorphs:
BorderedMorph<Bordered>
Bordered is used in CategoryViewer, Chess, FileList2, Flaps, Glyph Editor, Object Properties, PaintBox, SelectionMorph, and SyntaxMorph.
BouncingAtomsMorph<BouncingAtoms>
BroomMorph<Broom>
When dragged, BroomMorph changes shape to one of the following, depending on the initial direction of dragging. Each of these Morphs can stretch sideways when the mouse is dragged sideways.
When clicked and dragged, it changes to one of the following, depending on the initial direction of dragging.
ScriptableButton<Button>
NCButtonBar<ButtonBar>
SystemQueryPhrase<ButtonDown?>
FlapTab<Button Flap>
SystemQueryPhrase<ButtonDown?>
CalendarMorph<Calendar>
WebCamMorph<Camera>
CategoryViewer is used in the Viewer for object scripting to hold groups of scripting tiles.
CategoryViewer<CategoryViewer>
ChessMorph<Chess>
A ChessMorph contains more than a hundred submorphs.
Chess is implemented primarily in Squeak, using the following objects in the Morphic-Games-Chess category:
Chinese Checkers is implemented using the ChineseCheckersPiece and ChineseCheckers classes in the Morphic-Games category in Squeak.
Cipher is implemented using WordGameLetter objects for the initially blank cells of the plaintext message, and Strings for the letters of the cipher message. About the Cipher Panel and Some Useful Statistics are PluggableText objects. FillInTheBlank, used for entering new cipher text, is made of a Query (with text held in query's characters, an extra tile in the Basic category), a textPane, and a Morph holding accept and cancel Buttons. When clearing typing, the message Are you sure you want to discard all typing? appears in an MVCMenu, with the choices Yes or No.
CircleMorph<Circle>
NCCurveMorph<CircleCurve>
NCUMLDiagramMorph<Class>
NCButtonBar<Class ButtonBar>
NCButtonBar<Class ButtonBar>
ClipboardMorph<Clipboard>
WatchMorph<Clock>
AlignmentMorph<Column>
NCCompositeStateMorph<Composite State>
NCAAConnectorMorph<Connector>
NCAAConnectorMorph<ConnectorArrow>
NCBroomMorph<Connector Broom>
Like Broom, this changes shape depending on the direction in which it is dragged.
NCMakerButton<Connector Button>
FlapTab<Connectors Flap>
CrosticPanel<Crostic>
PolygonMorph<Curve>
PolygonMorph<Curvy Arrow>
CurveMorph arrowPrototype openInHand.
NCAAConnectorMorph<Curvy Connector>
NCAAConnectorMorph newCurvyConnector openInHand.
NCAAConnectorMorph<Curvy ConnectorArrow>
NCAAConnectorMorph newCurvyArrow openInHand.
NCCurveMorph<Diamond>
NCCurveMorph diamond openInHand
ClockMorph<Digital Clock>
DrGeo is implemented in many classes in the DrGeoII-* categories. The active window for DrGeo is a DrGService.
DrGService<Dr. Geo>
DrGeo new openInHand.
Ellipse is implemented in this EllipseMorph class.
NCEllipseMorph<End State>
NCEllipseMorph newEndState openInHand.
Available from FSM ButtonBar and FSM Flap, both in the Object Catalog (eToyFriendlyOff, no category).
NCDisplayTextMorph<Enhanced Text>
NCDisplayTextMorph authoringPrototype openInHand. '24 point Bitstream Vera Sans'
EtoyUpdatingThreePhaseButtonMorph
Used to create radio buttons, check boxes, and buttons bearing arrowheads. For example, the Fridge object contains a check bok implemented as an EtoyUpdatingThreePhaseButton.
EventRecordingSpace<Event Theatre>
EventRecordingSpace open.
OLPCHelpDisplayer<File Dialog>
FishEyeMorph<FishEye>
Closed
FlapTab<Flap>
Open
PasteUpMorph<flap>
Contains whatever objects are dropped into it.
Object subclass: #Flaps instanceVariableNames: '' classVariableNames: 'FlapsQuads SharedFlapsAllowed SharedFlapTabs' poolDictionaries: '' category: 'MorphicExtras-Flaps'
ClassVariables
FlapsQuads quads defining predefined flaps
default flaps are: 'PlugIn Supplies', 'Stack Tools', 'Supplies', 'Tools', 'Widgets' and 'Scripting'
SharedFlapTabs an array of flaps shared between squeak projects
SharedFlapsAllowed boolean
addStandardFlaps "Initialize the standard default out-of-box set of global flaps. This method creates them and places them in my class variable #SharedFlapTabs, but does not itself get them displayed. " SharedFlapTabs ifNil: [SharedFlapTabs := OrderedCollection new]. SharedFlapTabs add: self newSqueakFlap. SharedFlapTabs add: self newSuppliesFlap. SharedFlapTabs add: self newToolsFlap. SharedFlapTabs add: self newWidgetsFlap. SharedFlapTabs add: self newStackToolsFlap. SharedFlapTabs add: self newNavigatorFlap. SharedFlapTabs add: self newPaintingFlap. SharedFlapTabs add: self newObjectsFlap. self disableGlobalFlapWithID: 'Stack Tools' translated. self disableGlobalFlapWithID: 'Painting' translated. self disableGlobalFlapWithID: 'Navigator' translated. self disableGlobalFlapWithID: 'Objects' translated. ^ SharedFlapTabs
Flasher<Flasher>
Flasher new initializeToStandAlone openInHand.
FrameRateMorph<FrameRate>
FrameRateMorph authoringPrototype openInHand.
EToyFridgeMorph<Fridge>
NCButtonBar<FSM ButtonBar>
Closed
FlapTab<FSM Flap>
Open
NCPartsBin<parts bin>
GeeMailMorph<Gee-Mail>
GlyphEditor is a component of Arrow Editor.
NCGlyphEditor<GlyphEditor>
Grab Patch is implemented in the GrabPatchMorph class. It is not a Morph, but an action that produces a SketchMorph, so it cannot be dropped into a World and examined through a viewer.
GrabPatchMorph new initializeToStandAlone openInHand.
RectangleMorph<Gradient>
Gradient's gradient fill = true
RectangleMorph gradientPrototype openInWorld.
RectangleMorph<Gradient>
Gradient's gradient fill = true
RectangleMorph diagonalPrototype openInWorld.
GraphMorph<Graph>
GraphPaper is implemented as a PasteUpMorph.
GraphPaperPanel is accessed from the halo menu of graph paper, in the make graph paper... option of the playfield options... option.
GraphPaperPanel<GraphPaperPanel>
GStreamerMoviePlayerMorph<GStreamerPlayer>
GStreamerMoviePlayerMorph authoringPrototype openInHand.
HorizontalNumberLineMorph<H number line>
The command
HorizontalNumberLineMorph new openInHand.
creates an H Number Line with ticks 0 5 10, whereas the version in the object catalog has ticks from -10 to 8. I don't know how to produce that.
Halo is implemented in the HaloMorph, HaloSpec, and NameStringInHalo classes. It is not possible to create a halo without a target morph, and it is not possible to open a viewer or inspector on most haloes visually, except for the World halo. This is its structure.
HaloMorph<Halo>
MagnifierMorph<Hand Magnifier>
NCCurveMorph<Happy face>
NCCurveMorph happyFace openInHand.
PasteUpMorph<Holder>
ScriptingSystem prototypicalHolder openInHand.
Used in the standard viewer for menu icons on variable entries, and for the Gold Box icon in a Script Editor, among many other things. See senders of it.
ScriptingSystem prototypicalHolder openInHand.
ImageMorph<Image>
JoystickMorph<Joystick>
KeyPressMorph<Key press>
NCLabelMorph<Label>
NCLabelMorph newStandAlone openInHand.
LassoPatchMorph
This is an action, not a costumed player, so it is impossible to open a viewer on it in a Halo.
Leds are used for numeric display in several Morphs.
LedMorph<Led>
LedDigitMorphs occur as components of LedMorphs.
LedDigitMorph<LedDigit>
PolygonMorph<Line>
LineMorph is a subclass of PolygonMorph.
LineMorph newStandAlone openInHand.
MagnifierMorph<Magnifier>
NCMakerButton<Maker Button>
MenuMorph<Menu>
Menus are normally created by clicking buttons in objects or object Halos. The following expressiongenerates a menu that can be placed in the World temporarily by right-clicking.
MenuMorph example openInHand.
It is possible to invoke its Halo, but if one brings up its viewer and clicks to get the category menu, this MenuMorph is dismissed, and the viewer also vanishes, leaving the user holding the category menu, which then has no effect.
If one collapses the menu with the tan Halo handle, it becomes a persistent object that can be examined in the normal way. However, this is not very informative.
CollapsedMorph<Menu>
This example is supposed to include a button for keeping the menu fixed in the workspace, using the addStayUpItem method, but it does not work.
Mines<Mines>
Mines is implemented in this Mines class, and in the MinesBoard and MinesTile classes.
Morph<Morph>
Almost identical to MPEGPlayer, below.
MovingEyeMorph<MovingEye>
MPEGMoviePlayerMorph<MPEGPlayer>
MPEGPlayer is implemented in this MPEGPlayer class, and in other classes in the Movies-Kernel and Movies-Player categories.
MVCMenu is implemented in this MVCMenuMorph class. It is used to implement menus in several classes. For example, when a search in a Standard Viewer fails, the error dialog is presented in an MVCMenu. It is not possible to use the category menu in a standard viewer on an MVCMenu, nor is it possible to open the debug menu on on MVCMenu.
MVCMenuMorph<MVCMenu>
Flaps newNavigatorFlap openInHand.
ScriptableButton<NebraskaServer>
What is this, and where does it occur?
3PButton(#nextOwnerPage <number>)
NCNoteMorph<Note>
On the World menu. Ctrl-o/cmd-o on the keyboard.
ObjectsTool<Object Catalog> (version from SugarNavigatorBar)
ObjectsTool<Objects>(version from ObjectsCatalog)
ObjectsTool new initializeToStandAlone openInHand.
ObjectPropertiesMorph<ObjectProperties>
The command
ObjectPropertiesMorph new openInHand.
opens an ObjectPropertiesMorph on a Rectangle. Commands in the form
x =: <AnyMorph> new openInHand.
x openAPropertySheet.
with any Morph name in place of AnyMorph open an ObjectPropertiesMorph on the given Morph.
There is a way to get a more complex, multi-paned ObjectPropertiesMorph from a Morph, but I don't know what it is.
FlapTab<Objects>
ObjectsTool<Objects>
Flaps newObjectsFlap openInHand.
NCCurveMorph<OR Gate>
NCCurveMorph orGate openInHand.
PasteUpMorph<page>
When a book is created, it contains an OrderedCollection of PasteUpMorphs, accessible with the pages method from the instance variable pages. Pages are implemented entirely internally to BookMoph and PasteUpMorph, not as a separate Class.
AlignmentMorph<Page Controls>
TransformationMorph<PaintBox>
PaintBox appears as a component of Paint. While it is possible to create a PaintBox without a SketchEditor to paint in, there is no point in doing so. The correct method is
PaintInvokingMorph authoringPrototype openInHand.
FlapTab<Painting>
Flaps newPaintingFlap openInHand.
SystemWindow<Parameters>
KedamaMorph<KedamaWorld>
KedamaPatchMorph<patch>
KedamaTurtleMorph<turtle1>
Particles is implemented in various Kedama* classes, mainly KedamaMorph, KedamaPatchMorph, and KedamaTurtleMorph.
NCPartsBin<parts bin>
PDAMorph<PDA>
WsPhonePadMorph<PhonePad>
PhraseTileMorph<PhraseTile>
PianoKeyboardMorph<PianoKeyboard>
NCPinMorph<Pin>
NCPinMorph newPin openInHand.
Player is implemented in the Player class, a subclass of Model, in the Etoys-Scripting category in Squeak. New Etoys objects with no scripts defined are Unscripted Players wearing various costumes, and objects with scripts each have a subclass of Player, again wearing some costume. One can create a player without a costume in Squeak in the usual manner.
x := Player new.
Printing the value of x then gives an answer in this form, where the number in parentheses indicates which subclass of Player x is in.
a Player (277) (with nil costume)
However, there is nothing one can do with it in Etoys without giving it a costume first, using the wearCostumeOf: anotherPlayer or wearCostumeOfName: aName methods of Player.
AllPlayersTool<Players>
AllPlayersTool newStandAlone openInHand.
PasteUpMorph<Playfield>
PasteUpMorph authoringPrototype openInHand.
PluggableButtonMorph<PluggableButton>
PluggableButtonMorph example openInWorld
PluggableListMorph<PluggableList>
How is this accessed?
NCCurveMorph<Pointing Hand>
NCCurveMorph pointingHand openInHand.
NCCurveMorph<Pointing Hand2>
NCCurveMorph pointingHand2 openInHand.
PolygonMorph<Polygon>
SystemWindow<Preferences>
Preferences is implemented in the following classes.
Preferences are listed in DictionaryOfPreferences (a class variable of Preferences), and there is a get/set protocol in Preferences on the class side. For example:
Preferences disable: #eToyFriendly. Preferences enable: #eToyFriendly.
3PButton(#previousOwnerPage <number>)
EToyProjectHistoryMorph<ProjectHistory>
FunctionTile<Random>
FunctionTile randomNumberTile openInHand.
NCMakerButton<Random Connectors>
Random Connectors is implemented as a special case of the NCMakerButton class.
NCAAConnectorMorph newRandomButton openInHand.
Its target (the morph it creates when clicked) is an NCAAConnectorMorph.
NCAAConnectorMorph new startWiringRandomly openInHand.
RectangleMorph<Rectangle>
ScreeningMorph<RoundGlass>
((MagnifierMorph newRound) setNameTo: 'RoundGlass') openInHand.
RectangleMorph<RoundRect>
RectangleMorph roundRectPrototype openInHand.
AlignmentMorph<Row>
AlignmentMorph rowPrototype openInHand.
RulerMorph<Ruler>
NCCurveMorph<Sad face>
((NCCurveMorph sadFace) setNameTo: 'Sad face') openInHand.
Same is implemented in the
in Squeak.
SameGame<Same>
SameGame new newGame openInHand.
NCSchematicConnectorMorph<Schematic Connector>
ScorePlayerMorph<ScorePlayer>
ScorePlayer is implemented in the ScorePlayerMorph class and the ScorePlayer class.
ScratchClientMorph<Scratch Client>
Scratch Client is implemented in this ScratchClientMorph class, and also ScratchPlugin.
PasteUpMorph<Scripting>
StandardScriptingSystem new newScriptingSpace2 openInHand.
ScriptingTileHolder<ScriptingTileHolder>
NCScrolledCompositeStateMorph<Scrolled State>
NCScrolledCompositeStateMorph new openInHand.
ScrollableField<Scrolling Text1>
ScrollableField new initializeToStandAlone openInHand.
TextMorph<SearchPane>
ObjectsTool new newSearchPane openInHand.
SearchingViewer<SearchingViewer>
SectorMorph<Sector>
SystemWindow<a SimpleHierarchicalListMorph
SimpleHierarchicalListMorph submorphsExample.
SketchMorph<Sketch>
Sketches are normally created by painting, as with the Paint tool or this command, both of which open a PaintBox and SketchEditor.
SketchMorph openEditor.
The stock command
SketchMorph new openInHand.
creates a default sketch of a painter's palette.
SketchEditorMorph<SketchEditor>
Creating a standalone SketchEditor without a PaintBox results in a cascade of errors. See Paint/Paintbox.
SimpleSliderMorph<Slider>
NCSmartLabelMorph<Smart Label>
NCSmartLabelMorph newStandAlone openInHand.
SoundLibraryTool<Sound Library>
SoundLibraryTool newInHand.
RecordingControls<SoundRecorder>
RecordingControls new openInHand.
SpectrumAnalyzerMorph<Spectrum Analyzer>
SpeechBubbleMorph<Speech bubble>
SpeechBubbleMorph speechPrototype openInHand.
SpeechBubbleMorph<Speech bubble (graphic)>
Speech Bubble (graphic) is implemented in this SpeechBubbleMorph class.
(SpeechBubbleMorph speechGraphicPrototype setNameTo: 'Speech bubble (graphic)') openInHand.
FlapTab<Squeak>
PasteUpMorph<flap>
Flaps newSqueakFlap openInHand.
StandardViewer<StandardViewer>
AMorph openViewerForArgument.
FlapTab<Stack Tools>
PartsBin<parts bin>
Flaps newStackToolsFlap openInHand.
StarMorph<Star>
NCEllipseMorph<Start State>
NCEllipseMorph newStartState openInHand.
NCUMLDiagramMorph<State>
NCUMLDiagramMorph newStateSymbol openInHand.
TransformationMorph<Status>
DescriptionForPartsBin formalName: 'Status' translatedNoop categoryList: #() documentation: 'Buttons to run, stop, or single-step scripts' translatedNoop globalReceiverSymbol: #ScriptingSystem nativitySelector: #scriptControlButtons.
ScriptingSystem scriptControlButtons openInHand.
NCSTUMLDiagramMorph<STClass>
(NCSTUMLDiagramMorph newUMLClassSymbol setNameTo: 'STClass') openInHand.
This appears in the Object Catalog, but I do not know how to create one in the World. We can make an IconicButton in the World that performs this function, by duplicating the one in the Object Catalog, but I do not have the code to make one from scratch.
Clicking it creates tear offs in a sequence of six colors. One can place these tear offs in the World.
StickyPadMorph<tear off>
Code to create tear offs is
StickyPadMorph newStandAlone openInHand.
StoryboardBookMorph<Storyboard>
StringMorph<String>
This is unusable. Attempting to place it in the World crashes Etoys.
Flaps newSugarNavigatorFlap openInHand.
AlignmentMorph<TabPane>
I have not found working code to create this. It should use the alphabeticTabs method, which recommends
ObjectsTool new tabsForMorphicCategories.
There is no such method as tabsForMorphicCategories. The tabsForCategories method does exist, but results in errors.
Tetris<Tetris>
UserText<Text>
How do we make the text area fit the text? There are autoFit and fit methods, but I see no effect from using them.
(UserText new fontName: 'BitstreamVeraSans' pointSize: 36) openInHand.
UserText<Text (border)>
((UserText new fontName: 'BitstreamVeraSans' pointSize: 24) borderWidth: 1) openInHand.
EToyChatMorph<Text chat>
EToyMultiChatMorph<Text chat+>
NCEllipseMorph<Text Ellipse>
TextPropertiesMorph<TextProperties>
For text objects such as UserText, TextMorph, and so on, this is the way to open a property sheet on such an object.
UserText new openATextPropertySheet openInHand.
NCTextRectangleMorph<Text Rectangle>
SpeechBubbleMorph<Thought bubble>
(SpeechBubbleMorph thoughtPrototype setNameTo: 'Thought bubble') openInHand.
SpeechBubbleMorph<Thought bubble (graphic)>
(SpeechBubbleMorph thoughtGraphicPrototype setNameTo: 'Thought bubble (graphic)') openInHand.
InternalThreadNavigationMorph<ThreadNavigator>
3PButton(#try <number>)
ThreePhaseButtonMorph radioButton openInHand. ThreePhaseButtonMorph blackTriangularOpener openInHand. ThreePhaseButtonMorph checkBox openInHand.
TickIndicatorMorph<TickIndicator>
TileMorph<Tile>(4065) - #objRef op= ''
Tiles are components of StandardViewers and Scripts. There is normally no need to create them in isolation under program control.
TilePadMorph<TilePad>
TilePads are components of StandardViewers and Scripts. There is normally no need to create them in isolation under program control.
NCGrabbableDisplayTextMorph<Title>
NCGrabbableDisplayTextMorph authoringPrototype openInHand.
NCGrabbableDisplayTextMorph<Title>
PartsBin<parts bin>
Flaps newToolsFlap openInHand.
TrashCanMorph
PolygonMorph<Triangle>
TTSampleString(Bitstream Vera Sans)
TTSampleStringMorph new initializeToStandAlone openInHand.
TTSampleFont(Bitstream Vera Sans)
I don't see how to create one of these.
NCCompositeStateMorph<UML Package>
UpdatingStringMorph<UpdatingString>
(UpdatingStringMorph new contents: 'Text') openInHand.
VerticalNumberLineMorph<V number line>
VideoMorph<VideoCamera>
VideoMorph newStandAlone openInHand.
ViewerLine<ViewerLine>
ViewerLines occur as components of StandardViewer, and are not normally created under user program control.
WaveEditor<WaveEditor>
EToyMorphsWelcomeMorph<Welcome>
FlapTab<Widgets>
PartsBin<parts bin>
Flaps newWidgetsFlap openInHand.
SystemWindow<Workspace>
Workspace open.
PasteUpMorph<world>
Any objects in use will appear as submorphs of world.
World is created automatically when a new project is created, and should not normally be created in any other way under user program control.
WsWorldStethoscopeMorph<WorldStethoscope>
PasteUpMorph<x-y plane>
GraphPaperPanel classicCartesianGraph openInHand.
NCCurveMorph<XOR Gate>
NCCurveMorph xorGate openInHand
ArchiveViewer<Zip Tool>
EToyVocabulary setCategoryDocumentationStrings "Initialize the documentation strings associated with the old etoy categories, in English" self setCategoryStrings: #( (basic 'basic' 'a few important things') (#'book navigation' 'book navigation' 'relating to book, stacks, etc') (button 'button' 'for thinking of this object as a push-button control') (collections 'collections' 'for thinking of this object as a collection') (fog 'fog' '3D fog') (geometry 'geometry' 'measurements and coordinates') (#'color & border' 'color & border' 'matters concerning the colors and borders of objects') (graphics 'graphics' 'for thinking of this object as a picture') (variables 'variables' 'variables added by this object') (joystick 'joystick' 'the object as a Joystick') (miscellaneous 'miscellaneous' 'various commands') (motion 'motion' 'matters relating to moving and turning') (paintbox 'paintbox' 'the painting palette') (#'pen trails' 'pen trails' 'relating to trails put down by pens') (#'pen use' 'pen use' 'use of an object''s "pen"') (playfield 'playfield' 'the object as a container for other visible objects') (sampling 'sampling' 'sampling') (scripting 'scripting' 'commands to start and stop scripts') (scripts 'scripts' 'methods added by this object') (slider 'slider' 'functions useful to sliders') (speaker 'speaker' 'the object as an audio Speaker') (#'stack navigation' 'stack navigation' 'navigation within a stck') (storyboard 'storyboard' 'storyboard') (tests 'tests' 'yes/no tests, to use in "Test" panes of scripts') (text 'text' 'The object as text') (vector 'vector' 'The object as a vector') (viewing 'viewing' 'matters relating to viewing') )
EToyVocabulary class masterOrderingOfCategorySymbols "Answer a dictatorially-imposed presentation list of category symbols. This governs the order in which available vocabulary categories are presented in etoy viewers using the etoy vocabulary. The default implementation is that any items that are in this list will occur first, in the order specified here; after that, all other items will come, in alphabetic order by their translated wording." EToyVocabulary class decompile: #masterOrderingOfCategorySymbols. self flag: #( ('scripts' translatedNoop) ('variables' translatedNoop) ('as object' translatedNoop)). ^ { 'basic' translatedNoop. 'color' translatedNoop. 'geometry' translatedNoop. 'more geometry' translatedNoop. 'pen use' translatedNoop. 'tests' translatedNoop. 'motion' translatedNoop. 'fill & border' translatedNoop. 'scripting' translatedNoop. 'sound' translatedNoop. 'observation' translatedNoop. 'button' translatedNoop. 'layout' translatedNoop. 'drag & drop' translatedNoop. 'search' translatedNoop. 'miscellaneous' translatedNoop} collect: [:each | each asSymbol]
additionsToViewerCategorySpeechBubbles ^#( #'speech bubbles' ( (command sayText: 'Show a text in a speech bubble' String) (command thinkText: 'Show a text in a thought bubble' String) (command sayNumber: 'Show a number in a speech bubble' Number) (command thinkNumber: 'Show a number in a thought bubble' Number) (command sayGraphic: 'Show a picture in a speech bubble' Graphic) (command thinkGraphic: 'Show a picture in a thought bubble' Graphic) (command sayObject: 'Show an object in a speech bubble' Player) (command thinkObject: 'Show an object in a thought bubble' Player) (command stopSayingOrThinking 'Erase all speech bubbles attached to this object, if any') (slot bubble 'The bubble currently attached to this object' Player readOnly Player getBubble Player unused) ))
Morph allAdditionsToViewerCategories. an IdentityDictionary(#'as object'->an OrderedCollection( #(#slot #size 'My physical size' #Number #readOnly #Player #getObjectSize #unused #unused) #(#slot #name 'The name by which I am known' #String #readWrite #Player #getName #Player #setName:) #(#slot #hash 'My hash value' #Number #readOnly #Player #getHash #unused #unused) #(#command #explore 'Open up an Explorer on this object') #(#command #halt: 'Put up a pre-debug notifier' #String) #(#slot #printString 'A string rendition of myself' #String #readOnly #Player #getPrintString #unused #unused) #(#command #inform: 'Put up message box for the user' #String) #(#command #printInTranscript 'Prints a description of the object to the Transcript') #(#command #printDirectlyToDisplay 'Prints a description of the object directly to the screen') #(#slot #className 'The name of the class of the object' #String #readOnly #player #getClassName #unused #unused)) #basic->an OrderedCollection(#(#slot #x 'The x coordinate' #Number #readWrite #Player #getX #Player #setX:) #(#slot #y 'The y coordinate' #Number #readWrite #Player #getY #Player #setY:) #(#slot #heading 'Which direction the object is facing. 0 is straight up' #Number #readWrite #Player #getHeading #Player #setHeading:) #(#command #forward: 'Moves the object forward in the direction it is heading' #Number) #(#command #turn: 'Change the heading of the object by the specified amount' #Number) #(#command #beep: 'Make the specified sound' #Sound)) #color->an OrderedCollection(#(#slot #color 'The color of the object' #Color #readWrite #Player #getColor #Player #setColor:) #(#slot #red 'Red value of my color from 0 to 100' #Number #readWrite #Player #getRed #Player #setRed:) #(#slot #green 'Green value of my color from 0 to 100' #Number #readWrite #Player #getGreen #Player #setGreen:) #(#slot #blue 'Blue value of my color from 0 to 100' #Number #readWrite #Player #getBlue #Player #setBlue:) #(#slot #alpha 'Alpha value of my color from 0 to 100' #Number #readWrite #Player #getAlpha #Player #setAlpha:) #(#slot #hue 'Hue value of my color from -180 to 180' #Number #readWrite #Player #getHue #Player #setHue:) #(#slot #saturation 'Saturation value of my color from 0 to 100' #Number #readWrite #Player #getSaturation #Player #setSaturation:) #(#slot #brightness 'Brightness value of my color from 0 to 100' #Number #readWrite #Player #getBrightness #Player #setBrightness:)) #'connections to me'->an OrderedCollection(#(#command #tellAllPredecessors: 'Send a message to all graph predecessors' #ScriptName) #(#command #tellAllSuccessors: 'Send a message to all graph successors' #ScriptName) #(#command #tellAllIncomingConnections: 'Send a message to all the connectors whose destination end is connected to me' #ScriptName) #(#command #tellAllOutgoingConnections: 'Send a message to all the connectors whose source end is connected to me' #ScriptName) #(#slot #incomingConnectionCount 'The number of connectors whose destination end is connected to me' #Number #readOnly #Player #getIncomingConnectionCount #unused #unused) #(#slot #outgoingConnectionCount 'The number of connectors whose source end is connected to me' #Number #readOnly #Player #getOutgoingConnectionCount #unused #unused)) #'drag & drop'->an OrderedCollection(#(#slot 'drop enabled' 'Whether drop is enabled' #Boolean #readWrite #Player #getDropEnabled #Player #setDropEnabled:) #(#slot 'resist being picked up' 'Whether a simple mouse-drag on this object should allow it to be picked up' #Boolean #readWrite #Player #getSticky #Player #setSticky:) #(#slot 'resist deletion' 'Whether this is resistant to easy removal via the pink X halo handle.' #Boolean #readWrite #Player #getResistsRemoval #Player #setResistsRemoval:) #(#slot 'be locked' 'Whether this object should be blind to all input' #Boolean #readWrite #Player #getIsLocked #Player #setIsLocked:)) #embeddings->an OrderedCollection(#(#slot #containingObject 'Me or my outermost container' #Player #readOnly #Player #getRootOwner #unused #unused) #(#slot #pinCount 'A count of my embedded objects that want to act as pins for connections' #Number #readOnly #Player #getPinCount #unused #unused) #(#slot #wantsConnectionWhenEmbedded 'Whether I should be act as a pin for connections when embedded in another object' #Boolean #readWrite #Player #getWantsConnectionWhenEmbedded #Player #setWantsConnectionWhenEmbedded:) #(#slot #allowsConnectionToEmbeddedPins 'Whether objects embedded in me may be used as connection pins' #Boolean #readWrite #Player #getAllowsConnectionToEmbeddedPins #Player #setAllowsConnectionToEmbeddedPins:) #(#command #tellAllPins: 'Send a message to all of my embedded objects that want to act as pins for connections' #ScriptName) #(#command #tellAllEmbeddedObjects: 'Send a message to all of my embedded objects' #ScriptName)) #'fill & border'->an OrderedCollection(#(#slot #color 'The color of the object' #Color #readWrite #Player #getColor #Player #setColor:) #(#slot #borderStyle 'The style of the object''s border' #BorderStyle #readWrite #Player #getBorderStyle #player #setBorderStyle:) #(#slot #borderColor 'The color of the object''s border' #Color #readWrite #Player #getBorderColor #Player #setBorderColor:) #(#slot #borderWidth 'The width of the object''s border' #Number #readWrite #Player #getBorderWidth #Player #setBorderWidth:) #(#slot #roundedCorners 'Whether corners should be rounded' #Boolean #readWrite #Player #getRoundedCorners #Player #setRoundedCorners:) #(#slot #gradientFill 'Whether a gradient fill should be used' #Boolean #readWrite #Player #getUseGradientFill #Player #setUseGradientFill:) #(#slot #secondColor 'The second color used when gradientFill is in effect' #Color #readWrite #Player #getSecondColor #Player #setSecondColor:) #(#slot #radialFill 'Whether the gradient fill, if used, should be radial' #Boolean #readWrite #Player #getRadialGradientFill #Player #setRadialGradientFill:) #(#slot #dropShadow 'Whether a drop shadow is shown' #Boolean #readWrite #Player #getDropShadow #Player #setDropShadow:) #(#slot #shadowColor 'The color of the drop shadow' #Color #readWrite #Player #getShadowColor #Player #setShadowColor:)) #geometry->an OrderedCollection(#(#slot #x 'The x coordinate' #Number #readWrite #Player #getX #Player #setX:) #(#slot #y 'The y coordinate' #Number #readWrite #Player #getY #Player #setY:) #(#slot #heading 'Which direction the object is facing. 0 is straight up' #Number #readWrite #Player #getHeading #Player #setHeading:) #(#slot #scaleFactor 'The factor by which the object is magnified' #Number #readWrite #Player #getScaleFactor #Player #setScaleFactor:) #(#slot #left 'The left edge' #Number #readWrite #Player #getLeft #Player #setLeft:) #(#slot #right 'The right edge' #Number #readWrite #Player #getRight #Player #setRight:) #(#slot #top 'The top edge' #Number #readWrite #Player #getTop #Player #setTop:) #(#slot #bottom 'The bottom edge' #Number #readWrite #Player #getBottom #Player #setBottom:) #(#slot #forwardDirection 'The angle of my forward direction without rotating myself' #Number #readWrite #Player #getForwardDirection #Player #setForwardDirection:)) #graphing->an OrderedCollection(#(#slot #xOnGraph 'If there is a horizontal axis present, gives the horizontal coordinate of the center of this object with respect to that axis ' #Number #readWrite #Player #getXOnGraph #Player #setXOnGraph:) #(#slot #yOnGraph 'If there is a vertical axis present, gives the vertical coordinate of the center of this object with respect to that axis ' #Number #readWrite #Player #getYOnGraph #Player #setYOnGraph:) #(#slot #locationOnGraph 'If there is are axes present, gives the coordinate of the center of this object with respect to those axes ' #Point #readWrite #Player #getLocationOnGraph #Player #setLocationOnGraph:)) #input->an OrderedCollection(#(#slot #lastKeystroke 'The last unhandled keystroke' #String #readWrite #Player #getLastKeystroke #Player #setLastKeystroke:)) #layout->an OrderedCollection(#(#slot #clipSubmorphs 'Whether or not to clip my submorphs' #Boolean #readWrite #Player #getClipSubmorphs #Player #setClipSubmorphs:)) #miscellaneous->an OrderedCollection(#(#command #doMenuItem: 'do the menu item' #Menu) #(#command #show 'make the object visible') #(#command #hide 'make the object invisible') #(#command #fire 'trigger any and all of this object''s button actions') #(#slot #copy 'returns a copy of this object' #Player #readOnly #Player #getNewClone #unused #unused) #(#slot #elementNumber 'my index in my container' #Number #readWrite #Player #getIndexInOwner #Player #setIndexInOwner:) #(#slot #holder 'the object''s container' #Player #readOnly #Player #getHolder #Player #setHolder:) #(#command #stamp 'add my image to the pen trails') #(#command #erase 'remove this object from the screen') #(#command #stampAndErase 'add my image to the pen trails and go away')) #'more geometry'->an OrderedCollection(#(#slot #location 'The position of the object, expressed as a point' #Point #readWrite #Player #getLocationRounded #Player #setLocation:) #(#slot #length 'The length' #Number #readWrite #Player #getLength #Player #setLength:) #(#slot #width 'The width' #Number #readWrite #Player #getWidth #Player #setWidth:) #(#slot #headingTheta 'The angle, in degrees, that my heading vector makes with the positive x-axis' #Number #readWrite #Player #getHeadingTheta #Player #setHeadingTheta:) #(#slot #distance 'The length of the vector connecting the origin to the object''s position' #Number #readWrite #Player #getDistance #Player #setDistance:) #(#slot #theta 'The angle between the positive x-axis and the vector connecting the origin to the object''s position' #Number #readWrite #Player #getTheta #Player #setTheta:) #(#slot #rotationCenterX 'The x coordinate of rotation center in parent''s coordinate system.' #Number #readWrite #Player #getRotationCenterX #Player #setRotationCenterX:) #(#slot #rotationCenterY 'The y coordinate of rotation center in parent''s coordinate system.' #Number #readWrite #Player #getRotationCenterY #Player #setRotationCenterY:)) #motion->an OrderedCollection(#(#slot #x 'The x coordinate' #Number #readWrite #Player #getX #Player #setX:) #(#slot #y 'The y coordinate' #Number #readWrite #Player #getY #Player #setY:) #(#slot #heading 'Which direction the object is facing. 0 is straight up' #Number #readWrite #Player #getHeading #Player #setHeading:) #(#command #forward: 'Moves the object forward in the direction it is heading' #Number) #(#slot #obtrudes 'whether the object sticks out over its container''s edge' #Boolean #readOnly #Player #getObtrudes #unused #unused) #(#command #turnToward: 'turn toward the given object' #Player) #(#command #moveToward: 'Move toward the given object. If the object has an instance variable named speed, the speed of the motion will be governed by that value' #Player) #(#command #turn: 'Change the heading of the object by the specified amount' #Number) #(#command #bounce: 'bounce off the edge if hit' #Sound) #(#command #wrap 'wrap off the edge if appropriate') #(#command #followPath 'follow the yellow brick road') #(#command #goToRightOf: 'place this object to the right of another' #Player)) #observation->an OrderedCollection(#(#slot #colorUnder 'The color under the center of the object' #Color #readOnly #Player #getColorUnder #unused #unused) #(#slot #brightnessUnder 'The brightness under the center of the object' #Number #readOnly #Player #getBrightnessUnder #unused #unused) #(#slot #luminanceUnder 'The luminance under the center of the object' #Number #readOnly #Player #getLuminanceUnder #unused #unused) #(#slot #saturationUnder 'The saturation under the center of the object' #Number #readOnly #Player #getSaturationUnder #unused #unused) #(#slot #distanceToPlayer 'The distance to another object' #Number #readOnly #Player #distanceToPlayer: #unused #unused) #(#slot #bearingTo 'The heading I would need to have to face directly toward another object' #Number #readOnly #Player #bearingTo: #unused #unused)) #'pen use'->an OrderedCollection(#(#slot #penColor 'the color of ink used by the pen' #Color #readWrite #Player #getPenColor #Player #setPenColor:) #(#slot #penSize 'the width of the pen' #Number #readWrite #Player #getPenSize #Player #setPenSize:) #(#slot #penDown 'whether the pen is currently down' #Boolean #readWrite #Player #getPenDown #Player #setPenDown:) #(#slot #trailStyle 'determines whether lines, arrows, arrowheads, or dots are used when I put down a pen trail' #TrailStyle #readWrite #Player #getTrailStyle #Player #setTrailStyle:) #(#slot #dotSize 'diameter of dot to use when trailStyle is dots' #Number #readWrite #Player #getDotSize #Player #setDotSize:) #(#command #clearOwnersPenTrails 'clear all pen trails in my containing playfield')) #scripting->an OrderedCollection(#(#command #triggerCustomEvent: 'trigger a user-defined (global) event' #CustomEvents) #(#slot #triggeringObject 'the object that is triggering an event, either user-defined or pre-defined' #Player #readOnly #Player #getTriggeringObject #unused #unused) #(#command #startScript: 'start the given script ticking' #ScriptName) #(#command #pauseScript: 'make the given script be "paused"' #ScriptName) #(#command #stopScript: 'make the given script be "normal"' #ScriptName) #(#command #startAll: 'start the given script ticking in the object and all of its siblings.' #ScriptName) #(#command #pauseAll: 'make the given script be "paused" in the object and all of its siblings' #ScriptName) #(#command #stopAll: 'make the given script be "normal" in the object and all of its siblings' #ScriptName) #(#command #doScript: 'run the given script once, on the next tick' #ScriptName) #(#command #tellSelfAndAllSiblings: 'run the given script in the object and in all of its siblings' #ScriptName) #(#command #tellAllSiblings: 'send a message to all siblings' #ScriptName)) #scripts->an OrderedCollection(#(#command #emptyScript 'an empty script')) #sound->an OrderedCollection(#(#command #playSound: 'play sound' #Number) #(#command #setSound: 'select a sound' #Sound) #(#command #stopSound 'stop sound') #(#command #beep: 'Make the specified sound' #Sound)) #'speech bubbles'->an OrderedCollection(#(#command #sayText: 'Show a text in a speech bubble' #String) #(#command #thinkText: 'Show a text in a thought bubble' #String) #(#command #sayNumber: 'Show a number in a speech bubble' #Number) #(#command #thinkNumber: 'Show a number in a thought bubble' #Number) #(#command #sayGraphic: 'Show a picture in a speech bubble' #Graphic) #(#command #thinkGraphic: 'Show a picture in a thought bubble' #Graphic) #(#command #sayObject: 'Show an object in a speech bubble' #Player) #(#command #thinkObject: 'Show an object in a thought bubble' #Player) #(#command #stopSayingOrThinking 'Erase all speech bubbles attached to this object, if any') #(#slot #bubble 'The bubble currently attached to this object' #Player #readOnly #Player #getBubble #Player #unused)) #tests->an OrderedCollection(#(#slot #isOverColor 'whether any part of the object is over the given color' #Boolean #readOnly #Player #seesColor: #unused #unused) #(#slot #isUnderMouse 'whether the object is under the current mouse position' #Boolean #readOnly #Player #getIsUnderMouse #unused #unused) #(#slot #colorSees 'whether the given color sees the given color' #Boolean #readOnly #Player #color:sees: #unused #unused) #(#slot #overlaps 'whether I overlap a given object' #Boolean #readOnly #Player #overlaps: #unused #unused) #(#slot #overlapsAny 'whether I overlap a given object or one of its siblings or similar objects' #Boolean #readOnly #Player #overlapsAny: #unused #unused) #(#slot #touchesA 'whether I overlap any Sketch that is showing the same picture as a particular prototype.' #Boolean #readOnly #Player #touchesA: #unused #unused) #(#slot #obtrudes 'whether the object sticks out over its container''s edge' #Boolean #readOnly #Player #getObtrudes #unused #unused)) #'world geometry'->an OrderedCollection(#(#slot #length 'The length' #Number #readWrite #Player #getLength #Player #setLength:) #(#slot #width 'The width' #Number #readWrite #Player #getWidth #Player #setWidth:) #(#slot #left 'The left edge' #Number #readWrite #Player #getLeft #Player #setLeft:) #(#slot #right 'The right edge' #Number #readWrite #Player #getRight #Player #setRight:) #(#slot #top 'The top edge' #Number #readWrite #Player #getTop #Player #setTop:) #(#slot #bottom 'The bottom edge' #Number #readWrite #Player #getBottom #Player #setBottom:)) )
Morph class additionsToViewerCategoryAsObject
additionsToViewerCategoryAsObject
"Answer viewer additions for the 'as object' category. Just priming the pump at this point."
^#(
#'as object'
(
(slot size 'My physical size' Number readOnly Player getObjectSize unused unused)
(slot name 'The name by which I am known' String readWrite Player getName Player setName:)
(slot hash 'My hash value' Number readOnly Player getHash unused unused)
(command explore 'Open up an Explorer on this object')
(command halt: 'Put up a pre-debug notifier' String)
(slot printString 'A string rendition of myself' String readOnly Player getPrintString unused unused)
(command inform: 'Put up message box for the user' String)
(command printInTranscript 'Prints a description of the object to the Transcript')
(command printDirectlyToDisplay 'Prints a description of the object directly to the screen')
(slot className 'The name of the class of the object' String readOnly player getClassName unused unused)
))
PasteUpMorph class additionsToViewerCategoryAsObject
additionsToViewerCategoryAsObject
"Answer viewer additions for the 'as object' category. Just priming the pump at this point."
^#(
#'as object'
(
(command useBlueprintCanvas 'Display the world as a blueprint' )
(command useNormalCanvas 'Display the world normally')))
Morph class additionsToViewerCategoryBasic
additionsToViewerCategoryBasic
"Answer viewer additions for the 'basic' category"
^#(
basic
(
(slot x 'The x coordinate' Number readWrite Player getX Player setX:)
(slot y 'The y coordinate' Number readWrite Player getY Player setY:)
(slot heading 'Which direction the object is facing. 0 is straight up' Number readWrite Player getHeading Player setHeading:)
(command forward: 'Moves the object forward in the direction it is heading' Number)
(command turn: 'Change the heading of the object by the specified amount' Number)
(command beep: 'Make the specified sound' Sound)
)
)
SpeechBubbleMorph class additionsToViewerCategoryBubble
additionsToViewerCategoryBubble
"Answer viewer additions for the 'bubble' category"
^#(
bubble
(
(command attachTo: 'Make the bubble follow an object' Player)
(command stopAttaching 'Free the bubble from following an object')
(slot attachment 'The object this bubble is currently following' Player readOnly Player getAttachment Player unused)
)
)
Morph class additionsToViewerCategoryColor
additionsToViewerCategoryColor
"Answer viewer additions for the 'color' category"
^#(
color
(
(slot color 'The color of the object' Color readWrite Player getColor Player setColor:)
(slot red 'Red value of my color from 0 to 100' Number readWrite Player getRed Player setRed:)
(slot green 'Green value of my color from 0 to 100' Number readWrite Player getGreen Player setGreen:)
(slot blue 'Blue value of my color from 0 to 100' Number readWrite Player getBlue Player setBlue:)
(slot alpha 'Alpha value of my color from 0 to 100' Number readWrite Player getAlpha Player setAlpha:)
(slot hue 'Hue value of my color from -180 to 180' Number readWrite Player getHue Player setHue:)
(slot saturation 'Saturation value of my color from 0 to 100' Number readWrite Player getSaturation Player setSaturation:)
(slot brightness 'Brightness value of my color from 0 to 100' Number readWrite Player getBrightness Player setBrightness:)
)
)
NCAAConnectorMorph class additionsToViewerCategoryColorAndBorder
additionsToViewerCategoryColorAndBorder
"Answer viewer additions for the 'color & border' category"
^#(
#'color & border'
(
(slot lineWidth 'The width of the main part of the Connector' Number readWrite Player getLineWidth Player setLineWidth:)
)
)
Morph class additionsToViewerCategoryConnection
additionsToViewerCategoryConnection
"Answer viewer additions for the 'connection' category"
"Vocabulary initialize"
^{
#'connections to me'.
#(
(command tellAllPredecessors: 'Send a message to all graph predecessors' ScriptName)
(command tellAllSuccessors: 'Send a message to all graph successors' ScriptName)
(command tellAllIncomingConnections: 'Send a message to all the connectors whose destination end is connected to me' ScriptName)
(command tellAllOutgoingConnections: 'Send a message to all the connectors whose source end is connected to me' ScriptName)
(slot incomingConnectionCount 'The number of connectors whose destination end is connected to me' Number readOnly Player getIncomingConnectionCount unused unused)
(slot outgoingConnectionCount 'The number of connectors whose source end is connected to me' Number readOnly Player getOutgoingConnectionCount unused unused)
)
}
NCAAConnectorMorph class
additionsToViewerCategoryConnection
"Answer viewer additions for the 'connection' category"
"Vocabulary initialize"
^#(
connector
(
(slot source 'The Player at my first end' Player readWrite Player getSourcePlayer Player setSourcePlayer:)
(slot destination 'The Player at my second end' Player readWrite Player getDestinationPlayer Player setDestinationPlayer:)
(slot orthogonal 'Whether I am limited to horizontal and vertical segments' Boolean readWrite Player getOrthogonal Player setOrthogonal:)
(slot smoothCurve 'Whether I am drawn as a smooth curve' Boolean readWrite Player getSmoothCurve Player setSmoothCurve:)
(slot sourceArrowName 'The name of the arrow at my first end' ArrowNames readWrite Player getSourceArrowName Player setSourceArrowName:)
(slot destinationArrowName 'The name of the arrow at my second end' ArrowNames readWrite Player getDestinationArrowName Player setDestinationArrowName:)
(command straighten 'remove all my bends' unused)
(command addLabel: 'add a label at my middle' String)
(command removeLabels 'remove all my labels' unused)
)
)
PasteUpMorph class additionsToViewerCategoryDisplay
additionsToViewerCategoryDisplay
"Answer display additions"
^ #(display(
(command showNavigationBar 'Show the navigation bar at the top of the screen')
(command hideNavigationBar 'Hide the navigation bar at the top of the screen')
(command useBlueprintCanvas 'Display the world as a blueprint' )
(command useNormalCanvas 'Display the world normally' Boolean)))
Morph class additionsToViewerCategoryDragAndDrop
additionsToViewerCategoryDragAndDrop
"Answer viewer additions for the 'drag & drop' category"
^#(
#'drag & drop'
(
(slot 'drop enabled' 'Whether drop is enabled' Boolean readWrite Player getDropEnabled Player setDropEnabled:)
(slot 'resist being picked up' 'Whether a simple mouse-drag on this object should allow it to be picked up' Boolean readWrite Player getSticky Player setSticky:)
(slot 'resist deletion' 'Whether this is resistant to easy removal via the pink X halo handle.' Boolean readWrite Player getResistsRemoval Player setResistsRemoval:)
(slot 'be locked' 'Whether this object should be blind to all input' Boolean readWrite Player getIsLocked Player setIsLocked:)
))
DrGPointMorph class additionsToViewerCategoryDrGeo
additionsToViewerCategoryDrGeo
^ # (drgeo (
(slot curveAbscissa 'The abscissa of this point on the curve' Number readWrite Player getCurveAbscissa Player setCurveAbscissa:)
(slot Xw 'The x coordinate in the DrGeoII world coordinate system' Number readWrite Player getWorldX Player setWorldX:)
(slot Yw 'The y coordinate in the DrGeoII world coordinate system' Number readWrite Player getWorldY Player setWorldY:)
))
DrGValueMorph class additionsToViewerCategoryDrGeo
additionsToViewerCategoryDrGeo
^ #(drgeo (
(slot value 'The math item value' Number readWrite Player getMathItemValue Player setMathItemValue:)
))
Morph class additionsToViewerCategoryEmbeddings
additionsToViewerCategoryEmbeddings
"Answer viewer additions for the 'embeddings' category"
"Vocabulary initialize"
^#(
embeddings
(
(slot containingObject 'Me or my outermost container' Player readOnly Player getRootOwner unused unused)
(slot pinCount 'A count of my embedded objects that want to act as pins for connections' Number readOnly Player getPinCount unused unused)
(slot wantsConnectionWhenEmbedded 'Whether I should be act as a pin for connections when embedded in another object' Boolean readWrite Player getWantsConnectionWhenEmbedded Player setWantsConnectionWhenEmbedded:)
(slot allowsConnectionToEmbeddedPins 'Whether objects embedded in me may be used as connection pins' Boolean readWrite Player getAllowsConnectionToEmbeddedPins Player setAllowsConnectionToEmbeddedPins:)
(command tellAllPins: 'Send a message to all of my embedded objects that want to act as pins for connections' ScriptName)
(command tellAllEmbeddedObjects: 'Send a message to all of my embedded objects' ScriptName)
)
)
Morph class additionsToViewerCategoryFillAndBorder
additionsToViewerCategoryFillAndBorder
"Answer viewer additions for the 'color & border' category"
^#(
#'fill & border'
(
(slot color 'The color of the object' Color readWrite Player getColor Player setColor:)
(slot borderStyle 'The style of the object''s border' BorderStyle readWrite Player getBorderStyle player setBorderStyle:)
(slot borderColor 'The color of the object''s border' Color readWrite Player getBorderColor Player setBorderColor:)
(slot borderWidth 'The width of the object''s border' Number readWrite Player getBorderWidth Player setBorderWidth:)
(slot roundedCorners 'Whether corners should be rounded' Boolean readWrite Player getRoundedCorners Player setRoundedCorners:)
(slot gradientFill 'Whether a gradient fill should be used' Boolean readWrite Player getUseGradientFill Player setUseGradientFill:)
(slot secondColor 'The second color used when gradientFill is in effect' Color readWrite Player getSecondColor Player setSecondColor:)
(slot radialFill 'Whether the gradient fill, if used, should be radial' Boolean readWrite Player getRadialGradientFill Player setRadialGradientFill:)
(slot dropShadow 'Whether a drop shadow is shown' Boolean readWrite Player getDropShadow Player setDropShadow:)
(slot shadowColor 'The color of the drop shadow' Color readWrite Player getShadowColor Player setShadowColor:)
)
)
Morph class
additionsToViewerCategoryGeometry
"answer additions to the geometry viewer category"
^ #(geometry
(
(slot x 'The x coordinate' Number readWrite Player getX Player setX:)
(slot y 'The y coordinate' Number readWrite Player getY Player setY:)
(slot heading 'Which direction the object is facing. 0 is straight up' Number readWrite Player getHeading Player setHeading:)
(slot scaleFactor 'The factor by which the object is magnified' Number readWrite Player getScaleFactor Player setScaleFactor:)
(slot left 'The left edge' Number readWrite Player getLeft Player setLeft:)
(slot right 'The right edge' Number readWrite Player getRight Player setRight:)
(slot top 'The top edge' Number readWrite Player getTop Player setTop:)
(slot bottom 'The bottom edge' Number readWrite Player getBottom Player setBottom:)
(slot forwardDirection 'The angle of my forward direction without rotating myself' Number readWrite Player getForwardDirection Player setForwardDirection: )
)
)
Morph class additionsToViewerCategoryGraphing
additionsToViewerCategoryGraphing
"answer additions to the graphing viewer category"
^ #(graphing
(
(slot xOnGraph 'If there is a horizontal axis present, gives the horizontal coordinate of the center of this object with respect to that axis ' Number readWrite Player getXOnGraph Player setXOnGraph:)
(slot yOnGraph 'If there is a vertical axis present, gives the vertical coordinate of the center of this object with respect to that axis ' Number readWrite Player getYOnGraph Player setYOnGraph:)
(slot locationOnGraph 'If there is are axes present, gives the coordinate of the center of this object with respect to those axes ' Point readWrite Player getLocationOnGraph Player setLocationOnGraph:)))
Morph class additionsToViewerCategoryInput
additionsToViewerCategoryInput
"Answer a list of (<categoryName> <list of category specs>) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories."
^ #(input (
(slot lastKeystroke 'The last unhandled keystroke' String readWrite Player getLastKeystroke Player setLastKeystroke:)
))
PasteUpMorph class additionsToViewerCategoryInput
additionsToViewerCategoryInput
"Answer a list of (<categoryName> <list of category specs>) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories."
^ #(input (
(slot lastKeystroke 'The last unhandled keystroke' String readWrite Player getLastKeystroke Player setLastKeystroke:)
))
Morph class additionsToViewerCategoryLayout
additionsToViewerCategoryLayout
"Answer viewer additions for the 'layout' category"
^#(
layout
(
(slot clipSubmorphs 'Whether or not to clip my submorphs' Boolean readWrite Player getClipSubmorphs Player setClipSubmorphs:)
))
Morph class additionsToViewerCategoryMiscellaneous
additionsToViewerCategoryMiscellaneous
"Answer viewer additions for the 'miscellaneous' category"
^#(
miscellaneous
(
(command doMenuItem: 'do the menu item' Menu)
(command show 'make the object visible')
(command hide 'make the object invisible')
" (command wearCostumeOf: 'wear the costume of...' Player)"
(command fire 'trigger any and all of this object''s button actions')
(slot copy 'returns a copy of this object' Player readOnly Player getNewClone unused unused)
(slot elementNumber 'my index in my container' Number readWrite Player getIndexInOwner Player setIndexInOwner:)
(slot holder 'the object''s container' Player readOnly Player getHolder Player setHolder:)
(command stamp 'add my image to the pen trails')
(command erase 'remove this object from the screen')
(command stampAndErase 'add my image to the pen trails and go away')
)
)
Morph class additionsToViewerCategoryMoreGeometry
additionsToViewerCategoryMoreGeometry
"answer additions to the more geometry viewer category"
^ #(#'more geometry'
(
(slot location 'The position of the object, expressed as a point' Point readWrite Player getLocationRounded Player setLocation:)
(slot length 'The length' Number readWrite Player getLength Player setLength:)
(slot width 'The width' Number readWrite Player getWidth Player setWidth:)
(slot headingTheta 'The angle, in degrees, that my heading vector makes with the positive x-axis' Number readWrite Player getHeadingTheta Player setHeadingTheta:)
(slot distance 'The length of the vector connecting the origin to the object''s position' Number readWrite Player getDistance Player setDistance:)
(slot theta 'The angle between the positive x-axis and the vector connecting the origin to the object''s position' Number readWrite Player getTheta Player setTheta: )
(slot rotationCenterX 'The x coordinate of rotation center in parent''s coordinate system.' Number readWrite Player getRotationCenterX Player setRotationCenterX: )
(slot rotationCenterY 'The y coordinate of rotation center in parent''s coordinate system.' Number readWrite Player getRotationCenterY Player setRotationCenterY: )
"(command forceAxisToX: 'Force change x of axis for rotation' Number )
(command forceAxisToY: 'Force change y of axis for rotation' Number )"
)
)
Morph class
numberLineMorph
additionsToViewerCategoryNumberLine
^ #('number line' (
" (command fitPlayfield 'extend or contract such that the line fits within the containing playfield.')"
(slot minVal 'smallest value shown on the axis' Number readWrite Player getMinVal Player setMinVal:)
(slot maxVal 'largest value shown on the axis' Number readWrite Player getMaxVal Player setMaxVal:)
(slot pixelsPerUnit 'number of screen pixels per unit on the number line' Number readWrite Player getPixelsPerUnit Player setPixelsPerUnit:)
(slot unitsPerMark 'number of units between tick marks on the number line' Number readWrite Player getUnitsPerMark Player setUnitsPerMark:)
(slot marksPerLegend 'number of ticks between successive legends' Number readWrite Player getMarksPerLegend Player setMarksPerLegend:)
(slot showZero 'whether to show the numeral 0 at the zero point on this axis' Boolean readWrite Player getShowZero Player setShowZero:)
(slot showNegativeArrowHead 'whether to show an arrow-head at the extreme lower end of the axis' Boolean readWrite Player getShowNegativeArrowHead Player setShowNegativeArrowHead:)) )
Morph class
Morph class
Morph class
Morph class
Morph class
Morph class
Morph class
Morph class
Morph class
EToyVocabulary initialize
"Initialize the receiver (automatically called when instances are created via 'new')"
| classes aMethodCategory selector selectors categorySymbols aMethodInterface |
super initialize.
self vocabularyName: #eToy.
self documentation: '"EToy" is a vocabulary that provides the equivalent of the 1997-2000 etoy prototype'.
categorySymbols _ Set new.
classes _ self class morphClassesDeclaringViewerAdditions.
classes do:
[:aMorphClass | categorySymbols addAll: aMorphClass unfilteredCategoriesForViewer].
self addCustomCategoriesTo: categorySymbols. "For benefit, e.g., of EToyVectorVocabulary"
categorySymbols asOrderedCollection do:
[:aCategorySymbol |
aMethodCategory _ ElementCategory new categoryName: aCategorySymbol.
selectors _ Set new.
classes do:
[:aMorphClass |
(aMorphClass additionsToViewerCategory: aCategorySymbol) do:
[:anElement |
aMethodInterface _ self methodInterfaceFrom: anElement.
selectors add: (selector _ aMethodInterface selector).
(methodInterfaces includesKey: selector) ifFalse:
[methodInterfaces at: selector put: aMethodInterface].
self flag: #deferred.
"NB at present, the *setter* does not get its own method interface. Need to revisit"].
(selectors copyWithout: #unused) asSortedArray do:
[:aSelector |
aMethodCategory elementAt: aSelector put: (methodInterfaces at: aSelector)]].
self addCategory: aMethodCategory].
self addCategoryNamed: ScriptingSystem nameForInstanceVariablesCategory.
self addCategoryNamed: ScriptingSystem nameForScriptsCategory.
self setCategoryDocumentationStrings.
(self respondsTo: #applyMasterOrdering)
ifTrue: [ self applyMasterOrdering ].
There are six kinds of Etoys scripting tile: commands, variables, watchers, tests, control structures, and expressions.
A command describes an action that can be carried out by clicking on the ! icon at the left, possibly with a constant, variable, or expression parameter. For any object type there is a predefined set of commands, visible in the object's viewer, and users can add more commands as scripts.
Command tiles are implemented in the CommandTilesMorph class in Squeak.
A variable holds a value, which can be of several object types.
Within variable tiles and actions used in scripts, wherever a number appears, the number can be modified or edited into an expression.
Some variables are predefined as part of an object. Users can define their own variables for use in their scripts, using an icon on the viewer toolbar. The first step is to enter a variable name, and then to choose a variable type from a menu. This is the menu in Etoys v. 4.0.
And this is the version in v. 5.0.
These data types have different sets of values, and are managed and used in different ways. In general, a variable of a particular type can be dropped into a slot in a scripting tile that has a value of that type.
Boolean
Possible values are true (default) and false. Toggle between them by clicking the up or down triangle next to the current value.
Only the down arrow is active in v. 5.0.
BorderStyle
Default value: simple. Click to get a menu with nine options.
ButtonPhase
Default value: button down. Click to get a menu of three values, button down, button up, and while pressed.
Color
A 32-bit RGB-Alpha (Red Green Blue Transparency) color value. Click the color patch that shows the current color to get a color picker. Setting a color variable to display as text permits the color value to be set numerically, with 0-255 being mapped to the range 0.0-1.0.
CustomEvents
Defaults to no event. Clicking it brings up a menu of user-defined events.
To define an event, open a script editor and click on the clock icon to bring up the menu of options for when to run the script. On the submenu for more… is the choice define a new custom event. Clicking it asks for an event name and a description. The new event then appears on that submenu and on the menu for the scripting tile Object's trigger custom event EventName in the scripting category. Selecting a custom event in a script menu and running the trigger custom event tile runs the script.
But what can one do with an event-valued variable? Where can it be used?
Graphic
An image, defaulting to the Paintbox palette graphic. To change the image value, drag the variable out of the viewer to create a script, and drop a tile representing a different image into the variable tile over the current image. Running this script then changes the value.
ImageResolution
This type is misnamed. Resolution is the number of dots per linear unit. This is actually the image's color palette, which can be expressed in terms of the number of colors available, whether they are monochrome or color, and how m
any bits are used to represent them.
Default value: Original, that is, whatever an image is represented in. Click to get a menu with the options original, 256 colors (that would be 8 bits per pixel, but it seems to be 32 bits, with 8 bits each for the three RGB components, plus transparency), 256 grays (8 bits), 4 grays (2 bits), black and white (1 bit).
How can this be used? What tiles have this value type, so that they can accept a variable of this type?
Number
The initial value is a positive integer chosen at random in the range 1-6. By default, 0 decimal places are shown. Click the up or down arrow to increment or decrement the numeric value, or click it to edit it as text. Use the modify function or the decimal places function on the tile menu to set the number of decimal places.
Patch
Creating a patch-valued variable results in a MessageNotification: "An error has occurred; you should probably just hit 'abandon'. Sorry!"
When dragging Particles from the Object Catalog, one gets a KedamaWorld, a patch, and a turtle. The KedamaWorld has a predefined variable that points to the corresponding patch.
Where can this be used?
Player
An object currently active. Default value: dot. To change the value of this variable, put it in a script, drag a tile for another player over the dot, and run the script.
Clicking on a player in a variable tile turns the cursor to a crosshair. What is its purpose and what does it do?
Point
Default value: 0@0. Click to edit.
ScriptName
Default value: empty script. Click to get a menu of the scripts defined for all active objects. Scripting commands accept dropped tiles for ScriptName variables.
Sound
Default value: croak. Click the current sound to get a menu of available sounds.
String
Default value: 'abc'. Click to edit.
TrailStyle
Default value: lines. Clicking brings up a menu with the options lines, arrows, arrowheads, dots. These affect the appearance of the object's pen trails.
To place a variable in a script, it is necessary to click its leftward-pointing arrow and then drag it. Clicking elsewhere and dragging creates a watcher instead, an object that displays the changing values of the variable, and allows the user to edit the value.
Variables are implemented using the AssignmentTileMorph class in Squeak, together with the tiles for the expressions to generate the values to be assigned.
Some tiles are very similar to variable watchers, but do not allow assignments of new values. They can be recognized by the lack of the left-pointing assignment arrow and the up and down pointing triangles for selecting or modifying values. Instead they only display values obtained elsewhere. In the viewer, they have a menu at the left for getting simple or detailed watchers.
There are also tiles that represent values, for use in expressions, but do not display them. The menu at the left contains only an option for setting the number of decimal places to use.
Tests are provided with objects, and shown in the Test category of their viewers. Users can click on parameters, such as the blue color at the right of the block above, to modify them or get a menu of options to choose from.
Control tiles accept other tiles and determine when to run them. The test yes no tile and the repeat tile are available in the Gold Box menu on the toolbar of any Script, as shown below.
The Test Yes No tile accepts a test and two lists of actions. Choosing one of the action lists to perform depending whether the test evaluates to True or False. This is also known as a program branch.
The Repeat tile carries out the list of actions given it the number of times specified. That number can be a constant or the result of an expression. This is also known as a program loop
Etoys does not provide a scripting tile for the more general While loop, which repeats a list of actions until a test evaluates to False/No.
It is a fundamental theorem of Computer Science that any possible sequential program logic can be expressed using only branches and loops, although it is much preferable to include function calls (as with scripts calling other scripts) or, as in Object-Oriented Programming in Smalltalk, method calls, and to split programs into separate modules. Etoys also supports running tiles in endless loops (ticking), and provides parallel programming, running multiple scripts simultaneously, and allowing scripts to turn other scripts on and off using commands in the Scripting category in object viewers. These are extremely powerful tools, more than powerful enough to allow the user to get into a lot of trouble if used carelessly.
The test yes no tile is defined in the CompoundTileMorph class in Squeak. The repeat tile is defined in the TimesRepeatTile class in Squeak.
The Gold Box menu on the toolbar of any Script, shown above, provides several tiles that are meant to be used as components in other tiles, or to accept other tiles as components. These include the math function tiles in the Gold Box menu (above) that default to random, abs (absolute value), and 5; the tests button up? and button down?; and a tile for the current object. Each can be dropped into the appropriate location within a tile containing an appropriate expression. Such component tiles are also available in other locations. Random is available in the Object Catalog. Object tiles are available from the object's viewer and from the tool Halo. Numbers and some functions can be added by editing an expression in a tile directly.
Tiles for components of expressions are defined in classes in the Etoys-Scripting Tiles category in Squeak.
The object will make the sound which is specified in the box at the right of the tile. Clicking the box brings up this menu.
You can choose between camera, chirp, chomp, click, clink, coyote, croak, horn, laugh, meow, motor, scratch, silence, splash, warble and sound tiles you create. You can add your own sound by recording it using the SoundRecorder from the Object Catalog.
Moves the object forward in the direction of its heading by the amount of pixels, which is given in the right-most portion of the tile. If you put in a negative number, the object will move backwards. If you use a very large number, your object might disappear from the screen. You can get it back by changing the values in the x- and y-tiles of the object or by choosing "grab this object" in the menu at the top of the viewer.
Changes the heading of the object in degrees by the specified amount. If you use positive numbers, the object will turn clockwise, for negative numbers it turns counter-clockwise. Clicking the up or down triangles before the numeric value increments or decrements the value. Clicking in the numeric field lets you enter a value. Clicking the rightward-pointing triangle extends the number into an expression.
The x coordinate of the object describes the location of the object's rotation center in its holder or the world. The value "0" for the x coordinate defaults to the left side of the object's holder or the world. The default origin of the x-y coordinate system is at the lower left corner of the holder or the world.
You can change an objects rotation center by clicking on it to display its Halo. A small yellow circle with a green arrow will be shown. If you place your mouse on the small yellow circle in the middle of the object, you can hold down the shift key and drag the rotation center to a different part of the object.
Pop Quiz: How can you change the orientation center to make a Baseball bat or Hammer appear to swing?
You can also change the origin point of the World's playfield (or any object with "playfield options..." as a menu item), by selecting "playfield options..." then selecting "origin-at-center". Another way to change a origin point is to click on "set grid spacing..." in "playfield options." The first option allows you to set a new origin point as x@y. These values are relative to the default origin of the lower left corner.
The y coordinate of the object describes the location of the objects rotation center in its holder or the world. The value "0" for the y coordinate defaults to the bottom side of the object's holder or the world. The origin of the x-y coordinate system is at the lower left corner of the holder or the world.
The heading is the direction the object is facing in degrees. 0 is straight up, 90 is to the right, 180 is straight down and 270 is to the left.
The color of the object. You can change the color by clicking on the color box at the right side of the tile. A Color is made up of multiple attributes as shown in the color category of the viewer. When you set a color all those values are updated. A color picker appears and the color changes to the color you click.
The green value of the object's color from 0 to 100 as a floating point number. You can change the value at the right of the tile.
The blue value of the object's color from 0 to 100 as a floating point number. You can change the value at the right of the tile.
The alpha value of the object's color from 0 to 100 as a floating point number. You can change the value at the right of the tile.
The hue value of the object's color from -180 to 180 as a floating point number. You can change the value at the right of the tile.
The brightness value of the object's color from 0 to 100 as a floating point number. You can change the value at the right of the tile.
The saturation value of the object's color from 0 to 100 as a floating point number. You can change the value at the right of the tile.
x
The x coordinate (see the basic category for more detail).
y
The y coordinate (see the basic category for more detail).
heading
Heading is the direction the object is facing (see the basic category for more detail).
The scale factor is the factor by which the object is magnified. It must be greater than zero, but may be less than 1. The maximum value is 10. It can be changed in the box at the right of the tile.
Left is the extreme left edge of the object in pixels. It can be changed in the box at the right of the tile.
Right is the extreme right edge of the object in pixels. It can be changed in the box at the right of the tile.
Top is the extreme top edge of the object in pixels. It can be changed in the box at the right of the tile.
Bottom is the extreme bottom edge of the object in pixels. It can be changed in the box at the right of the tile.
Forward direction is the angle in degrees of the object's forward direction without rotating it. It can be changed in the box at the right of the tile. If the forward direction is changed, the heading is changed by the same amount. If the heading is changed, the forward direction isn't changed.You can also change the forward direction by clicking on an object to see its halo, then hold down the <shift> key and click on the green arrow and drag it in the forward direction you want to set.
Pop Quiz: Why do you think the designers of Etoys added both "forward direction" and "heading"?
Lets say you draw a Sketch of a person with the head at the top. What will happen when you move it "forward 5"? How can you use forward direction to fix this? Will changing heading fix this?
The location is the position of the object, expressed as x,y coordinates in pixels with the @ between the x and y value. It can be changed in the box at the right of the tile.
Length is the greatest length of the object along its original y direction in pixels. It can be changed in the box at the right of the tile.
Width is the greatest width along the original x direction. It can be changed in the box at the right of the tile.
Theta is the angle between the positive x-axis and the vector connecting the origin to the object's position. It can be changed in the box at the right of the tile.
Distance is the length of the vector connecting the origin to the object's position. It can be changed in the box at the right of the tile.
Heading theta is the angle, in degrees, that my heading vector makes with the positive x-axis. It can be changed in the box at the right of the tile.
Rotation center x is the x coordinate in pixels of rotation center in parent's coordinate system. It can be changed in the box at the right of the tile.
Rotation center y is the y coordinate in pixels of rotation center in parent's coordinate system. It can be changed in the box at the right of the tile.
If run, this command clears all pen trails in the object's containing playfield.
This controls the diameter in pixels of dot to use when trailStyle is dots. It can be changed in the box at the right of the tile.
This shows the color of ink used by the pen in the box at the right of the tile. You can change the color by clicking on the color box at the right side of the tile. A color picker appears and the color changes to the color you click.
The pen is down/up if the Boolean choice at the right of the box is true/false. It can be changed in the box at the right of the tile.
This gives the width of the pen in pixels. It can be changed in the box at the right of the tile.
This determines whether lines, arrows, arrowheads, or dots are used when I put down a pen trail. The possibilities can be changed in the box at the right of the tile.
Getting into the habit of testing your ideas is a very powerful concept. While these tiles are not quite that powerful, they can test what is going on in your Etoys world. You can use the results of these tests to determine the attributes and behaviors of the objects in your world. Getting into the habit of testing your ideas or at least thinking about how you could test your ideas (and what other people tell you is true) is a wonderful "habit of the mind".
Once this tile is placed in a script, it has the three slots shown below into which you can place one or more tiles:
If the object's color (specified by the color on the left side of the tile) is over the given color (specified by the color on the left side of the tile), then the commands under yes in the test will be executed. If not, the commands under no will be executed. You can change the colors by clicking on the appropriate color. A color picker appears and the color changes to the color you click.
If any part of the object is over the given color, then the commands under yes in the test will be executed. If not, the commands under no will be executed. You can change the color by clicking on it. A color picker appears and the color changes to the color you click.
If the object is under the current mouse position, then the commands under yes in the test will be executed. If not, the commands under no will be executed.
If the object sticks out over its container's edge, then the commands under yes in the test will be executed. If not, the commands under no will be executed.
If the object overlaps a given object, then the commands under yes in the test will be executed. If not, the commands under no will be executed. The given object can be changed by dropping a tile for the desired object onto dot.
If the object overlaps a given object or one of its siblings or a similar object, then the commands under yes in the test will be executed. If not, the commands under no will be executed. The given object can be changed by dropping a tile for the desired object onto dot.
forward by
See the basic category for a description of this tile.
turn by
See the basic category for a description of this tile.
x
See the basic category for a description of this tile.
y
See the basic category for a description of this tile.
heading
See the basic category for a description of this tile.
If this tile is included in a script, the object will bounce off the edges of its container (ex: world or playfield) and make the sound selected at the right of the tile, when it hits its containers edge.
obtrudes
See the tests category for a description of this tile.
If this tile is included in a script, the object will turn toward the given object. The given object can be changed by dropping a tile for the desired object onto dot.
If the object has gone outside the bounds of its container, this tile will zap it over to the opposite edge of the container, providing a 'wrapping' impression.
Note: The fence of the container object, such as a playfield, must be disabled to make it work. If fence is enabled, the object will just bounce on the fence. To enable the fence, use the menu icon of the container and then "playfield options". See chapter.
color
See the color category for a description of this tile.
If true is selected at the right of the tile, a gradient fill will be used.
This is the second color used when gradient fill is in effect.
If true is selected at the right of the tile, the gradient fill will be radial.
This determines the width of the border around the object in pixels. It can be changed in the box at the right of the tile.
This determines the color of the object. You can change the color by clicking on the color box at the right side of the tile. A color picker appears and the color changes to the color you click.
This determines the border style. You can select from simple, raised, inset, complex framed, complex raised, complex inset, complex alt framed, complex alt raised, and complex alt inset at the right of the tile.
If true/false, the corners are rounded or not. Select true/false at the right of the tile.
If true/false, a drop shadow is shown or not. Select true/false at the right of the tile.
This is the color of the drop shadow. You can change the color by clicking on the color box at the right side of the tile. A color picker appears and the color changes to the color you click.
This starts the given script ticking. You can select from available scripts at the right of the tile.
This makes the given script be "paused". You can select from available scripts at the right of the tile. Note: If the script specified is the script containing this tile, the script will not pause until it finishes its current processing of the all the tiles in the script. For example, if you have a "Object forward 5" tile after a "Object pause script script1" tile in a script named "script1", the object will move forward 5.
This makes the given script stop or revert to "normal". You can select from available scripts at the right of the tile.
Note: If the script specified is the script containing this tile, the script will not stop until it finishes its current processing of the all the tiles in the script. For example, if you have a "Object forward 5" tile after a "Object stop script script1" tile in a script named "script1", the object will move forward 5.
This starts the given script and all of its siblings's scripts ticking in the object. You can select from available scripts at the right of the tile.
This makes the given script and all of its sibling's scripts be "paused" in the object. You can select from available scripts at the right of the tile.
Note: If the script specified is the script containing this tile, the script will not pause until it finishes its current processing of the all the tiles in the script. For example, if you have a "Object forward 5" tile after a "Object pause all script1" tile in a script named "script1", the object will move forward 5.
This make the given script and all of its sibling's scripts stop or revert to "normal" in the object. You can select from available scripts at the right of the tile.
Note: If the script specified is the script containing this tile, the script will not pause until it finishes its current processing of the all the tiles in the script. For example, if you have a "Object forward 5" tile after a "Object stop all script1" tile in a script named "script1", the object will move forward 5.
This sends a message to all siblings to run the given script once. The object that executes this will not have its script run, only its siblings will run the script once. You can select from available scripts at the right of the tile.
This runs the given script once, on the next tick. You can select from available scripts at the right of the tile.
This runs the given script in the object and in all of its sibling once. You can select from available scripts at the right of the tile.
make sound
See the basic category for a description of this tile.
This will play a sound of the frequency entered in the box at the right of the tile.
This command will stop the sound.
This tile goes into a test box to test the heading the object would need to have to face directly toward another object. The given object can be changed by dropping a tile for the desired object onto dot.
This tile returns the brightness under the center of the object. The brightness appears in a box at the right of the tile.
This tile returns the color under the center of the object. The color appears in a box at the right of the tile.
This tile goes into a test box to test a function of the distance to another object. The function can be selected at the left of the tile once it is in the test box. The given object can be changed by dropping a tile for the desired object onto dot.
This tile returns the luminance under the center of the object. The luminance appears in a box at the right of the tile.
This tile returns the saturation under the center of the object. The saturation appears in a box at the right of the tile.
A submorph is typically an object dropped onto another object with the property accept drops set to true. Submorphs can also be added to Morphs under program control. Submorphs can be placed so that they overlap the border of the main morph. This property is supposed to determine whether the portion of the submorph extending outside that border will be displayed (false, the default) or clipped (true).
It is important to understand that the clipping boundary of a Morph is its bounding rectangle, no matter what the visible shape of the Morph. Thus clipped submorphs can stick out well beyond the Morph. It is possible to rearrange the vertices of a Polygon so that a submorph is completely outside its visible boundary while still being completely inside the clipping rectangle.
If true/false, this object will be blind/or not to all input. Select true/false at the right of the tile. This is useful if you have text or other objects you don't want the user to accidentally move or change.
If true/false, drop is enabled/or not. Select true/false at the right of the tile. When true you can embed other objects in this this object. Once embedded when you move the object all objects embedded inside it will move with it.
Etoys Challenge:
If true/false, a simple mouse-drag on this object will allow it to be picked up/or not. Select true/false at the right of the tile.
If true/false, the object is resistant to easy removal via the pink X halo handle/or not. Select true/false at the right of the tile.
Drag here to tear off a Repeat Times Do tile which you can drop into your script. This tile is also available from the Gold Box menu in the Scripting Editor. This Tile will execute all the tiles inside it the number of times specified as shown below.
This tile makes a copy of the object. The copy will not be visible, you need to include it in a playfield or holder first. An example would be "playfield include: object's copy". A difference is that for siblings, "copy" creates another sibling.
The menu at the left of the tile allows you to get a piece of data from the object which you can use in scripts. Also you can immediately make a copy of the object.
This tile allows you to do the menu item selected at the right of the tile. You can either click the yellow exclamation mark at the left of the tile or use the tile in a script. Clicking the up or down pointing triangle cycles through a set of commands. Clicking the command portion of the tile brings up this menu:
What version produces this menu?
Or this menu (Etoys v. 5, eToyFriendly on)
Or this (Etoys v. 5, eToyFriendly off)
Clicking more brings up this additional menu.
Each of these commands is on the Halo menu or one of its submenus, which are documented in the User Interface chapter of this manual. For each item listed, the menu where it appears is given below.
The following Halo menu commands do not appear here.
A number of these commands set Booleans, but do not provide a way to reset them.
send to back Halo menu
bring to front Halo menu
embed… Halo menu. To undo, embed object in Desktop.
change color… fill style submenu
solid fill fill style submenu
gradient fill fill style submenu
bitmap fill fill style submenu
default fill fill style submenu
border color…border style… submenu
border width… border style… submenu
simple border style… submenu
shadow color…drop shadow submenu
shadow offset…drop shadow submenu
delete halo actions… submenu
collapse halo actions… submenu. Can only undo manually.
grab halo actions… submenu
resize halo actions… submenu
duplicate halo actions… submenu
make a sibling halo actions… submenu
property sheet halo actions… submenu
set color halo actions… submenu
viewer halo actions… submenu
tile browser halo actions… submenu
tile representing this object halo actions… submenu
inspect halo actions… submenu
change layout inset… layout submenu
change cell inset…layout submenu, table layout subsubmenu
change min cell size… layout submenu, table layout subsubmenu
change max cell size… layout submenu, table layout subsubmenu
resist being deleted Halo menu
resist being picked up Halo menu. Can set to True, but not to False.
be locked Halo menu. Can set to True, but not to False.
provide clipping Halo menu. Can set to True, but not to False.
direction arrow Halo menu. Can set to True, but not to False.
accept drops Halo menu. Can set to True, but not to False.
copy to paste buffer copy & print… submenu
copy text copy & print… submenu
copy Postscript copy & print… submenu
print Postscript to file… copy & print… submenu
make a sibling instance siblings… submenu
make multiple siblings… siblings… submenu
indicate all siblings siblings… submenu
BMP file export… submenu
GIF file export… submenu
JPEG file export… submenu
PNG file export… submenu
put in a window extras… submenu
adhere to edge… extras… submenu
add mouse up action extras… submenu
remove mouse up action extras… submenu
hand me tiles to fire this button extras… submenu
arrowheads on pen trails… extras… submenu
draw new path extras… submenu
follow existing path extras… submenu
delete existing path extras… submenu
graph-location plotter extras… submenu
graph-location follower extras… submenu
balloon help for this object extras… submenu
The number at the right is the object's index in its container (holder or world). The index can be changed at the right of the tile.
This removes this object from the screen. You can either click the yellow exclamation mark at the left of the tile or use the tile in a script.
This tile triggers any and all of this object's button actions. You can either click the yellow exclamation mark at the left of the tile or use the tile in a script.
This tile makes the object invisible. You can either click the yellow exclamation mark at the left of the tile or use the tile in a script.
This tile shows the object's container at the right of the tile. The menu at the left of the tile allows you to get a simple or detailed watcher or piece of data from the object's holder.
This tile makes the object visible. You can either click the yellow exclamation mark at the left of the tile or use the tile in a script.
This tile adds the objects image to the pen trails. You can either click the yellow exclamation mark at the left of the tile or use the tile in a script.
This tile adds the object's image to the pen trails and then goes away. You can either click the yellow exclamation mark at the left of the tile or use the tile in a script.
This category appears in the Viewer for a Sketch but not for other Morphs.
This tile shows the picture currently being worn at the right of the tile.
This tile shows the picture originally painted for this object at the right of the tile, but can subsequently be changed via menu or script.
This tile allows the object to wear the costume of a second object, by default a dot object. The second object can be changed by dropping a tile for the desired object onto dot. You can either click the yellow exclamation mark at the left of the tile or use the tile in a script.
This command restores the object's costume be the one I remember in my baseGraphic. You can either click the yellow exclamation mark at the left of the tile or use the tile in a script.
This tile allows the user to select how the graphic should change when the heading is modified. It can be used in a test box to test for the rotation style.
This tile is used to give or set the location of an object related to it's coordinate system. The world is the basic system with x and y starting with 0,0 in the lower left corner of the screen.
This tile gives access only to the x-axis of the coordinate system.
This tile gives access only to the y-axis of the coordinate system.
This tile can be used in a test box to test for last unhandled keystroke.
Go to the first page in the book.
Set the specified page as the current page, and display it. Although the default object specified is a dot, this tile has no effect unless the target is a page in a book.
Go to the last page in the book.
Go to the page after this one.
Watcher for the number of pages in the book.
Toggle whether the control bar is at the top or bottom of the page.
Toggle between limited and full sets of controls.
Show or hide controls.
The number of the currently-displayed page.
Go to the page before this one, if any.
Reverts to a saved version of a page, if any.
How does one save pages or books? There is a savePage method in BookMorph, but I don't see how to activate it in Etoys.
When a bubble is attached to an object, moving the object moves the bubble with it.
When the bubble is attached to an object, this tile references the object. It can be used in scripts as a substitute for a tile derived from the object.
Break the attachment between the bubble and the object. The bubble remains where it is, so there is no visible difference until the object is moved.
The background color on the button, set with a color picker.
The width of the colored border. Increasing this width expands the border inward, so that it can overlap the button's label. Increase the button's height to remove the overlap.
The color of the button's border, set with a color picker.
Boolean choice of rounded or square corners.
As with any three-phase button, a choice of button down, button up, or while pressed.
Run the action associated with the button. This is programmed via the Halo menu, in Squeak.
The height of the button, including its border.
The text that appears on the button. Use spaces on both ends of the label to adjust the button's width, for which there is no tile.
The date selected on the calendar as a text string in the current format.
The numeric day of the month.
The numeric month.
The number of the year, which can be 0 or negative. This does not match any historical calendar.
The name of the day of the week.
The name of the month.
A choice of mm/dd/yyyy (US), dd/mm/yyyy (UK and elsewhere), or yyyy/mm/dd (Japan; simplest to sort correctly).
Perhaps someone knowledgeable about date locales could add more information on this usage.
Set all variables to correspond to today's date.
The Julian day gives a uniform sequential value for days independent of any historical calendar. It is not related to the historical Julian calendar. Julian day 1 is nominally November 25, -4713, a date far outside the range of any European calendar and of most other historical calendars. This value can be 0 or negative.
When camera is on, it shows the scene continuously. When camera is off, it shows the last image from when it was last on.
A source of tiles for various properties of the image taken by the camera. Select tiles to get… from the menu at the left. Choose a data type, then a variable of that type to get a tile.
I tried this with a graphic from the camera. I dropped the camera's last frame graphic tile into a sketch variable tile, and tried to run it to set the sketch's costume to the camera image. An error resulted. Requesting tiles of some types can crash Etoys with a cascade of error messages. Does anybody know how to use this? In particular, is there a way to ask the camera to take a picture and make it available in the workspace?
Choice of low (160 x 120), medium (320 x 240), or high (640 x 480).
When true, set the view size in proportion to the camera's resolution and resist manual resizing.
Number of items in this collection.
The index of the currently-selected item, according to some non-obvious internal calculation, or as set in this tile.
The first item in the internal list of collection contents. Placing an object with the mouse puts it at the head of the list, so a thumbnail of the object placed appears in this tile.
The image of the currently-selected item.
How is this used? What distinction can one make in Etoys between a player and its graphic? This looks identical to page's graphic at cursor. Presumably they have different effects when dropped into some other tiles, but which and what?
Add an object to the collection, and move it to the nearest location within the container.
Add an object to the collection, but do not show it.
The object is placed at the nearest point within the container, even though it is supposed to appear at the cursor location. Verified in Squeak definition which calls goHome. To be reported as bug. goHome | box | (owner isInMemory and: [owner notNil]) ifTrue: [self visible ifTrue: [box := owner. self left < box left ifTrue: [self position: box left @ self position y]. self right > box right ifTrue: [self position: (box right - self width) @ self position y]. self top < box top ifTrue: [self position: self position x @ box top]. self bottom > box bottom ifTrue: [self position: self position x @ (box bottom - self height)]]]
I have no idea what this is. There are no visible use cases; the help is most unhelpful. I can see the Squeak selector for setting this value, but I don't see where it can be used. There is no Squeak code that calls this method, only two instances.
How is this used? What distinction can one make in Etoys between a player and its graphic? This looks identical to page's graphic at cursor. Presumably they have different effects when dropped into some other tiles, but which and what?
Delete all of the objects in this container. They do not go into the Trash.
Randomly change the order of objects in the container, and renumber them
The page title, if any.
A script for controlling all objects in a container.
This is actually neither border nor color. The only variable in this group is for the width of the connector, including the line and any arrowheads. It can be set to 0, making the connector invisible when connected to objects at both ends.
This category appears only for objects that have connectors attached to them.
The number of connector destinations attached to this object.
The number of connector sources attached to this object.
Apply the given script to objects at sources of connectors coming in to this object.
What kinds of script work? I tried this and got nothing.
Apply the given script to objects at destinations of connectors coming in to this object.
What kinds of script work? I tried this and got nothing.
Apply the given script to objects at sources of chains of connectors and objects coming in to this object.
What kinds of script work? I tried this and got nothing.
Apply the given script to objects at destinations of connectors and objects coming from this object.
What kinds of script work? I tried this and got nothing.
Put a label on the middle of the connector with the given text.
The object at the destination end of the connector, or dot if there is none.
The name of the arrowhead applied to the destination end of the connector. Clicking the current name brings up this menu.
We should give examples of these arrowheads somewhere.
If true, the connector consists of horizontal and vertical segments. If false, the connector can contain segments at any angle.
Delete any label applied to this connector.
If true and the connector's orthogonal property is also true, segments are joined with smooth curves. If false, segments meet at sharp corners. If orthogonal is false,
The object at the source end of the connector, or a dot if there is none.
The name of an arrowhead to be applied to the connector, from the same menu as for destination arrow names.
If the connector has been modified into multiple straight line segments or curves,
The embeddings category appears in the viewers for pins, and for objects containing embedded pins, like the ellipse below, but not for objects containing other embedded objects. This category mixes functions for the embedded pins, for the objects containing them, and for any other embedded objects.
Objects with embedded pins also have variables referring to them.
The ellipse above has two pins embedded in it, as reflected in Ellipse's pin count.
Objects containing embedded pins by default allow connections to them, while pins having no pins inside them naturally do not. Embedded pins want connections when embedded, while objects containing pins but not embedded in other objects do not.
Make embedded pins available for connections or forbid connections to them.
If the object is embedded in another object, points to that other object. If not, points to this object.
The number of pins embedded in this object.
Fire a script on each embedded object.
What kinds of script? I tried this and got nothing. How do I define a script that multiple objects can follow?
Fire a script on each embedded pin.
What kinds of script? I tried this and got nothing. How do I define a script that multiple objects can follow?
If this object is embedded in some other object, allow or forbid using it as a connection point.
There are functions provided on the Joystick's Halo menu but not in scripting tiles, such as changing x and y range, or setting the Joystick to auto-center.
Range: 0-28.28, independent of joystick x and y axis ranges set in the Halo menu.
With the positive x-axis direction as 0, the angle of the line from the center of the joystick body to the handle. Mathematically,
What button? Is this activated by track real joystick on the Halo menu? Although the Joystick object in Etoys does not have buttons, the JoystickMorph in Squeak has methods for firing buttons, so it is possible to write a script to set this.
What button?
Joystick horizontal position (x-axis) on a scale from -5 to 5 by default. The range can be set using the Halo menu.
Joystick vertical position (y-axis) on a scale from -5 to 5 by default. The range can be set using the Halo menu.
There are two kedama categories, one for KedamaWorld, and one for KedamaPatch.
The color of the KedamaWorld object. Set with a color picker.
Set the mode for objects reaching any of the four edges of a KedamaWorld. A menu offers the selections
Change the size of the KedamaWorld in proportion to this value.
Attempting to use this tile results in an error.
What is the display list? How do I access it?
What is the display list? How do I access it?
What is the display list? How do I access it?
What is the display list? How do I access it?
What is the display list? How do I access it?
Part of the kedama Particles system. Kedama Turtle has only two categories in its viewer, namely kedama turtle and kedama turtle color.
The same as the forward by tile in the basic category of other objects.
Should be the same as the turn by tile in the basic category of other objects. However, nothing happens.
The same as the x tile in the geometry category of other objects.
The same as the y tile in the geometry category of other objects.
The same as the heading tile in the geometry category of other objects.
The same as the color tile in the color category of other objects.
What is this? What can I do with it? The user cannot set this variable.
Delete this turtle.
What is this? What can I do with it?
Has no effect.
What is this? What can I do with it?
What is this? What can I do with it?
One should be able to use the menu at the left to get tiles for internal variables of Kedama Turtle, but attempting to access any of them results in an error.
Angle to what?
Distance to what?
The turtle bounces if it reaches the boundary of the World. But I see no use for this tile.
No effect.
Cannot edit this color component, and cannot see any effect.
No visible effect.
No visible effect.
Cannot edit this color component, and cannot see any effect.
Cannot edit this color component, and cannot see any effect.
When allowing chord is false, clicking a key on the PianoKeyboard creates a single note for as long as the mouse button is pressed. When it is set to true, clicking a key turns on a note and leaves it on. This allows the user to construct chords. To terminate a chord, set this value to false again.
The frequency of the last note played, whether alone or as a component of a chord.
The magnification of the image around the cursor in the magnifier display.
Whether to place a dot at the center of the magnifier
Whether to show a magnified image of what is around the cursor.
Audio playback volume on a scale of 0.00-1.00.
Start playing the selected video.
Play from the current position in the video up to a specified position.
What is the scale used?
Stop playing, but remain at the same position in the file.
Go back to the beginning.
Whether or not Movie Player is playing a video.
Whether to start over at the end of the video, in an endless loop.
A number representing the current position in the video.
What is the scale used?
Length of current video in frames.
Length of current video in seconds.
A graphic image of the current frame.
The name of a file containing subtitles for the current video.
How is this set?
The name of the file containing the current video.
The value at the beginning (left or bottom end) of a number line or the left or top of a slider.
The value at the end (right or top end) of the number line or the right or bottom of a slider.
The number of screen pixels in each unit.
The number of numeric units per tick mark.
The number of marks between numeric labels or legends.
Show an arrowhead at the beginning of the number line as well as the end.
Show or hide the zero. This can be used to display crossed horizontal and vertical number lines without the zeroes overlapping them.
Make a drawing in the specified object, which should be a playfield, according to the help text.
What playfield? What is this for? I tried it in the parts bin of a flap. Nothing. The tools palette appeared, but there was no place I could draw. I tried it in a Holder, and was able to draw, but when I clicked Keep, there was an error.
Should pen trails be laid down in all possible detail, or only showing movement from one tick to the next.
Can somebody give us an illustration of the difference?
Erase all pen trails currently visible in the playfield.
Are there currently any pen trails in this playfield?
Stop recording pen trails when objects move.
Start recording pen trails when objects move.
A representation of a complete pen trail. There is a menu item for putting it in hand.
A choice of lines, arrows, arrowheads, or dots.
Dials a telephone number.
What is this, and what can be done with it?
Horizon
Vertical position of the mouse, with the lower left corner of the playfield as 0@0.
Bring all parts that have moved outside the playfield back in.
Make any hidden objects visible. The hide tile is in the miscellaneous category.
The currently selected vertex for a number of purposes, as in other tiles below. It is highlighted in blue when handles are visible. There is no connection with the mouse cursor. For example, clicking a vertex handle does not set the cursor to that vertex.
The number of vertices and hence the number of sides of the polygon. Editing this value in the viewer or changing it in a script causes vertices to appear in front of the cursor, or to disappear starting at the cursor. The cursor is set to the next vertex after the ones deleted.
The x coordinate of the cursor.
The y coordinate of the cursor.
A new vertex is added at the same location as vertex number 1, with an edge of length 0.
A new vertex is added at the same location as the currently selected vertex, lying in front of it, with an edge of length 0.
A new vertex is added at the same location as the last vertex in sequence, with an edge of length 0.
In fact, two vertices remain, joined by a side of length 0. It is possible to remove one more vertex, leaving a polygon with 1 vertex and 0 sides.
The current vertex is removed, and the remaining vertices renumbered. The polygon is redrawn.
The vertices remain in the same places, but their order is randomized, and the polygon is redrawn using the new order.
If false, the polygon is a straight-sided polygon. If true, the polygon is actually a Bezier curve. In either case, dragging the middle of a side creates a new vertex and splits that side into two.
If false, the polygon is closed, with the last and first points joined by a side. If true, they are not joined.
If true, vertices are marked with yellow circles, except that the location of the cursor is marked with a blue circle. The midpoints of sides are marked with green triangles.
Play waveform as sound.
Remove all values from graph.
The x coordinate on the graph
What is this, and what can one do with it?
Load and graph data for the trigonometric sine function from 0 to , scaled with x from 0 to 4000, and y from -100 to 100.
Load and graph data for any sound on the menu.
Reverse the order of the values graphed, and the image of the graph.
The y value on the graph for the current x value. Editing this value graphs the value, and increments the cursor location by 0.01.
What does this do?
What does this do?
What does this do?
What does this do?
What does these do?
What does this do?
What does this do?
What does this do?
What does this do?
What does this do?
Display or hide the single handle for setting the sector's angle.
The central angle of the sector, in degrees.
The radius of the circle from which the sector is cut.
Width of the rectangular body of the slider.
Color of the background area in the slider.
The value of the slider at the lowest position.
The value of the slider at the highest position.
Reverse the slider so that it goes from max to min value.
Height of the rectangular body of the slider.
Color of the knob within the slider.
Value corresponding to the current position of the knob.
Whether to return integer values (true) or decimal fractions (false).
Play back the most recent recording. There is no tile to save a recording, even though there is a button to do so. There is no way, either with tiles or in the UI, to load a saved recording.
If no recording has been made in this session, an error dialog appears saying, "please record a sound first".
Start recording. This assumes that the software has connected to a microphone on the computer, which does not seem to take place.
Halts either recording or playback.
The number of points plus the vertices between the points. So the default five-pointed star has ten vertices.
The ratio of length and width of points. The default value is 42. Setting it to 81 makes a fve-pointed star into a pentagon. Setting it to 0 makes it five lines emanating from a point.
The text data held in this object without its first character.
Add the specified text to the end of the value of the object.
The character at the location specified by the cursor value.
The entire text value of this object.
The number of characters in the text value.
What happens if we put in Unicode text? Does this count Unicode characters correctly, or is it still a byte count? Well, it turns out that I cannot paste Unicode characters outside Latin-1 into a Text object and get a useful result.
An index into Text.
If the text is not empty, this is the initial character from its value. If it is empty, the value is '.'. Treatment of this value is inconsistent.
Insert the given characters at the cursor location. The text in this tile can be edited manually, or replaced by any other text value
Insert text from a specified object at the cursor location.
If the text is not empty, this is the final character from its value. If it is empty, the value is apparently '.'.
If a segment of Text can be interpreted as a number, a value for the first such segment. If a representation of a decimal number is embedded in a text, only the integer part is taken as the value.
A watcher for the hours portion of the current time.
A watcher for the minutes portion of the current time.
A watcher for the seconds portion of the current time.
Delete permanently any objects deleted from the World and placed in the Trash Can.
The number of pages in the Trash Can holding deleted objects, with a help text on page 1, and a deleted object on each page after that.
Something missing here. Perhaps it can be restored from a previous version of this chapter.
Play the last video, if any.
There is no way with these tiles to record or load a video. What can it play?
Stop playing.
Whether the movie is being played
Determines whether the video window can be resized.
Set Video brightness on a scale of 0-1.
I can't play a video, so I can't see what this does.
Set extent (width and height), test pattern, and whether to display time.
Set Video contrast on a scale of 0-1.
I can't play a video, so I can't see what this does.
The last recorded frame.
I think. I see no way to view it, and in any case there is no way to play a video.
This is misnamed. It is color depth, not resolution.
The options are
Probably actually 8 bits per color (RGB) and 8 bits of Alpha (transparency) for a total of 32 bits per pixel.
There has been error in communication with Booktype server. Not sure right now where is the problem.
You should refresh this page.