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.
The following objects appear in Object Catalog when eToyFriendly is off. They are described in the More Objects chapter.
CircleCurve
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
Start State
State
STClass
UML Package
XOR Gate
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.
World halo menu
This menu has the title world, in contrast with the World menu. With eToyFriendly off, the following options appear.
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.
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
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.
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.
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.
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
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?
eToyFriendly off:
Save changes before quitting?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.
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.