# Etoys Reference Manual

## INTRODUCTION

Etoys: Introduction

License: The Etoys manual will be dual-licensed under GPL (standard for FLOSS Manuals) and MIT (standard for Etoys). By contributing, you agree that your edits can be used under both the GPL and MIT licenses.

# 1. Introduction

## 1.1 What is Etoys

Etoys is a highly engaging visual programming environment that allows students to create just about anything from interactive drawings and stories to models and games. With a "drag and drop" interface, it prevents many syntax and semantic errors that can frustrate learners new to programming, while encouraging "what if" questioning.  The projects that are possible are endless; Etoys can be used for simple drawings as well as for complex models of the physical world. While it was designed for 8-13 year olds, it has been used successfully by teachers at the high school and college level as well as by younger audiences with help from a parent or teacher.

To get an understanding of the Etoys environment, imagine you have written and wish to produce a play. The objects are the actors and Etoys allows you to easily program their actions. Etoys comes with ready-to-use objects in the Object Catalog (see A at the left on image below). Users can choose from a variety of text, graphic, multimedia, communication, and complex objects. The yellow ellipse object (see B at the bottom) is accompanied by a surrounding halo of menu items (the valuable balloon help is indicating the Viewer). One of the most useful menu items is a Viewer (see C on the right), which contains graphical programming tiles that can make the object perform a variety of actions. Some of the basic programming tiles available to the simple ellipse object can be seen in the Viewer. The object can make a variety of sounds, move forward by any amount, turn by any amount, move to any x or y position, or change its heading. There are several more menus of programming tiles that can be used to make each object perform further actions. The program to produce the play you are directing is started by dragging one of the tiles onto the workspace. A program that will move the yellow ellipse forward by 5 appears to the left of the yellow ellipse (see D at the bottom). Once you start, your project is limited only by your imagination. A very important aspect of the Etoys environment is the ability of students to author their own projects or build on projects created by others. This opens the door for a more authentic approach to learning.

With Etoys, children can draw their own sketches then bring them to life by writing "scripts" that tell the sketches what to do. Children can then put sketches and text in digital books with multiple pages, allowing them to create interactive stories to share with the world. Such sustained creative projects foster a sense of ownership and teach children the value of iterative refinement as they improve their stories over time.

Children can use Etoys to make their own models, stories, and games, which keeps them engaged because it's a lot of fun. But Etoys isn't just child's play. It's a highly effective way to teach math, science, and language arts, although many children won't realize this. Instead they'll stay immersed in discovery, reaching eagerly for each new idea, making their lessons more meaningful than with a "face-front" approach.

Young children learn best by experimentation and play. Kids are wired to grasp, drop, stack, and smash the world around them, often without adult encouragement. Problems start when students are taught things they can't see or touch. Math and grammar are difficult because they're less real than wooden blocks. Etoys makes abstractions more palpable, allowing children to visualize and explore new ideas.

Adult scientists utilize mathematics, imagination, reasoning, testing, and literacy skills in the scientific process. The long history of applying mathematics to the physical world goes as far back as Archimedes and geometry and is as recent as the application of symmetry in understanding elementary particles and cosmology. Thus, it is important to weave mathematics and literacy knowledge into the development of science reasoning and understanding to allow this natural process to flourish in an integrated environment of thought. This allows the levels of mathematical, conceptual, and science reasoning to rise together. This integrated approach represents a spiral in understanding science through mathematics, building conceptual knowledge and expressing ideas through language. Science, mathematics and literacy can be woven together in the tapestry of the Etoys environment.

## 1.2 Features & Benefits

• Etoys is a free and Open Source multimedia computer environment.
• The Etoys community continually improves functionality, adds tools and fixes bugs through regular upgrades.
• Etoys runs on many different platforms including Sugar on the OLPC XO, Mac OS, Linux, and Windows.
• Etoys is used worldwide and is translated into many languages.
• Etoys is a learning environment that allows users to explore and create through authoring their own projects.
• Using Etoys makes learners' thinking visible.
• Using Etoys deepens understanding.
• Etoys is a interpreted language with extreme late binding, so users get immediate feedback when doing things like running scripts they create.
• The Squeakland web site has many example projects from users around the world and has links to many other active Etoys sites.

## 1.3 Etoys in the classroom

Etoys is a tool that can be used by teachers to:

• Create Curricullum
• Introduce new topics
• Assess children's understanding
• Provide skill practice
• Motivate students
• Help children learn useful and powerful ideas

Etoys is a tool that can be used by students to:

• Develop a deeper understanding
• Creatively explore new topics
• Create Reports
• Communicate Ideas
• Create their own Stories
• Learn from each other

## GETTING STARTED

Etoys: GettingStarted

License: The Etoys Manual will be dual-licensed under GPL (standard for FLOSS Manuals) and MIT (standard for Etoys). By contributing, you agree that your edits can be used under both the GPL and MIT licenses.

# 2. Getting Started

The best way to get started with Etoys is to try everything. Click every object, every button, every menu item. (Beginners will need help with the idea of the three-button mouse, or clicking with the mouse while holding down a key on the keyboard.) Put the mouse pointer on things and read the balloon help. Not everything will be clear at first, no more than the world is immediately clear to the exploring infant, or language is clear to the beginning speaker. But children start out as born explorers with no fear of failure.

Children need minimal guidance at first, since so much of Etoys is so easy to discover unaided. However, they soon need help here and there to understand features of Etoys that are not obvious or discoverable. They also need pointers to many of the fruitful avenues for their own further exploration of the workings of Etoys, and much more so to all of its applications to learning a wide range of subject matter.

By default, Etoys starts with a tutorial example, a scripted drawing of a car, on the screen, plus links to many more in the clouds marked Tutorials and Demos, and Gallery of Projects. The first few projects in the Gallery demonstrate how the car tutorial was constructed, and give some ideas for expanding it. Many more interactive tutorials can be found on the Squeakland website at http://www.squeakland.org/tutorials/demos/ .

These tutorials take you step by step through some of the basics of Etoys. Each one has an "About" tab that you can read to find out more about the topic introduced in the project.

Don't be intimidated by the depth of these tutorials and examples! Though the first ones take you through the very basics of defining "objects" and the "halo," some of the other tutorials are quite complex and are offered as an illustration of the range of activities that can be created with Etoys.

Another way to find out how complex the modeling can be is to view the Showcase at the Squeakland website. This is where Etoys users from around the world upload their work to share with the international community of Etoys users. Looking at the scripts can help you discover new capabilities.

Finally, the Help files within Etoys are excellent. Click on the question mark in the top left of your screen to see a list of help topics.

## 2.1 Installing

First, download the software. You can find it at the Squeakland website (http://www.squeakland.org/download/). Free downloads are available for Macintosh, Windows, and Linux operating systems. It is also available for the One Laptop Per Child XO computer.

There is a mobile version called Etoys-To-Go which you can download to your USB-Stick. You can put this stick on any computer and start Etoys without any installation directly from the stick. All your projects will automatically be saved on the stick. Since you have installation on the local computer, the browser plugin does not work if you use Etoys-To-Go.

### Windows Installation

2.  When the dialog box appears, Choose Save.

3.  Save the file on your hard drive in a temporary folder.  If the folder does not exist, you can create a folder by clicking on the folder with the asterisk in the menu bar.

4.  Choose Start - My Computer - C: - Sugar - the install file (Etoys4-final-win).

5.  A Dialog box will appear.  Choose Run.  When the License Agreement appears, click I Agree.

6.  Choose a folder to install the program (i.e. C:\Program Files\Etoys)

7.  When the Choose Start Menu Folder dialog box appears, click Install

8.  Once the Install is completed, Click Close.

9.  To run the program, choose, Start - A;; Programs -> Etoys -> Etoys

10. Enjoy!

### MAC OS Installation

This installation was tested with Macintosh OS 10.5.8 and Mozilla Firefox.

2.  When the dialog box appears, choose Save File.

3.  Double click on the Etoys4-Final-Mac.zip icon. This will unzip the installer file.

4.  Double click on the Etoys 4 Installer.

5.  A Dialog box will appear.  Read the information and click Continue. Follow the prompts and agree to the licensing terms.

6.  Choose a location to install the program (i.e. Macintosh HD)

7.  Click Install.

8.  Once the Install is completed, click Close.

9.  To run the program, choose Etoys 4 from within the Applications folder.

10. Enjoy!

### XO/Sugar Installation

Etoys should come pre-installed in each XO machine. In the event that it's missing or deleted, here are the steps to take to get Etoys in this hardware/OS configuration:

1. Open Browse.
2. Go to http://activities.sugarlabs.org/
3. Enter "Etoys" in the search box and press Enter.
4. Click Download. This will transfer a copy of Etoys to the Journal on the XO.
5. Open the Journal and click on the downloaded Etoys. It will launch and install itself.

In environments where no Internet connection is available, it is possible to transfer activities from one XO to another using USB flash drives.

1. Open Etoys and quit to get an instance in the Journal.
2. Go to the Journal.
3. Insert a USB drive.
4. When the USB drive icon appears, drag the Etoys instance from the Journal to the USB drive icon.
5. Right-click on the USB drive icon, and eject it.
6. Remove the USB drive from the XO, and insert it into the other XO.
7. Go to the Journal.
8. Click the USB drive to display its contents.
9. Drag the Etoys icon to the XO icon to copy it to the Journal.
10. Eject the USB drive.
11. Click Etoys in the Journal to launch and install it.

Etoys-To-Go is a version of Etoys that can run without installation directly from a USB drive. Projects are saved to the USB drive by default. All versions should run on Mac, Windows, and Linux. Follow the following steps to download and install Etoys-To-Go on our USB drive (Installation instructions based on Windows Vista):

2) Click on Etoys To Go. This will open a dialog box in Windows Vista that will ask if whether you'd like to open the file Etoys-To-Go4-Final.zip (or latest version) or Save it in a directory. Click "Save File", which will put the file in the Downloads directory.

The main difference between Etoys-To-Go and the regular Etoys is the way it finds the default project directory. In Etoys-To-Go, the projects directory is in the same place as the Etoys-To-Go application. Presumably that is a USB memory stick, so projects are stored on the stick, too, and can easily be transported. In regular Etoys, projects are saved to the user's documents directory on the machine's hard disk, so transporting them to a different machine needs copying.

Another difference is that the web browser plugin requires installation on the user's machine, because the browser needs to find the plugin, and the plugin needs to find the Etoys application. So Etoys-To-Go does not provide a web browser plugin.

#### Running the Etoys-To-Go Application

1) Insert the drive to a USB slot in your computer. Make note of the drive location on your computer.

2) In Windows, you can double-click the drive to reveal the contents of the drive. If it's a newly created drive, you'll see two folders: ".etoys" and "Etoys-To-Go4.app"(or latest version with .app at the end of the folder name).

3) Double-click the ".app" folder. Amongst the files contained in this folder is the Etoys application indicated by the Etoys logo.

4) Double-click the Etoys application to run/launch it. You will see the familiar welcome window.

#### Saving and Re-running Your Project Files using Etoys-To-Go

When you first save a project, an "Etoys" folder is created within the USB drive. This will contain all your project files (or PR files). Each subsequent saving of your project file will result with the original file name that you used plus an incremented number at the end. Example:

This is useful so you can always go back to old versions of your projects and work from there.

When you first go back to run your project, it will be tempting to double-click on the project file from the "Etoys" folder or directory. Unless Etoys is also installed in the machine, this will not run Etoys or open your project file. This is another difference with Etoys-To-Go and the machine installed version of the Etoys. With Etoys-To-Go, you have to launch/run the Etoys application first and THEN open the file from Etoys.

Open Etoys and you will see a car driving around a screen, bouncing off the sides and off of three clouds. This is a project. This is also the main Etoys opening page. You can see the script that controls the car, along with suggestions for changing the variables in the script to see how the car responds.

The three clouds suggest places to start:

"Gallery of Projects" will take you to a selection of twenty two projects that you can look at and explore to learn some of the many things you can do with Etoys.

"Tutorials and Demos" will take you to three projects that will help you get started with learning Etoys.

"Make a Project" will bring you right into a blank Etoys project page, where you can create and manipulate your own objects.

If you hold the mouse button pressed for some seconds, there will be a menu with more options for loading projects. These options differ in the places where you will look for the project and in the kind of files you can open. The first option "find a project" is the same that happens if you just click on the icon. It will open the default Etoys folder on your computer (or the folder on your usb drive if you are using Etoys-To-Go) to load your project. Here you can also choose "My Squeakland" and "Squeakland Showcase" to open a project directly from the squeakland website. Keep in mind that you need internet access to do this!

The second option "find a project (more places)" lets you search throughout your whole directory structure.

The third option "find any file" allows you to load images into your project. The currently supported formats are .jpg and .png.

To open an existing project from a Windows or Macintosh computer, click on the "Find (load) icon, login if you aren't already, and find the project you wish to work on.

### Saving

Once you have a project, you'll want to save it so that you can work on it again and pick up where you left off. Saving a project is different on the XO than it is on a Macintosh or Windows computer.

### Saving to an XO

If you click the X on the top right corner of the menu bar, your XO will automatically save to the Journal. You will know it's saving because you'll see a stick figure doing jumping jacks.

To retrieve a saved file from the XO, click on the folder with the arrow pointing up. Choose the project you want to work on and it will load into Etoys. (It's a good idea to name your projects so that when you go back to work on them, you can distinguish them from one another.

### Saving to a Macintosh or a Windows computer

Near the right corner of your menu bar, you'll see the "Publish (save)" icon.

When you are ready to save a project, click on the Publish icon, and you will see a screen waiting for you to "describe this project." You need to fill in a project name, and can optionally add a description, your name, and tags, too, then click OK.

The next screen you see where you will be saving the project. You have two choices of places to save your project. Choose one and then click "save" to finish saving.

If you save to "Etoys" you are saving to your local computer. It's a good idea to save locally until you feel you are ready to share your project. If you save to "My Squeakland" you will be saving to the Squeakland website, where you can choose to make your project public so that others can view it. You will need to create a Squeakland account if you want to save to My squeakland. Login, and click "Save" to upload your project to the Squeakland website. Don't worry, Squeakland doesn't sell or rent your information.

Whether you choose to save to "My squeakland" or to "etoys" you will be able to retrieve and edit your project to make changes.

### Quitting Altogether

To quit Etoys, simply click on the X on the top right of the menu bar. You will be prompted with "Are you sure you want to quit Etoys?" Select Yes, and your Etoys window will disappear.

## 2.3 How to make a Script

Scripts are instructions written in a computer language that tell the computer what to do. In the case of Etoys the script is constructed by using graphical tiles that can be added together to create a set of instructions. The computer language behind the graphical tiles is Smalltalk, but you don't need to know the language to construct a script in Etoys. Everything in the Etoys world is an object and you can use the tiles to tell any object what to do.

Start by opening Etoys and clicking on the "Make Project" cloud. You will see a gray blank page. That is the world or stage where you will have your objects or actors perform by telling them what to do with scripts. Click on the Supplies bin, the box at the top middle that looks like a toy box, to find objects to work with. Select a Rectangle object, click on it (it will stick to your cursor) and drag it out onto the world.

The next step is to open a Viewer for the object. Right click on your object (on a Mac command or apple click) and you will see a halo of actions in the form of small colored, circular buttons surrounding your object. Click on the light blue button and the center left of your object to open a viewer.

On the left you see a viewer for the Rectangle object. There are many categories of tiles that you can read about in the Common Tiles section. For now, we will focus on the basic category that you see to the left. The tiles are the 5 green rectangles that are below the word basic. The easiest way to create a script is to grab a tile and pull it out onto the world.

Here we have pulled the Rectangle forward by tile out onto the world and a ScriptEditor is automatically opened with the first instruction for the Rectangle object to go forward by 5 pixels. You can run the script once by clicking the yellow exclamation point at the top center or run it continuously by clicking the clock to the right of the exclamation point. There is much more information about the ScriptEditor in the User Interface section.

To add more commands to the script, simply drag out more tiles and add them to the script. The ScriptEditor will show green when it is ready to accept the tile. Simply let go of the tile and it will drop right into the script. Now when you run the script, the Rectangle object will go forward 5 pixels and turn 5 degrees.

This was just a start on scripting. You can read much more about using Etoys in the following chapters.

## 2.4 Object as Player and Costume

In Etoys, every visible object consists of two components, an unchanging player that holds the scripts for the object, and a variable costume, giving the object's appearance. A tile in the graphics category says "look like", which means that the player for that object will wear another object as its costume when the tile is executed. This behaviour is used for animations, as you can see in the Frame-based animation example projects.

The Holder in this case holds an ordered sequence of drawings, and the script chooses one of them each time through to be the ball's costume.

Be careful! When putting the "look like" tile into a script, at start it says "look like dot" and that is exactly what will do should you start the script right away.

Make sure that you assign the graphic object you want before you start the script!

Etoys: UserInterface

License: The Etoys Manual will be dual-licensed under GPL (standard for FLOSS Manuals) and MIT (standard for Etoys). By contributing, you agree that your edits can be used under both the GPL and MIT licenses.

# 3. User Interface

This chapter provides an overview of all the parts of the default Etoys user interface and a short introduction into the main concepts like halo, viewer and projects. There are various ways to make changes to this User Interface, starting with turning off the eToyFriendly Preference, described elsewhere.

In some places in this chapter, keyboard shortcuts for various commands are described. In general, they consist of a modifier key (Command or cmd on MacOS; Control or ctrl or ctl on Linux; and Alt on Windows), and a letter or punctuation key, optionally with a shift. A few keyboard shortcuts follow different patterns. The notation used here is mod-letter, mod-shift-letter, or mod-symbol. For example, mod-shift-w (which we do not write as mod-W) using the appropriate modifier key for the platform in question brings up the World menu, and mod-, the etoys source menu.

Etoys is built on Smalltalk, which was designed to use a three-button mouse. Missing buttons can be simulated using mouse and key combinations. Specifically

• Middle click is equivalent to ctrl-left click on Linux, ?? on Macintosh, and ?? in Windows
• Right click is equivalent to Command-click or Apple-click on Macintosh
Get correct details. Is middle-click on a Mac option-click? Is middle-click on Windows alt-click?


## 3.1 Overview

This is a summary of the interaction elements.

In the top left corner of the Etoys window is a small tab marked About. Clicking it opens a flap, containing information about the version of Etoys, with a short description and the URL of the Squeakland Web site. A flap is a rectangular object, frequently with a tab attached, containing useful objects or information. It has two states, open or closed, so that it can be brought into the workspace and dismissed as needed. Flaps are described in more detail below.

### 3.1.2 Toolbar

The toolbar at the top of the screen includes basic navigation through Etoys.  Each of these has a balloon help bubble that pops up if the cursor hovers over any item. Following is a list of each of the toolbar items.

In Etoys 4.1 the toolbar has changed; the icon for the new project has been removed.

Here is a list what the individual icons mean.

When the user clicks here, it opens the Quick Guides, an interactive Etoys book of help topics. In Etoys 4.1, there are other languages than English available. The Quick Guides will be shown in the chosen language, if available, otherwise in English.

This shows the current name of the current project. The user can change the name directly by writing in the textfield, or can save the project and give it a name during the process.

This creates a new project within the current project. This can cause problems when it has been clicked while another project then the home project is currently shown. This button has been removed in Etoys 4.1. To create a new project, go to the home project and click the cloud with the text "New Project".

Click the arrows to go to either the previous or the next project in the list. The left button brings the user back to the project which he or she just left (the previous project). The right button proceeds to the next project, if there is any.

Here the user can open the painting tool and create sketches. Every time the user clicks on the icon, a new sheet will open where the user can start a new painting. Make sure to quit the painting tool when finishing a drawing, either by discarding the current drawing or by saving it as an object in the World. To redraw an existing painting, use its gray halo icon.

Clicking this icon opens the Supplies Flap. Here the user can find a great library of objects ready to use.

A user can temporarily customize the objects that are shown in the supplies flap. Almost all objects from Object Catalog can be added to the Supplies flap except for Particles because it consists of several parts (Kedama World, patch, turtle). To do this, drag the desired object to the world, then open the supplies flap and drag the object to the flap. Dragging the object from the Object Catalog directly to the Supplies flap will not work. Note that the changes to the supplies bin will only last until quitting Etoys. It will not be saved with the project.

The user can remove any of the objects in the Supplies Flap easily using the pink icon from the halo of that object. Removing the object from the Supplies Flap doesn't delete the object permanently but just deletes the object's icon.

Here the user can change the User Interface language. When starting Etoys, the language chosen on the computer will automatically be used. Displaying languages not written in the extended Latin alphabet, such as Russian or Japanese, requires enabling the Pango library for displaying text in Unicode, in addition to switching to the language. It may also require adding fonts for the desired writing system, either through the Etoys language menu or outside Etoys in the host operating system.

There are longstanding bugs in the Etoys use of Pango that result in text being misplaced or badly rendered. For example, SQ-102, Etoys text alignment doesn't work correctly with Pango.

When the user clicks once, it toggles the full screen view. Holding down the mouse button brings up the option to switch off scaling. The default setting is optimized for the resolution on the XO laptop.

What does scaling do? It seems to have something to do with the WindowingTransformation methods scrollBy: aPoint and translateBy: aPoint, but what is the application here?


The user can open a saved project from the default Etoys folder when the user clicks on this icon. Holding down the mouse button when clicking allows searching in other folders or open other files.

The user can save a project to the default Etoys folder by clicking this icon. Hold down the mouse button to get more options, as shown below. The user can save the project to other places or publish it directly to the showcase.

Click here to quit Etoys. A dialog box will appear asking for confirmation, since quitting would mean throwing away the current state of the system.

Click to hide or show the toolbar. This is helpful for projects made in older Etoys versions (before 3.0), so that the toolbar will not hide parts of the project. When the toolbar is hidden, a smaller version of this icon appears at the top right of the window. Clicking it restores the toolbar.

### 3.1.3 Toolbar (Sugar)

On Sugar, the toolbar looks slightly different.

In Etoys 4.1, the stop-button has been replaced by an exit-button.

Collaborate with other Etoys users in the network. To share the current Etoys activity the user clicks the Share button and select "My Neighborhood". This makes the activity public and its icon will be visible in everyone's neighborhood view. To join that activity, a buddy would click that icon in the neighborhood.

Alternatively, the user can invite a buddy to an Etoys session. This will not make the shared activity visible to everyone, but just to the invited buddies. To invite someone, zoom out from Etoys to the Sugar neighborhood view. From the menu palette of the buddy's icon select "Invite". They will get a notification and can join the shared activity by clicking it.

In either case, when a buddy joins a shared activity, a new flap labeled "buddies" will be created on the left screen edge. A "badge" representing the buddy will be placed there. Similarly, on the joining buddy's screen a similar flap will be created. The buddy's project will be otherwise empty; the project in the shared session is not transferred to them. When more buddies join, everyone will get badges for everyone else.

Is it possible to share a project? Presumably one could encapsulate a project in an object such as an Event Theatre, and share that.


The badge is the way to communicate with the joined buddies. The user can send an object to a buddy by dragging and dropping it onto the buddy's badge. The object with all its behavior and scripts will be copied to the buddy's computer. As soon as the transfer is finished, a signal tone is played and the object is attached to the buddy's pointer.

If the user clicks the small "C" button on a buddy's badge, a text chat with the buddy is opened. The user can use this to talk to each other. To stop collaborating, click the Share button again and select "Private". Or simply stop Etoys.

Click here to find an entry in the sugar journal and insert pictures etc. Hold the mouse button down to see more options.

Click here to keep a copy of the current project in the sugar journal. It will be stored in a new Journal entry (independent of the entry that is created or updated on stopping). This statement is no longer true for Etoys 4.1. The user will need to hit the "Save" folder to store a new project entry in the Journal. Hold mouse button down to see more storing options, like saving the current project to local storage or to a server.

Click here to exit Etoys. This results to an automatic save of the project in the Journal. The home project is not stored on exit unless the user renames it in the tool bar. This is to prevent useless copies of the home screen in the Journal. If the current project was loaded from the Journal, that Journal entry will be overwritten. Otherwise, a new Journal entry is created.

In Etoys 4.1, this is the button to exit Etoys. Exiting Etoys no longer automatically saves the project in the Journal on version 4.1. Upon hitting the "X" to exit, the user will be reminded to save the project before exiting.

### 3.1.4 World

(See further information about the World in the More Objects chapter of this manual.)

The world is the most inclusive object in any Etoys project. It is basically a full-screen playfield (see playfield in the Basic Objects chapter) that can contain various individual objects within it. The home screen shows a world containing

• an about-flap with the information of the Etoys version,
• an open script, a running car, and a folded viewer for the car,
• three clouds to go to the gallery of projects, tutorials and demos or to create a new project.

The sugar toolbar at the top is not contained within the world.

Tutorials and Demos

This section contains a demo and two tutorials of increasing difficulty, one on using halo tools and one on scripting challenges. We recommend that users new to Etoys start here. Going through the tutorials teaches the rudiments of navigating the Etoys world.

Gallery of Projects

To see examples of what users can do with etoys, look at the various models shown here and explore the objects used with their halos and viewers. For further exploration, go to http://squeakland.org and view the online Showcase for even more projects and project ideas.

Make a Project

When the user clicks on this cloud, an empty world appears. At the top is a toolbar with two call out bubbles in the form of balloon help for the Paint tool and the Supplies box, giving the user two places to start. Hovering over any item brings up balloon help describing what that item does.

To change the background of the world, use the gray halo icon. The painting will be automatically embedded into the world and inert to all user interactions by default. To change this behavior, use the menu icon of the halo.

When Etoys starts up, it displays a car driving around a screen. This is itself a model. The car tests if it is bumping into things, and if it does, it bounces off and drives off in a different direction. The user can explore the script that defines this behavior, and try modifying it by editing values of variables or inserting other tiles from the Car's viewer.

### 3.1.5 Balloon Help

Hovering over an item in the toolbar will bring up balloon help with a short explanation of what each item does.

Balloon help is Etoys text, so users can edit it. To add a balloon help to a sketch, or edit existing balloon help text, bring up the halo of the object, being careful not to stop with the halo of any enclosing object, and click the menu icon. From the menu entries, choose "extras" and then "balloon help for this object". Type or paste in the desired balloon help text.

The help will be shown when the mouse pointer hovers over the object or when the user clicks the question mark in the Halo.

Balloon help might be available in various languages. If it is not, and you want to help with the translations, please read in the Appendix how to do this.

### 3.1.6 Flaps

Flaps are a place to store objects for later use or put in notes. Special flaps can used to share objects between projects. To get a new flap, there are some options:

1. Open the etoys source menu (Cmd-, in MacOS; ctrl-, in Linux; alt-, in Windows) and click the option "flaps..."
2. Another keyboard shortcut offers the full "dangerous" World menu, dangerous because it gives access to Squeak, and allows saving the image. (Cmd-Shift-W in MacOS; ctrl-shift-W in Linux; alt-shift-W in Windows) This can be a problem for beginners, who will not know how to restore the default image. The commands on the source menu appear on the World menu along with many others.
3. Make a copy of the the flap from the home page, edit it as desired, and drag it into the supplies bin. Then it is available to drag it from the supplies bin and put in another project. This avoids exposing the other items from the mod-, menu and shows how to use the supplies bin to copy objects to other projects.

In Etoys 4.1, a flap to add to projects and edit is already in the supplies bin.

## 3.2 Projects

Projects are the units of work with in Etoys for saving and loading. When clicking the "Make a Project" - cloud, the homescreen disappears and a new empty world appears. Everything put in the world belongs to the project and will be saved with it. It is not possible to add a project inside another project. Only the current project will be saved. To create a hierarchy of nested projects, save each project separately. Then create links to load one from the other, for example with the project navigator.

The user can share projects with other users. Etoys is highly portable, so that projects will run on Windows, MacOS, Linux, and other platforms in the same way, with some exceptions.

• For some projects, it might be necessary to install special font files. The fonts used in a project are not saved with it. Fonts which are installed on the computer will be used. This is most obvious when changing languages to one not written in an extended Latin alphabet.
• Objects than those which come with the Etoys installation will not be available on other computers unless the definitions are saved elsewhere so that others can load them. See the documentation on change files for how to save and load changes to Squeak objects.
• Projects from early versions of Etoys will not load into Etoys version 4.0 and newer. Projects from these versions open with the navigation bar turned off, but a little icon on the top right corner which the user can click to turn the navigation bar on. This is because older projects could be using the space for the project which is now occupied by the nav bar. To make it easier to use the user can drag any object in this area down and save the project again, so that when the user opens it the next time, the nav bar will be shown right from the start.
The paragraph above needs version information.
Also, is it saying that old projects will not load at all, or that they will load with this particular difference?

• Projects created in version 4 of Etoys (Late 2009 to March 2012) should load without difficulty into Etoys 5. But some projects created in the new version will not be usable in older versions. If the user tries to load a project created using Etoys 5 into an earlier version of Etoys, a warning message will be presented about possible incompatibilities.

Projects created in older versions (before XO-version 2007) might not work in Etoys 5.

Tto show several projects from within Etoys in a certain order, use the project navigator (see the More Objects chapter).

## 3.3 The Halo

Every object has a "Halo" to allow the user to modify it in various ways. Access the Halo of any object by right clicking the object. The tip of the arrow is the "hot spot." Clicking a very thin line can be a bit tricky because the tip of the arrow must be exactly on the line.

This is the Halo for a sketch. There are other objects with different sets of icons.

Clicking the pink "X" icon at the top left will move the object to the Trash.

Clicking the tan "O" icon along the left edge will collapse the object into a tab with a close button marked x, a name, and a button similar to this one to restore the object.

Clicking the blue eye icon in the middle left will open a viewer for the object.

Clicking the brown rectangle icon will attach a tile for the object to the cursor.

Clicking and dragging the blue spiral icon at the bottom left corner will rotate the object.

Clicking and dragging the yellow square icon in the bottom right will resize the object if the user clicks on it and drags. If the user holds down the shift key while resizing the aspect ratio will be maintained.

Note: If the heading of the object is changed and does NOT equal zero this icon will only let the user change its scale, maintaining its aspect ratio. Even if the heading is returned to zero, this icon will only let the user change the scale.

Clicking the green double boxes in the top right duplicates the object. Holding down the shift key when clicking creates a sibling object. There is a difference between siblings and duplicates. See more about this in the chapter AppendixMorph.

Clicking and dragging the red-brown frame icon moves the object. Moving an embedded object leaves it embedded.

Clicking the black tongs and block icon picks up the object. Click again to place it somewhere else. Picking up an embedded object removes it from the embedding.

The icon that that is meant to look like a printed menu gives the user a menu of other options, as in this example.

send to back - this puts the object behind other overlapping objects.

bring to front -this puts the object in front of other overlapping objects.

embed - this allows the user to embed the object inside another object, so that the combination acts as a new object. For example the user could embed All Scripts in a playfield, book or in a particular page of a book so it only shows on that page. This option is grayed out unless the object overlaps another object. Selecting this option brings up a list of objects where the user can embed this object.

change color - clicking this option opens up the medicine dropper and paint palette tool. Clicking a color from the color palette changes the color of the background of this object.

fill style - Options to choose color, and for solid color, gradient, bitmap, or default fill.

border style: this option sets the style of the border based on color, width and style.

• border color - brings up the medicine dropper and paint palette tool. Clicking a color from the color palette changes the color of the border of this object.
• border width - brings up a tool that sets the thickness of the border. Drag the tool around and choose the width
• simple
• inset
• raised
• complex alt framed
• complex alt inset
• complex alt raised
• complex framed
• complex inset
• complex raised
These options make no sense. Applying them gives weird graphic results. Report as bug.

drop shadow: this gives the user options to turn a drop shadow on or off, and to set the color of the shadow and the shadow offset.

resist being deleted - when this is set, the "x" button in its halo does not appear. The default value is unset.

resist being picked up - when this is set, the object cannot be picked up by clicking it. The pick-up and move tools on the halo continue to work. The default value is unset.

be locked - when this is set, the user cannot affect certain changes to the object.

Which ones?


provide clipping -whether the parts of objects within this object that are outside its bounds can be masked.

direction arrow - when set, the direction arrow will appear on the center of the halo. The default value is unset.

accept drops - when set, allows objects to be dropped into the all script body. The default value is unset.

siblings :
• make a sibling instance - makes another morph with a player of the same class as this object. Both siblings will share the same scripts.
• makes multiple siblings - makes multiple instances.
• indicate all siblings - make all siblings visible.

extras: gives the user the following options

• adhere to edge - default is none, which means the object can be placed anywhere in its container. Other options let the user specify if the object sticks to an edge, corner or center of its container.
• draw new path
• delete existing path
• balloon help for this object - allows the user to change the balloon help for an object. The balloon help will show when the tip of the mouse pointer remains over an object for a period of time.

Many kinds of object have other options on their Halo menus. These are described with each object in chapter 5.

The center handle has two parts. Shift-clicking and dragging the arrow part changes the heading (the direction of motion) and the forward direction (What is this for?) of the object without changing the orientation of the object's graphic. Shift-clicking and dragging the cross in the circle moves the center of rotation. Sketch objects have this handle on by default. For those that do not, there is a Halo menu option, direction arrow, to turn it on.

The purple eye dropper appears for objects with a fill color. It brings up this Color Picker, documented in the Objects chapter. The red circle is the selector, shown here at the top of the grayscale bar.

Different types of objects will have different halos, possibly with extra handles. For example, a text object will have halo handles to change the font, size, and style.

On the Halo of a Sketch and some other kinds of object, clicking the gray pencil icon will open a PaintBox to allow the user to redraw the object. (Useful for duplicating the object, then changing the drawing slightly). If the object is a playfield it will allow the user to draw a background image on the playfield.

An optional debug Halo tool, turned on by setting debugHaloHandle on in Preferences (described in the Objects chapter, and analyzed in the Preferences appendix). Click the wrench to get a menu of tools such as the following for examining objects. Shift-click brings up the inspector directly.

These tools, which provide views into the Squeak underlying Etoys, are described in the Programming Tools chapter.

## Orientation

An important and confusing set of properties of objects controlled in part by the Halo tools Rotate and center handle has to do with direction. It is necessary to distinguish three properties:

heading The direction in which objects move under the forward by: command.

forward direction Not used in Etoys, although it can be set using the Rotate handle in the Halo, and via the Viewer.

orientation The graphic representing an object can be in any rotation independently of the heading and forward direction. This is not an Etoys property. It is not the value of a variable, and cannot be set by any tile command. Since these three properties are not firmly coupled, the rotation of an object's graphic can only be determined visually, not by scripting.

• The rotate tool in the Halo rotates the graphic and changes the heading but not the forward direction.
• The center handle allows the user to change the heading and forward direction without rotating the image.
• Editing the heading in the object's viewer does not change the forward direction, but it does rotate the graphic. Editing the forward direction in the object's viewer changes the heading by the same amount, but does not rotate the image.
Report as bug.

Sketches are created in PaintBox with their heading and forward direction both set to 0 (up).

## 3.4 Painting

Clicking the paint palette in the toolbar brings up the painting tool. It has two components, a translucent rectangle called a SketchEditor where the user can paint an image, and a PaintBox toolbar. The SketchEditor is smaller than the screen. Most of the time, the user wants to draw objects to move them around later using scripts, so drawings for that purpose shouldn't be too big. Everything drawn on one page will be one object. To draw several objects, exit the painting tool by clicking "keep" when one object is done and open it again to get a new sheet to draw on.

To draw the background of the world, click the world's gray pencil halo icon.

The paintbrush uses the brush size selected in the six circles beneath, and the color selected in the color picker.

The bucket pours the selected color in the area that is the same color as under the tip of the pour. If a region is not completely surrounded by any other color the fill will spill through and fill a huge area. The Undo button is useful in such cases.

Clicking with the eyedropper in the ColorPicker or anywhere in the image or the world picks up the color under its tip.

A ColorPicker pops up when the mouse points to the Pick Color area of the palette without clicking.

In the top row the user can pick up no color or transparent to take away all color with the selected tool. Click and hold mouse down to move around.

The Eraser erases the the colors to transparent.

Here the user can choose the size of the brush or eraser. The brush has a round shape and the sizes are in pixels 3, 7, 13, 25, 50, 80. The eraser is square, in the width of the selected paint brush. The paint brush icons indicate which color was most recently selected in the ColorPicker in this or any previous instance of the painting tool in the same session, or blue by default in a new session.

Clicking Undo reverts the last change the user made. It remembers one change. Click again to redo the change.

Click Keep when done editing the drawing to exit the painting editor and leave the drawing as an object.

Clicking Clear erases the whole sketch, leaving a blank sheet.

Clicking Toss brings up a dialog asking whether to throw away the current painting completely. Clicking yes does so, and clicking no leaves the painting open. Throwing away a new painting will erase everything. When editing an existing painting, throwing it away will give back the painting as it was before the painting session.

Color Swatches keeps the 8 most recently used colors for fast access.

Click the flap below the painting box to open the shape tools. This opens a selection of shapes the user can select.

Draws a line straight line. Click mouse and hold down, move mouse and release to make line. It uses a square brush with current brush size and selected color. Hold the shift key to step lines angle in 45 degree intervals

Draws a rectangle in current color and brush width. Hold the shift key to make a square.

Draws an ellipse in current color and brush width. Hold the shift key to make a circle. Ellipse draws from center.

Hands the user a polygon in current color and brush width. Move the yellow handles to change polygon. Drop yellow/blue on top of each other to erase a handle. Click and move green triangles to make more handles. Click outside handles to end editing.

Draws a 5 pointed star in current color and brush width. Draws from center, click and drag to select size.

Click the left flap below the paint box to open the stamping tool.

The stamp is used for making a copy of a selected part and stamping it back to make patterns or drawings. Click a blank stamp, then select the area of the drawing to copy by clicking and dragging the mouse. A thumbnail of the user's selection will be shown in the blue rectangle below the selected stamp. The user can now stamp that selection. If the picture does not have a background fill color, the stamp tool will make the stamp without a background color.

## 3.5 Viewers

A viewer holds the tiles that describe the scriptable attributes of an object and the actions it can perform. Use it together with a script editor to compose scripts for objects that define how the objects behave. Bring up the halo for an object and click the blue eye icon in the middle left

to open a viewer for this object. A viewer always represents the state of the player for the object it belongs to. The user can open several viewers to get access to the tiles of different objects. Tiles from different viewers can go in any script.

The top row of the viewer displays the name of the object being viewed. To edit the object's name click it and type the new name.

All viewers have a little thumbnail tab, much like a tab on a folder, to identify which viewer is which when they are not open.

The "tiles" section of this manual gives specifics about tiles in the viewer. The tiles are organized in categories. There are generally sixteen or more different categories in a viewer. The number is different for different kinds of object. For example, a "Holder" has some categories that a "Sketch" does not have and vice versa.

The categories are separated by green stripes. The title of the category is written inside the stripe. The default categories in a newly-opened viewer for many objects are "Basic" and "Tests". Click one of the green stripes to open a menu of categories.

There are six different types of tile:

• Commands have an exclamation mark on the left. Clicking the exclamation mark runs the command once. They can be placed directly in scripts.
• Variable assignments representing attributes of an object have a small menu icon on the left. Clicking the menu icon brings up a menu offering watchers of several kinds for the values, and an option to change how many decimal places will be shown for numeric values. The user can access either the value of the object, by dragging the tile by its name, or an assignment command, by dragging it by the green assignment arrow. Assignments can be placed directly in scripts.

• Control structures have no icon at all on the left, and a light colored background. They can be placed directly in scripts.
• Tests have no icon at all on the left. They can be placed in slots in control structures in order to determine which commands to execute next.

• Expressions generate values of various object types as parts of scripting commands or assignments to variables. They can be placed in slots in commands and variable assignments.

• Watchers show only the value (simple watcher) or name and value (detailed watcher) of a variable. The value can be modified in a watcher, in some cases using controls such as up and down arrows, or by clicking the value to edit it as text, or with a menu or color picker, or by other means appropriate to the value. Watchers can be placed in the world and in other playfields, but not in scripts.

If the user drags a command, variable assignment, or test tile from the viewer into the world, Etoys opens a script editor to hold it as a script command. Further tiles can be dropped in the script or in slots in other tiles.

The user can open the viewer menu by clicking the menu icon in the top row of a viewer. It is in the middle between the variable icon and the category pane icon.

The viewer menu items do the following:

• add a new script: Attaches a new script tile to the mouse that expands to a ScriptEditor when dropped.
• grab this object: Attaches the object to the mouse.
• reveal this object: Make the object flash a few times to make its location obvious on the screen. This command also brings the object back on screen if it has moved beyond its borders somehow. If a script used the command Object hide, 'reveal this object' will flash it, then bring up its halo.
• tile representing this object: Puts a tile representing this object at the mouse cursor for placement anywhere in the world.
• add search pane: Opens a search pane in the viewer.

With the eToyFriendly preference turned off, two more items appear.

• add a new variable Opens a dialog box to accept the name, class, and value of the new variable
• more... Opens a further menu

or

Why do we get two different versions?

• expunge empty scripts Delete all but one script containing no programming tiles.
• choose vocabulary... Choose a tile set for this viewer. Default is eToy.
Choosing some vocabularies results in the viewer showing no categories and no tiles. After choosing any other, choosing eToy fails to return to the standard tile set. It is necessary to close the viewer and open another on the same object.
Report as bug.

• choose limit class... Open a menu with the title Show only methods implemented at or above... Choices are Unscripted Player, Player, Model, Object, and ProtoObject.
No visible effect. What is this supposed to do?
Report as bug.

• open standard lexicon Open Vocabulary viewer, showing the Squeak code for each tile.
Document this vocabulary viewer.
• open lexicon with search pane This fails with an error, Message not understood, in a predebugger.
Report as bug. The method called, openSearchingProtocolBrowser, does not exist.
• inspect morph Open inspector on the costume of the object of this viewer.
• inspect player Open inspector on the player of the object of this viewer.
• browse class Open a window displaying compiled scripts for the object on the class of the player of the object of this viewer.
What is the class of this object? It is not the System Browser, but it has many of the same functions.
• inspect class Open inspector on the class of the player of the object of this viewer.
• inspect this Viewer Open an inspector on this Viewer.
• inspect this Vocabulary Open an inspector on the current vocabulary of this viewer, listing its element categories and a few other properties. It appears that all vocabularies other than eToy have empty category lists.
• relaunch this Viewer
Error: attempt to index a non-existent element in an ordered collection
Report as bug.
• attempt repairs Results in the meaningless message 0 [or more] repair(s) made.
Report as bug.
• destroy all this object's scripts Delete all scripts for this object except the default empty script.
• view morph directly Error: Message not understood.
Report as bug.

Categories

Tiles are divided into categories that access or share topic. The user can add another category pane when the user clicks on the "+" sign in the blue circle right beside the menu icon.

All objects share these categories:

• Variables
• Scripts
• Basic
• Color
• Geometry
• More Geometry
• Pen use
• Test
• Motion
• Fill & Border
• Scripting
• Sound
• Observation
• Drag & Drop
• Miscellaneous

Some objects have specific categories that give access to the object's abilities. For example, "Button" also has a button category that allows the user to change the look and use of the button. "Star" has a star category that allows the user to change the number of points on the star, and objects like "Playfield" and  "Holder" have categories specific to them. There is a command, choose category... described above, to add extra vocabularies in their own categories, such as Vector, which can also be turned on in a scripting preference.

Variables

Variables keep information stored within a script. They can contain different types of information set by selecting data types from a menu. Variables should be named to indicate their purpose. The name of the variable helps the user or others read a script later on. The user can add a variable by clicking the "v" sign in the icon left of the menu icon. When creating a variable, the user has the choice of data types. Click the default to get a menu with options like these (depending on the version of Etoys, and the eToyFriendly preference).

Document types for Etoys v5: Boolean, Color, CustomEvents, Graphic, Number, Player, Point, ScriptName, Sound, String
• Boolean
A Type with two possible values: true or false
• BorderStyle
A Type with the following possible values: simple, raised, inset, complex framed, complex raised, complex inset, complex alt framed, complex alt raised, and complex alt inset. This variable could be used in a script to create the visual effect of a Button being pushed.
• ButtonPhase
A Type with the following possible values: button down, while pressed, button up
• Color
A Type that stores a particular color.  A Color is made up of multiple attributes as shown in the color category of the viewer. When the user sets a color all those values are updated.  A color variable can be used in tests, to change the color objects in the world. See the Common Tiles chapter for a description of the color variables.
Etoys Challenge: Take an existing project and use a set of color variables to change color schemes for the project.
• Graphic
A Type used to store a graphic.
• ImageResolution
A Type used by the Camera object (found in the Multimedia section of the Object Catalog).  This can be used to change the resolution of the image captured. Possible values are: original, 256 colors, 256 grays, 4 grays and black and white. Lower resolutions will reduce the size of the object.
This name is an error. It is the color depth that changed here, not the image resolution in pixels.
Report as bug.

• Number
A Type used to store a number.  The number defaults to displaying 1 decimal places to the right of the decimal point. The user can specify the number of decimal places that will be displayed. NOTE: When displaying 1 decimal place to the right of the decimal point, if its actual value is 2.45, if will be rounded to 2.5 for display. But a Test for myNum >= 2.5, the test result using the actual value will come out false and the NO branch will be executed.

Pop Quiz: Can you determine under what cases the display of a number will round up?

Pop Quiz 2: Can you determine how many decimal places can be accurately represented in an Etoys Number?

Pop Quiz 3: What is the largest number you can use in Etoys?
• Patch
This variable type currently does not work in Etoys 4 and will throw an exception "Message Not Understood".  For now do not use this variable type.
What objects have this option? It appears not to be available in v5.
Is this reported as a bug?

• Player
This Type is used to store a reference to an Object.  In Etoys the terms Player and Object basically mean the same thing.
• Point
This Type is used to store an X,Y location.  The user must specify it in the form X@Y where both X and Y are three-digit numbers (not variable names) Therefore 100@200 is valid and specifies X=100, Y=200. 010@020 is also valid, specifying X=10, Y=20.  Entering only one or two digits for a component of a point will be accepted, but when a script tries to use that value to set an Object's location an Exception message will appear.
Verify.
Report as bug.
ScriptName
• This Type is used to store script names.  A list of existing script names plus "empty script" will appear in the list.  This can be used to scripting, where one script sets a script name variable, and another script uses that variable to determine which script to run. Script names with Capital letters will show in lower case with a space preceding the capital letter. So the Script "haveFun" will show as "have fun" in the pull down list.
• Sound
A Type used to store a sound object.  The list will include all the default sounds, plus any sounds added to the project.
• String
A Type used to store a set of characters.
• TrailStyle
A Type used to store a pen trail style, valid values are: lines, arrows, arrowheads, and dots.

Search

This search box lets the user search for tiles by name using partial matches.  This search is within the tiles in the current viewer, belonging to the current object.

## 3.6 Script Editor

Is this V4?


New version V5?


Although some object actions can be controlled in the object's viewer, the script editor is where the user can assemble tiles to create more complex actions or scripts. In the script above two of the object sketch's tiles have been dragged from sketch's viewer and dropped into the Script Editor, and then variables have been added as arguments to commands. When the tile is held on the mouse cursor in a place where it can be accepted by the Script Editor, an area in the script opens up and turns green to show where the tile will be placed. When a tile is released and sound is enabled an audible click plays as the tile enters its slot.

The Script Editor allows the user to assemble tiles and test out and debug ideas for creating a simulation in the Etoys world. The user can use the results of these test scripts to simulate and determine the attributes and behaviors of the objects in the world.  Getting into the habit of testing ideas or at least thinking about how to test ideas (and whether what other people say is true) is a wonderful "habit of the mind", essential in science, software development, civics, and other parts of life.

Collapse button

The round brown button with the black enclosed circle at the upper left collapses the script back to the viewer. The script can always be viewed in the Script Editor again by dragging it out onto the world from the scripts category in the object's viewer.

Name of the Player being Scripted

The text to the right of the collapse button is the name of the object the script is attached to. The user cannot change the object's name here.

Name of script

The text to the right of the object's name is the script's name. It's a good idea to give a meaningful name to the script. For example, if it's a script to draw a particular shape using pen trails, the script named could describe the shape produced.

Run once

The yellow exclamation point in the center of the Script Editor toolbar runs the script one time. The user can also run the script from the object's viewer.

Step button

This function is new in Version 5. Run the next phrase in the script. The user can thus step through the script, observing changes at each step, or querying the state of the system with watchers, other scripts or Squeak commands. This is an essential debugging tool.

Tickindicator

The TickIndicator is the clock face to the right of the yellow exclamation point. The TickIndicator is light green when not in use, pink when script is paused and blue when script is ticking. Hold mouse button down and a menu pops up for setting the rate at which the script should run. The default is 8 ticks a second. Predefined in the menu are choices from one tick to 100 ticks a second. The last menu option is called other... Here the user can type in the number of times per second that the script should run, which can be less than once per second. A tick rate of 0.5 indicates one tick every other second, 0.1 once every 10 seconds, etc.

ScriptStatusControl

This appears to the right of the clock, showing the current state of the script. Click it to get the following menu of options:

• normal - run when called
• paused - ready to run all the time, will change to "ticking" Status when the user presses the "Go" button in the "All Scripts" object.
• ticking - run all the time, will change to "paused" Status when the user presses the "Stop" button in the "All Scripts" object
• mouseDown - run once when mouse goes down the object
• mouseStillDown - run while mouse still down on the object
• mouseUp - run once when mouse comes back up off the object
• mouseEnter - run once when mouse enters the object's bounds with the button up
• mouseLeave - run once when mouse exits the object's bounds with the button up
• mouseEnterDragging - run once when mouse enters the object's bounds while dragging another object
• mouseLeaveDragging - run once when mouse exits the object's bounds while dragging another object
• opening - run once when the object is being opened. This only works for World and Page objects contained in a book
.
Pop Quiz: Can you figure out how to use this to ensure a Book always opens to the first page when a project is opened? Can you figure out how to use this to reset a Page each time it is opened?
• closing - run once when the object is being closed. This only applies to World and Pages objects.

More events:

• connectedTo - run once immediately after a connector has connected to the object
• disconnectedFrom - run once immediately before a connector is going to disconnect from the object
• KeyStroke - executed when any key is pressed, this is only available from World and Playfield scripts
• acceptedTextContents - executed when text is accepted, which can be when the user tabs to the next text field or hits return (if accept on CR is checked), this is only available for Enhanced Text objects.

Gold Box

Clicking the gold box or treasure chest icon to the right of the ScriptStatusControl brings up this menu of tiles:

• test tile
This tile has three slots into which the user can place one or more tiles:

Test: The user can place any tile that contains an attribute of any object. For example, the user could test whether Ellipse's y value is less than 5 as shown. To accomplish this grab the left side of the Ellipse's y tile from Ellipse's viewer. Make sure not to click the assignment arrow and get the red box surrounding Ellipse's y and its value at the right, because that will result in an assignment phrase for the tile, not its attribute. The user can test on almost any attribute (numeric, color, graphic, etc) of any object.

Pop Quiz: How could you define a test to see if a car passed a finish line in a race?

Yes: Tiles placed in the "Yes" holder will be executed when the "Test" is true. If y<5, then Ellipse will turn blue.

No: Tiles placed in the "No" holder will be executed when the "Test" is false. If y>=5, then Ellipse will turn red.

Any attribute tile can be used in the "Test" holder of the "Test Yes No" tile. Some can also be used as watchers, which can be useful when debugging scripts. While the user may think a "Sketch obtrudes" or a "Sketch is under mouse" the Etoys system may think differently.  Being able to see this as a script runs can help.
• repeat tile

This tile has one holder called "do" into which the user can place the name of a script. The tile repeats the script in the "do" placeholder the number of times set in the number box at the top of the tile.

• random tile

The random number will range from 0 to the number in the number box (in this case 5). It can be dropped into the end of a command that requires a number or function. This is a special case of a function tile.

• function tile

The user can choose a function by clicking the arrows at the left or clicking the function name (in this case "abs") to get a drop down list of functions to choose from. Many commonly-used functions are available in the list. The function can be dropped into the end of a command that requires a number or function.

• button up?

Used in Test and its value is true when the mouse is NOT pressed down.

• button down?

Used in Test and its value is true when the mouse is pressed down anywhere.

• tile representing the player

In this case the player is Ellipse.

• number

A number box that can be dropped into the end of a command that requires a number or function.

The Script Editor Menu button on the far right with the eToyFriendly preference turned on brings up the following menu.

It has the following options.

Many tiles in Etoys have a parameter. It is a value that influences the behavior of that tile.

For example, the "forward by" tile has a parameter that specifies how far the object should move. The "make sound" parameter specifies which sound to make. Etc.

The user can also make new tiles. When creating a new script, a tile for it is placed in an object's "scripts" viewer category. That tile can be used in another script.

The "add parameter" menu entry lets the user add a parameter to a tile. When using that new tile in another script, the user can set a specific value for the parameter just as with any other tile.

Inside the script for a tile, that parameter is shown in the title bar. It is called "number" (unless the user changes the parameter type). The user can drag this "number" tile and use it like any variable tile in that script.

For example, this script, contains the "number" tile four times:

In every use of this new tile, the user can give it another "concrete" value. That's why in the script itself, there is only the "abstract" value called "number". (Computer scientists call the concrete values "arguments" and the abstract values "parameters", but even programmers get confused about the distinction).

Note that after adding a parameter, the user cannot set the script to "ticking" anymore, because it now needs a parameter. It only gets a concrete value for the parameter from another script where the tile is used. Additionally, the user can set a value in the viewer, and hit the yellow button to run the script with that value:

The following are the data types that can be used as parameters:

• Boolean (true or false)
• BorderStyle
• ButtonPhase
• Color
• Graphic
• ImageResolution
• Number
• Patch
• Point
• ScriptName
• Sound
• String
• TrailStyle

button to fire this script

This will create a button object that can be used to fire the script. The user can change the button's label from the menu in its viewer by selecting change label.

show arrows
When selected the arrows inside scripting tiles will be displayed (ex: the up and down arrows to increase numbers and the left and right arrows to remove and parts of the expression.

edit balloon help for this script
This edits the balloon help that is shown when the user hover over the script name in the scripts category of the Objects Viewer

explain status alternatives
Opens a window with descriptions of the options for "when this script should run" (ex: normal et al)

show code textually
Will provide a text version of the script for editing. This provides an entry into Squeak programming.  To save changes type <ctrl><s> (on PC and XO) <cmd><s> (on Macintosh) when done.  Note that once changes are made the script cannot be converted back to tile scripting without losing the changes.

save this version
When editing the text version of a script this menu option saves the changes.

grab this object
Will move the object to the position of the mouse for placement anywhere.

reveal this object
Will display the halo for this object to make it easy to find. This can take a second or two.

tile representing this object
Will create a tile representing the script's Object. Tiles representing an object can be used in this or other scripts to replace the Object being acted upon in a script.

open viewer
Will open the viewer for this script's object.

destroy this script
Will destroy this script.

With eToyFriendly turned off, two more options are added to the menu.

• fires per tick... Brings up this menu to allow the user to set the speed of execution of the script.

• detached method pane Brings up a window showing the text version of the script. This method pane updates when the tiles in the script are edited. However, editing the text does not result in tiles being added to the script editor window, and breaks the connection between the two views so that adding tiles to the script editor no longer results in the text being updated. The detached method pane has this halo menu, with commands specific to editing a script.

All but the bottom four items are common to halo menus. The ones specific to scripting are:

• whose script is this? Displays a message box stating, "This holds code for a script named...belonging to an object named...". This is the same information displayed in the toolbar of the script editor.
• open editing Permit editing by drag and drop.
How is that supposed to work? It is implemented in the MorphicModel openToEdits method, but this is a text editor.

• make scrollbar retractable Sets the vertical scrollbar outside the window when the mouse is over it, and hides it when the mouse moves away. Clicking again displays a horizontal scrollbar. There is no way to undo this setting on this menu and make either scrollbar appear all the time.
Report as bug.

• scroll bar on left Toggle display of vertical scrollbar at the left or the right, but do not change the text on the menu to indicate which state it is in.
Report as bug.

## 3.7 Mouse Buttons

Etoys was designed for a three-button mouse. One version, originally from the Xerox Alto computer on which Smalltalk was developed, is shown below.

Get image.

The buttons are traditionally identified by color, since there is not one universal button order. For many users, red is left, yellow is middle, and blue is right, although the opposite order is common among left-handed users.

• Red-clicking (usually left-clicking) is the most common mouse action, used among other things to select objects and menu options and to click and drag to move objects.
• Middle-clicking (yellow) brings up alternate menus or a find dialog, depending on context. Control and left/red button together has the same effect in Linux.
• Blue-clicking (usually right) on any object brings up its tool Halo. Using the alt key and the left/red button together in Windows has the same effect.
Get the full set of directions for Mac, Linux, and Windows, and synchronize with the start of this chapter.


Mouse actions can have different effects in original Smalltalk, Squeak, and Etoys. In particular, there are different menus in each.

The more usual Xerox three-button mouse is shown below. A common arrangement today is the wheel mouse, with buttons at left and right, and a wheel that can be turned to scroll the display or pressed as a middle mouse button.

In the rest of this manual, the terms left, middle, and right are used.

What are the Mac combinations? Is it Command-left and Option-left to get right and middle?
In Etoys, right-clicking the mouse will open the halo (the menu of colored circles) for the currently selected object. This can be the world, which fills the entire workspace, or any object inside it. Right-clicking again, will select and open the halo for every embedded object in the structure under the cursor.

Left-clicking will invoke a behavior if the user clicks on a button, menu entry or menu icon. Left-clicking many objects picks them up, so that the user can move them around.

For any object, the user can set its behavior regarding mouse-clicks. The menu icon in the object's halo provides the options "resist being picked up" or "be locked". The first one says whether the objects is resistant to a drag done by mousing down. The second option prevents all user interactions.

## 3.8 Keyboard Shortcuts

Here is a list of keyboard shortcuts which are useful in Etoys. Mostly, these are used with text. There are many more keyboard shortcuts when using the programming tools to access the underlying squeak code. See chapter "programming tools" for more.

 Description Windows Macintosh XO Cut ctrl-x cmd-x ctrl-x Copy ctrl-c cmd-c ctrl-c Paste ctrl-v cmd-v ctrl-v Select all ctrl-a cmd-a ctrl-a Find ctrl-f cmd-f ctrl-f Find again ctrl-g cmd-g ctrl-g Exchange selection with prior selection ctrl-e cmd-e ctrl-e Set selection as search string for find again ctrl-h cmd-h ctrl-h Choose font and size ctrl-k cmd-k ctrl-k Repeat last text-related operation ctrl-j cmd-j ctrl-j Copy window ctrl-o cmd-o ctrl-o Duplicate ctrl-D cmd-D ctrl-D Undo ctrl-z cmd-z ctrl-z Choose justification options ctrl-u cmd-u ctrl-u Redraw Screen ctrl-r cmd-r Display/Hide Shared Tabs (fyi: the Sugar Navigator Flap is a shared tab)s ctrl-F cmd-F Compare to clipboard ctrl-C cmd-C ctrl-C cursor TopHome ctrl-H cmd-H ctrl-H Set style ctrl-K cmd-K ctrl-K Outdent ctrl-L cmd-L ctrl-L Select current type-in ctrl-M cmd-M ctrl-M Make project link ctrl-P cmd-P ctrl-P Indent ctrl-R cmd-R ctrl-R Search ctrl-S cmd-S ctrl-S Delete preceding word ctrl-w cmd-w ctrl-w Convert linefeeds to carriage returns ctrl-U cmd-U ctrl-U To lowercase ctrl-X cmd-X ctrl-X To uppercase ctrl-Y cmd-Y ctrl-Y Capitalize ctrl-Z cmd-Z ctrl-Z Swap characters ctrl-y cmd-y ctrl- Swap characters ctrl-y cmd-y ctrl- Swap characters ctrl-y cmd-y ctrl-

#### Other special keys (not available on all platforms

 Cmd-1 10 point font Cmd-2 12 point font Cmd-3 18 point font Cmd-4 24 point font Cmd-5 36 point font Cmd-6 color, action-on-click, link to class comment, link to method, url ...  Brings up a menu. To remove these properties, select more than the active part and then use command-0. Cmd-7 bold Cmd-8 italic Cmd-9 narrow (same as negative kern) Cmd-0 plain text (resets all emphasis) Cmd-- underlined (toggles it) Cmd-= struck out (toggles it) Shift-Cmd-- (aka _) negative kern (letters 1 pixel closer) Shift-Cmd-+ positive kern (letters 1 pixel larger spread)
Etoys: Tiles

License: The Etoys Manual will be dual-licensed under GPL (standard for FLOSS Manuals) and MIT (standard for Etoys). By contributing, you agree that your edits can be used under both the GPL and MIT licenses.

# 4. Common Tiles and Viewer Categories

Tiles are the blocks from which you can build Etoys scripts. You will find most of the tiles you can read about in this chapter in the viewers for Etoys objects. There are a few more in the Gold Box menu on scripting windows toolbars, and on menus provided with many tiles. There is also a function tile in the Object Catalog, which defaults to random. The chapter is sorted by the categories that appear in object Viewers. There are also special categories for special objects, explained in the chapters where the objects are covered. Sometimes you will find fewer tiles in a category or fewer categories than are discussed in this chapter. For example, the category color doesn't exist for all objects. The objects drawn with the painting tool don't have this category, because there can be many colors in a drawing, while the Ellipse has it. The main headings below are the categories and the headings beneath them are the specific tiles in that category. We begin, however, with properties of tiles in general.

These tiles are defined in the Etoys-Scripting Tiles category in Squeak.

In the StandardViewer for any object, tiles are grouped in categories. This is the menu of categories for an ordinary Morph.

The layout and as object categories appear only with the eToyFriendly preference turned off.

Other categories appear in viewers for other objects in the extended Object Catalog (v. 5.0, eToyFriendly off), and for objects with connectors attached (connections to me).

• bubble
• button
• calendar
• camera
• collections (graph paper, holder, playfield, x-y plane)
• color & border
• connections to me
• connector
• embeddings (Pin)
• graphics (sketches and other images)
• joystick
• kedama
• kedama turtle
• kedama turtle color
• keyboard (Piano keyboard)
• magnifier (several magnifiers, but not RoundGlass)
• movie controls
• number line
• paintbox (flaps)
• pen trails (graph paper, holder, playfield, x-y plane)
• playfield (graph paper, holder, playfield, x-y plane)
• polygon (arrows, curve, polygon, triangle)
• sampling (graph)
• Scratch Command
• Scratch Configuration
• sector
• slider
• sound recorder
• star
• text (not Scrolling Text)
• time
• trash
• video

There are six kinds of Etoys scripting tile: commands, variables, watchers, tests, control structures, and expressions.

### Commands

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.

### Variables

A variable holds a value, which can be of several object types.

• Boolean
• Color
• CustomEvents
• Graphic
• Number
• Player
• Point
• ScriptName
• Sound
• String

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.

### Watchers

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.

### Values

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

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.

### Controls

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.

### Expressions

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.

## 4.2 Category Basic

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.

## 4.3 Category Color

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 red 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 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.

## 4.4 Category Geometry

x

The x coordinate (see the basic category for more detail).

y

The y coordinate (see the basic category for more detail).

Heading is the direction the object moves under the forward command (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?

## 4.5 Category More Geometry

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.

## 4.6 Category Pen Use

If run, this command clears all pen trails in the object's containing playfield, but not in the object itself. For example, if the object is a playfield in the world, then this command clears pen trails in the world, but not in this specific playfield. Contrast with clear pen trails in the pen trails category of playfields.

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.

## 4.7 Category Tests

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:

• Test: Any Boolean-valued variable or expression.
• Yes: Tiles placed in the "Yes" holder will be executed when the "Test" is true.
• No: Tiles placed in the "No" holder will be executed when the "Test" is false.
Note that any of the Boolean-valued tiles below can only be used in the "Test" holder of the "Test Yes No" tile. Some can also be used as watchers, which can be useful when debugging your scripts. While you may think a "Sketch obtrudes" or a "Sketch is under mouse" the Etoys system may think differently.  Being able to see this as a script runs can help.

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.

## 4.8 Category Motion

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.

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.

## 4.9 Category Fill & Border

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.

## 4.10 Category Scripting

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.

## 4.11 Category Sound

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.

## 4.12 Category Observation

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.

## 4.13 Category Layout

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.

## 4.14 Category Drag & Drop

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:

1. Use drop enabled to draw a person and ensure "drop enabled" is true.
2. Then draw some clothes (some combination of shirts and shorts).
3. Place the person and each piece of clothing in a "Maker Button" (this will allow you to make copies instantly just by clicking on the maker button and dragging onto the screen).
4. Then see how many possible combinations of different outfits you can create.
5. How can you prove you have all the possible combinations?

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.

## 4.15 Category Miscellaneous

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)

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.

• Commands on some layout submenus
• Commands on the debug submenu

A number of these commands set Booleans, but do not provide a way to reset them.

embed… Halo menu. To undo, embed object in Desktop.

collapse halo actions… submenu. Can only undo manually.

make a sibling halo actions… submenu

tile representing this object halo actions… submenu

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

put in a window extras… submenu

remove mouse up action extras… submenu

hand me tiles to fire this button 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.

## 4.16 Category Graphics

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.

## 4.17 Category Graphing

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.

## 4.18 Category Input

This tile can be used in a test box to test for last unhandled keystroke.

## 4.20 Category Speech Bubbles

Renumber the following categories.


## 4.21 Category Book Navigation (Book, Storyboard)

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.


## 4.20 Category bubble

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.

## 4.21 Category button

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.

## 4.22 Category calendar

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.

## 4.23 Category camera

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.

## 4.24 Category collections (graph paper, holder, playfield, x-y plane)

The usage of "cursor" here has nothing to do with the usual mouse cursor. It is simply an index into the contents of the container object, and should be called "index". The phrase "cursor location" has no meaning discoverable by the user.

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.

## 4.25 Category color & border

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.

## 4.26 Connections to Me

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.

## 4.27 Category connector

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,

## 4.28 Category embeddings (Pin)

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.

## 4.29 Category joystick

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.

$4×x2+y2$

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, $tan-1(yx)$

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.

## 4.30 Category kedama

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

• wrap Continue from the opposite edge.
• stick Stop at the edge
• bouncing Change direction like a bouncing ball

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?

## 4.31 Category kedama turtle

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.


## 4.32 Category kedama turtle color

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.

## 4.33 Category keyboard (PianoKeyboard)

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.

## 4.34 Category magnifier (several magnifiers, but not RoundGlass)

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.

## 4.35 Category movie controls

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.

## 4.36 Category number line

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.

## 4.37 Category paintbox (flaps)

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.


## 4.38 Pen Trails (graph paper, holder, playfield, x-y plane)

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. Contrast with clear all pen trails in the pen use category.

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.

## 4.40 Category playfield (page, graph paper, holder, playfield, x-y plane)

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.

## 4.41 Category polygon (arrows, curve, polygon, triangle)

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.

## Category sampling (graph)

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 $2π$ , scaled with x from 0 to 4000, and y from -100 to 100.

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.

## 4.43 Category Scratch Command

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?

## 4.44 Category Scratch Configuration

What does this do?

What does this do?

What does this do?

## 4.45 Category sector

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.

## 4.46 Category slider

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).

## 4.47 Category sound recorder

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.

## 4.48 Category star

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.

## 4.49 Category text (various text objects, but not Scrolling Text)

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.

## 4.50 Category time (Digital Clock)

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.

## 4.51 Category trash

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.

## 4.52 Category vector

This category is an option that can be turned on with the useVectorVocabulary preference in the scripting category of Preferences, or using the choose vocabulary option on the more... submenu of the viewer menu. (None of the other vocabularies listed work.)

Object's x Distance of object from left edge of world.

Object's y Distance of object from lower edge of world.

Object's theta The angle between the positive x-axis and the line connecting the origin and the object's position. In polar coordinates, θ.

Object's distance Distance of object from the origin of the world, at the lower left. In polar coordinates, r.

Object's unit vector

Object decrease by dot

Object divided by 5

Object increase by dot

Object multiplied by 5

Object's *

Object's +

Object's -

Object's /

## 4.53 Category video

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

• original, from the video itself
• 256 colors (8 bits per pixel)
Probably actually 8 bits per color (RGB) and 8 bits of Alpha (transparency) for a total of 32 bits per pixel.
• 256 grays (8 bits per pixel)
• 4 grays (2 bits per pixel)
• black and white (1 bit per pixel)

License: The Etoys Manual will be dual-licensed under GPL (standard for FLOSS Manuals) and MIT (standard for Etoys). By contributing, you agree that your edits can be used under both the GPL and MIT licenses.

# 5. Basic Objects

In this chapter you will find descriptions for a range of objects available for you to use in Etoys by way of the categories in the Object Catalog. The one exception is Tetris, which should be in the Games category but is not. You can find some of these objects in the Supplies Flap.

One of the objects available is the Object Catalog, the first item in the Supplies Flap at the top left. The following image shows categories selected at the top of the Object Catalog, and then the Basic category selected.

The Object Catalog is organized in large part in categories. Some objects can be found in more than one category. Every object listed can be found by clicking "find" in the object catalog, and then typing the name of the object. To explore objects in the catalog when you don't know their names, you can browse through an alphabetical listing, which includes some objects not in any category. These objects are described in the More Objects chapter.

There is an option in the Preferences object called eToyFriendly. Turning it off makes more objects available in the Object Catalog. These objects are also described in the More Objects chapter.

The objects in this chapter are listed in alphabetical order. Each listing includes

• the object's name in the Object Catalog
• its name in its Halo if different
• one or more images showing any significantly different states
• a detailed description of its functions and of the controls it offers
• special items on its Halo menu
• special categories and scripting tiles available in its viewer
• for compound objects, an analysis into separable Etoys components
Objects that occur as components of other objects, but are not in the Object Catalog, are documented in the More Objects chapter.

## All Scripts (Scripting category)

The All Scripts object has stop, step and go buttons for controlling all the scripts at once.

When you click on the round left icon, the All Scripts object will be closed.

When clicking on the right icon with the down arrow, the tool will be "opened up" so users can control each script in the project individually.

This pauses all running scripts.

This button runs every paused script exactly once. To run the scripts continuously using this button, keep it depressed with the mouse. The scripts will continue running until you release it with the mouse button.

When this button is pressed once all the scripts will run continuously.

tickers only- The user can choose whether to just show scripts that are paused or ticking by setting this option or show all scripts by unsetting it. The default value for this option is"set".

all instances- If set, then entries for all instances will be shown. If deselected, only one representative or a group of similar objects will be shown. This option is "set" by default.

For any object in the project that has a script being tracked, it shows the name of the object, the name of the script, the status of the script

Clicking the object name button brings up a menu of this form, with the option for the following submenu.

grab this object puts the object at the cursor ready to be placed.

reveal this object brings the object to the front

tile representing this object creates a scripting tile for the object, just like the tile tool in the object's Halo.

Open this script's Scriptor places the Script Editor at the cursor to be placed.

Open this object's Viewer opens the StandardViewer for the object, just like the viewer tool in the object's Halo.

destroy this script Delete this script from the project.

inspect morph Open a Squeak object inspector on this Morph.

inspect player Open a Squeak object inspector on the player for this Morph.

## Arrow (Graphics category)

An Arrow can be either a Polygon with two vertices and an arrowhead, or a connector very similar to ConnectorArrow. The first kind, described in this section, is provided in the Object Catalog, and the second kind, described in the More Objects chapter, is provided by the Connector Button.

Even though the Arrow of this kind is not a connector, it can be used as a tool to draw arrows for illustrations where the arrow points at something and does not connect to it. Shift-click to get handles for moving the ends. Add points in the viewer, in the polygon category.

Arrow handles mark the beginning and end points of the Arrow object. Do not overlap the beginning point (little blue circle handle - also signifies the cursor) and its end point (little yellow circle handle) to alter its state from a line to a point. This will create an unrecoverable error. Users would essentially have to "start over" and drag and drop another Arrow object.

Arrow is implemented as a special case of Polygon.

Unique Tiles

Aside from the common tiles found in other objects, the Arrow object has unique tiles under the Polygon and Input Category.

vertex cursor- A vertex is defined as a point of intersection between two lines. as mentioned above, the vertex cursor is indicated by the small blue circle handle. The default location of this cursor is in location "1" for a simple arrow (also the beginning point). To move this cursor to a different vertex point, click the arrows or input the vertex number.

vertices count- Vertices is the plural noun for a vertex. This tile indicates the number of vertices of the polygon.

x at cursor- this tile indicates the x coordinate of the cursor.

y at cursor- this tile indicates the y coordinate of the cursor.

add a vertex at the beginning- click this once or use in a script to add vertices in the beginning of the vertices list (vertex location 1). Click and drag the small yellow circle in location one to reveal the added vertex (or vertices).

insert a vertex at cursor- click this once or use in a script to add vertices in the cursor location (refer to the vertex cursor tile). Click and drag the small blue circle handle to reveal the added vertex (or vertices).add a vertex at end- click this once or use in a script to add vertices at the end (refer to the vertices count to reveal the last vertex number). Click and drag the small yellow circle in location the end location to reveal the added vertex (or vertices).remove all vertices but cursor- this deletes all of the vertices but the cursor.

remove the vertex at cursor- this deletes the vertex at the cursor location.

shuffle vertices- randomly switch vertices positions.

line is curved- this will not curve a standalone arrow but it will curve the lines when the arrow is used to create a polygon.

line is opened- A user can create a closed polygon by not only closing the points or vertices but also by simply changing this value to "false".

showing handles- the default value is "false" where the handles/vertices are not shown.

show handles- same functionality as the tile "show handles". The default value is unset. To show handle, click and set this button value.

closed- this closes the loop of the polygon.

curved- this curves the sides of the polygon.

specify dashed line- this creates different dash styles for the lines of the arrow or polygon sides.

You can specify the location of the arrowhead by selecting the different options in the menu: none (no arrowheads), arrowhead at the beginning, arrowhead at end vertex, arrowheads on both the begining and end vertices.

customize arrow-You can chose to use the standard arrowhead or customize the look of the arrowhead by clicking this option. This option is only useful if you already have an existing arrowhead. It will launch a tool that you can move around to change the look of the arrowhead.

## Arrow Editor (Connectors category)

The Arrow Editor creates double-headed curved arrows using any ISO-8859-1 character as the arrowhead.

Why?


The user interface includes a grid of characters in the selected font; two display panes, for characters and arrows; and a toolbar. Click a character in the grid to display it in an enlarged glyph in a pane on the right. Clicking in the glyph pane leaves a mark at the point of clicking.

What are the marks for?


•  Choose font brings up a menu of fonts

Komika TextKaps

BitstreamVeraSansMono

BitstreamVeraSans (the default font)

KomikaText

BitstreamVeraSerif

KomikaTextLight

• Rotate Rotates the selected character by 90 degrees clockwise.
• Toggle dots Turns colored dot display on or off in the glyph pane. What for?
• Make morph Creates a graphic object of the selected character, a Curve object, in the selected font and orientation.
• Install Function unknown
• Write code Create a selector for this arrow. Where?
• Clear clicks removes marks in the Glyph pane.
• Arrow scales Adjust the length and direction of the arrow. Is that right?
• Sample Display arrow in a pane in the editor, on the lower right.

The Arrow Editor is constructed out of an Alignment that functions as a toolbar, and a Glyph Editor. The toolbar contains nine Buttons and an UpdatingString.

Drop a Morph within the Attachment Point Adjuster to see its connection points as little red circles, add connection points to it, or edit existing connection points. To be effective, the connection points must be within the boundaries of the Morph.

The topmost toolbar contains a close button, a menu, a fullscreen button, and a collapse button.

The buttons on the toolbar are

Turn grid on/off Displays or hides a rectangular grid.

Add Array Create connection points by specifying how many down and how many across.

Add The next click places a connection point.

None Remove all connection points in the Morph.

Make movable/non-movable No effect. What is this supposed to do?

A joystick for fine positioning of the Morph in relation to the connection grid.

The items on the menu are

change title… Open an edit window to change the name of the object.

send to back No effect What is this supposed to do?

make next-to-topmost No effect What is this supposed to do?

make unclosable Remove close button from toolbar.

make undraggable It becomes impossible to drag the window by the toolbar. The Pick up tool no longer picks up the window, but does allow it to be dragged. The Move tool is unaffected.

full screen Expands the Attachment Point Adjuster to nearly fill the Etoys window. This is not reversable with this menu option.

window color… Changes the border color of the Attachment Point Adjuster using a color picker. This color picker has a toolbar at the top with the following tools.

• Close button
• Drag button
• Translucency picker
• Property sheet button
• Restore button for going back to the previously set color.
• An area that displays the currently selected color.

The main part of the color picker is a two-dimensional color array of colors to choose from by clicking with a dropper tool (which sets the color in the Attachment Adjuster and in a display area on the toolbal) or by clicking and dragging (which sets the colors dragged over as the dropper moves). To the right of this area is a gray-scale picker.

Right-clicking shows the color picker to be a Sketch, with no further Etoys structure. Its functions appear to be implemented entirely in Squeak.

The property sheet allows the user to set the color in the Attachment Adjuster as a solid color or gradient, and to turn on a drop shadow.

A tool for collaborating with other Squeak users. In the Sugar version of Etoys, a badge is automatically set up when an Etoys session is shared with other users (buddies).

On all other systems, you need a badge if you want to connect your Etoys directly with another Etoys running on another computer. Besides the badge, you also need Nebraska and fridge. You can find informaiton about these on the respective places in this chapter.

The components of a Badge are

String for the name of the person to connect to

Image of ?, which functions as a button for inquiring whether the other person is available

Blue Elllipse, to show working status

Green Ellipse, to show sending status

C Button, to open a text chat with the other person

T Button, to start Telemorphic (What's that?) with the other person

! Button, to tell the other person about the current Etoys project

? Button, to see whether the other person is available

S Button, to see the other person's world, if permitted.

## Book (Multimedia Category)

The book is a multi-paged structure. It is an authoring object that can be used for both static and dynamic illustrations and presentations. To use thebookdrag it from the supplies bin into your playfield. Text and other objects can be dragged into the pages of thebook. Aside from the common tiles the book has special tiles for navigating pages and getting the last keystroke entered.

The book can also be described as a multi-paged playfield. Users who have the experience in using theplayfieldobject would find that each of the book's pages are in themselves objects and are structurally the same as a playfield. Each page of the book has the same options and tiles that can be found in theplayfieldobject.

The book has its basic controls and short menu options on top of a single page by default. The page controls come in two formats basic (short) and advanced (long) Although the default controls include a couple of navigation arrows it won't be useful unless you access the more advanced controls and add pages.

Basic Controls (Short)

The basic controls is the default format. It comes with two navigation arrows. One to move forward one page and one to move backwards one page, a menu, page indicator with total pages value and a button to switch to more advanced controls.

find- click this option to search for words within the pages. The words are not case sensitive and don't have to be complete. This option also lets you find parts of the words.

go to page- type in the ordinal number of the page you would like to navigate to. If the page number that you typed in exceeds the total number of pages, Etoys will not give you an error but you will be remain on the page where you initiated the request.

show more controls- aside from the button on the left most of the controls panel, this option allows you to get expanded format (advanced option).

revert this page- to use this option, you must first switch to the advanced format of the controls panel and click the "save the page for later revert" option. This allows you to go back to the original state of your page.

revert entire book- As with the revert this page option, one can also save the entire book for a later revert.

In addition to the basic controls you got two icons with double arrows to navigate directly to the first resp. the final page. The + allows you to quickly add one page after the current page, the - will delete the current page. The advanced controls also have additional menu items.

find- same functionality as described in the basic controls format.

find again- this gives you the option to search the next instance of the text that you are trying to find.

duplicate this page- this makes a copy of the current page and inserts that copy as the next page.

revert this page- same functionality as described in the basic controls format.

revert entire book- same functionality as described in the basic controls format.

keep all pages the same size- when this option is set [black] all the pages follow the same dimensions of the current page where this option was selected. The default of this option is clear.

page controls at top- this button is set by default. When deselected, the control panel moves to the bottom of the page. This will be true for all the pages of the book.

page control short- within the advance control menu this button is deselected. Select this button to get the basic controls format.

page controls visible- this button is set by default. Deselecting this button will cause the controls panel to disappear. To retrieve the controls panel, bring up the book's halo by right-clicking the book. Select the Menu icon and scroll down and click the "book.." option. This will take you to the the advance controls menu where thepage controls visibleoption is available again.

scripting area- when selected if you have any "stop, step, go" buttons in the book will only control the scripts of objects inside the book. Also when selected, if you open the viewer of an object in the book, the viewer will open inside the book.

view pages full screen- If set, all the book's pages occupies the entire screen. The toolbar is hidden from view and the book's control panel minimizes and moves to the top left of the screen. To exit the full screen mode and make the toolbar visible, click on the book's menu and select this button again.

wrap after last page- This options is set by default. If deselected, the book will not cycle to the first page after the last page is reached.

sort pages- when selected, it opens up a small window/tool where one can arrange the pages of the book.

hand me a bookmark for this page- this creates a bookmark button for the page. Drag the created bookmark button outside of the page and change the label to make it distinctive to the page (follow instructions onButtonobject on how to do this). The button takes you back to the bookmarked page.

hand me a thumbnail for this page- this creates a small icon to represent the page.

visual and sound effects:

set sound effects for this page- clicking this option opens up 18 choices for sound effects for the page. The sound plays as one navigates to the page. The user can also his/her own sounds. See the sound recorder object for more information.

set visual effects for this page- clicking this option gives the user 11 different visual effects (including "none") for the page. The visual effects are visible upon turning the page. Only one visual effect is active per page and each page can have a unique visual effect.

set sound effects for all pages- clicking this option opens up 18 choices for sound effects for all of the pages of the books. The sound plays as one navigates to each page of the book. The user can also his/her own sounds. See the sound recorder object for more information.

set visual effects for all pages- clicking this option gives the user 11 (including the default "none") different visual effects for all the pages of the book. The visual effect chosen will be visible upon turning each page.

mark this page to be revertible-this saves a snapshot of the page once at its current state. Users can then go back to this state by going back to the menu and selecting "revert this page" option (see the section on this option above for more information). Selecting this again will take another snapshot that will overwrite the last one.

mark entire book to be revertible-this saves a snapshot of the entire book once at its current state. Users can then go back to this state by going to the menu and selecting "revert entire book" option (see the section on this option above for more information). Selecting this option again will take another snapshot that will overwrite the last one.

make all pages the same size as this page- clicking this option makes all the pages of the book to be the same sizes as the current one.

set background color for all pages- selecting this option launches the medicine dropper tool which allows a user to chose the color of the page from the color palette. Selecting a color sets the background color for all of the pages of the book.

uncache page sorter- When you have clicked "sort pages" before in your book options, you will get a list of all your pages with thumbnail pictures for easier sorting. This option will delete the thumbnail pictures.

make a thread of projects in this book- this option takes all projects you have put in the book, puts them in a thread and adds a project navigator to the project. This allows you to navigate easily through all these projects. But this option has a bug in Etoys 4.0. You will only get the navigator for the projects from your book, and the book project itself is not included. You will not be able to return to your book project using the navigator or the arrows in the toolbar. The only way back is to click ALT-SHIFT-W, choose "Jump to project" and then choose your book project.

make this a template for new pages- choosing this option allows newly created pages to have the same properties as the current one. This option behaves exactly [something missing]

show full screen- If selected, all the book's pages occupies the entire screen. The toolbar is hidden from view and the book's control panel minimizes and moves to the top left of the screen. To exit the full screen mode and make the toolbar visible, click on the book's menu thenadvancedoption then select "exit full screen" option.

Unique Tiles

first page- This tile takes the user to page 1 of the book.

goto -go to the given page. This tile does not accept numbers but accepts the tile representation for the page. To get the tile from the page, bring up the page's halo and click the orange button.

Drag this tile to replace the default value "dot".

last page- This tile takes the user to the last page of the book.

next page -- Unlike the goto tile where one can jump from one page to any pages in the book, the next page tile only takes the user one page forward.

number of pages- Indicates the total number of pages that the book contains.

page controls short- Whether page controls are shown in short form or in long form.

page controls at top- If "true", page controls are shown at the top of the book, if "false", they will be shown at the bottom.

page number- The ordinal number of the current page.page controls showing- The page controls are by default on top of the book. Using this option, you can choose if you want to show or to hide them. A "true" value on the page controls showing tile says "yes I want the controls to show". A "false" value will hide them.revert page- revert to the original version of this page. page controls showing Display or hide page controls.

previous page Like the next page tile where one can jump one page forward, the previous page tile takes the user one page backwards.

revert all pages- revert the entire book to its original contents.

## Bouncing Atoms (Just for Fun category)

An object with dots (atoms) that bounce off each other and off the walls of the box. From the bouncing atom's menu, you can start infection, set atom count and show infection history. Starting an infection turns one atom red. When a blue atom and a red atom collide, the blue atom is infected and turns red. You can watch the infection grow in the window, and you can view the progress of the infection in a graph by selecting show infection history from the menu. The atoms pause after you set the atom count and they restart if you pick up Bouncing Atoms with the mouse and put it down again, or right-click the bouncing atoms object.

## Broom (Graphics category)

The broom allows you to align objects vertically or horizontally (depending on the direction first used to drag the broom). To align objects simply click on the broom and drag to align the objects. Once you start dragging the broom will change into a line. The broom's size can be extended by dragging along the line shown when you first start dragging the broom. Dragging the broom horizontally creates a vertical line, while dragging it vertically creates a horizontal line.

Broom is implemented in the BroomMorph class, a subclass of Morph, and in other classes in the BroomMorphsBase category in Squeak.

## Button (Scripting category)

Buttons are controls that users click to make something happen via a tile script. The default Button displays text inside a rounded rectangle. Its script will be a function of its containing playfield.

To use the Button object, drag it out of the Supplies bin and into a playfield, which could be the world. In its default state, the script for the button is empty. To add scripts to this button, bring up its halo by right-clicking it. Click on the green button with a rectangle on it in the bottom of the buttons halo to bring up a script window. A script for its containing playfield will be created.

If you have a script defined for a button, you cannot move the button to another playfield, which will not accept it. Delete the script and then drop the button into the new playfield, or choose change target from the Halo menu, and enter the name of the playfield where you want it to act. Then you can drop it into the new playfield and create a script for it there.

You can also create a button by first creating a script then clicking on the menu in the Scriptor and selecting the button to fire this script option from the script window.

To create text that responds to user mouse-clicks, set the border width of the Button to zero, and the Button color property to the same color as the Button's holder or container (for example, the page it is on). The border width property, the color property, and the label property are located on the Button pane of the Button Viewer.

To change the font of a Button, click the Menu button in the Button's halo. Select "Unlock String". Right-click on the Button's label twice. The first right-click will display the Button's halo, the second right-click will display a halo for the String object that contains the Button's label. Click the Menu button in the String's halo, and select "change font".

To create a picture button, create a Sketch using the Paint tool, and add a script to the Sketch object that fires on a Mouse Down event.

Unique tiles

The Viewer for a Button contains a button category.

color Get or set the color of the button.

border width Get or set the width of the button's border.

border color Get or set the color of the button's border.

rounded corners Toggle rounded or square corners of the button.

act when Choose whether the script should fire when the button is pressed, up, or down.

fire Trigger any and all of this object's button actions.

height Get or set the height of the button.

height Get or set the height of the button.

label Get or set the wording on the button.

## ButtonBar (Connectors category)

This is a holder for buttons in a horizontal or vertical line, adjusted according to the size of the ButtonBar. Colors, sizes, and style of Buttons and ButtonBar are editable.

## ButtonDown? (Scripting category)

This is a scripting tile for querying whether the left mouse button is down. It is held in a Scripting Tile Holder. Place it as the test in a test yes no scripting tile.

## Button Flap (Connectors category)

The Button Flap object is a flap tab that adheres to the left edge of the world by default, with the Text label My Flap. Initially the flap is closed, as here.

Clicking the flap tab opens a second Object, a parts bin, with the flap tab on its right edge, as shown in part here.

Clicking the flap tab again dismisses the parts bin, leaving only the flap tab visible.

The user can put any kind of object in the Button Flap, but it is most effective using Maker Buttons that have been activated by putting object tiles in them, as described elsewhere in this chapter. In fact, putting other kinds of object in the Button Flap and trying to use them can cause unrecoverable errors. Putting a fresh maker Button in the Button Flap without activating it also causes unrecoverable errors. However, you cannot drag objects from the Object Catalog to this flap. You have to put objects down in the world or within some other object before you can pick them up and drop them in this flap.

Thus, the procedure should be

1. Create a Maker button
2. Drop a tile on the Maker button to activate it.
3. Move the Maker button to the Button Flap parts bin.

If the user moves a Maker Button over a closed Button Flap tab, the parts bin will open dynamically to accept the Maker Button, closing again if the Maker Button is moved away without being dropped. Buttons dropped into a Button Flap are placed in a vertical , starting at the top of the parts bin. The user can rearrange the Maker Buttons by dragging and dropping or picking up and placing them with Halo tools.

Button Flap settings are controlled via the object menu on the flap tab's halo.

The parts bin has a different Halo menu, shown in its description elsewhere in this chapter.

Button Flap settings (changed via the Button Flap menu) include:

tab color

The color of the Button Flap's tab

flap color

The fill color of the flap's parts bin.

cling to edge…

Sets the location of the flap (top, left, bottom or right)

change tab wording…

Changes the text that displays on the tab

use graphical tab

Displays the tab as a graphic instead of the default text. Once this option is selected, a new choose new graphic… option appears on the menu.

use solid tab

Displays a solid colored tab with no text.

parts-bin

When parts bin is checked, by taking objects out of the flap, you create duplicates.

When it is not checked, by taking objects out of the flap, you create siblings.

pop out on dragover

When selected, the Flap will expand when you drag an object over the the flap handle.

pop out on mouseover

When selected the "Flap" will expand when the mouse touches the flap handle. When not selected you need to click the flap handle.

shared by all projects

When selected the flap will be displayed in all projects until you exit Etoys.

BUG: - if you set to shared by all projects and then switch to another project and back using Previous Project/Next Project (or project icons), a second instance of the flap is created.

compact flap

When selected the length of the flap will match that of the side to which it is attached. When unselected the flap size, will minimize to the smallest possible size that can contain its contents.

destroy this flap

Another way to delete the flap.

Special tile in paintbox category:

start painting in

Here you can define your own paint area. You need to drag a playfield out of the supplies flap and drag the "start painting in"-tile on a script. Then you need to replace "dot" with a tile referring to the playfield (you can get it using the orange halo icon of the playfield). When you execute the script, the painting tool will open and you can paint within the playfield.

Take care: You should only execute the script once! If you just click on the clock, it will change it's state into paused, but will keep giving you a new painting tool until you change the script's state to "normal".

## ButtonUp? (Scripting category)

This is a scripting tile for querying whether the left mouse button is up. It is held in a Scripting Tile Holder. Place in the test in a test yes no tile.

## Calendar (Just for Fun category, v 5.0)

A simple, scriptable calendar that displays one month at a time, with button controls for previous year, next year, previous month, and next month. Click a day to select it. Clicking the gray days in the previous or next month changes to the month selected. The viewer for Calendar has the extra category calendar.

date The selected date as a text string

day The day of the month for the selected date, as an integer

month The month for the selected date, as an integer

year The year for the selected date, as an integer

day name The name of the day of the selected date in the current language, as a text string

month name The name of the month of the selected date in the current language, as a text string

date format A selection among dd/mm/yyyy (European), yyyy/mm/dd (most easily sorted by computers), and mm/dd/yyyy (US).

go to today Command to return to and select the current year, month, and day in the calendar display

julian day Number of days since day 1 of the Julian epoch, January 1, 4713 BCE. Use of julian days simplifies date arithmetic and conversions between calendars.

Components used in Calendar are Alignments, Buttons, Strings, and Texts.

Calendar is implemented in the CalendarMorph class, a subclass of Morph, in the Etoys-Calendar category in Squeak.

## Camera (Multimedia Category)

A player for video devices like cameras, video capturers, etc. Camera works automatically with the built-in camera on the XO computer.

From camera's menu, you can configure the video device (see below) or start showing statistics (in transcript). Once you show statistics, you can reset them from the menu. (Can someone add more about showing statistics?) Camera has a special tile in the graphics category.

• camera's graphic is the picture currently being worn.

and 9 tiles in the special viewer category video.

• camera play is a command to start the camera.
• camera stop is a command to stop the camera.
• camera's is running is a tile that returns true/false if the camera is/is not running.
• camera's auto extent sets the height of the slider. This can also be set using the yellow change size button on the slider's halo.
• camera's brightness allows changing of the camera's brightness.
• camera configure video device allows the user to set the frame width and height, test pattern (lenna or color bars) and choose to show the time or not in the camera window.
• camera's contrast allows changing of the camera's contrast.
• camera's last frame is a morph with the last frame.
(can someone describe this more completely?)
• camera's resolution is a tile that allows you to pick among original, 256 colors, 256 grays, 4 grays and black and white.

## Chess (Games category)

This is a chess game which you can play against the computer. The visual form of Chess consists of an array of chess squares, numbered from a1 to h8, and ChessPieces, all arranged in a Bordered Morph, with a toolbar implemented as an Alignment of Buttons. The tools are

• New Start a new game
• Help Have the computer suggest a move
• Play Have the computer make the next move
• Auto Have the computer play the entire game
• Undo Take back the last move
• Redo Repeat a move previously taken back
• Quit Close Chess
The user can click and drag pieces to move, and the computer will reply.

## Chinese Checkers (Games category)

This is a Chinese checkers game which you can play against the computer or other people by clicking and dragging pieces, or by clicking pieces to pick them up and clicking to put them down. Legal moves consist of jumping a piece of either color with one of the player's pieces, once or in an unbroken sequence of moves. The object of the game is to move one's pieces to the location where the opposing pieces start. This is a standard six-pointed board, and the game supports up to six players.

Set the total number of players, and the number of human players, using the reset… command on the Halo menu. There is a ChineseCheckers piece off the board to indicate by its color whose turn it is.

Clicking in a spot which is a legal move results in an animation of the piece moving along a path from the starting point to the finishing point. This animation can be turned off in the Halo menu.

## Cipher (Games category)

The Cipher Panel displays an encrypted plaintext message in a simple substitution cipher, with one letter in the cipher alphabet corresponding to each letter in the plaintext alphabet. There are some tools to support decryption. When the user types a letter, all matching letters are filled in.

From the About the Cipher Panel:

You can solve the cipher by clicking above any letter in the message, and typing the letter you think it should be. The Cipher Panel automatically makes the same substitution anywhere else that letter occurs in the encoded message. If you are having trouble, you can use the command menu to 'show cipher hints'. That will display how many of each letter occurs, which is often a help in solving ciphers.

The tool bar at the bottom is an Alignment of Buttons.

• show help Display the About the Cipher Panel
• show hints Display some suggestions, plus the count for each letter in the cipher
• clear typing Revert to the original cipher, with no guesses filled in
• enter a new cipher The user can type in a cipher text for Cipher to use
• quote from Squeak Select and encrypt a short text from the Squeak documentation in the Etoys image, and present it as a cipher to solve.

## Circle (Graphics category)

A circular Morph. This shape can also be created using the Ellipse object, for example by editing its length and width in the more geometry Viewer category. However, these remain distinct object types, because an Ellipse can be stretched or shrunk in either direction, while resizing a Circle does not change its shape.

## Clock (Just for Fun category)

A ticking clock with hour, minute, and second hands. The time on the clock is the time on the computer. The Clock's Halo menu includes these options:

unlock all contents Contents are the 12 strings for the hour numerals. They cannot be locked again.

Can the numerals be edited?


unlock… Presents a menu of strings to unlock, all initially called string. What does unlocking do?

roman numerals A check box to toggle display between Hindu-Arabic numerals and Roman numerals.

anti-aliasing A check box to toggle display between aliased and anti-aliased font.

change font… Bring up a menu of the fonts in the system to choose from.

change hands color… Bring up a color picker to choose from.

change center color… Bring up a color picker to choose from.

Note that the color of the body of the clock can be changed in its viewer as usual.

The numbers on the dial are Strings. The Clock's dial can be stretched into an ellipse.

Clock is implemented in the ClockMorph class, a subclass of StringMorph, in the Morphic-Demo category in Squeak.

## Connector (Connectors category)

Connectors are lines (straight or curved, with or without arrowheads) that can be used to show relationships of many kinds between objects. They initially appear with red connection points that can be clicked and dragged to drop on connection points of other objects, including other connectors. One connection point is designated as the source (initially on the left) and the other the destination (initially on the right). There are options for setting the appearance and behavior of connectors, including setting arrowheads to appear at either end or at both.

Connectors stay connected to the objects when the objects are moved around, maintaining the relationships among linked objects, but shifting the connection point attached to to minimize the length of the connector. This also means that the connector will not overlap the object it connects to.

Connectors have a connector category in their viewers.

These tiles have the following functions

add label Command to attach an optional Label holding the given text. Unfortunately, the label defaults to black text (Label's color) on a black background (Label's background color). However, the colors can be edited in the Label's viewer.

destination Variable showing an object connected to at the destination end.

destination arrow name Variable holding a name for this arrow, set when a destination arrowhead is chosen.

orthogonal Variable to toggle whether line segments in connectors go only horizontally or vertically.

remove labels Command to delete attached label.

smooth curve Variable to toggle between straight and curved lines in Connector. This has no effect if the connector is not connected at both ends. When it is connected, the user can drag and drop any point on the connector's Line to adjust it.

source Variable showing an object connected to at the source end.

source arrow name Variable holding a name for this arrow, set when a source arrowhead is chosen. The same selection as for destination arrow name.

straighten Command to convert a curved connector to straight lines.

In addition to the usual fill & border category in the viewer, Connectors have a category called color & border containing one tile, line width, that can be set to any integer, starting at 0 (invisible).

Connectors have a "hidden" power. Once an object is "connected" to either the source or destination of a connecter, a new viewer category appears for the connected object called "connections to me", This allows you to run scripts (using the tell all… tiles) on items connected to an object. For example, with a single connector attached to a circle at its destination end:

Predecessors and successors are evaluated by taking connections to or from the given object, then connections to or from those objects, until no more are found.

The following are the different types of connectors that are in the object catalog:

• Connector a basic connector with no arrows at its ends
• ConnectorArrow a basic connector with and a basic arrow at its destination point
• Curvy Connector a basic connector with its "smooth curve" attribute set to true
• Curvy ConnectorArrow a basic connector with its "smooth curve" attribute set to true and and a basic arrow at its destination point
• Schematic Connector a connector that adjusts the connection points it connects to to make itself as short as possible
• Random Connectors a button that will create random arrows each time you drag one from it.

There is also a Connector Button that provides a tool for dragging to create connectors.

Options in Halo Menu for Connectors:

• show handles Supposedly to toggle showing or hiding handles, but actually toggling their color between red and blue.
• be orthogonal Toggle whether Connector's line segments will be constrained to be horizontal and vertical
• --> Arrowhead at destination end
• <-- Arrowhead at source end
• <-> Arrowhead at both ends
• arrow sizes - changes arrow heads length and width by dragging
• add label - will add a text label that will move with the arrow. You can change the position of the label relative to the connector by dragging the label to a different position.
A Connector is made up of a Line, two Connector Ends, and an optional Label.

## Connector Arrow (Connectors category)

The same as a basic Connector, except that it starts with no arrow at its source point, and a basic arrow at its destination point.

## Connector Broom (Connectors category)

The broom (which applies to all objects, not just Connectors) allows you to align objects vertically or horizontally (depending on the direction first used to drag the broom). To align objects simply click on the broom and drag until one edge of each of the objects is aligned, as shown here.

Once you start dragging the broom will change into a line indicating the direction of movement, and the width of the region to be swept. The broom's size can be extended by dragging in the direction of the line. The Connector Broom cannot be moved by clicking and dragging in the ordinary way, but one can use the Halo tools to move it, or shift-click and drag.

## Connector Button (Connectors category)

A maker button with an Arrow loaded into it, which is very similar to a ConnectorArrow. Each time you click on the button you create a new Arrow. The Arrow is attached to the cursor. Clicking in the world or in an Object sets the source point of the Arrow. Clicking again sets the destination point.

## Connectors Flap (Connectors category)

The Connectors Flap appears in closed position attached to the bottom edge of the world by default, as shown here.

Clicking this flap tab opens the parts bin of the flap, offering a variety of connector objects, labels, buttons, and tools, somewhat different from the selection in the Connectors category of the Object Catalog, as shown here.

The objects provided are

• Label
• Smart Label
• Connector
• ConnectorArrow
• Curvy Connector
• Curvy ConnectorArrow
• Title
• Text Rectangle
• ButtonBar
• Maker Button
• Basic Shape
• New Button Flap
NEEDS TESTING: There are some bugs here (was not able to consistently reproduce and I am tired, but definitely this needs more testing. I got some "Abandon" booms a few times.

## Crostic (Games category)

The Crostic Panel presents an acrostic puzzle for solution. As you type in answers for the clues, the letters also get entered in the text of the hidden quote. Conversely, as you guess words in the quote, those letters will fill in missing places in your answers. In addition, the first letters of all the answers together form the author's name and title of the work from which the quote is taken.

show help Open an About the Crostic Panel help window

show errors Highlight incorrect letters until the user clicks somewhere

show hints Offer to show the five longest clues

clear Start over

open... Bring up a file dialog that does not say where to look for the sample crostic file, which the help text identifies only as sampleFile.

Crostic is implemented in the CrosticPanel and CrosticQuotePanel classes in Squeak, in the Morphic-Game category.

## Curve (Basic category, Graphics category)

A smooth curve made of smoothly joined Bezier curve segments, except for a possible angle at the origin point. This is implemented as a Polygon with the line is curved property set to true. Curve has the polygon category in its viewer. Curve has the same color category as Rectangle. Shift-click to show these handles.

Click and drag the blue origin Ellipse or any of the yellow Ellipses to adjust the shape of the Curve. Click a green triangle Polygon to get another yellow dot. Place a yellow dot over a neighboring yellow dot to delete one of them.

By clicking the menu button on the Halo, curve's handles can be shown, curve can be made "open" rather than closed, curve can be converted into a polygon by unchecking curve, and the perimeter of curve can be changed from solid to a variety of dashed lines. Clicking specify dashed line on the Halo menu opens this dialog.

## Curvy Arrow (Graphics category)

Although Curvy Arrow looks like a type of connector, it is actually an open Polygon with the line is curved property set to true. It can be edited in the same way as other Polygons, by shift-clicking to get handles to click and drag. Placing the end point over the start point deletes the end point, so Curvy Arrow cannot be made into a loop in this way. However, setting the line is opened property to False adds another segment to close the curve, and fills it with a solid color, editable using a standard color picker.

## Curvy Connector (Connectors category)

A basic connector with its "smooth curve" attribute set to true. Initially, when not connected to other objects, it looks just like a Connector.

When the ends are attached to connection points of objects, the vertices of this object can be manipulated using the same techniques as for the Polygon object, although the appearance of the handles is different. Shift-click to show handles.

Drag a handle to move it, or click and drag between handles to create a new handle. As with the Connector object, putting two vertices together deletes one of them.

Curvy Connector is composed of a Line with connector end objects when it is not connected, and Curve Handles when it is connected.

## Curvy ConnectorArrow (Connectors category)

Essentially a ConnectorArrow with its "smooth curve" attribute set to true. When the ends are attached to connection points of objects, the vertices of this object can be manipulated using the same techniques as for the Polygon object, although the appearance of the handles is different. Shift-click to show handles.

Drag a handle to move it, or click and drag between handles to create a new handle. As with the ConnectorArrow object, putting two vertices together deletes one of them.

Curvy Connector is implemented as a Line with an arrowhead and with connector end objects when it is not connected, and Curve Handles when it is connected.

## Digital Clock (Just for Fun category)

A digital clock that displays the time on the computer. From the clock's menu, you can choose to change font, hide or show seconds, and display a 12-hour, am-pm clock (in which time runs illogically from 12:00 am-11:59 pm, because the Medieval Catholic Church did not allow 0 as a value), or a 24-hour clock (in which time runs logically from 00:00-23:59. The digital clock has the special viewer category time, with 3 tiles.

• Digital Clock's hours returns the Digital Clock's numeric hour.
• Digital Clock's minutes returns the Digital Clocks numeric minute.
• Digital Clock's seconds returns the Digital Clock´s numeric second.
Watcher Tiles [move to Tiles chapter]

There are also tiles that cannot be used directly in scripts, but that can be used to create watchers for values of variables. For example, in the Digital Clock object, the time category...


## Ellipse (Basic category, Graphics category)

A Morph with an elliptical or circular shape. To make it a circle, set the length and width the same in the more geometry category of its viewer. Ellipse has the same color category as rectangle.

## Enhanced Text (Connectors category)

An editable text on a transparent background. Clicking an Enhanced Text turns on a border and displays a cursor as shown here.

The "Enhanced Text" object differs from "Text" object in that it has an extra attribute in the Viewer's "text" category called "focused". "focused" is set to true when the user clicks Enhanced Text, and the editing cursor is inside the text object. The focused attribute can be used to prompt the user for input.

Enhanced Text also has two additional menu items that "Text" does not:

• accept on CR: this attribute will cause the focus to be shifted to the next object when the user hits the <Enter> or <Return> key. The next object will be the next text object (as determined by the "element number" attribute in the Viewer's "miscellaneous" category.
• accept on focus loss: which (HELP couldn't figure out what this does)

Enhanced Text does not have the menu items translatable or use pango, both of which are found in Text.

## Event Theatre (Multimedia category)

A framework for creating tutorial snippets. The Event Theatre provides a framework for authoring "event-movies". It uses custom variants of the Navigator, the Supplies flap, the painting system, property sheets, Viewer flaps, etc., all of which reside within the controlled confines of the Theatre. To author an event-movie, get a new Event Theatre from the Objects catalog.

1. Resize the Theatre, using the halo, to the delivery size desired for playback.
2. Use the menu in the controls panel to add or delete Supplies and Navigator flaps as desired.
3. Edit the "caption" by clicking on the text that says "Untitled" and typing your desired caption. This caption is affixed to playback buttons, and, generally, provides a way to identify the event-movie.
4. Set up the "initial conditions" for the event-movie you're about to record (e.g., paint a background, provide some explanatory text, add objects you want to be present at the start of the movie.) When the recording is first opened by the user for playback, and whenever the recording has been rewound, this is exactly what it will look like.
5. When ready to start the recording, press the "Record" button. A red border will be seen around the recorder, to indicate that recording is in progress. Recording will continue until you hit the ESC key.
6. Note that if you want to include sound in your recording, you can add it directly during playback, or you can produce voiceover externally and add it in later using the Event Roll.
7. Now proceed to "do", with the mouse and keyboard, whatever you wish to record. For best results, all mouse gestures should be made within the interior of the Theatre.
8. Hit ESC when done recording.
9. To review what you've recorded, press "Play". If unhappy with the result, repeat steps 1-8.
10. If you're happy with the result, and now wish to add a sound, open the sound panel, then click Play to replay the recording, and whenever you wish to add a snippet of voiceover, click on the "Start Recording Voiceover" button, and start talking, and when done with that snippet click the "Stop Recording Voiceover" button. Once the playback finishes, the added voiceover(s) will become part of the event tape, and will be seen in the event roll.
11. When you're happy with the result, hit the "Publish" button, to get a playback button. There are currently two choices:
• a. Iconic Button - Initially provides a picture of the initial scene of the movie, scaled 0.3x, and overlaid with the word HINT. When the user clicks on such a button, the event-movie is played back in an ephemeral "playback theatre", and after the playback is done, the playback theatre shrinks down to a 0.5x scale-downed picture of thefinalscene of the movie. Subsequent hitting of the button will again invoke a playback.
• b. Textual Button - a simple labeled button which, when pressed, triggers playback of the event tape.
• The playback button you obtain when you "Publish" can be placed anywhere, such as on the page of a book. You can control, via a playback-button's halo menu, whether or not it should be "auto-start", and whether or not "auto-dismiss". When the user presses the button, a "Playback" space will open, which resembles an Event Theatre, but has only playback-relevant controls. A playback set up for both auto-start and auto-dismiss comes without any controls.
• To edit the "event tape" of a recording you have made in an Event Theatre, and for a generally good time, click on the interlocking-circles icon to obtain a tool that allows you to visualize and to edit a "score" or "piano roll" of the event tape.
Summary of terms

Event Theatre

The main tool for creating an Event Tape.

Event Roll

An auxiliary tool showing the full "score" of an Event Tape.

Event Tape

The results of an event-theatre session; an interaction sequence that can be played back.

Event Recording

A term interchangeable with "Event Tape."

Event Movie

What you see when you play back an Event Tape. Dragging out an event player produces a mini world where you can record all your actions for later play back. The text above is from the excellent help guide that can be accessed through the question mark at the lower left of the object.

## File Dialog (Scripting category)

The File Dialog box lists all the directories and files within a user's system. The tool can find files in directories and group them by type: Art (.gif, .png) , Morphs (.morph), and Projects (.pr). There are buttons to load the project, to make an XO bundle and to cancel the search operation.

## Flasher (Just for Fun category)

A red dot that "flashes" on and off.

Flasher is implemented in the Flasher class, a subclass of EllipseMorph, in the Morphic-Demo category in Squeak.

## Frame Rate (Just for Fun category)

A readout that allows you to monitor the frame rate of your system. From the frame rate's menu, you can choose to change font and its emphasis and you can select pango, a text rendering library.

## FreeCell (Games category)

The objective of the FreeCell game is to move all of the cards to the four "home cells" in the upper right corner. Each home cell will hold one suit and must be filled sequentially starting with the Ace. There are four "free cells" in the upper left corner that can each hold one card. The top card in a stack can be moved to a free cell or to another stack. When moving a card to another stack, it must have a value that is one less than the exposed card and of a different color. When a pile is emptied, any card can be placed in the open space, to be built on in the normal manner. A large part of the strategy of FreeCell is to move cards so as to gain access to other cards, while maintaining enough free space to continue moving, or even to increase the amount of free space by emptying piles.

The game supports short cut moves. If there is enough space to move several cards in a sequence one at a time, they can be moved as a group by clicking on the highest-value card in the group. Cards that can be played to the home cell piles without any possibility of blocking progress will be moved automatically. When all piles are unblocked (no higher value card on top of a lower value card) all cards are played to the end of the game.

Etoys objects used in the construction of FreeCell include FreeCellBoard, PlayingCardDeck, PlayingCard, String, Led, LedTimer, LedDigit, and Button.

## Grab Patch (Graphics category)

Use Grab patch to get a partial screen shot. Clicking Grab Patch in the Object Catalog turns the cursor into a cross. Click and drag to select a rectangular area in the Etoys world. The result is a Sketch attached to the cursor ready to be placed in the world, where it can be edited with the PaintBox tool in the Halo (gray pencil icon).

## GStreamerPlayer (Multimedia category)

A media player.

What kind of file does it play?


Controls are

• Open file (o)
• rewind (r)
• play (p)
• stop (s)
• previous frame (<-)
• next frame (->)
• zoom (full screen, 50%, 100%, 200%)
• advanced (turn repeat on or off)

Open

Rewind

Play

Stop

Quit

Volume slider

Time slider

GStreamerPlayer contains a toolbar made of Buttons, and two Sliders. Its file dialog is a Bordered object containing a button bar of PluggableButtons, a file tree in the form of a SimpleHierarchicalList, and a directory display in the form of a PluggableList.

Bug: This object is supposed to have a Viewer category called movie controls, but selecting it causes a system error (MessageNotUnderstood: UndefinedObject>>totalFrames), and does not display the tiles in the category, although the Viewer does display the category name.

GStreamerPlayer is implemented in the GStreamerPlayer class, a subclass of Object, in the GStreamer-UI category in Squeak, and in other classes in GSTreamer-* categories.

## H Number Line (Graphing category, v5)

A line of positive and negative integers, such as one might use for the X axis in a graph.

H Number Line is implemented in the HorizontalNumberLineMorph class, a subclass of NumberLineMorph, in the MorphicExtras-Charts category in Squeak.

## Joystick (Basic category)

The joystick can be used to control another object.

Drag a joystick into the playfield. Draw an object. Script the object with Forward and Turn.

Open the viewer of the joystick and select "joystick's left right" and "joystick's up down" from the joystick category and put them in place of the numbers besides forward and turn.

You'll have a script that allows the joystick to control the object.

You set the maximum X and Y pixels of "joystick's left right" and "joystick's up down" by using "set X range" and "set Y range" in joystick's menu. This controls the maximum movement of Sketch in the above script. You can also turn "auto-center" off and on and track a real joystick in joysticks menu. Joystick's viewer has the categories joystick and graphics. The graphics category is described in the sketch object section. The joystick category has 6 tiles.

• joystick's amount reads the displacement in pixels of the red dot from the center within the joystick box, which is different from the amount Sketch moves in the script above.
• joystick's angle reads the angle in degrees from the positive x direction formed by a line joining the center of the box to the red dot.
• joystick's button1 provides an option to configure for an external joystick button
• joystick's button2 provides an option for configure for an external joystick button
• joystick's left right can be used as an input value as shown in the script above. The reading in a watcher displays the value determined by "set X range"
• joystick's up down can be used as an input value as shown in the script above. The reading in a watcher displays the value determined by "set Y range"

## Key press (Just for Fun category, v 5)

An object that, when selected with the mouse, displays the message Press new key in a SpeechBubble. Although right-clicking the bubble brings up its halo, releasing the mouse button dismisses the SpeechBubble and its Halo instantly. When activated Key press shows an indication of the next key pressed, as understood by the operating system for alphabetic and numeric keys, punctuation keys, and some function keys and key combinations. It does not show capital letters, but does show some key combinations involving the shift key, such as <c. On keyboards with dead keys for creating accented letters and other compounds, pressing the first key has no effect on Key press, but it usually displays the result after the second key. An example is ^, entered as ^ key followed by space.

Special keys recognized include

• <tab>
• <shift-tab>
• <esc>
• <cr> (return or enter key)
• <up>, <down>, <left>, or <right> for arrow keys
• <pageup>
• <pagedown>
• <home>
• <end>
• <delete>
• <backspace>

but not the numbered function keys F1-F12 or the modifiers shift, control, alt, fn by themselves. Some control key combinations are recognized as such, and others as cmd (command) combinations. For example, the alt-a combination using the left alt key in Ubuntu Linux is recognized as <ctrl-a>, while ctrl-a is recognized as <cmd-a>. Right-alt-a displays as a non-character box, although the viewer for the string on the button shows it as à.

Lasso (Graphics category)

Use lasso to grab part of the screen of any connected shape as an editable Sketch.

Note: you get a picture of the part of screen you grab. A grab of a script or a tool will be an image, not an object copy. To make a real copy use the green halo handle

Lasso cannot be placed as an object, so it cannot be right-clicked to get its halo, and thus its viewer.

## Line (Graphics category)

The line is a Polygon with two vertices by default, but it has options so that can be made to act as a multi-segment Polygon or a smooth Bezier curve, and can have arrowheads at either end or at both. It occurs as a component of various Connector objects. Its viewer includes the polygon category.

## Magnifier (Just for Fun category)

A rectangle that displays a magnified image of the world around the location of the cursor. Dragging the Magnifier makes it seem like a magnifying glass, magnifying whatever is under it. From the magnifier's menu, you can choose to change change the magnification, track pointer (which turns off and on the second magnifying option described above), show pointer (the center of the magnifier), or change the magnifier to a RoundGlass, with different options. This conversion cannot be reversed.

Magnifier - magnifier

magnification The factor by which the tool magnifies whatever it is looking attrack pointerWhether or not the pointer should track the cursor locationshow pointerWhether or not the pointer should show the cursor location

show pointer Turn a dot in the center of the magnify window on or off.

track pointer Turn magnification of the area around the cursor on or off. With this option turned off, dragging the magnifier still magnifies what is under it.

## Maker Button (Connectors category)

This object allow you to make multiple copies of an object and all its scripts and attributes. Simply drag an object onto the Maker Button to load that object into the button. Then each time you click the button you make a new copy of that object.

## Mines (Games category)

Mines is a very simple game to play. The rules are just this: there are 99 mines laid down on the board. Find them without ""finding"" them. Your first tile is free - click anywhere. The tiles will tell you how many mines are right next to it, including the diagonals. If you uncover the number '2', you know that there are two mines hidden in the adjacent tiles. If you think you have found a mine, you can flag it by either 'shift' clicking, or click with the 'yellow' mouse button. Once you have flagged all of the mines adjacent to a numbered tile, you can click on the tile again to uncover the rest.

## Moving Eye (Just for Fun category)

A small black eye with a white pupil. The pupil follows wherever the computer's mouse goes.

## MPEGPlayer (Multimedia category)

A player for MPEG and JPEG movies. It has menu, open, rewind, play, stop, and quit buttons along the top. The menu has the options previous frame, next frame, zoom, subtitles (open subtitles file) and advanced (turn on repeat, set frame rate, create JPEG movie from MPEG, JPEG movie from SqueakMovie, JPEG movie from folder of frames) in addition to rewind, play and stop.

MPEGPlayer Basic Buttons:playStart playing the movie/sound.stopStop playing the movie/sound.rewindRewind the movie/sound.

The object also has soft/loud and start/end sliders below the buttons. It has 13 tiles in the special viewer category movie controls.

• MPEGPlayer's volumereturns and allows adjustment of the movie/sound volume.
• MPEGPlayerplayis a command to start playing the movie/sound.
• MPEGPlayer play until positionis a command to play the movie/sound until the position indicated in the numeric input.
• MPEGPlayer stopis a command to stop playing the movie/sound.
• MPEGPlayer rewindis a command to rewind the movie/sound.
• MPEGPlayer's is runningreturns true/false if the movie/sound is/is not running.
• MPEGPlayer's repeatsets true/false for movie/sound repeating or not. You can also access the state of the movie/sound repeating or not in a watcher.
• MPEGPlayer's positionis a number representing the current position of the movie/sound.
• MPEGPlayer's total framesis the length of this movie in number of frames.
• MPEGPlayer's total secondsis the length of this movie in seconds.
• MPEGPlayer's frame graphicis a graphic for the current frame.
• MPEGPlayer's video file nameis the name for the video file.
• MPEGPlayer's subtitles file nameis the name for the subtitles file.

## Next Page (Multimedia category)

A button which, when clicked, takes the reader to the next page of a book. It can be used as an additional page turner in a book. The button can be made opaque or not from its menu. (I saw no difference between opaque and not - can someone describe the function here?)

The NextPage method is implemented in the BookMorph class, a subclass of BooklikeMorph, in the Morphic-Books category in Squeak.

New Button Flap (not in Object Catalog)

New Button Flap is provided on the Connectors Flap. This object is almost identical with Button Flap. In fact, it is a Button Flap when closed, but a New Button Flap attached to a parts bin when open. Its functions are explained under Button Flap.

## Object Catalog (no category)

Called Objects in the Object Catalog, this is a kind of parts bin that gives access to objects whose class definitions register themselves to appear in it. You will find the Object Catalog in the Supplies bin, and also in itself, under the name Objects. The ctrl-o/cmd-o keyboard shortcut executed in world brings up the Object Catalog, and it also appears on the world menu as objects (o).

There are three ways to use the Object Catalog, corresponding to the three tabs seen at the top:
• alphabetic- gives you separate buttons for a, b, c, etc. Click any button, and you will see icons of all the objects whose names begin with that letter.
• find- gives you a type-in pane for a search. Type any letters there, and icons of all the objects whose names match what you have typed will appear in the lower pane.
• categories- provides buttons representing categories of related items. Click on any button to see the icons of all the objects in the category.
When the cursor lingers over the icon of any object, you will get balloon help for the item. When you drag an icon from the Objects Catalog, it will result in a new copy of it in your hand; the new object will be deposited wherever you next click.

Note: Not every object belongs to a category, therefore you can find more objects by clicking alphabetic or find at the top of the Object Catalog. Also, not all objects are in the Object Catalog at all. Finding them requires exploring the structure of other objects.

The Object Catalog is implemented with a Button Pane for the top toolbar, Tab Panes for the alphabet and category buttons, a Search Pane for the find view, and IconicButtonWithLabel objects for the Objects in the catalog.

## Particles (Basic category)

A Kedama World with pre-made components, a black square containing a red dot, a smaller solid black square, and a still smaller red square. The larger black square is KedamaWorld and the smaller is patch. The red square is turtle1. They have special sets of categories and tiles.(perhaps Yoshiki could describe the tiles or should we refer to the PDF on Kedama?)

KedamaWorld

patch

turtle1 has a set of turtle graphic commands.

## PDA (no category)

A Personal Digital Assistant with an address and phone list, a calendar and schedule, and notes. The PDA help text, accessed from an entry in the To Do list, reads:

A lot about the PDA should be obvious just by opening one up and playing with the sample data. The PDA holds a complete database of people, events, to-do items and notes. The date and keyword selected determine which records are visible at any given time.

All records

All records in the database have a number of pre-allocated fields, and these are displayed in the obvious manner in the current item pane at the bottom, when the record is selected. Care must be taken to enter only valid data as the contents of any field. This is usually simple but, for instance, matching string quotes can be a problem (embedded string quotes must be doubled).

Any item may be augmented by any number of fields, provided that the field names do not conflict with existing ones, and that the contents are valid Squeak objects.

The description field may often carry a long body of text so, for this reason, a special feature is provided for viewing only the description of the current item. This makes it a lot easier to read long notes (like this one), and it saves the user from worrying about matching quotes and other punctuation. Sorry it''s a mode -- use the menu of the bottom pane to switch modes.

People

Since the name field is not split into first, middle, last as in some databases, you are encouraged to adopt the following format:

Lastname, First I., Jr. (Nickname) (&Spousename) which allows for useful processing for invitations and the like.

ToDoItems

ToDo items are designed not to be removed, but only to be marked done. This allows the database to be browsed retroactively, with the to-do items appearing and disappearing on the dates the tasks were introduced and completed respectively. Note that toDo items have a deadline field whose obvious associated semantics (see alarms) have not yet been implemented.

Schedule

Scedule [sic] items are relatively simple. It is intended that if duration is specified, and that if time+duration overlaps ensuing events, that the ensuing events will be show in red or someting like that. Alarms have not yet been implemented, but they will accept an integer field equal to the number of minutes prior to event time that the alarm should appear. Presumably an alarm will apppear as a new object on the screen that announces the event, sounds a continuing audible sound, and allows easy dismissal by clicking or keystroke.

A number of short forms are allowed for the time field, such as ''4p'' asTime. An event with time = nil will appear with dashes at the beginning of the day.

RecurringEvents

Recurring events are treated specially. Each master event is consulted to generate derivative events in the schedule for any given day. You can edit the derivative events, at which point they will become permanent events just like any other. An unedited recurring event is a virtual object -- if you edit the master, its derivative copies may disappear from one time and reappear at another. For this reason it is recommended that you never alter the date of a recurring event. Instead, declare its last date, causing an end to that series, and create another recurring event for the new schedule if desired. In this manner all the past schedule will continue to appear as it did when it was current.

To examine or alter recurring events, select the ''recurring'' category (this will need further filtering for large databases). The currently supported recurrence rules include

#eachDay - for example, a 2-week vacation (give first and last dates).

#dayOfWeek - for example, every Thursday

#dayOfMonth - for example, on the first day of every month

#dateOfYear - for example, birthdays and many holidays

#nthWeekdayOfMonth - for example, the second Tuesday of every month #nthWeekdayOfMonthEachYear - for example, Thanksgiving (The Squeak PDA does not support the recurrence rule for Easter Sunday ;-).

Notes

Notes are simple a place to capture thoughts and information relevant to the different areas of your life while you are in the simple planning mood inspired by using a PDA. The ability to view the current item''s description only is especially useful for notes.

Spawn Entire Month

While this feature (accessible from bottom pane menu) is very crude and does not offer interaction, its real purpose is for printing. Expand the spawned window to full screen, use the morph menu to choose ''print PS to File…'', and then send the resulting .eps file to your printer. (At the time of this writing portrait and landscpe [sic] options were reversed ;-).'

## PianoKeyboard (Multimedia category)

A piano keyboard. Pick out notes with the mouse. You can enable a chord from the menu that allows selection of multiple keys (see below). There are two tiles in the special viewer category keyboard.

• PianoKeyboard's allowing chord is true/false depending on whether multiple selection of keys is allowed or not to create a chord.
• PianoKeyboard's frequency returns the frequency of the key being played.
How does the user turn off a chord?

## Pin (Connectors category)

An attachment point for Connectors that you can embed in another Morph. Drop a pin on a Morph. A menu appears, as follows.

If you select <do not embed> or click elsewhere, the pin is not embedded, but lies on top of the Morph so that you can click it and move it. If you click the name of the Morph, the pin is embedded in the Morph, and you are invited to give it a name, which defaults to pin{number}, with the numbers increasing sequentially. The pin then becomes an attachment point for connectors. It remains possible to pick up and move the pin using its Halo. Right-click to get the object's Halo, then again to the the pin's Halo.

Pick a Connector from the Object Catalog, and drag one end into the Morph, as shown below.

The nearest pin to the cursor will highlight. On mouse up, the connector will join to the pin. You can pick up the end of the connector by clicking the pin, and move the connector to a different attachment point, or out of the Morph completely. Pins can of course be given any desired appearance, such as the color of the object.

## Players (Scripting category)

This is a tool that lists all players in the project and provides a variety of information about each.

This is supposed to be all objects in the current project that have user-defined scripts. However, other objects turn up on the list: dot and world, in particular. Why? They show up in an object inspector as UnscriptedPlayers. Creating a script turns them into Players.

Opening a viewer on an object adds it to the Players list, even without the user defining a script. Is this because the viewer creates an empty script for the object? It says that it is an UnscriptedPlayer.


The Players tool provides a quick way for the user to access objects in the project by providing a menu for accessibility, a quick button that shows a small thumbnail image of the object, object's viewer, and a tile representation of the object. A menu object opens a Squeak object inspector on the player.

where is this object?-this option reveals the object by surrounding it with its halo.

open viewer for this object- this option opens the viewer for the selected object.

tile for this object-this option creates a tile representation for the object selected.

destroy this object-the object is deleted and put in the trash can when this option is selected. Drag the object out of the trash can to retrieve it.

rename object-small text screen pops up when this option is selected. Type the text to replace the name of the object and press "ok".

forcibly rename object-If you want to give this object a name which conflicts with another object's name in the project, use this command. The other object with the same name will in the process be given a different name.

copy object's name to clipboard-As it says, this object name is copied to the clipboard.

inspect object-this launches a Squeak scripting window that shows the variables and codes used to create this object.

## Playfield (Basic category)

The Playfield can be thought of as a canvas on which you can place other objects. The Playfield object has certain special properties which allows you to group objects together in a Collection and send messages to all objects contained in the playfield. It is exactly like a holder with three differences which can be seen by in “playfield options…” which is found in the menu: Auto-line layout, Fence enabled (this keeps objects from moving outside of the playfield's visible boundaries when using the “forward” tile from the basic or motion categories) and Indicate cursor.

In the viewer it has the special tile categories playfield, pen trails and collections.

auto-line-layout

When checked objects in the playfield are positioned in rows starting at the top of the playfield. When unchecked the objects move back to their original positions.

auto-phrase-expansion

Whether tile phrase dropped onto me should automatically sprout Scriptors around them. By default this is turned off on all playfield's except one, the world's playfield.

automatic viewing

When checked if an object inside the playfield is touched (picked up or moved) a viewer is automatically displayed.

behave like a holder

Sets auto-line-layout, indicate cursor and resize to fit. Warning: this will change the size and position of all objects in the playfield. Un-checking this option will NOT get you back to your previous playfield state.

fence enabled

This keeps objects from moving outside of the playfields visible boundaries when using the “forward” tile from the basic or motion categories. You can still position objects outside of the playfields visible boundaries by setting the objects x and y values.

grid visible when gridding

Displays the grid if "use gridding" is checked.

indicate cursor

Displays a border around the object at the current cursor position.

mouse-over halos

Displays an objects Halo when you leave the mouse over the object and no other Halo is visible within the your project.

Note: you may need to wait a second for the Halo to appear.

origin-at-center

Set the playfields origin to the center of the playfield. The default origin is the lower left corner of the playfield. The origin can also be set using "set grid spacing".

parts bin

If you drag an object into the playfield a copy of the object is made and placed inside a"Maker Button"This can be used to provide users with playing pieces or building parts for your project.

resize to fit

Resizes the playfield's height to fit the objects contained inside it.

BUG? - Place two items in a playfield of 200 x 200, then place both objects at the bottom left of the playfield, then check "resize to fit" it only adjusts the height. More specifically it only moves up the bottom edge to the lowest objest in the playfield. It does NOT adjust the width.

show thumbnails

Whether large objects should be represented by thumbnail miniatures of themselves. (HELP - define large, couldn't figure it out. I put a Rectangle in a playfield and when the rectangle was 100x100 and the playfield was 500x500, then I checked "show thumbnails" it showed a thumbnail of the rectangle. Can someone look at the code)

use gridding

Turns on gridding. When gridding is turned on objects "moved" within the grid will move in "grid spacing increments". For example if you set (using set grid spacing) the width=10 and height=20, the object will not visibly move, until its X is set to the next increment of 10. Ie: if Sketch.X=10 and you increment X by 5, it will take two increments to see X move.

Use "show gridding" to display the grid. Use set grid spacing to set the origin point and the grid size.

round up strays

Brings morphs that are off screen back to the visible screen.

shuffle contents

(see Tiles-Playfield-collection for content, same functionality)

set grid spacing…

Used to set the origin point of the playfield (specified asx@y) and the grid spacing (specified as width@height)

set thumbnail height…

Sets the height of thumbnail images on the playfield. Note: If you are currently showing thumbnails the new height will not take affect until you uncheck and recheck "show thumbnails"

make detachable

a playfield that has been designated as detachable can have its own local stop-step-go buttons which govern only the status of players within the playfield.

use standard texture

Shows a graph paper background image of 10x10 squares.

make graph paper…

Allows you to specify a grid size, line color and background color for a square grid background image.

show viewers of all players

Shows the viewers of all objects within the playfield's collection that have user written scripts. In this case it does show the viewers of objects within objects in the collection that have written scripts as well.

Only one viewer will be fully visible, the rest will show the icons on the right edge of the World's playfield.

Simply click on one of the icons to expand the viewer. Did you notice that I said the World's playfield. Self Study

remove viewers of all players

Hides the viewers of all objects within the playfield.

playfield - Viewer - Category:playfield

graphic

The graphic shown in the background graphic of this object. The graphic is also one of the elements in the Playfield Objects collection. (NFP (Not For Publication) - At least I believe that was the intended behavior, would think a graphic is more like a background color and should not be part of the collection, but documenting as Etoys 4 works) (NFP - If you create a playfield graphic then move it with the using the "Move" icon from the Halo, it stays as the Playfield Graphic, but if you "Pick it Up" using the "Pick Up" icon from the Halo it is no longer the Playfields graphic)

mouse x

You get the x coordinate of the mouse pointer relative to the playfield's origin. That means, you get a negative value for x, when you move the mouse to the left of the playfield and a value bigger then the width of the playfield when moving to the right.

mouse y

You get the y coordinate of the mouse pointer relative to the playfield's origin. That means, you get a negative value for y, when you move the mousebelow the playfield and a value bigger then the height of the playfield when moving above the playfield.

round up strays

Bring all objects in the playfield, whose x,y position is outside the bounds of the playfield back into view.Quick Quiz: So, is it possible to have objects that are in the playfield where you can see at least part of them, but they are "outside the bounds of the playfield"? How can you test your answer?

unhide hidden objects

All objects have a "hide" action that you can run from the "miscellaneous" category. This is telling all objects in the playfield to show themselves. Quick Quiz: After reading this section is it possible to click on "unhide hidden objects" and still not see all objects? Prove it!

playfield - scripting

tell all contents

Send a message to all the objects contained in the playfield. If an object recieves a message and the message matches the Name of a script, that script will executed once.

playfield - collections

Certain Objects in Etoys such as Holder and Playfield allow you to group items together in a collection. The items in the collection could be of the same type (ex: all text) or different types (sketches, text, polygons, etc). The collection allows you to:

• iterate through each object using the cursor
• reference objects in the collection in other scripts
• reference graphics in the collection in other scripts
• reference attributes of the objects in the collection
• Send messages to all objects in the collection with a single Script tile.

Collections allow you to do many things such as:

• Create an animation by changing the graphic of an object by iterating through the graphics in a Holder's collection.
• Store a set of data you have collected and iterate through the items to create a graph, or find the sum, median, average, max or min.
• Send messages to all contents of the collection (see category scripting: "tell all contents") such as reset to the beginning position of a game and/or reset all scores in a game. Simply ensure that each object in the collection has a "reset" script. Then depending upon the object each can have its own specific "reset" behavior.
• Iterate through items to sort them based upon a certain attribute you wish to order by, such as numeric value, vertice count (to sort polygons), for those objects with color attributesby hue, or any other numeric attribute of an object.

cursor

The index of the chosen element

count

How many elements are within me

first element

The first object in my contents

graphic at cursor

the graphic worn by the object at the cursor

include

Add the object to my contents at the end of the collection

include at cursor

Add the object to my contents at my current cursor position

number at cursor

the index number at the cursor

player at cursor

A reference to the object currently at the cursor.

This tile can be put into scripts replacing the scripting tiles object being sent the message. So lets say you have a collection (in a Holder or Playfield) where you store a set of numbers (from some data you collected) and you want to plot those numbers on a graph.

There is a special menu item for this Tile: "Tiles to get". "Tiles to get" lets you reference attributes of the "Player" (aka object) at the cursor.

remove all

Remove all elements from the playfield. The elements are removed forever.

shuffle contents

Shuffle the contents of the playfield. Note if the Playfield contains a graphic as one of its element, this element is excluded from the shuffling and remains the last element in the collection.

string contents

A concatenation of the the Objects Characters value (in the Basic Tiles Category) of if the Object's Name if the Characters value does not exist. (Question: why does is use the Characters for Text Objects, but the Object Name for everything else?)

tell all contents

Send a message to all the objects contained in the playfield. If an object recieves a message and the message matches the Name of a script, that script will be executed once. NOTE: It does not send messages to objects contained in objects in the playfield.

For example:

• If you have a Sketch inside a Holder which is inside a Playfield
• Both the Sketch and the Holder have scripts named "script1"
• When th ePlayfield sends the message "script1" to all contents, only the Holder's "script1" will execute.

pen trails

These tiles have a different behavior from those in the "pen use" category. These tiles refer to the pen trails of the objects contained in the playfield. Where "pen use" refers to pen trails made by the playfield.

The Collections and Menu Items for "pen trails" are the same but different names.

batch pen trails

MenuName: "batch pen trails" Whether pen trails should reflect small movements within the same tick or only should integrate all movement between ticks

clear pen trails

MenuName: "clear pen trails" Clears the pen trails of objects in the collection. Does not clear the pen trails of objects within the objects in this collection or of the playfield itself.

has pen trails

This is a Boolean to indicate whether there are any pen trails in the playfield. It does not check for pen trails inside objects in the collection.

lift all pens

MenuName: "all pens up" Tells all objects in the playfield to set the "pen down" value to false for all objects contained in the playfield.

lower all pens

MenuName: "all pens down" Tells all objects in the playfield to set the "pen down" value to true for all objects contained in the playfield.

pen trail graphic

This is a graphic of all pen trails inside the playfield. It could be used if you had multiple objects drawing pen trails inside the playfield to make a picture. Then you could set the graphic of another object to the picture of the combined pen trails.

trail style for all pens

Tells all objects in the playfield's collection to set their pen style to the value specified

• lines (MenuName "all pens show lines")
• arrows (MenuName "all pens show arrows")
• dots (MenuName "all pens show dots")
playfield - Halo

initiate painting (Include Painting Image)

I am flagging "initiate painting" for removal. Reason as per Chapter Talk in Tiles Chapter this feature is flagged for removal) (NOTE: not documenting Unlock "NameOfGraphicSketchUsedAsBackgroung". This only shows up in the Playfield's menu, if you have a background graphic, see initiate painting above, which is one way to create a background graphic) Rita: I don't see where initiate painting hay anything to do with halo, so it should be removed from here.

playfield - sound

sound pitch pitch of soundsound levelevel of sound

dial number dial number of sound

listening whether the stethoscope is listening

playfield - input

last keystroke The last unhandled keystroke

playfield - preferences

use vector vocabulary Whether to use the Vector vocabulary with etoy scripting in this project

drop produces watcher Whether a drop of a value tile, such as "car's x", on the desktop, should produce a watcher for that value

allow etoy user custom events Whether to allow "custom events" in etoys.

batch pen trails Whether pen trails should reflect small movements within the same tick or only should integrate all movement between ticksfence enabledWhether an object hitting the edge of the screen should be kept "fenced in", rather than being allowed to escape and disappear

keep ticking while painting Whether scripts should continue to run while you're using the painting system

olive handle for scripted objects Whether the default green halo handle (at the top right of the halo) should, for scripted objects, be the olive-green handle, signifying that use will result in a sibling instance.

implicit self in tiles Whether tiles representing a player should be suppressed in Viewers and Scriptors belonging to that player

## Polygon (Basic category, Graphics category)

Polygons are graphical objects with defined corners orverticesthat can be grabbed and dragged to change the shape and size of the object. Although the technical definition of a polygon is a closed plane figure with straight edges, polygons in Etoys may be open with curved edges.

A new polygon has four vertices and four sides.

Select "Show handles" from the Halo Menu to display circles at each of the vertices. You can also click on the polygon holding the shift key down to bring up the handles. Grab the circles to adjust the lengths of the sides of the polygon. "Show handles" will also display triangles at the midpoints of each side. Grab a triangle to "split" the side and create a new vertex at the triangle.

The number of vertices may also be controlled via the polygon pane of the Viewer ("vertices count"). Vertices may only be removed via the Viewer or via a script.

An Etoys polygon with two vertices looks like a line segment. An Etoys polygon with one vertex looks like a point (and is somewhat difficult to click to add a point!). An Etoys polygon may not have less than one vertex.

Each vertex of the polygon is assigned a cursor number. Reference a vertex by assigning the vertex's cursor number to the polygon's "vertex cursor" property on the polygon pane of the Viewer. The currently-referenced vertex appears as a blue circle if the polygon's handles are visible. The "x at cursor" and "y at cursor" properties reference the selected vertex's location.

The polygon pane of the properties view also provides access to the following Etoys polygon properties:

• line is curved (Boolean, controls if sides of the polygon are straight or curved).
• line is opened (Boolean, controls if the vertex with the highest cursor number is connected to the vertex with cursor number = 1). This creates an open figure.
• showing handles (Boolean).

The polygon pane of the Viewer also contains scripting tiles to add a vertex at the beginning (creating a new vertex at cursor number = 1, at the current cursor position, and at the end. Note that new vertices have the same location as the vertex at the currently selected cursor position. Creating new vertices will not appear to change the shape of the polygon until the location of the new vertex changes.

The polygon pane of the Viewer contains a scripting tile to remove the vertex at the current cursor position.

The polygon pane of the Viewer also contains a scripting tile to "shuffle vertices". This action shuffles the cursor position of the vertices in the list of vertices (not the x@y location of the vertices). As a result, the shape of the polygon may change, as the vertices appear to be connected in different ways.

The angle at a vertex may be calculated by determining the lengths of the sides of a triangle formed by the vertex and the endpoints of the segment sides, and using the Law of Cosines. Although Etoys does not have an arccos function, it does have an arctan function. The following identity may be used to find the arccos from the arctan:

ArcCos(x) = ArcTan( Sqrt(1 - Sqr(x)) / x )

Unique Tiles

vertex cursor The index of the chosen vertex of vertices

vertices count How many vertices are within me

x at cursor The x coodinate value at the vertex cursor

y at cursor The y coodinate value at the vertex cursor

add a vertex at beginning Add a vertex at the beginning of my vertices list

insert a vertex at cursor Add a vertex at my current cursor position

add a vertex at end Add a vertex to the end of my vertices list

remove all vertices but cursor Remove all vertices but my current cursor position vertex

remove the vertex at cursor Remove the vertex at my current cursor position

shuffle vertices Shuffle the vertices

line is curved Whether the line is curved

line is opened Whether the line is opened

showing handles Whether the handles are showing

## Previous Page (Multimedia category)

A button which, when clicked, takes the reader to the previous page of a Book. It can be used as an additional page turner in a Book. The button can be made opaque or not from its menu.

(I saw no difference between opaque and not - can someone describe the function here?)


## Random (Scripting category)

This tile, when added to an expression in another tile, generates a random number in a given range. This functionality is also available in the Gold Box in ScriptEditor toolbars, among other tiles that can be used for scripting. The Random tile can be placed in tiles that take a numeric argument. When it is in a script, clicking the Random tile brings up a menu of numeric functions, shown in the chapter on Tiles.

## Random Connectors (Connectors category)

A button that will create random arrows each time you drag one from it.

Exploration Challenge: Drag out multiple "Random Connectors" and look at the attributes in its "connector" category. See if you can figure out what attributes to change to create your own special connectors. Then if you like drop them into a maker button or a Button Flap for re-use.

## Rectangle (Basic category, Graphics category)

This is a basic rectangle.The Rectangle object is not related to the Polygon object and does not provide the polygon category in its viewer. Rectangle has a color category of tiles that allows you to choose its color from a color picker, and to use its red, green, blue, alpha, hue, brightness, and saturation properties (in the color category) in programs.

Rectangle is implemented in the RectangleMorph class, a subclass of BorderedMorph, in the Morphic-Basic category in Squeak.

## RoundRect (Basic category, Graphics category)

A rectangle with rounded corners. It has the same color category as rectangle.

RountRect is implemented as a special case of the RectangleMorph class, a subclass of BorderedMorph, in the Morphic-Basic category in Squeak.

## Same (Games category)

The object of Same game 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 left to fill the space of the removed group. The square of (the number of tiles deleted-2) is added to the player's score, so it is advantageous to remove tiles in a way that brings larger groups of tiles together. Removing all of the tiles adds a bonus of 5 times the original number of tiles on the board.

## Schematic Connector (Connectors Category)

A connector that connects to the nearest connection points on the objects it is linked to. This is in contrast with Connector, which connects to the nearest point on the boundary of the objects. Otherwise, they are the same. The difference in these behaviors can be seen in the illustration below.

The Connector that lies higher in this image connects the two Circles at their nearest points, and thus lies on the line joining their centers. The Schematic Connector that lies lower connects the Circles at connection points, eight of which are spread out equally around the circumference of each circle. Thus it connects at the leftmost point on one circle, and the point halfway between the right most point and the lowest point on the other.

Schematic connectors, before they are connected to anything, look exactly like Connectors. When connected, however, they differ from connectors in two ways. First, they cannot have arrow heads. Instead, when their ends are dropped on other connectors, they automatically decorate their ends with junction dots, thus.

This behavior is designed for use in electronic schematic diagrams.

Second, as you move the objects around the ends of Schematic Connectors snap to the closest connection points, thus.

## ScorePlayer (Multimedia category)

The ScorePlayer object plays MIDI music scores. MIDI stands for "Musical Instrument Digital Interface", a standard format for digitally representing musical scores.

Click the Menu button to display a menu of ScorePlayer options. Click the "open a MIDI file" menu option to load a MIDI score. Etoys will display all MIDI files in the Etoys folder. You can also save as AIFF file, save as WAV file, save as Sun AU file, reload instruments, play via MIDI, and make a pause marker from the menu. Once a MIDI file is loaded, the instruments referenced in the MIDI score will appear as part of the ScorePlayer object. >

Click on an instrument name to select a different instrument.

Click the PianoRoll button to display a PianoRollScore object representing the loaded MIDI file. If no MIDI file is loaded, the PianoRollScore will be blank.

Click the Play button to listen to the MIDI score.

## Scratch Client (Scratch category, v5)

What is Scratch Client supposed to do?


Scratch Client has two special viewer categories, Configuration and Command.

host Variable holding the IP address of a network connection

is connected Boolean variable stating whether the network connection is up

port Variable holding the port number of the connection, in decimal representation

What do these really mean? What gets sent from where to where, and why?


broadcast Command to transmit the specified text

send values Command to transmit a specified set of values

sensor update Command to send values from sensors

update light Command to send the specified numeric value

update resistance a Command to send the specified numeric value

update resistance b Command to send the specified numeric value

update resistance c Command to send the specified numeric value

update resistance d Command to send the specified numeric value

update slider Command to set the value of a slider

update sound Command to set a sound to a specified value

verbose Toggle ??

debug mode Toggle debugging

## Scripting (Scripting category)

This creates a small but resizable sandbox for confined scripting. The space includes a small but resizable playfield, a trash can and a dedicated script controls button bar, just like the AllScripts object. The player will be limited to the scripts within the Scripting area. This scripting area as well as the playfield within this space can be enlarged using the resizing tools on their respective halos.

Objects can be dragged into the playfield, and scripts taken from their viewer menus to put in the scripting area.

## Scrolling Text (Basic category)

A scrollable, editable holder for entering and editing text. From the menu, you can

open and close editing (Does anyone know what this means? It has no evident effect.)

make the scroll bar retractable, popping up on the outside of the window when the mouse comes into position, or inboard, always visible.

put the scroll bar on the left or right side.

## Sector (Graphics category, v5)

A Sector Morph looks like a pie slice. Its border shape is two radii of a circle meeting in the center, and joined by an arc of the circle. The Halo menu contains one special item, to toggle display of the handle for adjusting the internal angle of the Sector. The radius can be changed with the Resize tool in the Halo in the usual way.

Sector has one special viewer category, called sector.

These variables are for showing or hiding the one handle, and for viewing or setting the Sector's angle in degrees and radius in pixels.

## Slider (Basic category)

A scriptable control that allows you to choose a numeric value by dragging a knob. It has the same color category as rectangle. From the menu you can open and close editing (does anyone know what this means?), set action selector (does anyone know what this means?), change arguments (does anyone know what this means?), set minimum value (see below), set maximum value (see below), switch between number values ascending and descending as you move the slider up and down (see below), and turn on and off truncation (see below). Slider's viewer has the extra category slider with 9 tiles.

• slider's width sets the width of the slider. This can also be set using the yellow change size button on the slider's halo.
• slider's color changes the color of the slider's background.
• slider's descending determines whether the max val is at the top or bottom of the slider.This can also be set on slider's menu.
• slider's height sets the height of the slider. This can also be set using the yellow change size button on the slider's halo.
• slider's knob color changes the color of the slider's knob.
• slider's max val sets the value at the top of the slider. This can also be set on slider's menu.
• slider's min val sets the value at the bottom of the slider. This can also be set on slider's menu. By choosing a negative value, you place zero somewhere between the top and bottom.
• slider's numerical value is the value of the slider position measured from zero. The value read and position of zero on the slider depend on the numbers you input to sliders max val and min val.
• slider's truncate is a true/false value that can also be set in the slider's menu. To see its intended purpose set the Max Value to 10, Drag out a watcher for slider's numeric value and move the slider. With truncation=false, the numeric value acts like a float, With truncation set to true it will only return integer values.

Note that you can change the slider to horizontal by using the yellow change size button on the slider's halo or the slider's width and height tiles. When the width is greater than the height, the slider is horizontal and then up and down go to left and right in the above descriptions.

## Sound Library (Multimedia category)

This tool allows you to view and manage the "Sound Library", which is the list of named sounds that can be used in the tile-scripting system. Click on a sound name in the list to select it. The buttons at the top of the tool apply to the sound you have selected.

Play button -- press this to start playing the selected sound.

Stop button -- if the selected sound is playing, pressing this will stop it.

Tile button -- Click on this to obtain a scripting tile representing the selected sound.

Rename button -- Bring up an edit window to enter a new name for the selected sound. None of the built-in sounds may be renamed. Sounds loaded into the Sound Library with the Load button may be renamed.

Delete button -- allows you to delete the selected sound from the Sound Library. All tiles that formerly pointed to this sound will be changed to point to "croak" instead.

Load button -- allows you to load a sound into the Sound Library from a file. You can also add sounds to the Sound library using the Sound Recorder, and also by dragging an external sound file (e.g. a file with extensions .wav or .aif) into Etoys.

The Halo menu for Sound Library contains these special functions.

show compression A check box to toggle compression (but not on built-in sounds) using one of the following three choices:

GSM compress sound

Ogg Vorbis compress sound

Ogg Speex compress sound

Wave editor open a sound waveform editor tool on the selected sound.

Sound Library has a question mark button at the upper left with excellent help for using this object. The above text is from that help section.

## Sound Recorder (Multimedia category)

Basic tool to record sound.

Note : You must have microphone input for this tool to record.

Press "Record" to start recording. Press Stop when finished recording. After making a recording, you can: Press "Play" to play back the recording. Press "Record" to start a new recording (the old one would be discarded). Press "Save" to save the recording in the sound library. Press the menu icon to get a menu with further options. The menu icon:

1. Shows the duration of the recording
2. Allows you to open a help flap which displays the information above and below.
3. Hands you a sound token (see below).
4. Let's you choose from the following compressions:
• Speex (for speech)
• Vorbis (for music)
• GSM (basic noise inducing compression)
• No compression, Note: sound can be huge without compression!

5. If the eToyFriendly preference is turned off, one more option appears on the menu: trim. This removes blank space from the beginning and end of the recording. It appears to be buggy, and should only be used on material that has been saved to a file so that it can be recovered in case of problems.

6. Allows you to open the sound in wave editor (see description below).

If you wish to refer to the sound in scripts, you need to add it to the sound library; press Save to do that; you will need to supply a name for it.

If you want to retain the sound but do not need to refer to it in scripts, you need not name it; instead, use "hand me a sound token", found in the menu, to obtain a little "sound token" object that you can subsequently use in a variety of ways:

• You can double-click on the sound token to hear the sound again.
• You can decide to save the sound after all, by using an item in the sound token's halo menu.
• You can drop the sound token into a PianoRoll or an EventRoll.
The sound recorder category in the viewer for Sound Recorder has three command tiles, play, start recording, and stop.

## Spectrum Analyzer (Multimedia category)

A digital sound analyzer that uses Fast Fourier Transform to determine the frequencies in the incoming signal. It has buttons along the top to start and stop the analyzer. When the analyzer is running, the "on" button at the right turns yellow. The menu button allows the user to set the sampling rate, FFT size and select the display type (signal, spectrum and sonogram).

set sampling rate with choices of 11025 per second, 22050, or 44100.

set FFT size with choices of 128, 256, 512, 1024

set display type with choices of signal, spectrum, or sonogram.

There are buttons to start and stop the analyzer, and a slider running from 0 to 10.

What does the slider do?

What is the signal source?

## Speech Bubble (Just for Fun category, v5)

A cartoon-style speech bubble containing an editable Text object. Click in the text area to get a cursor and begin editing.

Viewer category bubble contains three tiles, the command attach to dot, the information tile attachment, and the command stop attachment. Drop an object tile into attach to dot to replace dot in order to create a command to attach a Speech Bubble to the chosen object.

## Speech Bubble (graphic) (Just for Fun category, v5)

A cartoon-style speech bubble containing an editable Sketch graphic object. Right click twice to get the Halo for the sketch, then click the gray pencil icon to get a PaintBox and begin drawing. The user can edit the existing drawing, or start by clicking Clear in PaintBox to start over and create a new drawing.

Viewer category bubble contains three tiles, the command attach to dot, the information tile attachment, and the command stop attachment. Drop an object tile into attach to dot to replace dot in order to create a command to attach a Speech Bubble to the chosen object.

## Star (Graphics category)

Star is a simple Morph of a stellated pentagon, that is, a five-sided polygon with its sides extended so that they meet in new vertices. In addition to its use as decoration, it can be useful when simulating gears.

You can change the number of points via the halo menu or tiles in the star category in the viewer, as described below.

Shift clicking brings up a novel tool at the center of the star. Green triangle up (implemented using a Polygon) adds a point to the star, pink down removes a point. Green right widens the points (Twinkle fatter), pink left narrows the points. The sequence of widths is 0, 58, 87, 100 and back to 0. The yellow circle in the center (implemented using an Ellipse) is for moving the Star with no changes. A second yellow dot, attached to a vertex, is for adjusting size and rotating the Star when clicked and dragged. Turn off these handles in the Halo menu.

The balloon help on the second handle says that one can shift-click it to adjust the pointiness attribute, but this does not work.


The viewer for Star has a star category with these tiles:

vertices count How many vertices are within me

star ratio A measure of the width of the points.

• more sides
• fewer sides
• twinkle fatter
• twinkle thinner

## Sticky Pad (Just for Fun category)

One cannot drag Sticky Pad from the Object Catalog to the world. Instead, when one clicks it in the Object Catalog, one gets a tear off object attached to the cursor for dropping in the world. These tear offs come in a predictable sequence of six pastel colors. However, they do not accept typing, nor can one drop text objects on them, so they are not usable as sticky notes.

Sticky Pad is implemented in the StickyPadMorph class, a subclass of RectangleMorph, in the MorphicExtras-Demo category in Squeak.

The tear off object is implemented as a borderless Rectangle.

## Tetris (no category)

Tetris, yes, Tetris, and yes, it is not in the Games category. The top row of buttons is to start a new game, to pause in the current game and continue, and to quit. The game controls are labeled '<-' (move piece left), '(' (rotate piece counterclockwise), '|' (drop piece to bottom), ')' (rotate piece clockwise), '->' (move piece right). Keyboard equivalents are

right right

up rotate clockwise

down rotate counterclockwise

spacebar drop

The control toolbars are Alignments of Buttons. The score line contains a String and a Led. The Tetris pieces are made of Rectangles.

Tetris is implemented in the following classes in the Morphic-Games category in Squeak.

• Tetris, a subclass of AlignmentMorph
• TetrisBlock, a subclass of Morph
• TetrisBoard, a subclass of PasteUpMorph

## Text (Basic category)

Text can be used just as for any other program. It can be used for stories, labels, or other purposes. Drag the text into the playfield and change the font, size, color, and style by right clicking on the text and using the appropriate handles at the bottom of the halo. From the menu, you can turn text autofit off and on, wrap text to bounds, make the text translatable, and use pango (Can someone describe how using pango affects layout, rendering and internationalization, IE: Why would someone use this). The menu also provides text formatting options like text properties (including some not available through the bottom handles like text color), text margins, add predecessor (does anyone know what this means?), add successor (does anyone know what this means?), code pane menu, code pane shift menu, and fill owner's shape. The menu also allows you to make a holder for the characters. It has the same color category as rectangle. Text's viewer has the extra category text with ten tiles.

• text's all but first returns all the text but the first character in the text object.
• text's character at cursor returns the character at the cursor which can be set by text's cursor (see below).
• text's characters returns all the text in the text object.
• text's count returns the number of characters in the text object.
• text's cursor the position of the cursor in the text object.
• text's first character returns the first character in the text object.
• text's insert characters abc inserts the character appearing in the abc section of the tile at the current cursor position. The characters in abc can be edited by clicking abc and typing new characters. Accept the changes with the return key.
• text's insert contents of dot inserts the contents of dot, or any object dropped in to replace dot.
• text's last character returns the last character in the text object.
• text's numeric value the numeric value of the text string, if all the text will be replaced by a string representing the numeric value

• color- The color of the text
• background color- The color of the background behind the text

The Halo menu for Text contains the following items.

text auto fit

text wrap to bounds

choose font...

text properties...

text margins...

fill owner's shape

holder for characters

accept on CR

accept on focus loss

Add explanations for menu loss


## Text Ellipse (Connectors category)

Text Ellipse is implemented as an NCTextMorph together with a Text object. Type your text inside the box, which resizes to fit the words.

lock text

hide lower text

add explanations of menu items

## Text Rectangle (Connectors category)

Similar to a Text Ellipse except that it is rectangular. Type your text inside the box. It will resize to accommodate the words you type. When you right-click the Text Rectangle, you get a tool Halo for the rectangle. When you click a second time, you get a tool Halo for the text, including tools for styling the text. These are the same tools as for Text Ellipse, including the options on both Halo menus.

## Thought Bubble (Just for Fun category, v5)

The same as Speech Bubble, except for its outline, which has the conventional form from comic strips for thoughts rather than speech. It has the same viewer category, bubble.

## Thought Bubble (graphic) (Just for Fun category, v5)

The same as Speech Bubble (graphic), except for its outline, which has the conventional form from comic strips for thoughts rather than speech. It has the same viewer category, bubble.

## Title (Connectors category)

Enhanced Text that is pre-formatted to be large and bold.

## Trash (Basic category)

A tool for discarding objects. For convenient access to the trash can, drag it onto your playfield. Then any object can be dragged into the trash easily. To remove an object, drop it on any trash can. To view, and maybe retrieve, items that have been thrown away, double-click on any trash-can. Things are retained in the trash-can if the "preserveTrash" preference is set, otherwise they are purged immediately. From the menu you can choose to make the trash can opaque or solid. Trash's viewer has the extra category trash with two tiles.

• trash's empty trash canempties the trash can if if the "preserveTrash" preference is set.
• trash's page countreturns a number of pages in the trash can. Every object you put in the trash can goes into a new page.

## Triangle (Graphics category)

A three-sided Polygon. One can also create this object using thePolygonobject. It shares much of the functionality and tiles of thePolygonbut is created with three vertices by default. It is also different from a Polygon in that if you "shift-click" on it, it doesn't have the option of adding vertices using the green triangle handles. However, apart from that property, one can turn a triangle into a polygon with more than three sides by adding vertices by using the "add vertex at beginning (or end)" tiles. The new vertex appears in the same location as an existing one, so it looks as though nothing has happened until the user drags one of these vertices out to form another side to the triangle.

## V Number Line (Graph category, v5)

A line of positive and negative integers, such as one might use for the Y axis in a graph.

## VideoCamera (Multimedia category, v5)

When connected to an internal or external video camera, VideoCamera displays what the camera sees, and can record videos from the camera. Without a camera connection, it displays a blank colored background and the time.

How does one connect to a camera?


configure video device Open this preferences window:

Controls are

• width In pixels
• height In pixels
• keep aspect ratio Check box
• type Choice of Lenna photo or Color Bars test pattern

Lenna color test pattern, photo of Lena Söderberg

Standard color bars test pattern

• show time Toggle time display in test image. Defaults to 24-hour digital time
• accept Keep changes

start showing statistics (in Transcript) Send periodic messages to a Transcript window in the form

a VideoMorph<VideoCamera>(952): 1ms/frame - 1000 frames/sec

The video category in the viewer for VideoCamera contains these tiles.

play Command

stop Command

is running Booleanvariable

auto extent Boolean variable

brightness Floating point variable

configure video device Command

contrast Floating point variable

last frame Tile referring to a PlayerReferenceReadout representing a saved frame image

resolution Selection from original, 256 colors, 256 grays, 4 grays, or black and white

Add further descriptions of these tiles


## WaveEditor (Multimedia category)

A workbench for seeing and editing wave forms. It has a row of buttons with balloon help across the top, followed by a row of data readouts and a slider. [purpose?] The sound data are shown in a Graph, and at the bottom is a PianoKeyboard.

Bug: There is no evident way to save and reload files. The Save button accepts a file name, but gives no indication where the file is stored. Right-clicking on the Graph twice to get its Halo gives access to its menu, which includes the read file function. Unfortunately, this does not give access to a file dialog, but requires the user to type the full name of the file. Given the name of a file saved with the Save button, it fails to find that file.

The buttons are:

X Close WaveEditor

• play straight through
• play before cursor
• play after cursor
• play test note
• play loop
• trim before cursor
• trim after cursor
• choose loop start
• make unlooped
• make unpitched
• show envelope
• show FFT

play

play before

play after

play loop

test

save

set loop end

set one cycle

set loop start

Provide definitions for the buttons and menu items above.


Using the menu attached to a sound recorded in Sound Recorder object (described above), you can open the sound in the Wave Editor object. (Is there another way to open a sound on Wave Editor. Can someone supply the details?)

## World Stethoscope (Multimedia category)

With the WorldStethoscope object, tiles use sound signals from the computer's microphone input to create programs. WorldStethoscope Etoys tiles read the frequency and level of the microphone input. The WorldStethoscope object is brought into the world from the ObjectCatalog multimedia category by grabbing the WorldStethoscope object and dragging it out onto the world.Click the Start button on the WorldStethoscope object to begin receiving the signal from the microphone input. The On button will turn yellow. The Menu button at the left allows the user to set the sampling rate, set the FFT size, show adjustments and add a graph. Show adjustments allows the user to show and hide sliders for adjusting the cut off level and calibration. The "add a graph" choices show a sonogram, the signal, the frequency spectrum or data. The stop button discontinues the signal acquisition. The AC and Bias buttons were designed specifically for the XO computer, which allows for AC or DC signal input.

To access tiles that allow you to develop programs using the input signals, open a viewer for the WorldStethoscope object from its halo and choose the Sound category. The WorldStethoscope's sound category has 13 special tiles not available to other objects.

• WorldStethoscope's cut off level filters out sounds with levels greater than this value.
• WorldStethoscope's dial number is a DTMF (Dual Tone Multi Frequency) decoder. This value reflects a decoded dial tone number. This function is useful for using a cell phone as a remote controller. Pull out the watcher for this tile with WorldStethoscope on, drag out a PhonePad object from the Multimedia category of Object Catalog, and click a key on the PhonePad. The watcher shows the clicked key.
• WorldStethoscope's frequency1 returns the frequency of the highest peak in the FFT spectrum.

• WorldStethoscope's frequency2 returns the frequency of the second highest peak in the FFT spectrum.
• WorldStethoscope's frequency3 returns the frequency of the third highest peak in the FFT spectrum.
• WorldStethoscope's level1 returns the input level of the highest peak in the FFT spectrum.
• WorldStethoscope's level2 returns the input level of the second highest peak in the FFT spectrum.
• WorldStethoscope's level3 returns the input level of the third highest peak in the FFT spectrum.
• WorldStethoscope's listening returns true/false when WorldStethoscope is/is not working.
• WorldStethoscope's pass over filters out sounds with frequencies less than this value.
• WorldStethoscope's pass under filters out sounds with frequencies greater than this value.
• WorldStethoscope's read out is for DC signals input on the XO computer. The "bias", or the internal voltage from the plug can drive the sensor plugged into the audio plug. When the sensor changes resistance,read outis the (digitized) raw value from the sensor. (IIRC, 0V to 5V outputs are mapped to 0 to 32767.)
• WorldStethoscope's update interval specifies how often the input is read.

Note: You cannot use multiple WorldStethoscopes and/or SoundRecorders at the same time. If you want to use the frequency1 tile to build a meter, the tile can be dropped onto the value of the length of rectangle, which will reflect the value of the input.

TheWorldStethoscopewas developed in Japan by Kazuhiro Abe and Tetsuya Hayashi. Hardware developed by Kazuhiro Abe and Tetsuya Hayashi turns a voltage signal into a frequency so any circuit element that outputs a voltage can be turned into a sensor. For example, thermistors can be used to measure temperature, light sensitive diodes can be used to measure light levels and variable resistors can be used for control signals. Using the WorldStethoscope tiles young learners can develop an interface for data acquisition, control and display. The learner has more ownership and can develop a deeper understanding by creating the interface as opposed to simply using a canned data acquisition program. It could be used in creating a meter to display the frequency reading or to control a process based on the frequency reading. Depending on the element connected to the input, the frequency may be a measure of temperature, light level, resistance, location, or many other things. By calibration of the output of WorldStethoscope the reading can be converted to an actual temperature, light level, etc. Perhaps the easiest thing to do with WorldStethoscope is to attach a microphone to the computer input and measure the frequency and level of the sound input.

The "add a graph" choices on the menu button are most useful for a sound signal input. If you choose "data", "spectrum" or "signal", you get an object with the following additional tiles:

data color The color hue of the data

sampling

cursor The current cursor location, wrapped back to the beginning if appropriate

sample at cursor The sample value at the current cursor location ong>

last value The last value obtained

Clear the graph of current contents

relative scale Whether the display scale is relative to the actual maximum and minimum values in data

max val The maximum of the range drawn in the graph

min val The minimum of the range drawn in the graph. If you choose "sonogram", you get a Sonogram object with the following additional tiles:

data color,color The color hue of the data

samplingscroll delta The horizontal scrolling stride when data is going off the edge

As an example of a more complex classroom project, students could make their own position sensor by laying a series of nearly connected wires along a track and as a metallic ball rolls across the nearly connected wires the circuit would be completed and a signal would be sent to the WorldStethoscope Etoys project. The signal could be monitored as a function of time and the speed of the ball could be determined. Although there are many canned devices available to accomplish this goal, the process of creating sensors and designing an interface to analyze and display the results is far more valuable than merely taking the data.

## x-y Plane (Graphing category, v5)

A rectangular area with X and Y axes and a grid.

x-y plane has the following Viewer categories, described elsewhere.

collections

pen trails

playfield

Get references for these categories.

# More Objects

Here you will find Morphs that you can use in Etoys with scripting tiles, but that are not provided in the categories in the Object Catalog. Some are avaiable in the alphabetical list in the Object Catalog. Others are provided in other parts bins, and many occur as components of other objects. All other Morphs, described in the Morph Definitions appendix, are available through the Squeak environment, by embedding Squeak commands in scripting tiles, or using the open morph function on the world menu in Squeak.

Many objects in Etoys can be discovered by right-clicking on various objects to reveal the object Halo, then clicking again to reveal the halo for a component of the object. Note that the name of an object shown in the Object Catalog is not always the same as the name it shows in its own Halo and viewer, and both can differ from the Squeak Morph that implements the object's costume.

In general, the Squeak object corresponding to an Etoys object can be found via the Players tool. 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. In the inspector that appears, select costume, which shows both the Squeak player and costume names.

## AND Gate (eToyFriendly off, no category)

This Morph has the shape of an AND logic gate symbol for use in electronics diagrams, but does not have the appropriate connection points to use in that manner.

## Arrow (not in Object Catalog)

Tthere are two kinds of Morph named Arrow in Etoys. One is a simple graphic object, described in the Objects chapter. The topic of this section is a form of connector (as explained in the Connector and Connectors Flap sections below) with an arrowhead at its destination. This Arrow is produced from a Connector Button, which is itself an object in the Connectors category in the Object Catalog.

A tool for collaborating with other Squeak users. In the Sugar version of Etoys, a badge is automatically set up when an Etoys session is shared with other users (buddies).

The components of a Badge are

String for the name of the person to connect to

Image of ?, which functions as a button for inquiring whether the other person is available

Blue Elllipse, to show working status

Green Ellipse, to show sending status

C Button, to open a text chat with the other person

T Button, to start Telemorphic (What's that?) with the other person

! Button, to tell the other person about the current Etoys project

? Button, to see whether the other person is available

S Button, to see the other person's world, if permitted.

## Balloon (not in Object Catalog)

A balloon with text used for the display of explanatory information in the balloon help system. It is not possible to right-click a balloon, which appears only when the mouse is hovering over an object. Ballon help is created and edited in Squeak, and is not directly accessible in Etoys.

## Bordered (not in Object Catalog)

A rectangular Morph with a border.

## CategoryViewer (not in Object Catalog)

Displays a category of tiles meant to be dragged into scripts in a StandardViewer for any object. In some cases they allow editing in place to change the values of variables or the arguments of commands.

The first line gives the name of the category in a Bordered Morph, along with a ThreePhaseButton close tool. The rest of the CategoryViewer shows scripting tiles as Tiles or PhraseTiles in ViewerLines.

## CircleCurve (eToyFriendly off, no category)

A circular Morph bearing a Text.

What is this for?


## Class (eToyFriendly off, no category)

A component for making UML (Unified Modeling Language) diagrams, a tool for Object-Oriented Design. The first form is available in the Object Catalog, and all three from the ClassButtonBar and the Class Diagrams flap.

## ClassButtonBar (eToyFriendly off, no category)

A source of components for UML diagrams.

There is a bug in the display of the text caption at the top, where the text is set to white on white, and the color values shown in its viewer are inconsistent. Reported as SQ-1123. To fix this, as shown at the right above, right-click on the caption area twice to get at the Text object's Halo, and open its viewer. Select the color category. Click on the black color block in the Text's color tile to open a color picker. Click on the black block at the top with balloon help restore original color. This fixes the RGB values for the text, so that it actually displays as black.

Class ButtonBar contains buttons to create the following UML diagram components.

• Association connector with no arrowhead
• Generalization connector
• Implements connector
• Three Class objects, with one, two, or three panes. The top pane is for the class identifier, the second for class attributes (internal variables) and the third for behavior (methods).
• Two Package objects, a simple one and one with scrolbars, providing areas for creating UML diagrams.
There is an error in the implementation of the second, so that the scroll bars are not around the diagram area. Resizing the diagram area fixes this.
Bug filed as SQ-1125.
• Note
• Note connector
• Label

There is also a functional button, Save GIF, which is supposed to save a UML drawing as a GIF.

This button is broken.
MessageNotUnderstood: PasteUpMorph>>saveNCDrawingAsGIF
Bug filed as SQ-1124.

## Class diagram Flap [sic] (eToyFriendly off, no category)

A parts bin for UML entities, labels, and connectors. Objects offered are

Label

Smart label that positions itself

Generalization connector

Implementation connector

Three levels of class entity

UML Package entity

Note

## Clipboard (no category)

This object will always show whatever is on the text clipboard in Etoys. It fails to show the contents of the system clipboard when material is copied outside Etoys, and can sometimes crash Etoys.

Filed as a comment to SQ-158.

text auto fit Toggle whether Clipboard adjusts its size to fit its contents. If not, either Clipboard may show empty space, or may display only part of the copied text.

text wrap to bounds Toggle whether text is broken into lines that fit the current size and shape of Clipboard, or whether Clipboard is reshaped to fit the text, possibly obtruding outside the world.

translatable Toggle support for translation <b>[What kind?]

use pango Toggle use of the limited internal methods for displaying non-Latin writing systems, or the pango libraries that provide full Unicode support.

font for entire text… Bring up a menu of fonts for selection. However, the font selected has no effect on the display of text in Clipboard.

text properties… Bring up a TextProperties dialog including a color picker and controls for other text properties, including Autofit, Wrapping, size, and styles.

text margins

add predecessor Create another clipboard [What does it do?]

add successor Create another clipboard [What does it do?]

fill owner's shape

holder for characters

## ColorPicker (not in Object Catalog)

A gui for setting color and transparency.

## Column (no category)

An object that presents the things within it in a column. Drag objects into it, remove the default colored bars there if desired, edit the balloon help to indicate the intention of the list of objects. The column resizes to fit the objects, and cannot be resized with the Halo Resize tool. The usual color and border & fill options are available.

## Composite State (eToyFriendly off)

A UML package element, very similar to UML Package.

## What object is this?

Damage.
Presumably this is something to do with connectors bearing arrowheads. Yup. Now, which ones.
These are the possible values, derived from the Squeak expression
NCAAConnectorMorph arrowDictionary. They also turn up on tile menus for destination arrow name and source arrow name. I think this must be a new feature in v5.
Do we want images for all of these? I think so.

• #appleWithBite->a NCLineArrowGlyph
There is a method for this in NCCurveMorph

• #basicArrow->a NCLineArrowGlyph
• #basicArrow1->a NCLineArrowGlyph
• #basicArrow2->a NCLineArrowGlyph
• #doubleArrow->a NCLineArrowGlyph
• #doubleBubble->a NCLineArrowGlyph
• #epsilonFork->a NCLineArrowGlyph
• #filledCircle->a NCLineArrowGlyph
• #fred->a NCLineArrowGlyph
• #heavyDoubleArrow->a NCLineArrowGlyph
• #junctionDot->a NCLineArrowGlyph
• #noArrow->a NCLineArrowGlyph
• #numeroDos->a NCLineArrowGlyph
• #numeroUno->a NCLineArrowGlyph
• #openArrow->a NCLineArrowGlyph
• #openCircleWithPlus->a NCLineArrowGlyph
• #openCircleWithSquareDot->a NCLineArrowGlyph
• #openCircleWithX->a NCLineArrowGlyph
• #openDiamond->a NCLineArrowGlyph
• #pi->a NCLineArrowGlyph
• #pointingHand->a NCLineArrowGlyph
• #roundFork->a NCLineArrowGlyph
• #roundTrident->a NCLineArrowGlyph
• #starInCircle->a NCLineArrowGlyph
• #test2->a NCLineArrowGlyph
• #thinDoubleArrow->a NCLineArrowGlyph
• #umlArrow->a NCLineArrowGlyph
• #zap->a NCLineArrowGlyph )
We need to verify this. Also, how does one change arrowheads? Oh, I see. Just type in the name on the tile. But why no menu?

## Crostic

Text missing

Sample File? Cannot find. "If you wish to make up other acrostic puzzles, follow the obvious file format in the sampleFile method."
oldStyle method? Cannot find. "If you wish to print an acrostic to work it on paper, then change the oldStyle method to return true, and it will properly cross-index all the cells."

The Crostic is composed in Etoys of

• an area containing alignments of clues, made of Text and WordGameLetter objects
• a CrosticQuotePanel, containing WordGameLetter objects
• an Alignment of Buttons implementing the following functions
Functions missing

## Diamond (eToyFriendly off)

A basic shape Morph.

## DoubleClick (no category)

Help text: Double-click on me to change my color; single-click on me to change border color; hold mouse down within me and then move it to grow (if I'm red) or shrink (if I'm blue).

This is correct for double click and single click behavior. For click and drag, it is nominally true, but the growth and shrinkage is by only one pixel, which is not visible to the ordinary user. It can be detected by opening a viewer and observing the changes to DoubleClick's left and DoubleClick's bottom.

I filed a bug on this, which was rejected. http://tracker.squeakland.org/browse/SQ-1135
This is stupid.

## End State (eToyFriendly off)

A component of a UML Statechart diagram, marking the destruction of the object being followed. End State is implemented as an NCEllipseMorph.

## EtoysUpdatingThreePhaseButton (not in Object Catalog)

A slight variation of UpdatingThreePhaseButtonMorph wherein the actionSelector and getSelector both take argument(s). These classes are in the Morphic-Widgets category in Squeak.

## Event Theatre

Implemented in EventRecordingSpace in the Morphic-Mentoring category in Squeak. "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."

Crashes Etoys in both Ubuntu Linux and Sugar on XO.
EventTheatre is implemented in the  class, a subclass of , in the  category in Squeak.


## File Dialog

Controls in File Dialog are Buttons and ThreePhaseButtons. The directory display is a SimpleHierarchicalList, and the file display for a directory is a PluggableList.

## Fish Eye (no category)

An extreme wide-angle lens, similar to Magnifier and RoundGlass, but with higher magnification, which can be modified in the viewer or a script. Halo Menu options are

track pointer Toggles display of the area around the cursor

show pointer Toggle a square mark showing the location of the cursor in the magnified display, thus.

round Convert FishEye to RoundGlass. This cannot be undone.

## Flap (no category)

You can get a flap out of the supplies bin. A flap can be used to share objects and their scripts between projects.

A source of objects useful in projects, including the Object Catalog. Click the supply box icon in the toolbar to bring up this flap. Click it again to dismiss the Supplies Flap. The Supplies Flap closes automatically when an object is dragged out of it.

Click and drag any of these objects into the world. Drag objects to the Supplies Flap to make them available for further copying. The Supplies Flap expands to hold new objects if needed. Objects added to the Supplies Flap disappear at the end of the session, unless saved in a project and reloaded.

The supplies flap is a collection of IconicButtonWithLabel objects. The darker band at the bottom is supposed to allow the user to drag it to extend or shrink the Supplies Flap, but instead it moves independently.

Supplies Flap  is implemented in the PartsBin class, a subclass of PasteUpMorph, in the  category MorphicExtras-PartBin in Squeak.

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.

## Frame Rate?

Implemented as FrameRateMorph, a subclass of StringMorph, in the Morphic-Demo category in Squeak

## FreeCellBoard (not in Object Catalog)

A component of FreeCell, providing the places to play the cards.

Implemented as FreeCellBoard, a subclass of AlignmentMorph, in the Morphic-Games category in Squeak.

Implemented as EToyFridgeMorph, a subclass of EToyCommunicatorMorph, in the Nebraska-Morphic-Collaborative category in Squeak.

## Fridge (no category)

A tool for sending objects to other Squeak users as part of the Nebraska collaboration system. Its only control is a check box to toggle between group mode and individuals.

Which state is which?


## FSM ButtonBar (eToyFriendly off)

A source for UML objects for modeling Finite State Machines.

There is a bug in the appearance of FLM ButtonBar. The label at the top is supposed to be in black text on a white background, approximately as shown on the right, but it defaults to white on white. However, the color values shown in its viewer are inconsistent: RGB=100 100 100 (white), but the color tile shows as black. The background color can be set with a color picker, but not numerically, so that it is extremely difficult to set it to pure white.
Furthermore changing the numeric value of the text color in the viewer sets the background color to black.
Bug filed as SQ-1124.


Objects provided are

• State
• Start
• End
• CompositeState
• ScrolledCompositeState
As with Package in Class ButtonBar, the scroll bars in ScrolledCompositeState are not correctly placed, and it is necessary to resize the work area to fix the scrollbars.
Bug filed as SQ-1125.

• Save GIF

Bug filed as SQ-1124

## FSM Flap (eToyFriendly off)

A parts bin for UML FSM components, labels, and connectors.

FSM Flap is implemented as the  in the  category in Squeak.

## Gee-Mail (not in Object Catalog)

Gee-Mail is available on the Widgets Flap. It provides a place to present annotated content. Its Halo menu has options for making it a book with 1-4 columns.

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[sic] example and Alan will be making some available soon.

## GlyphEditor (not in Object Catalog)

The GlyphEditor occurs as a component of the Arrow Editor. It displays a 256-character TTSampleFont in a 16 by 16 array, and has an area for showing a magnified version of a selected character, and another for showing a line with the selected character as arrowheads on the ends of the line, in a Bordered rectangle.

GlyphEditor is implemented using Flaps, FlapTabs, and NCPartsBin classes in Squeak.

This is a bizarre object, whose purpose is not explained.


## Grab Patch

Grab Patch is implemented in Squeak as GrabPatchMorph in the Morphic-Widgets category.

A rectangle with a vertical color gradient.

Can the direction of the gradient be controlled in Etoys? Apparently not.

Gradient was implemented as a GradientFillMorph, now obsolete, in the Morphic-Widgets category in Squeak.

A rectangle with a diagonal color gradient, top left to bottom right.

Can the direction of the gradient be controlled in Etoys? Apparently not.
Gradient (slanted) is implemented as a GradientFillMorph in the Morphic-Widgets category in Squeak. It is better to use a BorderedMorph with an appropriate fill style.

## Graph (no category)

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.

The following tiles are added to the basic category in the viewer.

play

Play the current graph as a sound

cursor

The current cursor location, wrapped back to the beginning if appropriate

sample at cursor

The sample value at the current cursor location

Graph has a special viewer category called sampling.

play

Play the current graph as a sound

clear

Remove all values

cursor

The current cursor location, wrapped back to the beginning if appropriate

sample at cursor

The sample value at the current cursor location

last value

The last value obtained

clear

Clear the graph of current contents

Load a sine wave as the current graph

Load the specified sound into the current graph

reverse

Reverse the graphGraph (no category)

Graph a sound or other input. This can be any sound on the Viewer sound menu, or any sound created in a wave editor. The Halo menu has an option for opening the WaveEditor object. The Viewer for Graph has a category called sampling.

Graph is used by Bouncing Atoms to show the progress of infections.

Graph is implemented as GraphMorph, a subclass of RectangleMorph in the Morphic-Widgets category in Squeak.

## graph paper (eToyFriendly off)

Categories in the viewer for GraphPaper include collections and playfield.

Presumably there are graphing functions associated with GraphPaper, but I don't see them.


GraphPaper is implemented as a PasteUpMorph.

## Halo (not in Object Catalog)

This morph provides a Halo of ThreePhaseButton handles for its target morph. Dragging, duplicating, rotating, and resizing are to be done either by clicking, or by clicking and dragging, the appropriate handle. There are also handles for help and for a menu of infrequently used operations.

In most cases it is not possible to right-click on a Halo to get its Halo. The Halo for the world is an exception, where it is possible to open a viewer on Halo or get a scripting tile for it. However, selecting the menu in this halo results in an error: MessageNotUnderstood: UndefinedObject>>isTextMorph. In some cases, one can select individual buttons in the Halo and get their Halos.

Halo is implemented in the HaloMorph (a subclass of Morph) and HaloSpec (a subclass of Object) classes, in the Morphic-Widgets category in Squeak.

## Hand Magnifier (no category)

Similar to Magnifier, FishEye, and RoundGlass, Hand Magnifier displays a magnified portion of the screen, with a dot to show the cursor's location in the magnified image.

## Happy face (eToyFriendly off)

A Morph. An optional text block can be added via a Halo menu selection. It displays over the face graphic.

Happy face is implemented as an NCCurveMorph.

## Holder (Scripting category)

The Holder object "holds" or contains other objects. Each object contained by the Holder is assigned a cursor number. Objects inside the Holder can be re-arranged by simply moving them around in the Holder. The individual objects inside the Holder may be referenced using the object's cursor number by assigning the cursor number to the Holder's cursor property. This feature makes Holder objects useful for iterating through objects. Some potential uses are:

• organizing animation frames or containing different "looks" for a sketch. For an example of how to do this click on "Gallery of Projects" when you first open Etoys, then look at any of the "Frame-based Animations." You can start with "BouncingBallAnimation" to get the basic scripting needed. It works by increasing the cursor of the "ball" Holder and then using the "looks like" tile from the "ball"'s Viewer in the Graphics category.
• holding data for graphing (see: we should have an example for this, I created one buts it's too complex. Need a very simple basic one to show how you can graph)
• holding text for creating a comic book (see: Conversation 2 in Showcase)

A Holder is implemented in Squeak as a special case of Playfield with these "playfield options" menu items checked.

• auto-linelayout
• behave like holder
• indicate cursor
• resize to fit

## Iconic Button (not in Object Catalog)

A "Simple Button" in which the appearance is provided by a Form (Graphics-Display Objects), a type of image. The Form is turned into a Thumbnail (Morphic-PartsBin), which is then painted on the button.

Iconic Button is implemented in the IconicButton class, a subclass of SimpleButtonMorph, in the Morphic-Widgets category in Squeak.

## Image (no category)

A non-editable picture.

Can one substitute another picture in Etoys? It is done with #image: in Squeak. But how do I find out the Squeak name of an Etoys object such as a Sketch?


Implemented as ImageMorph, a subclass of Morph, in the Morphic-Basic category in Squeak.

## Joystick

Joystick is implemented in the JoystickMorph class, a subclass of SketchMorph, in the Morphic-Widgets category in Squeak.

## Key press

Key press is implemented in the KeyPressMorph class, a subclass of NCOffsetConstraintMorph, in the Connectors-Text-Base category in Squeak.

## Label (eToyFriendly off)

Visually, Label is a borderless text. Its Halo menu offers a number of connection options.

The attach to... option gives the user a dot to drop on an object. The label is placed at the top of the target object. If more than one object is below the drop point, the label is not simply attached to the topmost one. Instead, a menu appears to allow the user to select among the stacked objects. Once the label is attached to an object with this method, it can be dragged anywhere in the World and still remain connected to the same target object. Dropping it on a different object breaks the association with the previous target.

The following are mutually exclusive options. Clicking the box to select one deselects the previous option. Select one and drop the label on the object you want to connect to. If you move the label with the black Halo tool, the connection is not made immediately. In this case, the user can drag the object to set the connection.

connect to center Whether or not there is an attachment point there

connect to nearest attachment point Nearest to the drop point, within the target object

connect to nearest point to center Apparently this connects to the point on the boundary of the target object nearest to the center of the label.

connect to relative point... Get a Pin to place in the target object to specify where to connect. This can override other selections, unless the pin is deleted or moved away.

no connection preference Connect anywhere

connect to nothing Do not connect to object

Label is implemented in the NCLabelMorph class, a subclass of Morph, in the Etoys-Input category in Squeak.

## Lasso

Lasso is implemented in the LassoPatchMorph class, a subclass of ImageMorph, in the Morphic-Widgets category in Squeak.

## Led (Not in Object Catalog)

A graphic simulation of an LED numeric display, used for showing the score in Tetris. It is made up of LedDigits. The value displayed is not accessible in Etoys, and must be set or read using Squeak.

Led is implemented in the LedMorph class, a subclass of Morph, in the Morphic-Leds category in Squeak.

## LedDigit (Not in Object Catalog)

A graphic simulation of a single digit in an LED numeric display as a component of Led. The value displayed is not accessible in Etoys, and must be set or read using Squeak.

LedDigit is implemented in the LedDigitMorph class, a subclass of Morph, in the Morphic-Leds category in Squeak.

## Menu (not in Object Catalog)

A vertical list of MenuItems with a toolbar at the top containing a close button and a title. There is no collections category in the viewer for accessing menu items in Etoys. Lines in a menu are implemented as MenuItemMorph objects.

## Morph

Morph (not in Object Catalog)

A graphical object. Many Etoys objects wear subclasses of Morph as costumes.

## Movie Player

A player for MPEG Movies, almost identical to MPEG Player (Multimedia category) except for its name and Help text. Movie Player appears in the Widgets Flap.

## MVCMenu (not in Object Catalog)

in a StandardViewer, when the search in the SearchingViewer fails, the result is shown in an MVCMenu object. In Cipher, an MVCMenu presents a yes/no choice, whether to discard typing or leave it as is. Attempting to open a StandardViewer on an MVCMenu dismisses the MVCMenu, and thus the viewer.

## NCCurveMorph

This class is used to implement a variety of forms.

• AND gate
• Apple with bite contours
• Buffer Gate
• Circle
• Diamond
• Happy face
• Infinity in circle
• Inverter gate
• Or gate
• pointing hand
• Thick rectangle
• Xor gate

A button to start the Nebraska desktop sharing server. It puts a button marked Share in the world. Clicking the button opens a dialog box to ask the user's name. This name is then attached to the cursor.

Then what? What can you do with the name? I know of no place to put it down. The name is just stuck to the cursor, and the user can mouse normally as though it were not there.

NebraskaServer is implemented in the NebraskaServer class, a subclass of Model, in the Nebraska-Morphic-Remote category in Squeak.

## New Button Flap (not in Object Catalog)

Where did my text go?


## Next Page (Multimedia category)

A control for books to go to the following page.

A UML entity.

## ObjectProperties

Preferences settings dialog for Morphs. On the Halo menu, select halo actions and then property sheet.

## Objects (not in Object Catalog)

A flap containing a selection of common Etoys objects organized in the same way as the Object Catalog, that is, in an alphabetic list, in categories, and with a search function.

## OR Gate (eToyFriendly off)

This Morph has the shape of an OR logic gate symbol for use in electronics diagrams, but does not have the appropriate connection points to use in that manner.

## Page (not in Object Catalog)

A component used in the Book Object. Special Viewer categories:

collections

pen trails

playfield

## Page Controls (not in Object Catalog)

A toolbar used in the Book Object, holding buttons and and the page number display.

## Paint (no category)

That is correct. Paint is not in the Graphics category. Why not?


Opens a PaintBox, shown below, for editing graphics.

The tools shown are

• A paintbrush for drawing dots and curves
• A bucket for filling areas
• An eyedropper for picking colors
• An eraser for removing portions of the image
• Three buttons for selecting brush sizes
• An icon for opening a color picker, thus:
color picker missing
• Four buttons: Undo, Keep, Clear, Toss for deciding what to do with the current image.

Undo reverts the last action.

Keep saves the image and closes the PaintBox. It can be reopened from the image's tool Halo.

Clear goes back to a blank image for starting over.

Toss destroys the image object and closes the PaintBox.

• Eight areas for saving colors while working.
• A tab to open up a scrollable palette of five rubber-stamp icons, of which three are visible at one time. Select a rubber stamp, then click and drag to select an image to apply to that stamp.
• A tab to open up a menu of shapes: line, square, circle, polygon, star. These shapes come with control points, so that they can be placed and then edited in various ways until the user goes on to some other action.

## Paint Flap (not in Object Catalog)

A flap that opens into a PaintBox and a sketching area, similar to Paint.

Where can this be found?


## Parameters (not in Object Catalog)

A browser for the system parameters dictionary, including settings such as fonts, Halo options, and much more. It is available from the Inspect Parameters button in an extended Preferences view on the Search (?) page.

## parts bin (not in Object Catalog)

A component of the Button Flap and the Connectors Flap, permitting users to add objects and retrieve copies. Contrary to the usual convention, the name of parts bin is all lower case. Special categories in the Viewer for parts bin are connections, pen trails, and playfield.

More needed.


## PDA

Components of PDA include

• PluggableList and LazyList for data panes
• PluggableText for displaying details of a person or event
• PDAChoice for searching among contacts
• Month and Week for calendar
• PDAClock for time
• ScrollBars for navigating in panes
• SimpleSwitches to represent days in the calendar

## PDA (no category)

Where is it?


A device for dialing by tone. You can create the tones by clicking the keys one at a time or enter a key sequence from the menu or from a tile in the special viewer category phonepad which has one tile.

• PhonePad dial to abc dials the telephone number in "abc".
Then what? What does dialing a phone number in Etoys accomplish?


## PhraseTile (not in Object Catalog)

Within a ViewerLine for a command tile in a StandardViewer, the name of the Object and the command appear on a PhraseTile together. The Object name is on a TilePad containing a Tile containing a String. The command name is on a Tile containing a String.

## Player (not in Object Catalog)

All scriptable objects in Etoys appear as Players wearing Morphs as costumes.

## Players (Scripting category)

The Players Halo menu has one special item, invigorate, which refreshes the Players list.

What could cause the Players list to get out of sync?


The fundamental user-scriptable entity.  Always represented by a user-specific subclass of Player; instance vars and methods relate to user-defined variables and scripts.

costume  is a Morph, the primary morph I am currently wearing for graphical display.

Scripts are defined in subclasses of Player.  These are UniClasses.

Messages in scripts are sent to Players.  A Player may delegate to its costume, or to an object the costume suggests.  Or, a Player may designate some other object to receive the script messages it does not understand. (see doesNotUnderstand:)

The AllPlayers tool displays all objects for which scripts are defined

Text missing

unscriptedPlayer, Player, Etoys-Scripting

Player, Model, Etoys-Scripting

## Pluggable Button (not in Object Catalog)

A PluggableButtonView 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

Either 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.

A component of the file dialog in GStreamerPlayer, used for ok and cancel buttons.

## Pluggable List (not in Object Catalog)

A component of file dialogs, showing the files in a selected directory.

## Pointing Hand (eToyFriendly off)

A Morph of a right hand pointing straight up. It has a Text object associated with it, configured to a single column of letters in 24 pt Bitstream Vera Sans.

## Pointing Hand2 (eToyFriendly off)

A Morph of a right hand pointing to the right. It has a Text object associated with it, in 18 pt Bitstream Vera Sans.

## Preferences (no category)

Allows you to control numerous options from several categories, as shown below. Details of available options and their effects are provided in the Preferences Appendix.

Clicking the ? icon brings up a search box, various options for handling sets of preference settings, and a Help! button. Clicking the Help! button brings up a window containing descriptions of all of the preference options.

Clicking on any category name shows a list of preferences with check boxes for selecting them. Clicking a preference name brings up a menu of options and commands for that preference. For example:

Clicking the selection box next to a preference toggles it on or off.

## Previous Page (Multimedia category)

A control for books to go to the preceding page.

## ProjectHistory (no category)

A tool showing a list of recently-visited projects that lets the user navigate back to any of them. Use the back button on the toolbar to return from any of them to the project where you have the ProjectHistory displayed.

## RoundGlass (no category)

Similar to the Magnifier, except that it screens its display in a circle instead of a square.

show screen onlydisplays the RoundGlass as a Morph, thus.

show source only displays a magnified portion of the screen in a square around the location of the cursor, thus.

show screen over sourcedisplays the Morph of the screen, with portions of the magnified area around it filling a square area, thus.

show source screeneddisplays a magnified view inside the boundary of the screen, thus.

This is the most useful view.

exchange source and screenswaps the source and screen for purposes of the other options on this menu. With source and screen exchange, selectingshow source onlywill instead display the screen.

## Row (no category)

An object that presents the things within it in a horizontal row. It is initially filled with a random number of egg Morphs of random colors, as in these two examples.

Drag and drop objects into it and remove the default objects if desired to create the desired display. Here is a row of Morphs.

One can also create rows of buttons and other controls.

## Ruler (no category)

A rectangle which continuously reports its size in pixels, thus. Here the Ruler is being resized with a Halo handle.

Ruler is implemented in the RulerMorph class, a subclass of RectangleMorph, in the Morphic-Widgets category in Squeak.

A Morph with an associated Text.

## Scripting Tile Holder (not in Object Catalog)

Dragging a tile from the viewer to the world playfield opens a Script Editor containing that tile. Dragging the tile out of the Script Editor to the world opens a Scripting Tile Holder to hold the scripting tile.

Scripting Tile Holder holds tiles in viewer category panes, in Script Editors, and separately in the world.

A UML element.

## Search Pane (not in Object Catalog)

A field to type a search term in the find view of Object Catalog. The search is performed for each letter changed.

## SearchingViewer (not in Object Catalog)

The Searching Viewer is a component of the StandardViewer that provides a search capability for finding scripting tiles by name rather than by category.

SearchingViewer is constructed from a ThreePhaseButton close button, a Button labeled Search, and an UpdatingString for entering the search term.

## SimpleHierarchicalList (not in Object Catalog)

Occurs as a list of files in a directory within the file dialog of various objects.

## SimpleSwitch (not in Object Catalog)

Used for days in the calendar in PDA. These have two states, selected and deselected, which can trigger other events such as information displays in PDA.

## Sketch (not in Object Catalog)

An editable image created by Paint. Select the gray pencil icon from the tools Halo to open a PaintBox, or select Paint Box from the Object Catalog. Paint the desired form, and select Keep to make it a Sketch object.

## SketchEditor (not in Object Catalog)

SketchEditor is a rectangular area for drawing with a PaintBox to create a Sketch. The Paint tool opens both a Paintbox and a SketchEditor.

## Smart Label (eToyFriendly off, Connectors category)

Smart Label looks just like label, but behaves differently. it is programmed to be attached to a Morph and follow it, with the intention of keeping out of the way of other objects. However, multiple smart labels attached to the same object will sometimes overlap.

## StandardViewer (not in Object Catalog)

The Viewer for Objects invoked with the light blue eye tool in the Object's Halo. Its use is described in the User Interface chapter.

The StandardViewer is constructed from CategoryViewers (ViewerLine, PhraseTile, TilePad), an optional SearchingViewer for finding tiles by name, and common toolbar components such as Buttons, ThreePhaseButtons, and UpdatingStrings.

The toolbar at the top of a StandardViewer contains a button for creating a new variable, a Menu, and a button to open an additional category pane. Clicking the bar at the top of a category pane brings up an MVCMenu of categories to display.

An MVCMenu containing the message "no matches found for" the object also appears when a search in the SearchingViewer turns up no matches. The only menu item is ok.

## Start State (eToyFriendly off, no category)

A UML FSM element, representing the initial state of a Finite State Machine, implemented using NCEllipseMorph.

A UML element.

## Status  (no category)

A row of three buttons to run, stop, or single-step scripts, identical to the buttons in All Scripts and to Script Controls.

How does one link scripts to an instance of Status? Unlike All Scripts, it is not automatically connected.


A UML element.

## Storyboard (no category)

A storyboard authoring tool with the same controls as Book. The difference is that each page of a Storyboard contains a Playfield.

## String (not in Object Catalog)

A text string. Strings occur as Button text, Clock numerals, and other UI elements. To edit the text of a string, shift-click.

## Tab Pane (not in Object Catalog)

Used in Object Catalog for the alphabet buttons.

## Text (border) (no category)

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 the Halo menu) change the wrap setting. 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.

## Text chat (no category)

A tool for sending messages to other Squeak users.

How does this work? The menu buttons do nothing.
Send with Return button. What is this for?


Bug: Text Chat appears with its scroll bars misplaced. Clicking the scroll bars causes them to move to where they belong.

## Text chat+ (no category)

A tool for sending messages to several Squeak users at once. Clicking the area showing the number of people connected to opens a dialog box for adding identifiers of others to chat with.

Bugs: Scroll bars appear in incorrect position, but position themselves correctly when clicked. The menu buttons at the tops of the scroll bars do nothing when clicked.

How is this supposed to work?


## Text Properties (not in Object Catalog)

A dialog box for setting text properties, including color, auto-fit, wrapping, size, and various style options. The bottom row of controls are Accept, to apply the current selections, Cancel, to revert to the previous settings, and Main, to open the full preferences dialog in ObjectProperties. Text Properties is provided on the Halo menu of any text object, including Clipboard, Text, and so on.

A tool that lets you navigate through a thread of projects. When you drag out the thread navigator, it immediately attaches itself to the lower right. Clicking the orange circle at the center gives a list of commands to choose from to navigate through projects.

switch to recent projects

Insert new project

simply close this navigator

remember preferred location in this project

Get explanations for these actions

Orange next and previous arrows appear at the right and left to allow navigation.

For example, you can create a thread of all projects and a holder appears with all the projects currently available. You can drag the projects to change the order and when you click the "okay" button, you are asked to supply a name for the thread navigator.

## Three Phase Button (not in Object Catalog)

A button morph with separate images and actions for on, off, and pressed with the mouse.

## Tick Indicator (not in Object Catalog)

Tick Indicator is a component of the toolbar on Script Editor. It has the appearance of a clock that changes color with the state of the program, as described in the User Interface chapter. Clicking the Tick Indicator sets the program ticking, unless it is already ticking, when it pauses the script.

## Tile (not in Object Catalog)

Tile appears as a component in StandardViewer, in the following nesting of objects

StandardViewer

CategoryViewer

ViewerLine

Phrase Tile

Tile

## TilePad (not in Object Catalog)

TilePad appears as a component in StandardViewer, in the following nesting of objects

StandardViewer

CategoryViewer

ViewerLine

Phrase Tile

## TrueType banner (no category)

A short text in a beautiful font. Use the resize handle to change size. Menu options are

turn off smoothing resulting in more jagged rendering of the font

edit contents…Open a text editing window, which defaults to "some text", not to the original contents.

how to find more fonts… Opens a help window with information on the FontGuy.com Web site, and instructions for downloading and installing fonts.

load font from web… Opens a window for the URL of a font on the Web, downloads the font, and installs it.

How does the user change font? Unlike ordinary text objects, this does not have the font and style tools in its Halo. It seems perverse to be able to get fonts from the Web and then not be able to use them. I see how to do it in Squeak, using the font: method.


## TTSampleFont (not in Object Catalog)

The TTSampleFont occurs within an enclosing GlyphEditor in the Arrow Editor. It displays a 256-character font in a 16 by 16 array. Its halo has an unusual center tool that provides one of the following font samples, according to which font is currently displayed.

## UML Package (eToyFriendly off)

A UML element, very similar to the Package2 element from the Class ButtonBar, with a TextRectangle as the tab at the upper left, and a BasicShape as the rectangular body.

## UpdatingString (not in Object Catalog)

A StringMorph that constantly tries to show the current data from the target object.  When sent #step, it shows what the target object has (target perform: getSelector).  When edited, it writes back to the target.

## ViewerLine (not in Object Catalog)

Within a CategoryViewer in a StandardViewer, each ViewerLine offers a scripting tile for use or editing. These ViewerLines are made up of various components.

• A command tile consists of a ThreePhaseButton for running the script, with the ! icon, and a PhraseTile holding the command.
• A variable tile consists of an IconicButton for a menu, Tiles bearing text Strings for Object and variable names, a Rectangle containing an image of the assignment arrow, a Morph bearing an image for editing arrows, and a Readout String for the value.
• A test tile is made of Tiles bearing Texts.
• A Test Yes No control structure tile contains a Phrase Tile which in turn contains Test, Yes, and No tiles.

## Welcome (no category)

A sign that you accept morphs dropped directly into your world.

What does that mean? What world? Give use case with a specific sequence of actions illustrating the difference with and without this.


## Workspace (eToyFriendly off, no category)

A Workspace is a simple window for editing text, executing it as Squeak, and opening various tools for getting information about terms in the text. An essential gateway to Squeak programming. You can later save the contents to a file if you desire. Bring up a workspace with the ctrl-k keyboard shortcut.

Halo menu commands for Workspace include

set target...

The menu button on the Workspace toolbar his these commands:

change title...

send to back

make next-to-topmost

make unclosable

make undraggable

full screen

window color...

save contents to file...

append contents of file...

create textual references to dropped morphs

Add descriptions for the Halo menu and toolbar menu commands above.

## World (not in Object Catalog)

The world is the main project page you see when you open an Etoys project. It is basically a playfield (see chapter 5.x, playfields). Because of that the world can contain individual objects within it, such as drawings, but can also contain more complicated objects such as books, which tend to be made up of many different objects.

World Buttons

If you click with the right mouse button on the world, you'll see the world's halo, which is simpler than other halos, containing only five buttons.

The pink eyedropper which allows you to change the world's color by picking a color from anywhere on the screen.

The gray pencil allows you to draw directly onto the world by bringing up the painting tool and using the whole screen as a canvas. Every object you draw directly on the world will be embedded in the world and will be locked (which makes it inert to all user interactions). To change that behavior, repeatedly right click on the object and use the objects menu (see chapter ... for more information about objects menus).

The turquoise eye brings up the viewer for the world. Note that the world's viewer has a simpler set of tiles within it that don't give you all the options of other types of objects. (See chapter 3 for more information on tiles.)

The orange icon will give you a tile representing the world. This way you can add a reference to the world in a script.

A click on the menu icon gives you several options.

World's options

redraw screen- This option will redraw your entire screen.

preferences- This entry opens the preference pane, where you can change the default preferences. You can find out more about the available preferences in chapter ...

authoring tools- This menu option allows you to view authoring tools that control the world. These include options such as "remove all viewers" and "etoy vocabulary summary" as well as "attempt misc repairs."

display mode- This menu option allows you to scale your project to fit screens other than XO laptop screens.

desktop color- This menu option lets you change how the world's background looks, and includes options such as gradient fill, and bitmap fill.

pen trails- This menu option lets you control how the pen trails from all objects (but not the objects within those objects) within the World behave. You can, for example, make all pen trails arrowheads, make all pens up, clear all pen trails, etc.

## XOR Gate (eToyFriendly off)

This Morph has the shape of a XOR logic gate symbol for use in electronics diagrams, but does not have the appropriate connection points to use in that manner.

## Zip Tool (no category)

Right-clicking Zip Tool shows it as an Untitled Window. This name can be changed by the user.

Zip Tool has the Halo menu items

open editing What does this do?

edit label... Open a FillInThe Blank for editing the title for the Zip Tool.

A viewer and editor for Zip archive files.

# Glossary

One of the greatest problems facing the learner of a programming system, or indeed almost anything, is not knowing the conventional names for things. What does the learner look for? So one purpose of a glossary such as this is to bring the terminology together where it can be discovered.

Whether it is an equal problem to know the terms but not what they mean depends in part on the organization of a document. It is good practice to define terms on first use, but this is not sufficient. This problem is compounded in the case of a highly-structured but also highly non-linear system. It is much worse when most of the structure is deliberately hidden from the user, as is the case with Etoys.

This glossary collects and defines the terminology and abbreviations used in Etoys, and to the extent necessary for explaining Etoys, terminology from Squeak and Smalltalk also, where they differ from usage in other realms. It does not attempt to explain the names of Etoys or Squeak objects. Etoys objects are described in the Objects and More Objects chapters, and the corresponding Squeak objects in the Morph Definitions appendix. Further information is available using the introspection tools in Squeak, described in the Programming Tools chapter.

AA

Anti-Aliased

AIFF

Audio Interchange File Format

aspect ratio Ratio of width to height of an image, Morph, window, or screen.

badge The tool for communicating with joined buddies, providing information on the person connected with, and various modes of communication.

balloon help Help text that appears when the user hovers the mouse pointer over an object.

Editable by users as shown here with the Halo menu selection below.

basic (viewer category) A menu of commonly used options in any object viewer. Displayed by default when a viewer is opened. Each of these options appears in another category (geometry, motion, or sound) as well.

Basic (Object Catalog category)

Bezier curve

A smooth curve made of segments of cubic curves joined smoothly together. Cubic curves can be defined algebraically by cubic equations, or visually, by specifying a start and end point and the directions and curvatures at both with handles for adjustment. In Etoys Curve Morphs, curvy polygons, and such, the adjustment points are in the middle of segments, thus.

black tool (Halo)

See Pick-up tool

blue tool (Halo)

See Viewer tool

BOB

??


Book (object)

A multi-page structure for creating texts, presentations, and the like by dropping in other objects, with controls for adding or removing pages and for navigating.

Boolean value type

A type for variables that can have one of just two values, True or False.

BorderStyle value type

A type for variables that can have any of the following values:

Etoys objects generally have a border style tile such as this:

Changing the setting affects the appearance of objects that use a border.

brown tool (Halo)

See Move tool

bucket (PaintBox)

Click in an image being edited to flood the connected area of the same color as the selected point with the current painting color.

buddy (Sugar)

In the Sugar version of Etoys, another Sugar user connected via the collaboration mechanism. Click the Sharing button to begin.

button

An Etoys object, a button with editable text.

button (viewer category)

In the viewer for a button object, the following menu of programming tiles.

ButtonPhase value type

A type for variables that can have the values button up, button down, or while pressed, corresponding to the states of a ThreePhaseButton.

category (Viewer), see viewer category

Change color (Halo)

Depending on the object type, a purple tool to open a colorpicker or to allow the user to select a color from the screen.

Change font (Halo)

Change size (Halo)

Change emphasis & alignment (Halo)

Halo tools for styling text within an object.

Class (Smalltalk)

In the Smalltalk language, everything is an object, created as an instance of a class. The definition of a class consists of a specification of its superclass, of declarations of variables, and of code for methods. Thus the class Integer is a subclass of Number, and defines methods for various arithmetic operations. Every class is an instance of the class called Class. Most Smalltalk classes are defined entirely in Smalltalk, but some that deal with the external world or with system fundamentals, including the core of the object hierarchy, are implemented in a Virtual Machine.

clear (PaintBox)

A tool for clearing a drawing and starting over.

closing (Script Status)

Run this script when the object is closed.

collapse (Halo)

Use this tan tool to reduce an object to a button with a similar toolbar icon for restoring the object.

collapse (toolbar button)

Reduce an object to a button with a similar toolbar icon for restoring the object.

color (viewer category)

Color value type

A 24-bit color that can be chosen from a color picker such as this one.

color swatches (PaintBox)

An area that holds color samples for reuse during a Paint session.

Colorpicker (PaintBox)

command tile

A scripting tile containing an executable command, in contrast with assignment and test tiles. A command tile can be recognized by the ! icon on its left. Clicking that icon executes the command once.

connectedTo (Script Status)

Run this script when a connector connects to this object.

connection point

Etoys graphical objects have predefined points where connectors can join to them. When the user holds a connector end over the object, the connection points are shown. When the user drops the end, it connects to the nearest connection point.

The user can add connection points by dropping pins on the object.

connections to me (Viewer category)

When a connector is connected to an object, the target object gets this category of scripting tiles.

Connector

A line, straight or curved, with connection points at each end that can be dragged and dropped on connection points in objects to make diagrams. Connectors can have a great variety of graphic forms, including line types, arrows at each end, and more.

Connectors (Object Catalog category)

control structure tile

Either a test yes no tile for branching or a repeat tile for looping.

costume

The Morph that provides the graphic for an object. Objects with a graphics category in the viewer have a look like tile for swapping costumes (as in animations) without changing their other properties.

custom event

A variable type.

How are custom events created, and what are they used for?


dark blue tool (Halo)

See Rotate tool

datatype

See Object, value type

delete tool (Halo)

An X in a pink background at the top left of a Halo, used for deleting the object whose Halo it is from the workspace and sending it to the Trash.

disconnectedFrom (Script Status)

Run this script immediately before a connector disconnects from this object.

do it (Squeak)

A Squeak command to execute Smalltalk code in a text window.

dot

A default object in scripting tiles, such as "image overlaps dot", "turn toward dot", and so on. Get a tile for another object and drop it over dot on a tile in a viewer or script to replace it.

drag & drop (viewer category)

drop

In addition to the ordinary meaning of drag and drop or pick up and drop, in Etoys there is an operation of dropping one object on another to create a composite object. There is a property represented by a scripting tile, Object's drop enabled, which controls whether the object accepts dropped objects and incorporates them into itself, or whether objects dropped on this object remain independent, simply lying in front.

DSC

Adobe Document Structuring Conventions used in PostScript conversion

Duplicate (Halo)

Eraser (PaintBox)

A paint tool for dragging in a sketch to turn selected areas to the background color.

Etoys

A graphical art and programming environment built on Smalltalk and Squeak.

Event Movie
What you see when you play back an Event Tape made in an Event Theatre.

Event Roll
An auxiliary tool showing the full "score" of an Event Tape made in an Event Theatre.

Event Recording
A term interchangeable with "Event Tape."

Event Tape
The results of an event-theatre session;  an interaction sequence that can be played back.

Event Theatre
An authoring tool providing a workarea and tools for creating and recording a sequence of Etoys events (an Event Tape) and playing them back (an Event Movie).

expression

In an Etoys programming tile, the argument of a command or a value to be assigned. Numeric values can be edited to combine several values and functions.

fill & border (viewer category)

Flap

A hidable area for holding a catalog of objects, such as a Button Flap (initially empty, ready for the user to drop buttons or other objects in it), a Connectors Flap with a selection of connectors, or the Help Flap with a set of Etoys Quick Guides. Each flap has a tab that the user can click to hide or show the flap's contents, as shown in the images below.

forward direction

Distinguish from heading, which is the direction the object moves under the forward by command, and from the orientation of the object's costume. Change the forward direction and heading together without rotating its costume by activating the object's direction arrow using the Halo menu, and then shift-dragging the arrow. Rotating a Morph changes its heading and orientation, but not its forward direction. Editing the heading value in the object's viewer does not change the forward direction, but does rotate the costume, while changing the forward direction results in the same numeric change to the heading with no change to the orientation of the costume.

These three properties can thus be set to arbitrary values.

There appears to be no place in Etoys where the forward direction is used. Why is it there?

Gallery of Projects

One of the clouds in the opening Etoys screen, offering access to a selection of Etoys projects, including tutorials, simulations, games, particle models, and Turtle Art.

Games (Object Catalog category)

Gold Box

On a script editor toolbar, an icon giving access to this menu of scripting tiles. in some documentation, this is called the Gold Chest.

Menu selection to attach the object to the cursor so that it can be placed wherever desired with a click.

geometry (viewer category)

Graphic value type

[What is this? How do you set it, and how do you use it?]

Graphics (Object Catalog category)

Gray tool (Halo)

See Redraw tool.

Green tool (Halo)

See Duplicate tool.

Halo A set of tools provided for each object. Right-clicking the object brings up a halo like this one.

There are variations on the tool set available for different objects. Text objects have tools for font, style, emphasis, and alignment. Graphical objects such as Sketches have a Paint tool.

Handle (Halo)

A tool in the form of a circle with an arrow that changes both the direction of "forward" (hold down the shift key and drag the tip of the arrow to the direction you want the object to move) and the center of rotation (hold down the shift key and drag the circle to the new center).

The direction in which an object will move under the forward command. Distinguish from the object's forward direction [what is that?]. Rotating the object changes only the heading. Using the object handle in the Halo changes both the heading and the forward direction equally. Editing the heading in the object's viewer changes both, while editing the forward direction leaves the heading unchanged.

Help

An icon of a question mark on the Etoys toolbar.

Clicking it opens a help flap containing a menu of Etoys Quick Guides.

Clicking the portion of the flap that says Help reduces it to a corner of the Etoys window.

Clicking on this area opens the flap up again.

holder

An object containing the given Etoys object as a component. Examples are Menus holding Menu Items, or toolbar Alignments holding buttons of various kinds. Objects not otherwise held have the world as their holder. The world does not have a holder. Objects have holder variable tiles in their Miscellaneous viewer category menus. [What can one do with the holder tile?]

IconicButton

A type of button used in toolbars. Distinguish from ThreePhaseButton.

IDE See Integrated Development Environment

ImageResolution value type

A variable type with the possible values original, 256 colors, 256 grays, 4 grays, or black and white. [What is this for?]

Implementor (Squeak)

For a given method name, any class that implements a method of that name. For example, several numeric classes implement various arithmetic functions in different ways. Some classes do not implement certain methods at all, if they are not appropriate for the object type concerned.

In hand

Attached to the mouse cursor with a button down so that the user can drag it to the desired location. It is placed when the mouse button goes up. For connectors, the source end is placed when the button goes up, and the destination end when the button is clicked and released again.

input (viewer category)

Inspector (Squeak)

A development tool for examining the contents (instance variables) of an active object. You can also use it to send messages to an object.

Integrated Development Environment (IDE)

A set of tools in a common user interface to assist the programmer by organizing information about the program being developed as well as the development environment and programming language.

Etoys and Squeak both do this, but in quite different ways. Squeak provides access to all of Smalltalk using tools to define objects and methods in text, while Etoys usually restricts the user's access to a predefined set of objects and methods, with programming done in a tile-based Script Editor. Using certain keyboard shortcuts, however, the user can go behind Etoys to access the more powerful but more complex Squeak tools.

Journal (XO)

In Sugar education software, work is saved in a Journal as a searchable, sequential record, rather than as files in a conventional file system. The Sugar version of Etoys implements this with two icons on the toolbar, one to keep a copy of the current project in the Journal,

and one to find a saved project in the Journal.

Just for Fun (Object Catalog category)

Keep (PaintBox)

Keyboard shortcut

A combination of keys that has a defined action, such as bringing up a particular menu or a window of a particular type.

KeyStroke (Script Status)

?? Not on the Script Status menu. Presumably this would run a script to process a keystroke.

Language

Etoys supports several languages in its user interface. Click the globe icon on the main toolbar.

Look like

For graphic objects there is a programming tile that allows the object to take on the appearance of any other object. This is particularly useful for animations.

Make a tile (Halo)

Brown tool to create a scripting tile for this object.

MC

Abbreviation for Monticello

A black and white icon of a list.

It is used to bring up a menu of Object actions.

Method (Smalltalk)

In Smalltalk, where everything is an Object, programming is done by writing methods to define the behavior of objects, and then sending messages to Objects to evoke those behaviors. Objects can inherit methods and behavior from their Superclass, or its Superclass, and so on up the inheritance chain.

miscellaneous (viewer category)

Monticello

A package manager for installing extensions to Etoys software

more geometry (viewer category)

Morph

1) A graphical object. Etoys objects are implemented as scriptable Players wearing Morphs as changeable costumes. See the Objects and More Objects chapters, and the Morph Definitions appendix, for lists of such objects in Etoys and Squeak, with information concerning their appearance, behavior, purposes, and implementations.

2) A Class in Squeak with an extensive subclass hierarchy and an extensive method library.

motion (viewer category)

MouseDown (Script Status)

Run this script when the left mouse button goes down on this object.

MouseEnter (Script Status)

Run this script when the mouse pointer moves over this object.

MouseEnterDragging (Script Status)

Run this script when the mouse pointer moves over this object with the left button down.

MouseLeave (Script Status)

Run this script when the mouse pointer moves away from this object, button up.

MouseLeaveDragging (Script Status)

Run this script when the mouse pointer moves away from this object, button down.

MouseStillDown (Script Status)

Run this script while the mouse button remains down.

MouseUp (Script Status)

Run this script when the mouse button is released.

Move (Halo)

A brown icon for a tool that allows an object to be dragged and dropped.

Distinguish from the Pick Up tool, which attaches an object to the cursor temporarily when the mouse is clicked and released.

Multimedia (Object Catalog category)

MVC

Morphic Viewer C?? What are MVC Browsers?

NC

[something about connectors?] NCAA is the anti-aliased version.

normal (Script Status)

Run this script when it is called.

Number value type

A floating point numeric value, which can be a constant or the result of an expression.

Object

Smalltalk is an object-oriented programming (OOP) language, in which everything is an object. Objects are defined as instances of classes, which are defined by their internal values and externally accessible methods for responding to messages. In Etoys, everything is a graphical object with a visual representation and a set of variables and methods accessible in the object's viewer.

Object catalog

A tool for accessing a wide selection of Etoys objects alphabetically by name, with a search function, or by category.

ObjectExplorer (Squeak)

A Squeak tool for viewing the structure of objects, showing how it is composed of other objects.

observation (viewer category)

Open a viewer (Halo)

A tool for opening the viewer for an object, showing the scripting tiles for that object and providing support for creating variables and modifying their datatypes.

Open in hand

Create an object attached to the mouse cursor, to be held while the mouse button is down, ready to be dropped into a world when the button goes up. For connectors opened in hand, the source end is placed when the button goes up, and the destination end when the button is clicked and released again.

Opening (Script Status)

Run this script when the object is opened.

obtrudes

An object overlaps the edge of its container. The world, books, and playfields are containers. The part of the object outside the container is normally not displayed.

orientation center

Change to rotation center in text.



Paintbrush (PaintBox)

A tool for drawing, using a circle in one of six sizes.

parallel programming

Running multiple programs at the same time. In Etoys, this can be done by running multiple scripts at the same time, or by using a particle model implemented in Squeak. There are Etoys controls to start and stop all scripts, or just scripts of a certain type. Etoys provides a very gentle introduction to parallel programming, but allows users to explore its full complexity, which is a major topic in Computer Science.

Patch value type

[I know what a Patch is. Why patch-valued variables?]


paused (Script Status)

This script is ready to be run continuously when switched into ticking mode.

pen use (viewer category)

Pencil (Halo)

The gray Halo tool has an icon of a pencil.

It brings up the PaintBox so that the user can alter the object's drawing.

Pick up (Halo)

The black Halo tool allows the user to pick up an object with one mouse click, and drop it elsewhere with another click. Distinguish from the Move tool, which supports drag and drop.

Pin (Object)

A pin is a graphic indication of a connection point that can be dropped on other objects. Pins can be redrawn or have their colors change to blend in with the target object.

Some, though by no means all, Etoys and Squeak menus have this pushpin icon on their top bars.

Clicking this icon tells the menu to remain open in the workspace, even if the user makes a selection or clicks elsewhere. The pinned menu does not show this icon, but can be closed in the normal way with the pink Close tool.

Pink tool (Halo)

See Delete tool

Player

Any scriptable object. A player normally wears a Morph as a costume to define its visible appearance and the set of scripting tiles that apply to it. In animations, the player changes costumes in rapid succession to give the illusion of motion.

Active players are those referred to in a script open in the world or in any object's viewer, including of course their own. They are displayed in the Players tool from the Object Catalog in a scrollable list.

For each Player listed, there are tools to show a menu of commands, to reveal the object if it is hidden, and to open an object viewer on it. This is the command menu.

Player value type

Type for a variable that can hold any Object type. To change this value, put the variable tile in a script, drop a tile for the desired object in place of the existing type, and run the script.

Playfield

An Object type designed as a background to hold and display other objects.

Point value type

Type for a value that holds the coordinates of a point in the form 0@0, with the x coordinate first and the y coordinate following. The x coordinate runs from 0-1200, left to right, and the y coordinate 0-900, bottom to top, in the display area, but values outside that area are permitted. Object locations are point values.

prettyprint (Squeak)

Arrange and display code so as to reveal its structure. This can include line breaking and indenting, choice of symbols, coloring, and highlighting.

print it (Squeak)

Execute the current line or selected text, and display the result in text form.

protocol (Squeak)

A grouping of methods for convenience in organizing, searching, and understanding the object whose methods they are. Thus, for example, many objects have an initialization protocol.

QHSM

??


Quick Guides

Books (in the Etoys sense) in a Help flap accessed with the ? tool on the toolbar.

random tile

A tile for mathematics functions, provided in the Gold Box in the toolbar of a Script Editor and in the Object Catalog.

When random is part of an expression in a tile in the Script Editor, clicking it brings up this menu.

Recognizer (Squeak)

What is this, and what does it do? It does not turn up in a Google search for squeak recognizer. All I have on it is the Cmd-r keyboard shortcut, but I do not see any result from that.


Red-brown tool (Halo)

See Move tool

Redraw tool (Halo)

A gray pencil tool in the Halo of a Sketch to bring up the Paint toolbox.

Repeat control structure tile

A tile available from the Gold Box menu to repeat any sequence of tiles a given number of times.

The repeat count can be the result of an expression.

A command provided in the viewer menu for an object to show it when it is hidden. The object's Halo is also displayed.

Rotate (Halo)

Click and drag this blue tool to rotate the object.

SAR

Script ARchive file format, a zip file of structured Squeak code. See also SM.

script

An Etoys program built from tiles, usually in a Script Editor.

ScriptEditor

The object type of a Script Editor for tile-based programming.

scripting (viewer category)

Scripting (Object Catalog category)

ScriptName value type

A variable datatype that can hold the name of a currently defined script. Any current script name can be entered by cycling with the up and down triangle controls, or by clicking the name to get a menue.

Script Status

Any of several states of a script indicating when the user intends it to run. The states on the following menu are defined elsewhere in this Glossary.

scripts (viewer category)

A category listing any user-defined scripts for this object.

ScriptStatusControl

A tool on the toolbar of a script editor, providing access to a menu of Script Status states (defined above) for controlling execution of the script.

scrolledIntoView (Script Status)

Run this script when the object is scrolled into view in a GeeMail Morph. [What is that?]

scrolledOutOfView (Script Status)

Run this script when the object is scrolled out of view in a GeeMail Morph. [What is that?]

Selector (Squeak)

A Smalltalk message.

Sender (Squeak)

An Object method that sends a particular message. There is a command to open a window displaying all senders of a specified message.

Share (Sugar)

In Sugar collaboration, open up a software session so that others can join in. Sharers are called buddies. Buddies sharing the same session can see the same display, showing each other's work, and can work together on creating documents, images, programs, and so on.

Showcase

At Squeakland.org, a repository for contributed projects.

SM

Smalltalk The first fully object-oriented programming language, integrated development environment, and graphical learning environment. Alan Kay's research group at Xerox PARC created Smalltalk as part of the Dynabook project, aiming at creating a computer inexpensive enough to give to every schoolchild, and powerful enough for doing all schoolwork. In other words, the OLPC XO. In Smalltalk, everything is an Object, an instance of a Class, defined in Smalltalk. Even the Smalltalk Virtual Machine is developed in Smalltalk (since bootstrapping the first handcrafted version) and translated to C for compiling for specific platforms. Smalltalk programming is done by defining methods within objects, and then sending messages to objects, which thus can determine for themselves how to respond. In incidental side effect of Smalltalk was the creation of the Apple GUIs for Lisa and Macintosh computers, which inspired Microsoft Windows, the X windowing system for UNIX, and many others. Squeak is implemented in Smalltalk, and Etoys is implemented in Squeak.

sound (viewer category)

Sound value type

Spawn method (Squeak)

Open a browser on the protocol of the current method.

Squeak

A graphical IDE for Smalltalk

Squeakland

A web site for Squeak and Etoys

Stamp (PaintBox)

A tool that allows the user to turn any rectangular part of a drawing into a painting tool. Clicking in the work area puts down a copy of the region. Clicking and dragging puts down a copy at each point of the dragging path.

String value type

A datatype for variables holding a text string. Click on the text to edit it.

System Browser (Squeak)

An IDE tool for examining any Squeak object with its variables and methods, as grouped into categories of classes and protocols of methods, and for creating more of each. Within the System Browser are options for examining the parts of categories and classes, searching for classes and methods, and examining the relationships among all of them.

Supplies bin

A flap in the Etoys workspace giving access to a variety of Etoys objects, including the Object Catalog. Click the toolchest icon to open it. Users can copy objects to the supplies bin for temporary storage.

Tan tool (Halo)

See Collapse tool

tests (viewer category)

TestYesNo control structure tile

ThreePhaseButton

A button with three states, called button down, while pressed, and button up.

Tickindicator

A Morph used as a tool in a Script Editor. It changes color with the state set for running the script: green for normal, pink for paused, gray for ticking, and other colors for other states.

Click the TickIndicator to set a paused script ticking, or to pause a ticking script. Click the name of the state to get a menu of possible settings.

ticking (Script Status)

Running this script continuously, repeating whenever it finishes.

tile

A component for scripting, the Etoys version of programming.

toolbar

An area containing icons for various actions.

Toss (PaintBox)

Discard the current drawing and close the PaintBox.

Transcript (Squeak)

A window that shows messages from running programs.

Trash

A receptacle for discarded objects. Double-clicking on the Trash opens it to allow objects to be recovered.

TT

TrueType

Type, see Value type

TrailStyle value type

Styles for pen trails, with a choice of lines, arrows, arrowheads, or s, as in the examples below.

Undo (PaintBox)

A button to undo the last Paint operation.

value type

One of a set of object types that can be values of variables. When creating a variable, the user can choose to set the type from the variable menu, getting this list to choose from.

variable (Smalltalk)

Part of the definition of a Class of object in Smalltalk is the definition of variables, which are normally kept internal to the definition and not accessible by other objects. These can be Class variables, in which there is a single value used by all instances of the Class, or Instance variables, where each Instance gets its own private variable and can maintain its own value, independent of other instances.

variable tile

Each Etoys variable is defined in the viewer for a particular object type, in the following form.

The components of a variable are the menu at the left, the object name, the variable name, an assignment arrow, arrows for modifying the variable's value, and the current value.

variables (viewer category)

Users can define their own object types in Etoys by renaming existing objects and then changing their definitions. In particular, users can create variables for the new type to use, choose the value type for the variable, and either set the value manually, or write scripts to set its value or change it dynamically.

Viewer

For any Etoys object, there is a viewer that shows the actions it responds to, the values of its variables, and the tests that can be asked

viewer category

For every object there is a viewer that shows the program tiles for that object. These tiles are divided into categories that the user can select for display purposes, .

Watcher

A tile that continuously displays the value of a variable. There are two kinds of watcher, the simple watcher that only shows the value,

and the detailed watcher that shows the name of the object and the variable, in addition to the value.

In both cases the user can modify the value of the variable through the watcher, just as in a variable tile.

Workspace (Squeak)

A window for entering and optionally executing text.

World

The background object in which other objects are placed in Squeak and Etoys. It has a Halo with fewer tools than other objects (menu, paint, color, viewer, tile). gives access to this world menu.

(image0

Yellow tool (Halo)

See Resize tool

ZASM

Zoom And Scroll Morph

Etoys: AppendixMorph

# Appendix: Morph

License: The Etoys Manual will be dual-licensed under GPL (standard for FLOSS Manuals) and MIT (standard for Etoys). By contributing, you agree that your edits can be used under both the GPL and MIT licenses.

If you hold down shift while copying with the green halo handle you make a copy.

Almost... What you now have are two sibling players, each of which is a "Player" or "Object" in its own right. (Also copies made by the Player Copy tile are siblings.) Each players wears its own separate Morph as its costume. The siblings are related in that they share certain things in common, in particular: scripts and variable definitions.  So if you add a variable to one sibling, all siblings will have their own instance of that variable with the same name. The same name, but the values can be different. For example if I add a variable called "speed" to one sibling, all siblings will have a variable with that name. But I can have one sibling with speed=5 and another with speed=10. Same variable name different values.

Also if I add a script to one sibling, all siblings will have the same script (and same scripting tiles, if I change it in any sibling at anytime). But although siblings share a script, each sibling has its own private "status" for that script, i.e.remembers separately whether the script as used by this instance is "normal", "paused,", or "ticking", or set to trigger on mouse-up, etc.; and what the tick-rate is.

When using siblings, what's really happening underneath is that there is a custom Player "Class" is created to bear the shared code, and the siblings are individual "Instances" of that class. "Class" and "Instance" are among the most fundamental concepts of object-oriented programming

So why would you use siblings? Well besides teaching one of the most fundamental concepts of object oriented programming, you could use siblings in a game to make characters that have similar behaviors (aka scripts) but different looks (you can change the looks by either re-drawing the sketch or by setting the Sketch's graphic (if the object is a Sketch or image you copied in) or changing its size and colors.  You could also have ships in a game that keep track of how many times they were hit (using a variable to count the # of hits). That way you can program a basic ship once and make multiple siblings. Then if you decide to change the behavior (ex: modify a script, or add a new variable), you can change it once and all the siblings are changed.

Siblings could also be used to try to simulate or model real world behavior.  For example deer population or some other animal.  You could create an Object that simulates the behavior of a deer: searches for food, ages, breeds (at a certain age), etc. and make sibling copies of that one object. Then each Sibling (aka individual instance of the Class Deer which you have defined) could age, search for food (and find it or not which could affect its life expectancy), etc at its own rate.  You could also create predators and food that grows. Then run multiple simulations varying the amount of food, starting number of dear, # of predators, etc.
#NOTE: Need to point to some good examples in Etoys and lesson plans from Internet

If the "all instances" box is not checked in AllPlayers, you'll see the scripts for only one player of each sibling group. This will give you "control" over the scripts of only one of the players. If you want to be able to "control" scripts for both of the siblings, make sure the "all
instances" checkbox is checked.

Unless the "all instances" checkbox is checked, creation of new siblings will typically not result in any noticeable change in the all- scripts tool, since all the scripts of the new sibling will already be represented by another instance in the tool. Perhaps that's what you're seeing.

Also, if the "tickers only" box is checked, only scripts whose status is "ticking" or "paused' are shown in the all-scripts tool. This can be another reason why the all-scripts tool may seem not to be "picking up" on a change.

#DEVELOPER NOTE: We refer to "siblings" but don't have a formal term for the "class". We don't much use the terms "class" and "instance" in the etoys UI, nor in any documentation I'm aware of. (A notorious exception is the "all instances" checkbox in the all-scripts tool.)
Hmm... maybe the checkbox should read "all siblings" rather than "all instances"...

#DEVELOPER REQUEST: AFAIK, it's fine to have an all-scripts tool open as you create, delete, rename, and otherwise manipulate objects and scripts; I'm not aware of situations where it "misses" anything, but if you can describe a sequence of steps leading to such a situation, it would be helpful.

Etoys: Credits

All chapters copyright of the authors (see below). Unless otherwise stated all chapters in this manual licensed with GNU General Public License version 2

This documentation is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This documentation is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this documentation; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

## Authors

AppendixEtoysFriendlyOff
AppendixKnownErrors
AppendixMIMETypes
AppendixMorph
Credits
GETTING STARTED
Modifications:
Bert Freudenberg 2009
Cherry Withers 2010
ChristineS Murakami 2009, 2010
John Curwood 2009
Randall Caton 2010
Rita Freudenberg 2009, 2010

INTRODUCTION
Modifications:
Anne Gentle 2009
Bert Freudenberg 2009
ChristineS Murakami 2009
John Rigdon 2010
Randall Caton 2010
Rita Freudenberg 2009, 2010
Stephen Thomas 2009, 2010

OBJECTS
Modifications:
Bert Freudenberg 2009
Cherry Withers 2009, 2010
ChristineS Murakami 2009
Jim Davis 2009
Karl Ramberg 2009
Randall Caton 2009
Rita Freudenberg 2009, 2010
Stephen Thomas 2009, 2010

COMMONTILES
Modifications:
Bert Freudenberg 2009, 2010
Randall Caton 2010
Rita Freudenberg 2009, 2010
Stephen Thomas 2009, 2010

USER INTERFACE
Modifications:
Bert Freudenberg 2009
Cherry Withers 2010
ChristineS Murakami 2009
Karl Ramberg 2009
Rita Freudenberg 2009, 2010
Stephen Thomas 2010

Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.

c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.

10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS