FLOSS Manuals

 English |  Español |  Français |  Italiano |  Português |  Русский |  Shqip

Etoys Reference Manual Vol. II

Etoy Friendly Off

Turning off the eToyFriendly preference results in access to more options, objects, tiles and menus. These are listed below, followed by summary information on each of the changes made in Squeak when turning this preference on or off.

Objects

The following objects appear in Object Catalog when eToyFriendly is off. They are described in the More Objects chapter.

  • AND Gate
  • CircleCurve

  • Class
  • ClassButtonBar

  • Class diagram Flap

  • Composite State

  • Diamond

  • End State

  • FSM ButtonBar

  • FSM Flap

  • graph paper

  • Happy face

  • Label

  • Note

  • OR Gate

  • Pointing Hand

  • Pointing Hand2

  • Sad face

  • Scrolled State

  • Smart Label
  • Start State

  • State

  • STClass

  • UML Package

  •  XOR Gate

Menu items

Most menus and lists of options are not changed by setting eToyFriendly on or off.

Preferences

With eToyFriendly on, the Preferences search view (Click ?) shows a search box and three options, Search, Reset preferences on startup, and Help. With it off, the following options appear.

  • Restore all Default Preference Settings
  • Save Current Settings as my Personal Preferences
  • Restore my Personal Preferences
  • Save Current Settings to Disk
  • Restore Settings from Disk
  • Inspect Parameters
  • change theme...

World halo menu

This menu has the title world, in contrast with the World menu. With eToyFriendly off, the following options appear.

  • export... Save an image in one of four graphics file formats
  • world menu... The World menu 

Object halo menus

In general, halo menu  add submenus for halo actions..., layout, copy & print..., export..., and debug... There are other commands specific to particular classes with eToyFriendly off, such as the inspect command for the Players tool.

    Scripting Tiles

    Except where noted, these tiles appear only with eToyFriendly off. These tiles are defined in Vol. I of this manual.

    tests

    touches a dot

    motion

    align after

    follow path

    move toward dot

    scripting

    trigger custom event

    triggering object

    paintbox (eToyFriendly on)

    start painting in

    as object

    entire category

    collections

    These are tiles you get in the  viewer category of a playfield.

    include at beginning

    include at end

    playfield

    initiate painting

    display

    Where are the following to be found? Are these tiles? More work needed.
    

    show navigation bar

    Player showNavigationBar
    

    Show the navigation bar at the top of the screen

    hide navigation bar

    Player hideNavigationBar
    

    Hide the navigation bar at the top of the screen

    use blueprint canvas

    Player useBluePrintCanvas
    

    Display the world as a blueprint

    use normal canvas

    Player useNormalCanvas
    

    Display the world normally

    Senders of eToyFriendly

    The following methods check the setting of the eToyFriendly preference before doing something, to decide whether to make some facility available to the user. Items marked class after the object name refer to class methods. The others are instance methods. The protocol within the Class definition is given in curly brackets.

    I am taking the brute force and ignorance approach of copying all of the code here, for later analysis to determine what objects, menu items, and other facilities are controlled by this preference. More to come, in other words.
    

    AllPlayersTool {menus}

    114 implementors

    addCustomMenuItems: aMenu hand: aHand
        "Add further items to the menu"
    
        aMenu add: 'reinvigorate' translated target: self action: #reinvigorate.
        Preferences eToyFriendly ifFalse: [aMenu add: 'inspect' translated target: self action: #inspect]
    

    [Only one of the 114 implementors of addCustomMenuItems:hand: refers to eToyFriendly to decide what to do. Opening an Implementors window on this message gives a lot of information on variable menu selections provided for other reasons.]

    Add an item (reinvigorate) to the halo menu of the Players object.

    I just tried this. The reinvigorate command appears on the halo menu regardless of the setting of eToyFriendly. Also, there is no visible effect. The reinvigorate method is supposed to redraw the Players tool, updating the list of players. I don't see how this list could fail to be current. Needs more work.
    

    CollapsedMorph {collapse/expand}

    1 implementor

    beReplacementFor: aMorph
    	"Remove a morph from the world and insert the receiver in its stead as a surrogate."
    
    	| itsWorld priorPosition |
    	(itsWorld _ aMorph world) ifNil: [^self].
    	uncollapsedMorph _ aMorph.
    			
    	self setLabel: aMorph externalName.
    	aMorph delete.
    	itsWorld addMorphFront: self.
    	self collapseOrExpand.
    	Preferences eToyFriendly ifTrue: [self removeMenuBox].
    	(priorPosition _ aMorph valueOfProperty: #collapsedPosition ifAbsent: [nil])
    	ifNotNil:
    		[self position: priorPosition].
    

    When collapsing a SystemWindow Morph with eToyFriendly set, remove the menu box.

    And what is that? I see no difference in a collapsed window with either setting of eToyFriendly. Needs more work.
    

    Debugger {nil}

    1implementor

    buildMorphicNotifierLabelled: label message: messageString
       | notifyPane window contentTop extentToUse |
       self expandStack.
       window _ (PreDebugWindow labelled: label) model: self.
    
       contentTop _ 0.2.
       extentToUse _ 450 @ 156. "nice and wide to show plenty of the error msg"
       window addMorph: (self buttonRowForPreDebugWindow: window)
          frame: (0@0 corner: 1 @ contentTop).
    
       Preferences eToyFriendly
          ifFalse:
             [notifyPane _ PluggableListMorph on: self list: #contextStackList
             selected: #contextStackIndex changeSelected: #debugAt:
             menu: nil keystroke: nil]
          ifTrue:
             [notifyPane _ PluggableTextMorph on: self text: nil accept: nil
                readSelection: nil menu: #debugProceedMenu:.
             notifyPane editString: (self preDebugNotifierContentsFrom:
                messageString);
             askBeforeDiscardingEdits: false].
    
       window addMorph: notifyPane frame: (0@contentTop corner: 1@1).
       "window deleteCloseBox.
          chickened out by commenting the above line out, sw 8/14/2000 12:54"
       window setBalloonTextForCloseBox.
    
       ^ window openInWorldExtent: extentToUse
    
    Novice mode: Display provided message, usually "An error has occurred; you should probably just hit 'abandon'. Sorry!"
    Expert mode: Show stack.
    

    Debugger {initialize}

    1 implementor

    buttonRowForPreDebugWindow: aDebugWindow
    	"Answer a morph that will serve as the button row in a pre-debug window."
    
    	| aRow aButton quads aFont |
    	aRow _ AlignmentMorph newRow hResizing: #spaceFill.
    	aRow beSticky.
    	aRow on: #mouseDown send: #yourself to: self.  "Avoid dragging window."
    	aRow addMorphBack: AlignmentMorph newVariableTransparentSpacer.
    	quads _ OrderedCollection withAll: self preDebugButtonQuads.
    	((self interruptedContext selector == #doesNotUnderstand:) and:
    		[Preferences eToyFriendly not]) ifTrue:
    		[quads add: { 'Create'. #createMethod. #magenta. 'create the missing method' }].
    	aFont := Preferences eToyFriendly
    		ifFalse:
    			[Preferences standardButtonFont]
    		ifTrue:
    			[Preferences standardEToysButtonFont].
    	quads do:
    			[:quad |
    				aButton _ SimpleButtonMorph new target: aDebugWindow.
    				aButton color: Color transparent; borderWidth: 1.
    				aButton actionSelector: quad second.
    				aButton label: quad first font: aFont.
    				aButton submorphs first color: (Color colorFrom: quad third).
    				aButton setBalloonText: quad fourth.
    				Preferences alternativeWindowLook
    					ifTrue:[aButton borderWidth: 2; borderColor: #raised].
    				aRow addMorphBack: aButton.
    				aRow addMorphBack: AlignmentMorph newVariableTransparentSpacer].
    	^ aRow

    Add a create button to the predebug window in the "message not understood" (that is, no such message found in the applicable classes) case when eToyFriendly is off. This button brings up a menu of classes so that the user can choose one to create the new method in.

    Add this to the documentation on error handling and the debugger in the Development Environment chapter.
    

    Other changes to font and colors.

    Debugger {initialize}

    1 implementor

    preDebugButtonQuads
    
    	^Preferences eToyFriendly
    		ifTrue: [
    	{
    	{'Store log' translated.	#storeLog. 	#blue. 	'write a log of the encountered problem' translated}.
    	{'Abandon' translated.	#abandon. 	#black.	'abandon this execution by closing this window' translated}.
    	{'Debug'	 translated.		#debug. 	#red. 	'bring up a debugger' translated}}]
    		ifFalse: [
    	{
    	{'Proceed' translated.	#proceed. 	#blue. 	'continue execution' translated}.
    	{'Abandon' translated.	#abandon. 	#black.	'abandon this execution by closing this window' translated}.
    	{'Debug'	 translated.		#debug.		#red. 	'bring up a debugger' translated}}]
    

    This changes the first option in an error notification window from 'store log' (for novices who can then provide the log to a programmer) to 'proceed' (for programmers prepared to do their own debugging).

    Debugger {initialize}

    1 implementor

    preDebugNotifierContentsFrom: messageString
    	| first second msg |
    	^ Preferences eToyFriendly
    		ifFalse:
    			[messageString]
    		ifTrue:
    			[
    				msg _ messageString.
    				msg ifNil: [msg _ ''].
    				first _ second _ 0.
    				first _ msg indexOf: $\ ifAbsent: [0].
    				first > 0 ifTrue: [second _ msg indexOf: $\ startingAt: first + 1 ifAbsent: [0]].
    				(first > 0 and: [second > 0]) ifTrue: [
    					'An error has occurred in\{3} of {2}.\Fix your script(s), hit ''Abandon'' and try again.' translated withCRs format: {msg copyFrom: 1 to: first - 1. msg copyFrom: first + 1 to: second - 1. msg copyFrom: second + 1 to: msg size}
    				] ifFalse: [
    					'An error has occurred; you should probably just hit ''abandon''.  Sorry!' translated
    				]
    			] 

    Novice mode: Parse message and provide an explanation.

    Expert mode: Display message as is.

    EtoyVocabulary {method list}

    2 implementors

    phraseSymbolsToSuppress
    	"Answer a dictatorially-imposed list of phrase-symbols that are to be suppressed from viewers when the eToyFriendly preference is set to true.  This list at the moment corresponds to the wishes of Alan and Kim and the LA teachers using Squeak in school-year 2001-2"
    
    	^ Preferences eToyFriendly
    		ifTrue:
    			[#(moveToward: followPath goToRightOf:
    				getViewingByIcon initiatePainting
    				append: prepend: getClipSubmorphs touchesA:)]
    		ifFalse:
    			[#()]

    Remove some tiles from viewer, in the categories listed below. Other tiles are removed elsewhere.

    moveToward: motion

    followPath motion

    goToRightOf: (align after) motion

    getViewingByIcon [PasteUpMorph additionsToViewerCategories]

    initiatePainting playfield

    append: (include at end) [at end of what?]

    prepend: (include at beginning) [at beginning of what?]

    getClipSubmorphs layout

    touchesA: tests

    More work needed
    

    Flaps class {construction support}

    1 implementor

    possiblyReplaceEToyFlaps
    	"If in eToyFriendly mode, and if it's ok to reinitialize flaps, replace the existing flaps with up-too-date etoy flaps.  Caution:  this is destructive of existing flaps.  If preserving the contents of existing flaps is important, set the preference 'okToReinitializeFlaps' to true"
    
    	PartsBin thumbnailForPartsDescription: StickyPadMorph descriptionForPartsBin.  "Puts StickyPadMorph's custom icon back in the cache which typically will have been called"
    	(Preferences eToyFriendly and: [Preferences okToReinitializeFlaps]) ifTrue:
    		[Flaps disableGlobalFlaps: false.
    		Flaps addAndEnableEToyFlaps.
    		Smalltalk isMorphic ifTrue: [ActiveWorld enableGlobalFlaps]].
    	"PartsBin clearThumbnailCache"
    
    "Flaps possiblyReplaceEToyFlaps"

    This comment appears to be precisely backwards. If preserving flaps is important, then okToReinitializeFlaps should be turned off (set to false). The comment on this preference is:

    If true, then then code in updates will feel free to reinitialize the
    global flaps; if false, flaps will never be reinitialized by updates --
    thus, set it to false if you have a serious investment in the content of
     the global flaps in your configuration, strong enough that you don't
    want your flaps modernized when advances would otherwise indicate a need
     to.
    
    Report as bug.
    

    Flaps class {replacement}

    1 implementor

    replaceGlobalFlapwithID: flapID
    	"If there is a global flap with flapID, replace it with an updated one."
    
    	| replacement tabs |
    	(tabs _ self globalFlapTabsWithID: flapID) size = 0 ifTrue: [^ self].
    	tabs do: [:tab |
    		self removeFlapTab: tab keepInList: false].
    	flapID = 'Stack Tools' translated ifTrue: [replacement _ self newStackToolsFlap].
    	flapID = 'Supplies' translated ifTrue: [replacement _ self newSuppliesFlapFromQuads:
    		(Preferences eToyFriendly
    			ifFalse: [self quadsDefiningSuppliesFlap]
    			ifTrue: [self quadsDefiningPlugInSuppliesFlap]) positioning: #right].
    	flapID = 'Tools' translated ifTrue: [replacement _ self newToolsFlap].
    	flapID = 'Widgets' translated ifTrue: [replacement _ self newWidgetsFlap].
    	flapID = 'Navigator' translated ifTrue: [replacement _ self newNavigatorFlap].
    	flapID = 'Squeak' translated ifTrue: [replacement _ self newSqueakFlap].
    	replacement ifNil: [^ self].
    	self addGlobalFlap: replacement.
    	self currentWorld ifNotNil: [self currentWorld addGlobalFlaps]
    
    "Flaps replaceFlapwithID: 'Widgets' translated "

    This says to show the Supplies flap or the Plugin supplies flap, depending on the value of eTayFriendly. In fact, in developer flaps, the Supplies flap appears. In Etoys flaps, the PlugInSuppliesFlap appears as part of the Etoys toolbar.

    More work needed.
    

    Float {arithmetic}

    16 implementors

    / aNumber
    	"Primitive. Answer the result of dividing receiver by aNumber.
    	Fail if the argument is not a Float. Essential. See Object documentation
    	whatIsAPrimitive."
    
    	<primitive: 50>
    	aNumber isZero ifTrue: [^ Preferences eToyFriendly ifTrue: [ScriptingSystem reportToUser: 'division by zero' translated] ifFalse: [(ZeroDivide dividend: self) signal]].
    	^ aNumber adaptToFloat: self andSend: #/

    The differences in error messages are described in the Predebugger and Debugger section of the  Etoys/Squeak Development Environment chapter of this manual.

    Form {file list services}

    A form is a rectangle of pixels used for holding images.

    26 implementors

    addMiscExtrasTo: aMenu
    	"Add a submenu of miscellaneous extra items to the menu."
    
    	| realOwner realMorph subMenu |
    	subMenu _ MenuMorph new defaultTarget: self.
    	(Preferences eToyFriendly not and: [self isWorldMorph not and: [self renderedMorph isSystemWindow not]])
    		ifTrue: [subMenu add: 'put in a window' translated action: #embedInWindow].
    
    	self isWorldMorph ifFalse:
    		[subMenu add: 'adhere to edge...' translated action: #adhereToEdge.
    		subMenu addLine].
    
    	realOwner _ (realMorph _ self topRendererOrSelf) owner.
    	(realOwner isKindOf: TextPlusPasteUpMorph) ifTrue:
    		[subMenu add: 'GeeMail stuff...' translated subMenu: (realOwner textPlusMenuFor: realMorph)].
    
    	Preferences eToyFriendly
     ifFalse: [
    		subMenu
    	
    		add: 'add mouse up action' translated action: #addMouseUpAction;
    	
    		add: 'remove mouse up action' translated action: #removeMouseUpAction;
    	
    		add: 'hand me tiles to fire this button' translated action: #handMeTilesToFire.
    	
    	subMenu addLine.
    	].
    
    	Preferences eToyFriendly
     ifFalse: [
    		subMenu add: 'arrowheads on pen trails...' translated action: #setArrowheads.
    	
    	subMenu addLine.
    	
    ].
    	subMenu defaultTarget: self topRendererOrSelf.
    	(self isWorldMorph not and: [(self renderedMorph isSystemWindow) not]) ifTrue: [
    		subMenu add: 'draw new path' translated action: #definePath.
    	
    	subMenu add: 'follow existing path' translated action: #followPath.
    	
    	subMenu add: 'delete existing path' translated action: #deletePath.
    	
    	subMenu addLine.
    	].
    	self addGestureMenuItems: subMenu hand: ActiveHand.
    
    
    	self isWorldMorph ifFalse:
    		[subMenu add: 'graph-location plotter' translated action: #handUserGraphLocationPlotter.
    		subMenu add: 'graph-location follower' translated action: #addGraphLocationPlotter.
    		subMenu add: 'balloon help for this object' translated action: #editBalloonHelpText].
    
    	subMenu submorphs isEmpty ifFalse: [
    		aMenu add: 'extras...' translated subMenu: subMenu
    	].

    Turning off eToyFriendly adds the following to the halo menu of any image.

    • halo actions...
    • layout
    • copy and print submenu
    • export... submenu
    • debug... submenu
    The embed... selection is grayed out and cannot be selected.

    Morph {#MorphicExtras-menus}

    1 implementor

    addMiscExtrasTo: aMenu
    	"Add a submenu of miscellaneous extra items to the menu."
    
    	| realOwner realMorph subMenu |
    	subMenu _ MenuMorph new defaultTarget: self.
    	(Preferences eToyFriendly not and: [self isWorldMorph not and: [self renderedMorph isSystemWindow not]])
    		ifTrue: [subMenu add: 'put in a window' translated action: #embedInWindow].
    
    	self isWorldMorph ifFalse:
    		[subMenu add: 'adhere to edge...' translated action: #adhereToEdge.
    		subMenu addLine].
    
    	realOwner _ (realMorph _ self topRendererOrSelf) owner.
    	(realOwner isKindOf: TextPlusPasteUpMorph) ifTrue:
    		[subMenu add: 'GeeMail stuff...' translated subMenu: (realOwner textPlusMenuFor: realMorph)].
    
    	Preferences eToyFriendly
     ifFalse: [
    		subMenu
    	
    		add: 'add mouse up action' translated action: #addMouseUpAction;
    	
    		add: 'remove mouse up action' translated action: #removeMouseUpAction;
    	
    		add: 'hand me tiles to fire this button' translated action: #handMeTilesToFire.
    	
    	subMenu addLine.
    	].
    
    	Preferences eToyFriendly
     ifFalse: [
    		subMenu add: 'arrowheads on pen trails...' translated action: #setArrowheads.
    	
    	subMenu addLine.
    	
    ].
    	subMenu defaultTarget: self topRendererOrSelf.
    	(self isWorldMorph not and: [(self renderedMorph isSystemWindow) not]) ifTrue: [
    		subMenu add: 'draw new path' translated action: #definePath.
    	
    	subMenu add: 'follow existing path' translated action: #followPath.
    	
    	subMenu add: 'delete existing path' translated action: #deletePath.
    	
    	subMenu addLine.
    	].
    	self addGestureMenuItems: subMenu hand: ActiveHand.
    
    
    	self isWorldMorph ifFalse:
    		[subMenu add: 'graph-location plotter' translated action: #handUserGraphLocationPlotter.
    		subMenu add: 'graph-location follower' translated action: #addGraphLocationPlotter.
    		subMenu add: 'balloon help for this object' translated action: #editBalloonHelpText].
    
    	subMenu submorphs isEmpty ifFalse: [
    		aMenu add: 'extras...' translated subMenu: subMenu
    	].
    

    The following items are added to the extras... submenu on the halo menu.

    • put in a window
    • add mouse up action
    • remove mouse up action
    • hand me tiles to fire this button
    • arrowheads on pen trails...

    Morph {#MorphicExtras-menus}

    1 implementor

    addStandardHaloMenuItemsTo: aMenu hand: aHandMorph
    	"Add standard halo items to the menu.  Note -- PasteUpMorphs that are serving as Worlds are handled by a separate protocol."
    
    	self mustBeBackmost ifFalse:
    		[aMenu add: 'send to back' translated action: #goBehind.
    		aMenu add: 'bring to front' translated action: #comeToFront.
    		aMenu addWithLabel: 'embed...' translated enablement: #embedEnabled action: #showEmbedMenu.
    		aMenu balloonTextForLastItem: 'present a menu of potential embeddeding targets for this object, and embed it in the one chosen.' translated.
    		aMenu addLine].
    
    	self addFillStyleMenuItems: aMenu hand: aHandMorph.
    	self addBorderStyleMenuItems: aMenu hand: aHandMorph.
    	self addDropShadowMenuItems: aMenu hand: aHandMorph.
    	Preferences eToyFriendly ifFalse:
    		[self addHaloActionsTo: aMenu.
    		self addLayoutMenuItems: aMenu hand: aHandMorph].
    	owner isTextMorph ifTrue:[self addTextAnchorMenuItems: aMenu hand: aHandMorph].
    	aMenu addLine.
    	self addToggleItemsToHaloMenu: aMenu.
    	aMenu addLine.
    	Preferences eToyFriendly ifFalse: [self addCopyItemsTo: aMenu].
    	self addPlayerItemsTo: aMenu.
    	Preferences eToyFriendly ifFalse:
    		[self addExportMenuItems: aMenu hand: aHandMorph.
    		"self addStackItemsTo: aMenu"].
    	self addMiscExtrasTo: aMenu.
    	Preferences eToyFriendly ifFalse: [Preferences noviceMode ifFalse:
    		[self addDebuggingItemsTo: aMenu hand: aHandMorph]].
    	aMenu addLine.
    	self addLockingItemsTo: aMenu.
    	aMenu defaultTarget: aHandMorph
    

     With eToyFriendly on, the following items are added to the halo menu for any Morph.

    • halo actions...
    • layout
    • copy & print...
    • export...
    • debug...

    Morph {menus}

    1 implementor

     addToggleItemsToHaloMenu: aMenu
    	"Add standard true/false-checkbox items to the memu"
    
    	#(
    	(resistsRemovalString toggleResistsRemoval 'whether I should be reistant to easy deletion via the pink X handle')
    	(stickinessString toggleStickiness 'whether I should be resistant to a drag done by mousing down on me')
    	(lockedString lockUnlockMorph 'when "locked", I am inert to all user interactions')
    	(hasClipSubmorphsString changeClipSubmorphs 'whether the parts of objects within me that are outside my bounds should be masked.')
    	(hasDirectionHandlesString changeDirectionHandles 'whether direction handles are shown with the halo')
    	(hasDragAndDropEnabledString changeDragAndDrop 'whether I am open to having objects dropped into me')
    	) translatedNoop do:
    
    		[:trip |
    			(Preferences eToyFriendly not or: [trip size = 3]) ifTrue: [
    				aMenu addUpdating: trip first action: trip second.
    				aMenu balloonTextForLastItem: trip third translated
    			]
    		].
    			
    
    	self couldHaveRoundedCorners ifTrue:
    		[aMenu addUpdating: #roundedCornersString action: #toggleCornerRounding.
    		aMenu balloonTextForLastItem: 'whether my corners should be rounded' translated]

    No change to menus.

    Morph {*Etoys-scripting}

    3 implementors

    filterViewerCategoryDictionary: dict
    	"dict has keys of categories and values of priority.
    	You can  remove categories here."
    	
    	self wantsConnectionVocabulary
    		ifFalse: [ dict removeKey: #'connections to me' ifAbsent: [].
    			dict removeKey: #connection ifAbsent: []].
    	self wantsConnectorVocabulary
    		ifFalse: [ dict removeKey: #connector ifAbsent: [] ].
    	self wantsEmbeddingsVocabulary
    		ifFalse: [dict removeKey: #embeddings ifAbsent: []].
    	self isWorldMorph ifFalse:
    		[dict removeKey: #'world geometry' ifAbsent: []].
    	Preferences eToyFriendly ifTrue:
    		[#(layout preferences display #'as object') do:
    			[:sym | dict removeKey: sym ifAbsent: []].
    
    	self isWorldMorph ifFalse:[
    		dict removeKey: #preferences ifAbsent: []].
    		dict removeKey: #display ifAbsent: []]

    No changes to menus.

    Morph {meta-actions}

    2 implementors

    invokeMetaMenu: evt
    	"Put up the 'meta' menu, invoked via control-click, unless eToyFriendly is true."
    
    	| menu |
    	Preferences eToyFriendly ifTrue: [^ self].
    
    	menu _ self buildMetaMenu: evt.
    	menu addTitle: self externalName.
    	menu popUpEvent: evt in: self world
     buildMetaMenu: evt
    	"Build the morph menu. This menu has two sections. The first section contains commands that are handled by the hand; the second contains commands handled by the argument morph."
    	| menu |
    	menu _ MenuMorph new defaultTarget: self.
    	menu addStayUpItem.
    	menu add: 'grab' translated action: #grabMorph:.
    	menu add: 'copy to paste buffer' translated action: #copyToPasteBuffer:.
    	self maybeAddCollapseItemTo: menu.
    	menu add: 'delete' translated action: #dismissMorph:.
    	menu addLine.
    	menu add: 'copy text' translated action: #clipText.
    	menu add: 'copy Postscript' translated action: #clipPostscript.
    	menu add: 'print Postscript to file...' translated action: #printPSToFile.
    	menu addLine.
    	menu add: 'go behind' translated action: #goBehind.
    	menu add: 'add halo' translated action: #addHalo:.
    	menu add: 'duplicate' translated action: #maybeDuplicateMorph:.
    
    	self addEmbeddingMenuItemsTo: menu hand: evt hand.
    
    	menu add: 'resize' translated action: #resizeMorph:.
    	"Give the argument control over what should be done about fill styles"
    	self addFillStyleMenuItems: menu hand: evt hand.
    	self addDropShadowMenuItems: menu hand: evt hand.
    	self addLayoutMenuItems: menu hand: evt hand.
    	menu addUpdating: #hasClipSubmorphsString target: self selector: #changeClipSubmorphs argumentList: #().
    	menu addLine.
    
    	(self morphsAt: evt position) size > 1 ifTrue:
    		[menu add: 'submorphs...' translated
    			target: self
    			selector: #invokeMetaMenuAt:event:
    			argument: evt position].
    	menu addLine.
    	menu add: 'inspect' translated selector: #inspectAt:event: argument: evt position.
    	menu add: 'explore' translated action: #explore.
    	menu add: 'browse hierarchy' translated action: #browseHierarchy.
    	menu add: 'make own subclass' translated action: #subclassMorph.
    	menu addLine.
    	menu add: 'set variable name...' translated action: #choosePartName.
    	(self isMorphicModel) ifTrue:
    		[menu add: 'save morph as prototype' translated action: #saveAsPrototype.
    		(self ~~ self world modelOrNil) ifTrue:
    			 [menu add: 'become this world''s model' translated action: #beThisWorldsModel]].
    	menu add: 'save morph in file' translated action: #saveOnFile.
    	(self hasProperty: #resourceFilePath)
    		ifTrue: [((self valueOfProperty: #resourceFilePath) endsWith: '.morph')
    				ifTrue: [menu add: 'save as resource' translated action: #saveAsResource].
    				menu add: 'update from resource' translated action: #updateFromResource]
    		ifFalse: [menu add: 'attach to resource' translated action: #attachToResource].
    	menu add: 'show actions' translated action: #showActions.
    	menu addLine.
    	self addDebuggingItemsTo: menu hand: evt hand.
    
    	self addCustomMenuItems: menu hand: evt hand.
    	^ menu
    
    

    No, this is not the control-click menu. It is the menu invoked by the control-menu command on the debug halo tool menu.

    Report as bug.
    

    NCButtonBar class {instance creation}

    29 implementors

    Document parts bins options elsewhere.
    
    supplementaryPartsDescriptions
    
    	| descriptions |
    	descriptions := OrderedCollection withAll: {
    		DescriptionForPartsBin
    				formalName: 'ButtonBar' translatedNoop
    				categoryList: {'Connectors' translatedNoop}
    				documentation: 'An empty buttonBar that you can add to' translatedNoop
    				globalReceiverSymbol: #NCButtonBar
    				nativitySelector: #new.
    	}.
    
    	Preferences eToyFriendly ifFalse: [
    		descriptions addAll: {
    			DescriptionForPartsBin
    				formalName: 'FSM ButtonBar' translatedNoop
    				categoryList: #()
    				documentation: 'A buttonBar for State Machine drawings' translatedNoop
    				globalReceiverSymbol: #NCButtonBar
    				nativitySelector: #newFSMToolbar.
    			DescriptionForPartsBin
    					formalName: 'Class ButtonBar' translatedNoop
    					categoryList: #()
    					documentation: 'A buttonBar for UML Class Diagrams' translatedNoop
    					globalReceiverSymbol: #NCButtonBar
    					nativitySelector: #newClassDiagramToolbar.
    		}.
    
    		(Flaps respondsTo: #newFSMConnectorsFlap) ifTrue: [
    			descriptions add: (
    		(DescriptionForPartsBin
    			formalName: 'FSM Flap' translatedNoop
    			categoryList: #( )
    			documentation: 'A pre-loaded Connectors flap for state machine drawings' translatedNoop
    			globalReceiverSymbol: #Flaps
    			nativitySelector: #newFSMConnectorsFlap) sampleImageForm: self fsmFlapImage; yourself) ].
    
    		(Flaps respondsTo: #newClassDiagramConnectorsFlap) ifTrue: [
    			descriptions add: (
    		(DescriptionForPartsBin
    			formalName: 'Class diagram Flap' translatedNoop
    			categoryList: #( )
    			documentation: 'A pre-loaded Connectors flap for UML class diagram drawings' translatedNoop
    			globalReceiverSymbol: #Flaps
    			nativitySelector: #newClassDiagramConnectorsFlap) sampleImageForm: self classDiagramFlapImage; yourself) ].
    		].
    
    	^descriptions.

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    NCCompositeStateMorph class {instance creation}

    29 implementors

    supplementaryPartsDescriptions
    	"Extra items for parts bins"
    	Preferences eToyFriendly ifTrue: [ ^#() ].
    
    	^ {DescriptionForPartsBin
    		formalName: 'Composite State' translatedNoop
    		categoryList: #()
    		documentation: 'A UML composite state shape' translatedNoop
    		globalReceiverSymbol: #NCCompositeStateMorph
    		nativitySelector: #newCompositeState.
    DescriptionForPartsBin
    		formalName: 'UML Package' translatedNoop
    		categoryList: #()
    		documentation: 'A UML package shape' translatedNoop
    		globalReceiverSymbol: #NCCompositeStateMorph
    		nativitySelector: #newUMLPackage.
    }

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    NCCurveMorph class {parts bin}

    29 implementors

     supplementaryPartsDescriptions
    	Preferences eToyFriendly ifTrue: [ ^#() ].
    
    	^ {
    	DescriptionForPartsBin
    		formalName: 'Diamond' translatedNoop
    		categoryList: #()
    		documentation: 'A diamond shape with text inside' translatedNoop
    		globalReceiverSymbol: #NCCurveMorph
    		nativitySelector: #diamond.
    	DescriptionForPartsBin
    		formalName: 'Pointing Hand' translatedNoop
    		categoryList: #()
    		documentation: 'A pointing hand shape with text inside' translatedNoop
    		globalReceiverSymbol: #NCCurveMorph
    		nativitySelector: #pointingHand.
    	DescriptionForPartsBin
    		formalName: 'CircleCurve' translatedNoop
    		categoryList: #()
    		documentation: 'A circle shape with text inside' translatedNoop
    		globalReceiverSymbol: #NCCurveMorph
    		nativitySelector: #circle.
    	DescriptionForPartsBin
    		formalName: 'AND Gate' translatedNoop
    		categoryList: #()
    		documentation: 'An ''and gate'' shape with text inside' translatedNoop
    		globalReceiverSymbol: #NCCurveMorph
    		nativitySelector: #andGate.
    	DescriptionForPartsBin
    		formalName: 'OR Gate' translatedNoop
    		categoryList: #()
    		documentation: 'An ''or gate'' shape with text inside' translatedNoop
    		globalReceiverSymbol: #NCCurveMorph
    		nativitySelector: #orGate.
    	DescriptionForPartsBin
    		formalName: 'XOR Gate' translatedNoop
    		categoryList: #()
    		documentation: 'An ''xor gate'' shape with text inside' translatedNoop
    		globalReceiverSymbol: #NCCurveMorph
    		nativitySelector: #xorGate.
    	DescriptionForPartsBin
    		formalName: 'Happy face' translatedNoop
    		categoryList: #()
    		documentation: 'A happy face' translatedNoop
    		globalReceiverSymbol: #NCCurveMorph
    		nativitySelector: #happyFace.
    	DescriptionForPartsBin
    		formalName: 'Sad face' translatedNoop
    		categoryList: #()
    		documentation: 'A sad face' translatedNoop
    		globalReceiverSymbol: #NCCurveMorph
    		nativitySelector: #sadFace.
    	DescriptionForPartsBin
    		formalName: 'Pointing Hand2' translatedNoop
    		categoryList: #()
    		documentation: 'Another pointing hand' translatedNoop
    		globalReceiverSymbol: #NCCurveMorph
    		nativitySelector: #pointingHand2.
    	}.

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    NCEllipseMorph class {parts bin}

    29 implementors

    supplementaryPartsDescriptions
    	"Extra items for parts bins"
    	| descriptions |
    	descriptions := OrderedCollection new.
    
    	descriptions add: (
    	DescriptionForPartsBin
    		formalName: 'Text Ellipse' translatedNoop
    		categoryList: {'Connectors' translatedNoop}
    		documentation: 'An elliptical or circular shape with text' translatedNoop
    		globalReceiverSymbol: #NCEllipseMorph
    		nativitySelector: #newStandAlone ).
    
    	Preferences eToyFriendly ifTrue: [ ^descriptions ].
    
    	descriptions addAll: {
    	DescriptionForPartsBin
    		formalName: 'End State' translatedNoop
    		categoryList: #()
    		documentation: 'A UML end state shape' translatedNoop
    		globalReceiverSymbol: #NCEllipseMorph
    		nativitySelector: #newEndState.
    	DescriptionForPartsBin
    		formalName: 'Start State' translatedNoop
    		categoryList: #()
    		documentation: 'A UML start state shape' translatedNoop
    		globalReceiverSymbol: #NCEllipseMorph
    		nativitySelector: #newStartState. }.
    
    	^descriptions

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    NCLabelMorph class {instance creation}

    29 implementors

    supplementaryPartsDescriptions
    
    	Preferences eToyFriendly ifTrue: [ ^#() ].
    
    	^ {
    			DescriptionForPartsBin
    					formalName: 'Label' translatedNoop
    					categoryList: {'Connectors' translatedNoop}
    					documentation: 'A label that can be attached to another morph by dropping or menu choice and will follow the morph to which it is attached.' translatedNoop
    					globalReceiverSymbol: #NCLabelMorph
    					nativitySelector: #newStandAlone.	
    	}
    

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    NCNoteMorph class {instance creation}

    29 implementors

    supplementaryPartsDescriptions
    	"Extra items for parts bins"
    	^Preferences eToyFriendly ifTrue: [ #() ]
    		ifFalse: [ {
    	DescriptionForPartsBin
    		formalName: 'Note' translatedNoop
    		categoryList: #()
    		documentation: 'A UML note shape' translatedNoop
    		globalReceiverSymbol: #NCNoteMorph
    		nativitySelector: #authoringPrototype  } ]
    
    	 
    

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    NCScrolledCompositeStateMorph class {parts bin}

    29 implementors

    supplementaryPartsDescriptions
    	"Extra items for parts bins"
    	^Preferences eToyFriendly ifTrue: [ #() ]
    		ifFalse: [ {
    	DescriptionForPartsBin
    		formalName: 'Scrolled State' translatedNoop
    		categoryList: #()
    		documentation: 'A UML State shape with scrollbars' translatedNoop
    		globalReceiverSymbol: #NCScrolledCompositeStateMorph
    		nativitySelector: #authoringPrototype  } ]
    
    

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    NCSmartLabelMorph class {parts bin}

    29 implementors

    supplementaryPartsDescriptions
    
    	Preferences eToyFriendly ifTrue: [ ^#() ].
    
    	^ {
    		DescriptionForPartsBin
    				formalName: 'Smart Label' translatedNoop
    				categoryList: {'Connectors' translatedNoop}
    				documentation: 'A label that can be attached to another morph by dropping or menu choice and will follow the morph to which it is attached, trying to stay out of the way.' translatedNoop
    				globalReceiverSymbol: #NCSmartLabelMorph
    				nativitySelector: #newStandAlone.
    	}

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    NCSTUMLDiagramMorph class {instance creation}

    29 implementors

    supplementaryPartsDescriptions
    
    	Preferences eToyFriendly ifTrue: [ ^#() ].
    
    	^  { DescriptionForPartsBin
    		formalName: 'STClass' translatedNoop
    		categoryList: #()
    		documentation: 'A UML class symbol that can read its text from a Squeak class' translatedNoop
    		globalReceiverSymbol: #NCSTUMLDiagramMorph
    		nativitySelector: #newUMLClassSymbol }
    
    

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    NCSTUMLDiagramMorph class {as yet unclassified}

    29 implementors

    supplementaryPartsDescriptions
    	Preferences eToyFriendly ifTrue: [ ^#() ].
    
    	^ {
    DescriptionForPartsBin
    		formalName: 'State' translatedNoop
    		categoryList: #()
    		documentation: 'A UML State shape' translatedNoop
    		globalReceiverSymbol: #NCUMLDiagramMorph
    		nativitySelector: #newStateSymbol.
    
    DescriptionForPartsBin
    		formalName: 'Class' translatedNoop
    		categoryList: #()
    		documentation: 'A UML class symbol' translatedNoop
    		globalReceiverSymbol: #NCUMLDiagramMorph
    		nativitySelector: #newUMLClassSymbol .
    
    }

    This adds objects to the Object Catalog when eToyFriendly is turned off. They are documented in the More Objects chapter of Vol. I of this manual.

    PartsBin class {as yet undeclared}

    1 implementor

    reconstructAllPartsIcons
    	"Reconstruct all the parts icon.  Show a progress bar."
    
    	| wasEnabled wereAnnotations |
    
    	Cursor wait showWhile:
    		[TabbedPalette unload.
    		wasEnabled := Preferences eToyFriendly.
    		wereAnnotations := Preferences annotationPanes.
    		Preferences enable: #eToyFriendly.
    		Preferences disable: #annotationPanes.
    		self rebuildIconsWithProgress..
    		Flaps registeredFlapsQuads at: 'PlugIn Supplies' put: Flaps defaultsQuadsDefiningPlugInSuppliesFlap.
    		Flaps replaceGlobalFlapwithID: 'Supplies'.
    		wasEnabled ifFalse: [Preferences disable: #eToyFriendly].
    		wereAnnotations ifTrue: [Preferences enable: #annotationPanes]]
    
    "
    PartsBin reconstructAllPartsIcons.
    "
    

    This method enables eToyFriendly if necessary, does an update, and restores its previous value if necessary. It has no effect on availability of menus or icons.

    PasteUpMorph {menu & halo}

    1 implementor

    addWorldHaloMenuItemsTo: aMenu hand: aHandMorph
    	"Add the standard items to the aMenu which will serve as the World's halo menu."
    
    	| wm |
    	aMenu add: 'about this system...' translated target: SmalltalkImage current selector: #aboutThisSystem.
    	aMenu addLine.
    	aMenu add: 'redraw screen (r)' translated action: #restoreMorphicDisplay.
    	aMenu add: 'preferences...' translated target: Preferences selector: #openPreferencesInspector.
    	aMenu add: 'authoring tools...' translated target: (wm := TheWorldMenu new adaptToWorld: self) selector: #scriptingDo.
    	aMenu add: 'display mode...' translated target: wm selector: #offerScalingMenu..
    	
    	aMenu addLine.
    	self addWorldToggleItemsToHaloMenu: aMenu.
    	Preferences eToyFriendly ifFalse:
    		[Preferences sugarNavigator ifFalse:
    			[self addExportMenuItems: aMenu hand: aHandMorph]].
    
    	self addLockingItemsTo: aMenu.
    	aMenu addLine.
    	self addFillStyleMenuItems: aMenu hand: aHandMorph.
    	self addPenMenuItems: aMenu hand: aHandMorph.
    	self addPlayfieldMenuItems: aMenu hand: aHandMorph.
    
    	(owner isKindOf: BOBTransformationMorph) ifTrue:  "wow, blast from the past"
    		[self addScalingMenuItems: aMenu hand: aHandMorph].
    
    	Preferences eToyFriendly
    		ifFalse:
    			[aMenu addLine.
    			aMenu add: 'world menu...' translated target: self action: #putUpDesktopMenu:]

    Modifies the World Halo menu depending on the value of eToyFriendly. Items added are

    • export Write image of world to graphics file
    • world menu Open standard World menu

    PasteUpMorph {world state}

    2 implementors

     installFlaps
    	"Get flaps installed within the bounds of the receiver"
    
    	| localFlapTabs |
    	Project current assureFlapIntegrity.
    	self addGlobalFlaps.
    	localFlapTabs := self localFlapTabs.
    	localFlapTabs do: [:each | each visible: false].
    
    	Preferences eToyFriendly ifTrue: [
    		ProgressInitiationException display: 'Building Viewers...' translated
    			during: [:bar |
    				localFlapTabs keysAndValuesDo: [:i :each |
    					each adaptToWorld.
    					each visible: true.
    					self displayWorld.
    					bar value: i / self localFlapTabs size]].
    	] ifFalse: [
    		localFlapTabs keysAndValuesDo: [:i :each |
    			each adaptToWorld.
    			each visible: true.
    			self displayWorld]].
    
    	self assureFlapTabsFitOnScreen.
    	self bringTopmostsToFront

    In the eToyFriendly case, display a message with a progress bar while installing flaps in a PasteUpMorph.

    Where is this used? More work needed.
    

    PasteUpMorph {world menu}

    1 implementor

    invokeWorldMenu: evt
    	"Put up the world menu, triggered by the passed-in event.  But don't do it if the eToyFriendly preference is set to true."
    
    	Preferences eToyFriendly ifFalse:
    		[self putUpWorldMenu: evt]

    Clicking in the World brings up the World menu if eToyFriendly is true, but not otherwise. In that case, use the alt-shift-w keyboard shortcut.

    PasteUpMorph {world menu}

    1 implementor

    keystrokeInWorld: evt
    	"A keystroke was hit when no keyboard focus was set, so it is sent here to the world instead."
    
    	|  aChar isCmd ascii |
    	aChar _ evt keyCharacter.
    	(ascii _ aChar charCode) = 27 ifTrue:
    	"escape key -- either put up a menu, or simply quietly gobble it"
    		[^ Preferences escapeKeyProducesMenu ifTrue:
    			[self putUpWorldMenuFromEscapeKey]].
    
    	((ascii = 44) and: [(evt commandKeyPressed or: [evt controlKeyPressed])])
    	 "show-source on XO"
    		ifTrue:
    			[^ self showSourceKeyHit].
    
    	((ascii = 3 or: [ascii = 13]) and: [(evt commandKeyPressed or: [evt controlKeyPressed])])
    	 "toggle-full-screen"
    		ifTrue:
    			[^ self toggleFullScreen].
    
    	(evt controlKeyPressed not
    		and: [(#(1 4 8 28 29 30 31 32 47) includes: ascii)  "home, end, backspace, arrow keys, space, slash."
    			and: [self keyboardNavigationHandler notNil]])
    				ifTrue: [self keyboardNavigationHandler navigateFromKeystroke: aChar].
    
    	isCmd _ evt commandKeyPressed and: [Preferences cmdKeysInText].
    	(evt commandKeyPressed and: [Preferences eToyFriendly])
    			ifTrue:
    				[(aChar = $W) ifTrue: [^ self putUpWorldMenu: evt]].
    	(isCmd and: [Preferences honorDesktopCmdKeys]) ifTrue:
    		[^ self dispatchCommandKeyInWorld: aChar event: evt].
    
    	"It was unhandled. Remember the keystroke."
    	self lastKeystroke: evt keyString.
    	self triggerEvent: #keyStroke

    Clicking in the World brings up the World menu if eToyFriendly is true, but not otherwise. In that case, use the alt-shift-w keyboard shortcut.

    PasteUpMorph {event handling}

    3 implementors

    windowEvent: anEvent
    	self windowEventHandler
    		ifNotNil: [^self windowEventHandler windowEvent: anEvent].
    
    	anEvent type == #windowClose
    		ifTrue: [
    			^Preferences eToyFriendly
    				ifTrue: [ProjectNavigationMorph basicNew quitSqueak]
    				ifFalse: [TheWorldMenu basicNew quitSession]].
    

    When closing Squeak with the icon on the Etoys window title bar, present a menu of options.

    eToyFriendly on:

    Are you sure you want to quit Etoys?

    • Yes
    • No

    eToyFriendly off:

    Save changes before quitting?
    • Yes
    • No
    • Cancel

    Player {slots-kernel}

    1 implementor

    categoriesForWorld
    	"Answer the list of categories given that the receiver is the Player representing a World"
    
    	| aList |
    	aList _ #(color #'fill & border' scripting #'pen trails' #'world geometry' playfield collections sound) asOrderedCollection.
    	aList add: #input.
    	Preferences eToyFriendly ifFalse:
    		[aList addAll: #(preferences #'as object'
    display) ].
    
    	aList addAll: {ScriptingSystem nameForInstanceVariablesCategory.  ScriptingSystem nameForScriptsCategory}.
    
    	^ aList

    The viewer for the World includes the "as object" category.

    Player {slot getters/setters}

    1 implementor

    getEToyFriendly
    	"Answer the value of the eToyFriendly preference."
    
    	^ Preferences eToyFriendly

    Player {misc}

    2 implementors

    offerViewerMenuFor: aViewer event: evt
    	"Put up the Viewer menu on behalf of the receiver.  If the shift key is held down, put up the alternate menu. The menu omits the 'add a new variable' item when in eToyFriendly mode, as per request from teachers using Squeakland in 2003 once the button for adding a new variable was added to the viewer"
    
    	| aMenu aWorld  |
    	(evt notNil and: [evt shiftPressed and: [Preferences eToyFriendly not]]) ifTrue:
    		[^ self offerAlternateViewerMenuFor: aViewer event: evt].
    
    	aWorld _ aViewer world.
    	aMenu _ MenuMorph new defaultTarget: self.
    	aMenu title: self externalName.
    	aMenu addStayUpItem.
    
    	self costume renderedMorph offerCostumeViewerMenu: aMenu.
    
    	Preferences eToyFriendly ifFalse: "exclude this from squeakland-like UI "
    		[aMenu add: 'add a new variable' translated target: self action: #addInstanceVariable.
    		aMenu balloonTextForLastItem: 'Add a new variable to this object and all of its siblings.  You will be asked to supply a name for it.' translated].
    
    	aMenu add: 'add a new script' translated target: aViewer action: #newPermanentScript.
    	aMenu balloonTextForLastItem: 'Add a new script that will work for this object and all of its siblings' translated.
    	aMenu addLine.
    	aMenu add: 'grab this object' translated target: self selector: #grabPlayerIn: argument: aWorld.
    	aMenu balloonTextForLastItem: 'This will actually pick up the object this Viewer is looking at, and hand it to you.  Click the (left) button to drop it' translated.
    
    	aMenu add: 'reveal this object' translated target: self selector: #revealPlayerIn: argument: aWorld.
    	aMenu balloonTextForLastItem: 'If you have misplaced the object that this Viewer is looking at, use this item to (try to) make it visible' translated.
    
    	aMenu add: 'tile representing this object' translated action: #tearOffTileForSelf.
    	aMenu balloonTextForLastItem: 'choose this to obtain a tile which represents the object associated with this script' translated.
    	aMenu addLine.
    
    	aMenu add: 'add a search pane' translated target: aViewer action: #addSearchPane.
    	Preferences eToyFriendly ifFalse: [
    		aMenu addLine.
    		aMenu add: 'more...' translated target: self selector: #offerAlternateViewerMenuFor:event: argumentList: {aViewer. evt}].
    
    	aMenu popUpEvent: evt in: aWorld
    
    

    Add two items to the menu provided in the viewer toolbar: add a variable and more...

    Player {slot getters/setters}

    1 implementor

    setEToyFriendly: aValue
    	"Set the eToyFriendly preference."
    
    	Preferences setPreference: #eToyFriendly toValue: aValue

    Set eToyFriendly to the given value. It takes effect on new windows.

    Preferences class {themes}

    1 implementor

    cambridge
    	"A theme for Squeakland and OLPC project"
    	"Preferences cambridge"
    	"This method has three parts.  Don't forget to look at the stuff at the bottom."
    
    	self setPreferencesFrom: #(
    		(allowCelesteTell false)
    		(alternativeScrollbarLook true)
    		(alternativeWindowLook true)
    		(annotationPanes true)
    		(automaticKeyGeneration true)
    		(biggerHandles true)
    		(blinkParen false)
    		(browseWithDragNDrop true)
    		(canRecordWhilePlaying true)
    		(classicNavigatorEnabled false)
    		(compactViewerFlaps true)
    		(enableLocalSave false)
    		(escapeKeyProducesMenu false)
    		(eToyFriendly true)
    		(eToyLoginEnabled true)
    		(extraDebuggerButtons false)
    		(gradientMenu false)
    		(haloTransitions false)
    		(honorDesktopCmdKeys true)
    		(includeSoundControlInNavigator true)
    		(magicHalos false)
    		(menuAppearance3d false)
    		(menuKeyboardControl false)
    		(modalColorPickers true)
    		(mouseOverHalos false)
    		(mvcProjectsAllowed false)
    		(preserveTrash true)
    		(projectViewsInWindows false)
    		(promptForUpdateServer false)
    		(propertySheetFromHalo false)
    		(roundedMenuCorners false)
    		(roundedWindowCorners false)
    		(securityChecksEnabled true)
    		(showDirectionHandles false)
    		(showDirectionForSketches true)
    		(showProjectNavigator false)
    		(showSecurityStatus false)
    		(soundQuickStart true)	"see setPlatformPreferences"
    		(soundReverb false)
    		(soundStopWhenDone true) 	"see setPlatformPreferences"
    		(startInUntrustedDirectory true)
    		(sugarAutoSave false)
    		(swapControlAndAltKeys false)	"see setPlatformPreferences"
    		(uniqueNamesInHalos true)
    		(unlimitedPaintArea false)
    		(useArtificialSweetenerBar true)
    		(useBiggerPaintingBox true)
    		(useFormsInPaintBox false)
    		(useLocale true)
    		(usePangoRenderer false)
    		(usePlatformFonts false)
    		(usePopUpArrows true)
    		(warnAboutInsecureContent false)
    
    	"The following is to make sure the default is set properly."
    
    	(abbreviatedBrowserButtons false)
    	(allowEtoyUserCustomEvents false)
    	(alphabeticalProjectMenu false)
    	(alternativeBrowseIt false)
    	(alternativeButtonsInScrollBars false)
    	(alternativeWindowBoxesLook true)
    	(alwaysHideHScrollbar false)
    	(alwaysShowConnectionVocabulary false)
    	(alwaysShowHScrollbar false)
    	(alwaysShowVScrollbar true)
    	(ansiAssignmentOperatorWhenPrettyPrinting true)
    	(areaFillsAreTolerant false)
    	(areaFillsAreVeryTolerant false)
    	(autoAccessors false)
    	(automaticFlapLayout true)
    	(automaticPlatformSettings true)	"enables setPlatformPreferences"
    	(automaticViewerPlacement true)
    	(balloonHelpEnabled true)
    	(balloonHelpInMessageLists false)
    	(batchPenTrails false)
    	(biggerCursors true)
    	(browserNagIfNoClassComment true)
    	(browserShowsPackagePane false)
    	(browseWithPrettyPrint false)
    	(capitalizedReferences true)
    	(caseSensitiveFinds false)
    	(cautionBeforeClosing false)
    	(celesteHasStatusPane false)
    	(celesteShowsAttachmentsFlag false)
    	(changeSetVersionNumbers true)
    	(checkForSlips true)
    	(checkForUnsavedProjects true)
    	(classicNewMorphMenu false)
    	(clickOnLabelToEdit false)
    	(cmdDotEnabled true)
    	(collapseWindowsInPlace false)
    	(colorWhenPrettyPrinting false)
    	(compressFlashImages false)
    	(confirmFirstUseOfStyle true)
    	(conversionMethodsAtFileOut false)
    	(cpuWatcherEnabled false)
    	(debugHaloHandle false)
    	(debugPrintSpaceLog false)
    	(debugShowDamage false)
    	(decorateBrowserButtons true)
    	(defaultFileOutFormatMacRoman false)
    	(diffsInChangeList true)
    	(diffsWithPrettyPrint false)
    	(dismissAllOnOptionClose false)
    	(dismissEventTheatreUponPublish true)
    	(dragNDropWithAnimation false)
    	(dropProducesWatcher true)
    	(duplicateControlAndAltKeys false)
    	(easySelection false)
    	(enableInternetConfig false)
    	(enablePortraitMode false)
    	(enableVirtualOLPCDisplay false)
    	(expandedPublishing true)
    	(extractFlashInHighestQuality false)
    	(extractFlashInHighQuality true)
    	(fastDragWindowForMorphic true)
    	(fenceEnabled true)
    	(fenceSoundEnabled false)
    	(fullScreenLeavesDeskMargins true)
    	(gradientScrollBars true)
    	(haloEnclosesFullBounds false)
    	(higherPerformance false)
    	(ignoreStyleIfOnlyBold true)
    	(implicitSelfInTiles false)
    	(inboardScrollbars true)
    	(infiniteUndo false)
    	(keepTickingWhilePainting false)
    	(logDebuggerStackToFile true)
    	(menuButtonInToolPane false)
    	(menuColorFromWorld false)
    	(menuWithIcons true)
    	(morphicProgressStyle true)
    	(mouseOverForKeyboardFocus false)
    	(navigatorOnLeftEdge true)
    	(noviceMode false)
    	(okToReinitializeFlaps true)
    	(oliveHandleForScriptedObjects false)
    	(optionalButtons true)
    	(passwordsOnPublish false)
    	(personalizedWorldMenu true)
    	(postscriptStoredAsEPS false)
    	(printAlternateSyntax false)
    	(projectsSentToDisk false)
    	(projectZoom true)
    	(readDocumentAtStartup true)
    	(restartAlsoProceeds false)
    	(reverseWindowStagger true)
    	(rotationAndScaleHandlesInPaintBox false)
    	(scrollBarsNarrow false)
    	(scrollBarsOnRight true)
    	(scrollBarsWithoutMenuButton false)
    	(selectionsMayShrink true)
    	(selectiveHalos true)
    	(showAdvancedNavigatorButtons false)
    	(showBoundsInHalo false)
    	(showDeprecationWarnings false)
    	(showFlapsWhenPublishing false)
    	(showLinesInHierarchyViews true)
    	(showSharedFlaps true)
    	(signProjectFiles true)
    	(simpleMenus false)
    	(slideDismissalsToTrash true)
    	(smartUpdating true)
    	(soundsEnabled true)
    	(sugarNavigator true)
    	(swapMouseButtons false)
    	(systemWindowEmbedOK false)
    	(tabAmongFields true)
    	(testRunnerShowAbstractClasses false)
    	(thoroughSenders true)
    	(tileTranslucentDrag true)
    	(timeStampsInMenuTitles true)
    	(translationWithBabel false)
    	(turnOffPowerManager false)
    	(twentyFourHourFileStamps true)
    	(twoSidedPoohTextures true)
    	(typeCheckingInTileScripting true)
    	(unifyNestedProgressBars true)
    	(uniTilesClassic true)
    	(universalTiles false)
    	(updateFromServerAtStartup false)
    	(updateSavesFile false)
    	(useButtonPropertiesToFire false)
    	(useFileList2 true)
    	(useSmartLabels false)
    	(useUndo true)
    	(useVectorVocabulary false)
    	(viewersInFlaps true)
    	(warnIfNoChangesFile false)
    	(warnIfNoSourcesFile false)
    	(warningForMacOSFileNameLength false)
    	(wordStyleCursorMovement true)
    
    	).
    
    Preferences setPreference: #haloTheme toValue: #iconicHaloSpecifications.
    

     Sets a wide range of preferences to values for children.

    Preferences class {themes}

    1 implementor

    chicago
    	"A theme for Squeakland developers"
    	"Preferences chicago"
    
    	self cambridge.
    	
    	self setPreferencesFrom: #(
    		(eToyFriendly false)
    		(showSecurityStatus true)
    	).

    Sets two preferences for developers. Note that it does not change any of the other preferences in the Cambridge theme.

    Preferences class {misc}

    1 implementor

    defaultValueTableForCurrentRelease
    	"Answer a table defining default values for all the preferences in the release.  Returns a list of (pref-symbol, boolean-symbol) pairs"
    
    	^  #(
    		(abbreviatedBrowserButtons false)
    		(allowCelesteTell true)
    		(alternativeBrowseIt false)
    		(alternativeScrollbarLook true)
    		(alternativeWindowLook true)
    		(annotationPanes false)
    		(areaFillsAreTolerant false)
    		(areaFillsAreVeryTolerant false)
    		(autoAccessors false)
    		(automaticFlapLayout true)
    		(automaticKeyGeneration false)
    		(automaticPlatformSettings true)
    		(automaticViewerPlacement true)
    		(balloonHelpEnabled true)
    		(balloonHelpInMessageLists false)
    		(batchPenTrails false)
    		(browseWithDragNDrop false)
    		(browseWithPrettyPrint false)
    		(browserShowsPackagePane false)
    		(canRecordWhilePlaying false)
    		(capitalizedReferences true)
    		(caseSensitiveFinds false)
    		(cautionBeforeClosing false)
    		(celesteHasStatusPane false)
    		(celesteShowsAttachmentsFlag false)
    		(changeSetVersionNumbers true)
    		(checkForSlips true)
    		(checkForUnsavedProjects true)
    		(classicNavigatorEnabled false)
    		(classicNewMorphMenu false)
    		(clickOnLabelToEdit false)
    		(cmdDotEnabled true)
    		(collapseWindowsInPlace false)
    		(colorWhenPrettyPrinting false)
    		(compactViewerFlaps false)
    		(compressFlashImages false)
    		(confirmFirstUseOfStyle true)
    		(conversionMethodsAtFileOut false)
    		(cpuWatcherEnabled false)
    		(debugHaloHandle true)
    		(debugPrintSpaceLog false)
    		(debugShowDamage false)
    		(decorateBrowserButtons true)
    		(diffsInChangeList true)
    		(diffsWithPrettyPrint false)
    		(dismissAllOnOptionClose false)
    		(dragNDropWithAnimation false)
    		(eToyFriendly false)
    		(eToyLoginEnabled false)
    		(enableLocalSave true)
    		(extractFlashInHighQuality true)
    		(extractFlashInHighestQuality false)
    		(fastDragWindowForMorphic true)
    		(fenceEnabled true)
    		(fullScreenLeavesDeskMargins true)
    		(haloTransitions false)
    		(hiddenScrollBars false)
    		(higherPerformance false)
    		(honorDesktopCmdKeys true)
    		(ignoreStyleIfOnlyBold true)
    		(inboardScrollbars true)
    		(includeSoundControlInNavigator false)
    		(infiniteUndo false)
    		(logDebuggerStackToFile true)
    		(magicHalos false)
    		(menuButtonInToolPane false)
    		(menuColorFromWorld false)
    		(menuKeyboardControl false)
    		(modalColorPickers true)
    		(mouseOverForKeyboardFocus false)
    		(mouseOverHalos false)
    		(mvcProjectsAllowed true)
    		(navigatorOnLeftEdge true)
    		(noviceMode false)
    		(okToReinitializeFlaps true)
    		(optionalButtons true)
    		(passwordsOnPublish false)
    		(personalizedWorldMenu true)
    		(postscriptStoredAsEPS false)
    		(preserveTrash true)
    		(printAlternateSyntax false)
    		(projectViewsInWindows true)
    		(projectZoom true)
    		(projectsSentToDisk false)
    		(promptForUpdateServer true)
    		(propertySheetFromHalo false)
    		(readDocumentAtStartup true)
    		(restartAlsoProceeds false)
    		(reverseWindowStagger true)
    		(roundedMenuCorners false)
    		(roundedWindowCorners false)
    		(scrollBarsNarrow false)
    		(scrollBarsOnRight true)
    		(scrollBarsWithoutMenuButton false)
    		(securityChecksEnabled false)
    		(selectiveHalos true)
    		(showBoundsInHalo false)
    		(showDirectionForSketches false)
    		(showDirectionHandles false)
    		(showFlapsWhenPublishing false)
    		(showProjectNavigator false)
    		(showSecurityStatus true)
    		(showSharedFlaps true)
    		(signProjectFiles true)
    		(simpleMenus false)
    		(slideDismissalsToTrash true)
    		(smartUpdating true)
    		(soundQuickStart false)
    		(soundStopWhenDone false)
    		(soundsEnabled true)
    		(startInUntrustedDirectory false)
    		(systemWindowEmbedOK false)
    		(thoroughSenders true)
    		(tileTranslucentDrag true)
    		(timeStampsInMenuTitles true)
    		(turnOffPowerManager false)
    		(twentyFourHourFileStamps true)
    		(twoSidedPoohTextures true)
    		(typeCheckingInTileScripting true)
    		(uniTilesClassic true)
    		(uniqueNamesInHalos false)
    		(universalTiles false)
    		(unlimitedPaintArea false)
    		(updateSavesFile false)
    		(useButtonPropertiesToFire false)
    		(useUndo true)
    		(viewersInFlaps true)
    		(warnAboutInsecureContent true)
    		(warnIfNoChangesFile true)
    		(warnIfNoSourcesFile true))
    
    
    "
    Preferences defaultValueTableForCurrentRelease do:
    	[:pair | (Preferences preferenceAt: pair first ifAbsent: [nil]) ifNotNilDo:
    			[:pref | pref defaultValue: (pair last == true)]].
    Preferences chooseInitialSettings.
    "

    Sets a wide range of preferences.

     Claims that the default value of eToyPreferences is false. However, on installation one gets it set to true.
    

    Preferences class {standard queries}

    1 implementor

    eToyFriendly
       ^ self
          valueOfFlag: #eToyFriendly
          ifAbsent: [false]

    Return the value of eToyFriendly, setting it to false if it has accidentally been erased.

    Preferences class {reacting to change}

    1 implementor

    eToyFriendlyChanged
    	"The eToyFriendly preference changed; React"
    	
    	ScriptingSystem customizeForEToyUsers: Preferences eToyFriendly
    

    The code for this is

    customizeForEToyUsers: aBoolean
    	"If aBoolean is true, set things up for etoy users.  If it's false, unset some of those things.  Some things are set when switching into etoy mode but not reversed when switching out of etoy mode."
    
    	#(	
    		(allowEtoyUserCustomEvents	no		reverse)
    		(balloonHelpEnabled			yes		dontReverse)
    		(debugHaloHandle			no		reverse)
    		(modalColorPickers			yes		dontReverse)
    		(oliveHandleForScriptedObjects	no	dontReverse)
    		(uniqueNamesInHalos		yes		reverse)
    		(useUndo					yes		dontReverse)
    		(infiniteUndo				no		dontReverse)
    		(warnIfNoChangesFile		no		reverse)
    		(warnIfNoSourcesFile		no		reverse)) do:
    			[:trip |
    				(aBoolean or: [trip third == #reverse]) ifTrue:
    					[Preferences enableOrDisable: trip first asPer:
    						((trip second == #yes) & aBoolean) | ((trip second == #no) & aBoolean not)]].
    
    	SugarNavigatorBar current ifNotNilDo: [:e | e wantsHaloForSubmorphs: aBoolean not].
    

    Preferences class {reacting to change}

    1 implementor

    setNotificationParametersForStandardPreferences
    	"Set up the notification parameters for the standard preferences that require need them.  When adding new Preferences that require use of the notification mechanism, users declare the notifcation info as part of the call that adds the preference, or afterwards -- the two relevant methods for doing that are:
     	Preferences.addPreference:categories:default:balloonHelp:projectLocal:changeInformee:changeSelector:   and
    	Preference changeInformee:changeSelector:"
    
    		"Preferences setNotificationParametersForStandardPreferences"
    
    	| aPreference |
    	#(	
    		(annotationPanes		annotationPanesChanged)
    		(eToyFriendly			eToyFriendlyChanged)
    		(infiniteUndo			infiniteUndoChanged)
    		(uniTilesClassic			classicTilesSettingToggled)
    		(optionalButtons			optionalButtonsChanged)
    		(roundedWindowCorners	roundedWindowCornersChanged)
    		(showProjectNavigator	showProjectNavigatorChanged)
    		(smartUpdating			smartUpdatingChanged)
    		(universalTiles			universalTilesSettingToggled)
    		(showSharedFlaps		sharedFlapsSettingChanged))  do:
    
    			[:pair |
    				aPreference _ self preferenceAt: pair first.
    				aPreference changeInformee: self changeSelector: pair second]

    Setup for preferences that should take effect immediately.

    PreferencesPanel {find}

    1 implementor

    addHelpItemsTo: panelPage
    	"Add the items appropriate the the ? page of the receiver"
    
    	| aButton aTextMorph aMorph firstTextMorph |
    	panelPage hResizing: #shrinkWrap; vResizing: #shrinkWrap.
    	firstTextMorph _  TextMorph new contents: 'Search Preferences for:' translated.
    	"firstTextMorph beAllFont: ((TextStyle default fontOfSize: 13) emphasized: 1)."
    	panelPage addMorphBack: firstTextMorph lock.
    	panelPage addTransparentSpacerOfSize: 0@10.
    
    	aMorph _ RectangleMorph new clipSubmorphs: true; beTransparent; borderWidth: 2; borderColor: Color black; extent: 250 @ 36.
    	aMorph vResizing: #rigid; hResizing: #rigid.
    	aTextMorph _  PluggableTextMorph new
    				on: self
    				text: #searchString
    				accept: #setSearchStringTo:
    				readSelection: nil
    				menu: nil.
    "	aTextMorph hResizing: #rigid."
    	aTextMorph borderWidth: 0.
    	aTextMorph font: ((TextStyle default fontOfSize: 21) emphasized: 1); setTextColor: Color red.
    	aMorph addMorphBack: aTextMorph.
    	aTextMorph acceptOnCR: true.
    	aTextMorph position: (aTextMorph position + (6@5)).
    	aMorph clipLayoutCells: true.
    	aTextMorph extent: 240 @ 25.
    	panelPage addMorphBack: aMorph.
    	aTextMorph setBalloonText: 'Type what you want to search for here, then hit the "Search" button, or else hit RETURN or ENTER' translated.
    	aTextMorph setTextMorphToSelectAllOnMouseEnter.
    	aTextMorph hideScrollBarsIndefinitely.
    	panelPage addTransparentSpacerOfSize: 0@10.
    
    	aButton _ SimpleButtonMorph new
    				target: self;
    				color: Color transparent;
    				actionSelector: #initiateSearch:;
    				 arguments: {aTextMorph};
    				 label: 'Search' translated.
    	panelPage addMorphBack: aButton.
    	aButton setBalloonText: 'Type what you want to search for in the box above, then click here (or hit RETURN or ENTER) to start the search; results will appear in the "search results" category.' translated.
    
    	panelPage addTransparentSpacerOfSize: 0@30.
    
    	panelPage addMorphBack: (SimpleButtonMorph new
    								color: Color transparent;
    								 label: 'Reset preferences on startup' translated;
    								 target: Preferences;
    								 actionSelector: #deletePersistedPreferences;
    								 setBalloonText: 'Click here to delete all the preferences saved on file. On the next start, they will have their original value.' translated ; yourself).
    
    	panelPage addTransparentSpacerOfSize: 0@14.
    
    Preferences eToyFriendly ifFalse: [
    	panelPage addMorphBack: (SimpleButtonMorph new
    								color: Color transparent;
    								 label: 'Restore all Default Preference Settings' translated;
    								 target: Preferences;
    								 actionSelector: #chooseInitialSettings;
    								 setBalloonText: 'Click here to reset all the preferences to their standard default values.' translated ; yourself).
    
    	panelPage addTransparentSpacerOfSize: 0@14.
    	panelPage addMorphBack: (SimpleButtonMorph new
    								color: Color transparent;
    								label: 'Save Current Settings as my Personal Preferences' translated;
    								target: Preferences;
    								 actionSelector: #savePersonalPreferences;
    								 setBalloonText: 'Click here to save the current constellation of Preferences settings as your personal defaults; you can get them all reinstalled with a single gesture by clicking the "Restore my Personal Preferences".' translated; yourself).
    
    	panelPage addTransparentSpacerOfSize: 0@14.
    	panelPage addMorphBack: (SimpleButtonMorph new
    								color: Color transparent;
    								label: 'Restore my Personal Preferences' translated;
    								 target: Preferences;
    								 actionSelector: #restorePersonalPreferences;
    								 setBalloonText: 'Click here to reset all the preferences to their values in your Personal Preferences.' translated; yourself).
    
    	panelPage addTransparentSpacerOfSize: 0@30.
    	panelPage addMorphBack: (SimpleButtonMorph new
    								color: Color transparent;
    								label: 'Save Current Settings to Disk' translated;
    								target: Preferences;
    								actionSelector: #storePreferencesToDisk;
    								setBalloonText: 'Click here to save the current constellation of Preferences settings to a file; you can get them all reinstalled with a single gesture by clicking "Restore Settings From Disk".' translated; yourself).
    
    	panelPage addTransparentSpacerOfSize: 0@14.
    	panelPage addMorphBack: (SimpleButtonMorph new
    								color: Color transparent;
    								label: 'Restore Settings from Disk' translated;
    								target: Preferences;
    								actionSelector: #restorePreferencesFromDisk;
    								setBalloonText: 'Click here to load all the preferences from their saved values on disk.' translated; yourself).
    
    	panelPage addTransparentSpacerOfSize: 0@30.
    
    	panelPage addMorphBack: (SimpleButtonMorph new
    								color: Color transparent;
    								label: 'Inspect Parameters' translated;
    								target: Preferences;
    								actionSelector: #inspectParameters;
    								setBalloonText: 'Click here to view all the values stored in the system Parameters dictionary' translated; yourself).
    	panelPage addTransparentSpacerOfSize: 0@10.
    	panelPage addMorphBack: (Preferences themeChoiceButtonOfColor: Color transparent font: TextStyle defaultFont).
    	panelPage addTransparentSpacerOfSize: 0@10.
    ].
    
    	panelPage addMorphBack: (SimpleButtonMorph new
    								color: Color transparent;
    								label: 'Help!' translated;
    								target: Preferences;
    								actionSelector: #giveHelpWithPreferences;
    								setBalloonText: 'Click here to get some hints on use of this Preferences Panel' translated; yourself).
    	panelPage wrapCentering: #center.
    

    This sets the buttons on the ? page of Preferences. They take effect the next time Preferences is opened.

    Presenter {viewer}

    1 implementor

    cacheSpecs: aMorph
    	"For SyntaxMorph's type checking, cache the list of all viewer command specifications."
    
    	aMorph world ifNil: [^ true].
    	Preferences universalTiles ifFalse: [^ true].
    	Preferences eToyFriendly ifFalse: [^ true].	"not checking"
    	(Project current projectParameterAt: #fullCheck ifAbsent: [false])
    		ifFalse: [^ true].	"not checking"
    
    	SyntaxMorph initialize.
    

    SyntaxMorphs represent an alternate form of scripting tiles. This method returns a list of data for checking syntax, if that is turned on, or true otherwise.

    Project {language}

    2 implementors

    chooseNaturalLanguage
    	"Put up a menu allowing the user to choose the natural language for the project"
    
    	| aMenu availableLanguages item |
    Cursor wait showWhile: [
    	aMenu _ MenuMorph new defaultTarget: self.
    	aMenu addTitle: 'choose language' translated.
    	aMenu lastItem setBalloonText: 'This controls the human language in which tiles should be viewed.  It is potentially extensible to be a true localization mechanism, but initially it only works in the classic tile scripting system.  Each project has its own private language choice' translated.
    	Preferences noviceMode
    		ifFalse:[aMenu addStayUpItem.
    					].
    	Preferences eToyFriendly
    		ifFalse:[aMenu addUpdating: #useLocaleString action: #toggleUseLocale.
    					aMenu addLine].
    
    	availableLanguages := NaturalLanguageTranslator availableLanguageLocaleIDs
    										asSortedCollection:[:x :y | x displayName < y displayName].
    
    	availableLanguages do:
    		[:localeID |
    			item _ aMenu addUpdating: #stringForLanguageNameIs: target: Locale selector:  #switchAndInstallFontToID:gently: argumentList: {localeID. true} extraIcon: (Locale localeID: localeID) iconForNativeLanguage.
    			item wordingArgument: localeID.].
    ].
    	aMenu popUpInWorld
    
    "Project current chooseNaturalLanguage"
    

    This command appears on the Help menu, accessed from the World menu. With eToyFriendly off, one item is added to the top of the language menu: use localized language. This means to check the system locale when starting Etoys, and use the chosen language, if it is available in Etoys.

    Project {language}

    1 implementor

    updateLocaleDependentsWithPreviousSupplies: aCollection gently: gentlyFlag
    	"Set the project's natural language as indicated"
    
    	| morphs scriptEditors |
    	gentlyFlag ifTrue: [
    		LanguageEnvironment localeChangedGently.
    	] ifFalse: [
    		LanguageEnvironment localeChanged.
    	].
    
    	morphs := IdentitySet new: 400.
    	ActiveWorld allMorphsAndBookPagesInto: morphs.
    	scriptEditors := morphs select: [:m | (m isKindOf: ScriptEditorMorph) and: [m topEditor == m]].
    	(morphs copyWithoutAll: scriptEditors) do: [:morph | morph localeChanged].
    	scriptEditors do: [:m | m localeChanged].
    
    	Flaps disableGlobalFlaps: false.
    	Preferences sugarNavigator
    		ifTrue:
    			[Flaps addAndEnableEToyFlapsWithPreviousEntries: aCollection.
    			ActiveWorld addGlobalFlaps]
    		ifFalse:
    			[Preferences eToyFriendly
    				ifTrue:
    					[Flaps addAndEnableEToyFlaps.
    					ActiveWorld addGlobalFlaps]
    				ifFalse:
    					[Flaps enableGlobalFlaps]].
    
    	(Project current isFlapIDEnabled: 'Navigator' translated)
    		ifFalse: [Flaps enableDisableGlobalFlapWithID: 'Navigator' translated].
    
    	ParagraphEditor initializeTextEditorMenus.
    	MenuIcons initializeTranslations.
    
    	#(PartsBin ParagraphEditor BitEditor FormEditor StandardSystemController)
    		do: [ :key | Smalltalk at: key ifPresent: [ :class | class initialize ]].
    
    	ActiveWorld reformulateUpdatingMenus.
    	"self setFlaps.
    	self setPaletteFor: aLanguageSymbol."
    
    

    In setting up the currently selected language, check the setting of eToyFriendly, and choose Etoys flaps if it is on, but do not necessarily display them.

    What determines when the flaps are changed?
    

    ProjectLauncher {initialization}

    1 implementor

    setupFlaps
    	"Only called when the image has been launched in a browser.  If I am requested to show etoy flaps, then remove any pre-existing shared flaps and put up the supplies flap only.  if I am requested to show all flaps, then if flaps already exist, use them as is, else set up to show the default set of standard flaps."
    
    	((whichFlaps = 'etoy')
    		or: [Preferences eToyFriendly])
    		ifTrue:
    			[Flaps addAndEnableEToyFlaps].
    	whichFlaps = 'all'
    		ifTrue: [Flaps sharedFlapsAllowed
    				ifFalse: [Flaps enableGlobalFlaps]]

    The method comment is clear and complete.

    ProjectLauncher {running}

    1 implementor

     startUpAfterLogin
    	| scriptName loader isUrl |
    	self setupMOPath.
    	self setupFlaps.
    	Preferences readDocumentAtStartup ifTrue: [
    		HTTPClient isRunningInBrowser ifTrue:[
    			self setupFromParameters.
    			scriptName _ self parameterAt: 'src'.
    			CodeLoader defaultBaseURL: (self parameterAt: 'Base').
    		] ifFalse:[
    			scriptName _ (SmalltalkImage current getSystemAttribute: 2) ifNil:[''].
    			scriptName _ scriptName convertFromWithConverter: LanguageEnvironment defaultFileNameConverter.
    			scriptName isEmpty ifFalse:[
    				"figure out if script name is a URL by itself"
    				isUrl _ (scriptName asLowercase beginsWith:'http://') or:[
    						(scriptName asLowercase beginsWith:'file://') or:[
    						(scriptName asLowercase beginsWith:'ftp://')]].
    				isUrl ifFalse:[scriptName _ 'file:',scriptName]].
    		]. ]
    	ifFalse: [ scriptName := '' ].
    
    	scriptName isEmptyOrNil
    		ifTrue:[^Preferences eToyFriendly ifTrue: [self currentWorld addGlobalFlaps]].
    	loader _ CodeLoader new.
    	loader loadSourceFiles: (Array with: scriptName).
    	(scriptName asLowercase endsWith: '.pr')
    		ifTrue:[self installProjectFrom: loader]
    		ifFalse:[loader installSourceFiles].
    
    

    If eToyFriendly is on, adapt the Global Flaps to the current World in the project being launched.

    RecordingControls {initialization}

    4 implementors

    addMenuButtonItemsTo: aMenu
    	"The menu button was hit, and aMenu will be put up in response.  Populated the menu with the appropriate items."
    
    	aMenu title: 'Sound Recorder Options' translated.
    	aMenu addStayUpItem.
    
    	aMenu addUpdating: #durationString target: self selector: #yourself argumentList: #().
    
    	aMenu addTranslatedList: #(
    		-
    		('help'	putUpAndOpenHelpFlap 'opens a flap which contains instructions')
    		-
    		('hand me a sound token'		makeSoundMorph	'hands you a lozenge representing the current sound,  which you can drop into a piano-roll or an event-roll, or later add to the sound library.  Double-click on it to hear the sound')
    		-) translatedNoop.
    
    	Preferences eToyFriendly
    		ifFalse:
    			[aMenu addTranslatedList: #(
    				('trim'	trim	'remove any blanks space at the beginning and/or end of the recording.  Caution -- this feature seems to be broken, at least on some platforms, so use at your own risk.  For safety, save this sound in its untrimmed form before venturing to trim.')) translatedNoop].
    
    	aMenu addTranslatedList: #(
    				('choose compression...'	chooseCodec 	'choose which data-compression scheme should be used to encode the recording.')
    				('wave editor'					showEditor	'open up the wave-editor tool to visualize and to edit the sound recorded')) translatedNoop

    Add items to the menu of a SoundRecorder. If eToyFriendly is off, this includes trim, for removing blank space from the beginning and end of a recording.

    ReleaseBuilder {squeakland}

    2 implementors

    makeSqueaklandReleasePhaseFinalSettings
    	"ReleaseBuilder new makeSqueaklandReleasePhaseFinalSettings"
    
    	| serverName serverURL serverDir updateServer highestUpdate newVersion |
    
    	ProjectLauncher splashMorph: (FileDirectory default readOnlyFileNamed: 'scripts\SqueaklandSplash.morph') fileInObjectAndCode.
    
    	"Dump all morphs so we don't hold onto anything"
    	World submorphsDo:[:m| m delete].
    
    	#(
    		(honorDesktopCmdKeys false)
    		(warnIfNoChangesFile false)
    		(warnIfNoSourcesFile false)
    		(showDirectionForSketches true)
    		(menuColorFromWorld false)
    		(unlimitedPaintArea true)
    		(useGlobalFlaps false)
    		(mvcProjectsAllowed false)
    		(projectViewsInWindows false)
    		(automaticKeyGeneration true)
    		(securityChecksEnabled true)
    		(showSecurityStatus false)
    		(startInUntrustedDirectory true)
    		(warnAboutInsecureContent false)
    		(promptForUpdateServer false)
    		(fastDragWindowForMorphic false)
    
    		(externalServerDefsOnly true)
    		(expandedFormat false)
    		(allowCelesteTell false)
    		(eToyFriendly true)
    		(eToyLoginEnabled true)
    		(magicHalos true)
    		(mouseOverHalos true)
    		(biggerHandles false)
    		(selectiveHalos true)
    		(includeSoundControlInNavigator true)
    		(readDocumentAtStartup true)
    		(preserveTrash true)
    		(slideDismissalsToTrash true)
    
    	) do:[:spec|
    		Preferences setPreference: spec first toValue: spec last].
    	"Workaround for bug"
    	Preferences enable: #readDocumentAtStartup.
    
    	World color: (Color r: 0.9 g: 0.9 b: 1.0).
    
    	"Clear all server entries"
    	ServerDirectory serverNames do: [:each | ServerDirectory removeServerNamed: each].
    	SystemVersion current resetHighestUpdate.
    
    	"Add the squeakalpha update stream"
    	serverName _ 'Squeakalpha'.
    	serverURL _ 'squeakalpha.org'.
    	serverDir _ serverURL , '/'.
    
    	updateServer _ ServerDirectory new.
    	updateServer
    		server: serverURL;
    		directory: 'updates/';
    		altUrl: serverDir;
    		user: 'sqland';
    		password: nil.
    	Utilities updateUrlLists addFirst: {serverName. {serverDir. }.}.
    
    	"Add the squeakland update stream"
    	serverName _ 'Squeakland'.
    	serverURL _ 'squeakland.org'.
    	serverDir _ serverURL , '/'.
    
    	updateServer _ ServerDirectory new.
    	updateServer
    		server: serverURL;
    		directory: 'public_html/updates/';
    		altUrl: serverDir.
    	Utilities updateUrlLists addFirst: {serverName. {serverDir. }.}.
    
    	highestUpdate _ SystemVersion current highestUpdate.
    	(self confirm: 'Reset highest update (' , highestUpdate printString , ')?')
    		ifTrue: [SystemVersion current highestUpdate: 0].
    
    	newVersion _ FillInTheBlank request: 'New version designation:' initialAnswer: 'Squeakland 3.8.' , highestUpdate printString.
    	SystemVersion newVersion: newVersion.
    	(self confirm: self version , '
    Is this the correct version designation?
    If not, choose no, and fix it.') ifFalse: [^ self].
    
    

    Sets values for numerous preferences, including eToyFriendly.

    ScriptEditorMorph {other}

    1 implementor

    offerScriptorMenu
    	"Put up a menu in response to the user's clicking in the menu-request area of the scriptor's heaer"
    
    	| aMenu count |
    
    	self modernize.
    	ActiveHand showTemporaryCursor: nil.
    
    	Preferences eToyFriendly ifTrue: [^ self offerSimplerScriptorMenu].
    
    	aMenu _ MenuMorph new defaultTarget: self.
    	aMenu addTitle: scriptName asString.
    	aMenu addStayUpItem.  "NB:  the kids version in #offerSimplerScriptorMenu does not deploy the stay-up item"
    
    	aMenu addList: (self hasParameter
    		ifTrue: [{
    			{'remove parameter' translated.					#ceaseHavingAParameter}}]
    		ifFalse: [{
    			{'add parameter' translated.						#addParameter}}]).
    
    	self hasParameter ifFalse:
    		[aMenu addTranslatedList: {
    			{'button to fire this script' translatedNoop. #tearOfButtonToFireScript}.
    			{'fires per tick...' translatedNoop. #chooseFrequency}.
    			#-
    		}].
    
    	aMenu addUpdating: #showingCaretsString  target: self action: #toggleShowingCarets.
    	aMenu addLine.
    	aMenu addList: {
    		{'edit balloon help for this script' translated.		#editMethodDescription}.
    		{'explain status alternatives' translated. 			#explainStatusAlternatives}.
    		{'button to show/hide this script' translated.			#buttonToOpenOrCloseThisScript}.
    		#-
    	}.
    
    
    	Preferences universalTiles ifFalse:
    		[count _ self savedTileVersionsCount.
    		self showingMethodPane
    			ifFalse:				"currently showing tiles"
    				[aMenu add: 'show code textually' translated action: #toggleWhetherShowingTiles.
    				count > 0 ifTrue:
    					[aMenu add: 'revert to tile version...' translated action:	 #revertScriptVersion].
    				aMenu add: 'save this version' translated	action: #saveScriptVersion]
    
    			ifTrue:				"current showing textual source"
    				[count >= 1 ifTrue:
    					[aMenu add: 'revert to tile version' translated action: #toggleWhetherShowingTiles]]].
    
    	"aMenu addLine.
    	self addGoldBoxItemsTo: aMenu."
    
    	aMenu addLine.
    	
    	aMenu add: 'grab this object' translated target: playerScripted selector: #grabPlayerIn: argument: ActiveWorld.
    	aMenu balloonTextForLastItem: 'This will actually pick up the object bearing this script and hand it to you.  Click the (left) button to drop it' translated.
    
    	aMenu add: 'reveal this object' translated target: playerScripted selector: #revealPlayerIn: argument: ActiveWorld.
    	aMenu balloonTextForLastItem: 'If you have misplaced the object bearing this script, use this item to (try to) make it visible' translated.
    
    	aMenu add: 'tile representing this object' translated target: playerScripted action: #tearOffTileForSelf.
    	aMenu balloonTextForLastItem: 'choose this to obtain a tile which represents the object associated with this script' translated.
    
    	aMenu addTranslatedList: {
    		#-.
    		{'open viewer' translatedNoop. #openObjectsViewer.  'open the viewer of the object to which this script belongs' translatedNoop}.
    		{'detached method pane' translatedNoop. #makeIsolatedCodePane. 'open a little window that shows the Smalltalk code underlying this script.' translatedNoop}.
    		#-.
    		{'destroy this script' translatedNoop. #destroyScript}
    	}.
    
    
    	aMenu popUpInWorld: self currentWorld.
    

    If eToyFriendly is on, add items to the menu of a tile scripting editor, described in the User Interface chapter in Vol. I of this manual.

    • fires per tick...
    • detached method pane

    ScriptInstantiation {customevents-status control}

    1 implementor

    presentScriptStatusPopUp
    	"Put up a menu of status alternatives and carry out the request"
    
    	| reply  m menu submenu globalCustomEvents |
    
    	#('normal' 'paused' 'ticking' 'opening' 'closing') translatedNoop.
    
    	menu _ MenuMorph new.
    	self addStatusChoices: #( normal " -- run when called" ) toMenu: menu.
    	self addStatusChoices:
    		#(	paused 		"ready to run all the time"
    			ticking			"run all the time" )
    		toMenu: menu.
    	self addStatusChoices: (ScriptingSystem standardEventStati copyFrom: 1 to: 3) toMenu: menu.
    	self addStatusChoices: (ScriptingSystem standardEventStati allButFirst: 3) toMenu: menu.
    	self addStatusChoices:
    		#(opening			"when I am being opened"
    			closing			"when I am being closed" )
    		toMenu: menu.
    	
    	submenu _ MenuMorph new.
    	globalCustomEvents := (ScriptingSystem globalCustomEventNamesFor: player) asOrderedCollection.
    	(Preferences eToyFriendly) ifTrue: [ {#scrolledIntoView. #scrolledOutOfView} do:[: i |globalCustomEvents remove: i ifAbsent:[globalCustomEvents]]].
    	self addStatusChoices: globalCustomEvents toSubMenu: submenu forMenu: menu.
    	
    	menu add: 'more... ' translated subMenu: submenu.
    
    	(Preferences allowEtoyUserCustomEvents) ifTrue: [
    		submenu addLine.
    		self addStatusChoices: ScriptingSystem userCustomEventNames toSubMenu: submenu forMenu: menu.
    		submenu addLine.
    		self addStatusChoices:
    			(Array streamContents: [ :s | s nextPut: { 'define a new custom event' translated. #defineNewEvent }.
    			ScriptingSystem userCustomEventNames isEmpty
    				ifFalse: [ s nextPut: { 'delete a custom event' translated. #deleteCustomEvent } ]])
    			toSubMenu: submenu forMenu: menu ].
    	
    	menu addLine.
    
    	self addStatusChoices: #(
    		('what do these mean?'explainStatusAlternatives)
    		('apply my status to all siblings' assignStatusToAllSiblings) ) translatedNoop toMenu: menu.
    
    	menu addTitle: 'When should this script run?' translated.
    	menu submorphs last delete.
    	menu invokeModal.
    	
    	reply := menu modalSelection.
    
    	reply == #explainStatusAlternatives ifTrue: [^ self explainStatusAlternatives].
    	reply == #assignStatusToAllSiblings ifTrue: [^ self assignStatusToAllSiblings].
    	reply == #defineNewEvent ifTrue: [ ^self defineNewEvent ].
    	reply == #deleteCustomEvent ifTrue: [ ^self deleteCustomEvent ].
    
    	reply ifNotNil:
    		[self status: reply.  "Gets event handlers fixed up"
    		reply == #paused ifTrue:
    			[m _ player costume.
    			(m isKindOf: SpeakerMorph) ifTrue: [m stopSound]].
    		self updateAllStatusMorphs]
    I don't know what this does.
    

    SketchEditorMorph {e-toy support}

    9 implementors

     wantsHaloFromClick
    
    	^ Preferences eToyFriendly not.
    

     This method returns a value that is the negation of the current setting of eToyFriendly. It is sent in ten methods in the classes Morph, PasteUpMorph, SugarButton, and SugarNavigatorBar, some of which use the value to decide whether to open the halo of the outermost object or the first nested object within it. This should not be confused with the object property #wantsHaloFromClick, which can be written and read independently of eToyFriendly. Seven methods write values to this property, and none read it.

    SugarLauncher {testing}

    1 implementor

     shouldEnterHomeProject
    	"only if no other content is about to be loaded"
    	^Preferences eToyFriendly
    		and: [(Smalltalk getSystemAttribute: 2) isEmptyOrNil
    			and: [(self includesParameter: 'SRC') not
    				and: [Sensor hasDandDEvents not]]]
    

    Returns a value based on eToyFriendly and other system parameters. This method is called to choose whether to enter the home project or a freshly loaded project at startup and when loading a project from a file or a URL.

    SugarNavigatorBar {initialization}

    9 implementors

     addButtons
    
    	super addButtons.
    	self wantsHaloForSubmorphs: Preferences eToyFriendly not.
    

    This method sets the property #wantsHaloFromClick to the negation of eToyFriendly for all submorphs of its receiver, the SugarNavigatorBar.

    SugarNavigatorBar {the actions}

    4 implementors

    previousProject
    	Preferences eToyFriendly ifTrue: [
    		| prev |
    		prev := Project current previousProject.
    		(prev isNil or: [prev isTopProject]) ifTrue: [
    			Project home ifNotNilDo: [:p | Project current setParent: p]]].
    	super previousProject

    Choose which project to switch to. If there is no previous project in the current chain, options include going to a parent project or to the previous project defined in a higher-level class.

    That is true, but I don't fully understand it.
    

    SyntaxMorph {type checking}

     1 implementor

     okToBeReplacedBy: aSyntaxMorph
    	"Return true if it is OK to replace me with aSyntaxMorph.  Enforce the type rules in the old EToy green tiles."
    
    	| itsType myType |
    	(Preferences eToyFriendly or: [Preferences typeCheckingInTileScripting])
    		ifFalse: [^ true].	"not checking unless one of those prefs is true"
    	(parseNode class == BlockNode and: [aSyntaxMorph parseNode class == BlockNode])
    		ifTrue: [^ true].
    	(parseNode class == ReturnNode and: [aSyntaxMorph parseNode class == ReturnNode])
    		ifTrue: [^ true].
    	parseNode class == KeyWordNode ifTrue: [^ false].
    	aSyntaxMorph parseNode class == KeyWordNode ifTrue: [^ false].
    	parseNode class == SelectorNode ifTrue: [^ false].
    	aSyntaxMorph parseNode class == SelectorNode ifTrue: [^ false].
    	owner isSyntaxMorph ifFalse: [^ true].	"only within a script"
    		"Transcript show: aSyntaxMorph resultType printString, ' dropped on ',
    			self receiverOrArgType printString; cr.
    		"
    	(itsType _ aSyntaxMorph resultType) == #unknown ifTrue: [^ true].
    	(myType _ self receiverOrArgType) == #unknown ifTrue: [^ true].
    		"my type in enclosing message"
    	^ myType = itsType

    Check eToyFriendly and another preference to decide whether to allow replacement of one scripting tile by another with or without syntax checking.

    SystemDictionary {squeakland}

    2 implementors

     makeSqueaklandReleasePhaseFinalSettings
    	"Smalltalk makeSqueaklandReleasePhaseFinalSettings"
    
    	| serverName serverURL serverDir updateServer highestUpdate newVersion |
    
    	ProjectLauncher splashMorph: ((FileDirectory default directoryNamed: 'scripts' )readOnlyFileNamed: 'SqueaklandSplash.morph') fileInObjectAndCode.
    
    	"Dump all morphs so we don't hold onto anything"
    	World submorphsDo:[:m| m delete].
    
    	#(
    		(honorDesktopCmdKeys false)
    		(warnIfNoChangesFile false)
    		(warnIfNoSourcesFile false)
    		(showDirectionForSketches true)
    		(menuColorFromWorld false)
    		(unlimitedPaintArea true)
    		(useGlobalFlaps false)
    		(mvcProjectsAllowed false)
    		(projectViewsInWindows false)
    		(automaticKeyGeneration true)
    		(securityChecksEnabled true)
    		(showSecurityStatus false)
    		(startInUntrustedDirectory true)
    		(warnAboutInsecureContent false)
    		(promptForUpdateServer false)
    		(fastDragWindowForMorphic false)
    
    		(externalServerDefsOnly true)
    		(expandedFormat false)
    		(allowCelesteTell false)
    		(eToyFriendly true)
    		(eToyLoginEnabled true)
    		(magicHalos true)
    		(mouseOverHalos true)
    		(biggerHandles false)
    		(selectiveHalos true)
    		(includeSoundControlInNavigator true)
    		(readDocumentAtStartup true)
    		(preserveTrash true)
    		(slideDismissalsToTrash true)
    
    	) do:[:spec|
    		Preferences setPreference: spec first toValue: spec last].
    	"Workaround for bug"
    	Preferences enable: #readDocumentAtStartup.
    
    	World color: (Color r: 0.9 g: 0.9 b: 1.0).
    
    	"Clear all server entries"
    	ServerDirectory serverNames do: [:each | ServerDirectory removeServerNamed: each].
    	SystemVersion current resetHighestUpdate.
    
    	"Add the squeakalpha update stream"
    	serverName _ 'Squeakalpha'.
    	serverURL _ 'squeakalpha.org'.
    	serverDir _ serverURL , '/'.
    
    	updateServer _ ServerDirectory new.
    	updateServer
    		server: serverURL;
    		directory: 'updates/';
    		altUrl: serverDir;
    		user: 'sqland';
    		password: nil.
    	Utilities updateUrlLists addFirst: {serverName. {serverDir. }.}.
    
    	"Add the squeakland update stream"
    	serverName _ 'Squeakland'.
    	serverURL _ 'squeakland.org'.
    	serverDir _ serverURL , '/'.
    
    	updateServer _ ServerDirectory new.
    	updateServer
    		server: serverURL;
    		directory: 'public_html/updates/';
    		altUrl: serverDir.
    	Utilities updateUrlLists addFirst: {serverName. {serverDir. }.}.
    
    	highestUpdate _ SystemVersion current highestUpdate.
    	(self confirm: 'Reset highest update (' , highestUpdate printString , ')?')
    		ifTrue: [SystemVersion current highestUpdate: 0].
    
    	newVersion _ FillInTheBlank request: 'New version designation:' initialAnswer: 'Squeakland 3.8.' , highestUpdate printString.
    	SystemVersion newVersion: newVersion.
    	(self confirm: self version , '
    Is this the correct version designation?
    If not, choose no, and fix it.') ifFalse: [^ self].
    
    

    This cleanup method for preparing Squeak release images deletes all Morphs in the current World, assigns values to several Preferences, including eToyFriendly, and performs some other actions.

    TheWorldMenu {*Etoys}

     1 implementor

     scriptingMenu
    	"Build the authoring-tools menu for the world. FORMERLY:  If eToyFriendly is set, a reduced menu is offered."
    
    	true ifTrue: [^ self fullScriptingMenu].
    
    	Preferences eToyFriendly ifFalse: [^ self fullScriptingMenu].
    
    	^ self fillIn: (self menu: 'authoring tools...' translatedNoop) from: {
    		{ 'objects (o)' translatedNoop. { #myWorld . #activateObjectsTool }. 'A searchable source of new objects.' translatedNoop}.
    		nil.  "----------"
     		{ 'view trash contents' translatedNoop. { #myWorld . #openScrapsBook:}. 'The place where all your trashed morphs go.' translatedNoop}.
     		{ 'empty trash can' translatedNoop. { Utilities . #emptyScrapsBookGC}. 'Empty out all the morphs that have accumulated in the trash can.' translatedNoop}.
    		nil.  "----------"		
    
    		{ 'sound library' translatedNoop.  { SoundLibraryTool.  #newInHand}.'A tool that lets you see and manage all the sounds in the sound library' translatedNoop}.
    
    	"{ 'new scripting area' translated. { #myWorld . #detachableScriptingSpace}. 'A window set up for simple scripting.' translated}.
    
    		nil.  ""----------"		
    	
    		{ 'status of scripts' translatedNoop. {#myWorld . #showStatusOfAllScripts}. 'Lets you view the status of all the scripts belonging to all the scripted objects of the project.' translatedNoop}.
    		"{ 'summary of scripts' translated. {#myWorld . #printScriptSummary}. 'Produces a summary of scripted objects in the project, and all of their scripts.'}."
    		"{ 'browser for scripts' translated. {#myWorld . #browseAllScriptsTextually}. 'Allows you to view all the scripts in the project in a traditional programmers'' ""browser"" format'}."
    
    
    		{ 'gallery of players' translatedNoop. {#myWorld . #galleryOfPlayers}. 'A tool that lets you find out about all the players used in this project' translatedNoop}.
    
    		nil.
    
    "		{ 'gallery of scripts' translated. {#myWorld . #galleryOfScripts}. 'Allows you to view all the scripts in the project' translated}."
    
    		"{ 'etoy vocabulary summary' translated. {#myWorld . #printVocabularySummary }. 'Displays a summary of all the pre-defined commands and properties in the pre-defined EToy vocabulary.' translated}."
    
    		"{ 'attempt misc repairs' translated. {#myWorld . #attemptCleanup}. 'Take measures that may help fix up some things about a faulty or problematical project.' translated}."
    
    		{ 'remove all viewers' translatedNoop. {#myWorld . #removeAllViewers}. 'Remove all the Viewers from this project.' translatedNoop}.
    
    		"{ 'refer to masters' translated. {#myWorld . #makeAllScriptEditorsReferToMasters }. 'Ensure that all script editors are referring to the first (alphabetically by external name) Player of their type' translated}.
    "
    		"nil."  "----------"
    
    		"{ 'unlock locked objects' translated. { #myWorld . #unlockContents}. 'If any items on the world desktop are currently locked, unlock them.' translated}."
    		"{ 'unhide hidden objects' translated. { #myWorld . #showHiders}. 'If any items on the world desktop are currently hidden, make them visible.' translated}."
            }

    In an earlier version, this method chose between full and reduced scripting menus depending on the value of eToyFriendly, and defined the Authoring Tools menu. Now it just returns the full menu defined elsewhere. Execution cannot continue past the first line.

    There has been error in communication with Booktype server. Not sure right now where is the problem.

    You should refresh this page.