'From Squeak 3.2 of 11 July 2002 [latest update: #4917] on 28 July 2002 at 12:50:51 am'! "Change Set: PersonalSqueak-FrameWork Date: 16 May 2002 Author: Russell Allen The core of the PersonalSqueak system. PSWorldMorph new openInWorld makeWorld "! Smalltalk renameClassNamed: #DateButton2 as: #DateButton! SimpleButtonMorph subclass: #DateButton instanceVariableNames: 'date monthMorph model selector ' classVariableNames: '' poolDictionaries: '' category: 'Faure-Support'! Smalltalk renameClassNamed: #PSEventMorph as: #FaureEvents! Morph subclass: #FaureEvents instanceVariableNames: 'dirOrFile selected mode buttonBar date ' classVariableNames: '' poolDictionaries: '' category: 'Faure-Standard'! Smalltalk renameClassNamed: #PSFileMorph as: #FaureFiles! Morph subclass: #FaureFiles instanceVariableNames: 'dirOrFile selected mode buttonBar ' classVariableNames: '' poolDictionaries: '' category: 'Faure-Standard'! Smalltalk renameClassNamed: #PSHomeMorph as: #FaureHome! RectangleMorph subclass: #FaureHome instanceVariableNames: 'sm cache ' classVariableNames: '' poolDictionaries: '' category: 'Faure-Framework'! Smalltalk renameClassNamed: #PSNavigationMorph as: #FaureNavigator! SimpleButtonMorph subclass: #FaureNavigator instanceVariableNames: 'currentID menu ' classVariableNames: '' poolDictionaries: '' category: 'Faure-Framework'! Smalltalk renameClassNamed: #PSAddressMorph as: #FaurePeople! Morph subclass: #FaurePeople instanceVariableNames: 'selected ' classVariableNames: '' poolDictionaries: '' category: 'Faure-Standard'! Smalltalk renameClassNamed: #PSToDoMorph as: #FaureToDo! Morph subclass: #FaureToDo instanceVariableNames: 'dirOrFile selected mode buttonBar date ' classVariableNames: '' poolDictionaries: '' category: 'Faure-Standard'! Smalltalk renameClassNamed: #PSWorldMorph as: #FaureWorld! RectangleMorph subclass: #FaureWorld instanceVariableNames: 'currentMorph topMorph currentID navMorph isWorld organiser ' classVariableNames: '' poolDictionaries: '' category: 'Faure-Framework'! Model subclass: #PDA instanceVariableNames: 'userCategories allPeople allEvents recurringEvents allToDoItems allNotes date category currentItem currentItemText currentItemSelection categoryList categoryListIndex peopleList peopleListIndex scheduleList scheduleListIndex toDoList toDoListIndex notesList notesListIndex dateButtonPressed viewDescriptionOnly ' classVariableNames: 'Current ' poolDictionaries: '' category: 'Morphic-PDA'! MenuMorph subclass: #PSMenuMorph instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Tools-Menus'! Morph subclass: #TextDisplay instanceVariableNames: 'text ' classVariableNames: '' poolDictionaries: '' category: 'Faure-Support'! !Morph methodsFor: 'faure' stamp: 'rca 7/26/2002 16:36'! getMorphBeneathMeCalled: aName "Get the morph beneath me. Usually called top down from a previous goto request" ^ self ! ! !Morph methodsFor: 'faure' stamp: 'rca 7/26/2002 16:36'! gotoPage: stringArray "Goto this absolute array, calculated from the top." ^ owner gotoPage: stringArray! ! !DateButton methodsFor: 'as yet unclassified' stamp: 'rca 7/23/2002 19:36'! changeDate monthMorph openInWorld topLeft: self bottomLeft! ! !DateButton methodsFor: 'as yet unclassified' stamp: 'rca 7/23/2002 19:09'! date ^ date ifNil: [date _ Date today]! ! !DateButton methodsFor: 'as yet unclassified' stamp: 'rca 7/24/2002 00:01'! initialize super initialize. self borderWidth: 1; target: self; actionSelector: #changeDate; actWhen: #buttonDown; cornerStyle: #square; color: Color white; height: 20; vResizing: #rigid; hResizing: #rigid; layoutInset: 3. self changeTableLayout. date _ Date today. self setLabel. monthMorph _ MonthMorph newWithModel: self.! ! !DateButton methodsFor: 'as yet unclassified' stamp: 'rca 7/23/2002 19:27'! on: newModel action: newSelector model _ newModel. selector _ newSelector.! ! !DateButton methodsFor: 'as yet unclassified' stamp: 'rca 7/24/2002 00:01'! setDate: aDate fromButton: aButton down: aBoolean aDate ifNotNil: [ date _ aDate. monthMorph delete. self setLabel. model perform: selector with: date. ] ! ! !DateButton methodsFor: 'as yet unclassified' stamp: 'rca 7/24/2002 00:02'! setLabel self label: (date weekday, ', ', date asString). ! ! !FaureEvents methodsFor: 'as yet unclassified' stamp: 'rca 7/20/2002 17:29'! getEvents ^ PDA current scheduleListItems! ! !FaureEvents methodsFor: 'as yet unclassified' stamp: 'rca 7/27/2002 00:50'! getMorphBeneathMeCalled: aName | str | aName isEmpty ifTrue: [^ self]. (self getEvents includes: aName first) ifTrue: [ str _ WriteStream on: ''. str nextPutAll: 'Event'; cr. str nextPutAll: (PDA current scheduleList at: (PDA current scheduleListItems indexOf: aName first)) asText. str _ str contents withNoLineLongerThan: 30. ^ TextDisplay new text: str]. ! ! !FaureEvents methodsFor: 'as yet unclassified' stamp: 'rca 7/26/2002 16:37'! initialize | m | super initialize. self color: Color white. selected _ 1. self vResizing: #spaceFill. self hResizing: #spaceFill. self changeTableLayout. self layoutInset: 8. self cellPositioning: #topLeft. self cellInset: 4. m _ PluggableListMorph on: self list: #getEvents selected: #sel changeSelected: #newSel:. m vResizing: #spaceFill. m hResizing: #spaceFill. self addMorphFront: m. date _ DateButton new on: self action: #newDate:. self addMorphFront: date. m layoutInBounds: self bounds. ! ! !FaureEvents methodsFor: 'as yet unclassified' stamp: 'rca 7/20/2002 17:30'! newDate: newDate PDA current selectDate: newDate. self changed: #getEvents.! ! !FaureEvents methodsFor: 'as yet unclassified' stamp: 'rca 7/20/2002 17:30'! newSel: x | y | x = 0 ifTrue: [y _ 1] ifFalse: [y _ x]. selected _ y. ^ self gotoPage: {self getEvents at: selected}! ! !FaureEvents methodsFor: 'as yet unclassified' stamp: 'rca 7/20/2002 17:27'! sel ^ selected! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 6/29/2002 00:49'! deleteSelected dirOrFile deleteDirectory: (dirOrFile fileAndDirectoryNames at: selected). selected _ 1. self changed: #getFiles. ! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 6/29/2002 00:00'! getFiles ^ dirOrFile fileAndDirectoryNames ! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 7/21/2002 21:11'! getMorphBeneathMeCalled: aName ^ self onFile: aName! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 7/21/2002 21:52'! initialize super initialize. self color: Color white. self vResizing: #spaceFill. self hResizing: #spaceFill. self changeTableLayout. self layoutInset: 8. self cellInset: 4. ! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 7/27/2002 00:37'! loadPDASelected PDA current loadDatabase: (dirOrFile fullNameFor: (dirOrFile fileAndDirectoryNames at: selected)) ! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 6/29/2002 00:39'! newSel: x | y | x = 0 ifTrue: [y _ 1] ifFalse: [y _ x]. selected _ y. mode = #on ifTrue: [self changed: #sel] ifFalse: [^ self openSelected].! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 7/21/2002 22:12'! onFile: array | m n str | self removeAllMorphs. n _ ''. array do: [:e | n _ n, FileDirectory pathNameDelimiter asString, e]. dirOrFile _ FileDirectory default. (dirOrFile directoryExists: n) | (n = '') ifTrue: [ dirOrFile _ FileDirectory on: n. m _ PluggableListMorph on: self list: #getFiles selected: #sel changeSelected: #newSel:. m vResizing: #spaceFill; hResizing: #spaceFill. self addMorphFront: m. m layoutInBounds: self bounds. (buttonBar _ Morph new) color: Color white; vResizing: #rigid; hResizing: #spaceFill; listDirection: #leftToRight; cellInset: 4; height: 24; changeTableLayout. self selectModeOff. self addMorphFront: buttonBar. ^ self]. (dirOrFile fileExists: n) ifTrue: [ dirOrFile _ dirOrFile fileNamed: n. str _ WriteStream on: ''. str nextPutAll: 'File Details'; cr; cr; nextPutAll: 'Name: ', array last; cr; nextPutAll: 'Size: ', dirOrFile size asStringWithCommas, 'b'. dirOrFile close. self addMorphFront: (TextMorph new contents: str contents). ^ self]. self error: 'Unknown File or Directory'.! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 6/29/2002 00:39'! openSelected ^ self gotoPage: {dirOrFile fileAndDirectoryNames at: selected}! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 6/29/2002 00:16'! sel mode = #on ifTrue: [^ selected] ifFalse: [^ 1].! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 6/29/2002 00:26'! selectModeOff mode _ #off. buttonBar removeAllMorphs. buttonBar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Select') actWhen: #buttonUp; actionSelector: #selectModeOn; target: self). ! ! !FaureFiles methodsFor: 'as yet unclassified' stamp: 'rca 7/27/2002 00:31'! selectModeOn mode _ #on. buttonBar removeAllMorphs. buttonBar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Load as PDA') actWhen: #buttonUp; actionSelector: #loadPDASelected; target: self). buttonBar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Delete') actWhen: #buttonUp; actionSelector: #deleteSelected; target: self). buttonBar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Open') actWhen: #buttonUp; actionSelector: #openSelected; target: self). ! ! !FaureHome methodsFor: 'initialization' stamp: 'rca 7/28/2002 00:45'! initialiseBar | bar | (bar _ RectangleMorph new) vResizing: #shrinkWrap; hResizing: #shrinkWrap; color: Color white; changeTableLayout; layoutInset: 3. bar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Quit') actWhen: #buttonDown; actionSelector: #quitPrimitive; target: Smalltalk). bar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Time') actWhen: #buttonDown; actionSelector: #gotoPage:; arguments: #( #('Welcome' 'Current Time') ); target: self). bar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'PDA') actWhen: #buttonDown; actionSelector: #gotoPage:; arguments: #( #('Welcome' 'PDA') ); target: self). bar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Tetris') actWhen: #buttonDown; actionSelector: #gotoPage:; arguments: #( #('Welcome' 'Tetris') ); target: self). bar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Contacts') actWhen: #buttonDown; actionSelector: #gotoPage:; arguments: #( #('Welcome' 'People') ); target: self). bar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Events') actWhen: #buttonDown; actionSelector: #gotoPage:; arguments: #( #('Welcome' 'Events') ); target: self). bar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'To Do') actWhen: #buttonDown; actionSelector: #gotoPage:; arguments: #( #('Welcome' 'To Do') ); target: self). bar addMorphFront: ( (SimpleButtonMorph newWithLabel: 'Files') actWhen: #buttonDown; actionSelector: #gotoPage:; arguments: #( #('Welcome' 'File') ); target: self). self addMorphFront: bar. ! ! !FaureHome methodsFor: 'initialization' stamp: 'rca 7/26/2002 15:26'! initialize super initialize. self vResizing: #spaceFill. self hResizing: #spaceFill. self changeTableLayout. self layoutInset: 8. self listDirection: #leftToRight. self cellPositioning: #topLeft. self color: Color white. self borderWidth: 0. self initialiseBar. self addMorphFront: (sm _ TextMorph new contents: ''). self update: #toDoListItems. (cache _ Dictionary new) at: #todos put: FaureToDo new; at: #people put: FaurePeople new; at: #files put: FaureFiles new; at: #events put: FaureEvents new.! ! !FaureHome methodsFor: 'updating' stamp: 'rca 7/20/2002 20:59'! update: sym | str | sym == #toDoListItems ifTrue: [ str _ WriteStream on: ''. str nextPutAll: 'To Do'; cr. PDA current addDependent: self. PDA current toDoListItems do: [:i | str nextPutAll: i; cr]. str _ str contents withNoLineLongerThan: 30. sm contents: str. ]. ^ self! ! !FaureHome methodsFor: 'accessing' stamp: 'rca 7/27/2002 00:52'! getMorphBeneathMeCalled: aName aName isEmpty ifTrue: [^ self]. ^ aName first caseOf: { ['Current Time'] -> [WatchMorph new]. ['Tetris'] -> [Tetris new]. ['PDA'] -> [PDAMorph new]. ['File'] -> [(cache at: #files) getMorphBeneathMeCalled: aName allButFirst]. ['Events'] -> [(cache at: #events) getMorphBeneathMeCalled: aName allButFirst]. ['People'] -> [(cache at: #people) getMorphBeneathMeCalled: aName allButFirst]. ['To Do'] -> [(cache at: #todos) getMorphBeneathMeCalled: aName allButFirst]} otherwise: [^ self] ! ! !FaureNavigator methodsFor: 'as yet unclassified' stamp: 'rca 6/16/2002 02:52'! currentID ^ currentID! ! !FaureNavigator methodsFor: 'as yet unclassified' stamp: 'rca 6/15/2002 08:59'! defaultColor ^ Color black! ! !FaureNavigator methodsFor: 'as yet unclassified' stamp: 'rca 7/22/2002 01:04'! initialize super initialize. self borderWidth: 0; target: self; actionSelector: #setNewPage; actWhen: #buttonDown; cornerStyle: #square; color: Color black; height: 20; vResizing: #rigid; hResizing: #spaceFill; layoutInset: 3. self changeTableLayout. ! ! !FaureNavigator methodsFor: 'as yet unclassified' stamp: 'rca 7/22/2002 01:03'! newID: id | label | currentID _ id. self label: (currentID last truncateWithElipsisTo: 25). (self findA: StringMorph) color: Color white. menu _ PSMenuMorph new. menu color: (Color r: 1 g: 1 b: 1 alpha: 0.7). menu borderColor: Color black. currentID doWithIndex: [:e :i | label _ ''. i timesRepeat: [label _ label, ' ']. label _ (label, e) truncateWithElipsisTo: 40. menu add: label target: self selector: #setNewPage: argument: i]. ! ! !FaureNavigator methodsFor: 'as yet unclassified' stamp: 'rca 7/21/2002 23:42'! setNewPage menu invokeModalAt: self topLeft x @ (self topLeft y + self height) width: self width in: self world allowKeyboard: false ! ! !FaureNavigator methodsFor: 'as yet unclassified' stamp: 'rca 6/21/2002 23:41'! setNewPage: i ^ owner gotoPage: (currentID copyFrom: 1 to: i)! ! !FaurePeople methodsFor: 'as yet unclassified' stamp: 'rca 7/27/2002 00:51'! getMorphBeneathMeCalled: aName | str | aName isEmpty ifTrue: [^ self]. (self getPeople includes: aName first) ifTrue: [ str _ WriteStream on: ''. str nextPutAll: 'Person'; cr; cr. str nextPutAll: (PDA current peopleList at: (PDA current peopleListItems indexOf: aName first)) asText. str _ str contents withNoLineLongerThan: 30. ^ TextDisplay new text: str.]! ! !FaurePeople methodsFor: 'as yet unclassified' stamp: 'rca 7/20/2002 17:46'! getPeople ^ PDA current peopleListItems! ! !FaurePeople methodsFor: 'as yet unclassified' stamp: 'rca 7/26/2002 16:31'! initialize | m | super initialize. self color: Color white. selected _ 1. self vResizing: #spaceFill. self hResizing: #spaceFill. self changeTableLayout. self layoutInset: 8. self cellInset: 4. m _ PluggableListMorph on: self list: #getPeople selected: #sel changeSelected: #newSel:. m vResizing: #spaceFill. m hResizing: #spaceFill. self addMorphFront: m. m layoutInBounds: self bounds. ! ! !FaurePeople methodsFor: 'as yet unclassified' stamp: 'rca 7/20/2002 17:47'! newSel: x | y | x = 0 ifTrue: [y _ 1] ifFalse: [y _ x]. selected _ y. ^ self gotoPage: {self getPeople at: selected}! ! !FaurePeople methodsFor: 'as yet unclassified' stamp: 'rca 7/20/2002 17:43'! sel ^ selected! ! !FaureToDo methodsFor: 'as yet unclassified' stamp: 'rca 7/26/2002 16:44'! getMorphBeneathMeCalled: aName | str | aName = {} ifTrue: [^ self]. (self getToDos includes: aName first) ifTrue: [ str _ WriteStream on: ''. str nextPutAll: 'To Do'; cr. str nextPutAll: (PDA current toDoList at: (PDA current toDoListItems indexOf: aName first)) asText. str _ str contents withNoLineLongerThan: 30. ^ TextDisplay new text: str]! ! !FaureToDo methodsFor: 'as yet unclassified' stamp: 'rca 7/13/2002 00:49'! getToDos ^ PDA current toDoListItems! ! !FaureToDo methodsFor: 'as yet unclassified' stamp: 'rca 7/26/2002 16:44'! initialize | m | super initialize. self color: Color white. selected _ 1. self vResizing: #spaceFill. self hResizing: #spaceFill. self changeTableLayout. self layoutInset: 8. self cellInset: 4. m _ PluggableListMorph on: self list: #getToDos selected: #sel changeSelected: #newSel:. m vResizing: #spaceFill. m hResizing: #spaceFill. self cellPositioning: #topLeft. self addMorphFront: m. date _ DateButton new on: self action: #newDate:. self addMorphFront: date. m layoutInBounds: self bounds. ! ! !FaureToDo methodsFor: 'as yet unclassified' stamp: 'rca 7/20/2002 17:24'! newDate: newDate PDA current selectDate: newDate. self changed: #getToDos.! ! !FaureToDo methodsFor: 'as yet unclassified' stamp: 'rca 7/13/2002 00:53'! newSel: x | y | x = 0 ifTrue: [y _ 1] ifFalse: [y _ x]. selected _ y. ^ self gotoPage: {self getToDos at: selected}! ! !FaureToDo methodsFor: 'as yet unclassified' stamp: 'rca 7/13/2002 00:52'! sel ^ selected! ! !FaureWorld methodsFor: 'initialization' stamp: 'rca 7/21/2002 20:59'! initialize super initialize. borderWidth _ 0. bounds _ 0@0 corner: 240@320. color _ Color black. self changeTableLayout. self addMorphBack: (navMorph _ FaureNavigator new). topMorph _ FaureHome new. currentMorph _ topMorph. self gotoPage: #('Welcome'). ! ! !FaureWorld methodsFor: 'accessing' stamp: 'rca 6/16/2002 04:30'! getPage ^ currentID! ! !FaureWorld methodsFor: 'accessing' stamp: 'rca 6/28/2002 22:42'! gotoPage: stringArray | newArray | stringArray first = 'Welcome' ifTrue: [newArray _ stringArray] ifFalse: [newArray _ currentID, stringArray]. currentID = newArray ifFalse: [ currentID _ newArray. currentMorph ifNotNil: [currentMorph delete]. currentMorph _ topMorph getMorphBeneathMeCalled: newArray allButFirst. self addMorphBack: currentMorph. currentMorph extent: self width@(self height - navMorph height). navMorph newID: currentID].! ! !FaureWorld methodsFor: 'accessing' stamp: 'rca 6/28/2002 23:46'! makeWorld isWorld _ true. self bounds: (0@0 corner: Display extent). self beSticky.! ! !FaureWorld methodsFor: 'world' stamp: 'rca 6/23/2002 12:27'! isWorld ^ isWorld! ! !FaureWorld methodsFor: 'world' stamp: 'rca 6/23/2002 12:27'! makeStandAlone isWorld _ false! ! !FaureWorld class methodsFor: 'as yet unclassified' stamp: 'rca 7/26/2002 17:15'! saveFaureImage World removeAllMorphs. Display setExtent: 240@320 depth: 16. FaureWorld new openInWorld makeWorld. Smalltalk saveChangesInFileNamed: (Smalltalk fullNameForChangesNamed: 'faure'). Smalltalk saveImageInFileNamed: (Smalltalk fullNameForImageNamed: 'faure'). Smalltalk snapshot: true andQuit: true.! ! !PDA methodsFor: 'initialization' stamp: 'rca 7/27/2002 00:33'! loadDatabase | aName | aName _ Utilities chooseFileWithSuffixFromList: #('.pda' '.pda.gz') withCaption: 'Choose a file to load'. aName ifNil: [^ self]. "User made no choice" aName == #none ifTrue: [^ self inform: 'Sorry, no suitable files found (names should end with .data or .data.gz)']. self loadDatabase: aName! ! !PDA methodsFor: 'initialization' stamp: 'rca 7/27/2002 00:33'! loadDatabase: aName | aFileStream list | aFileStream _ FileStream oldFileNamed: aName. list _ aFileStream fileInObjectAndCode. userCategories _ list at: 1. allPeople _ list at: 2. allEvents _ list at: 3. recurringEvents _ list at: 4. allToDoItems _ list at: 5. allNotes _ list at: 6. date _ Date today. self selectCategory: 'all'. ! ! !PDA class methodsFor: 'as yet unclassified' stamp: 'rca 6/22/2002 00:11'! current "Answer the currently active PDA (assuming that there's only one PDA open at a given time) or open a new one." Current ifNil: [Current _ self new initialize]. ^ Current! ! !PDAMorph methodsFor: 'as yet unclassified' stamp: 'rca 7/13/2002 00:23'! initialize super initialize. color _ Color lightGray. self extent: 406 @ 408. PDA current openAsMorphIn: self.! ! !PSMenuMorph methodsFor: 'as yet unclassified' stamp: 'rca 6/22/2002 00:01'! initialize super initialize. self hResizing: #spaceFill. ! ! !PSMenuMorph methodsFor: 'as yet unclassified' stamp: 'rca 6/21/2002 23:56'! invokeModalAt: aPoint width: width in: aWorld allowKeyboard: aBoolean "Invoke this menu and don't return until the user has chosen a value. See senders of this method for finding out how to use modal menu morphs." | w | self popUpAt: aPoint width: width forHand: aWorld primaryHand in: aWorld allowKeyboard: aBoolean. self isModalInvokationDone: false. w _ aWorld outermostWorldMorph. "containing hand" [self isInWorld & self isModalInvokationDone not] whileTrue: [w doOneSubCycle]. self delete. ^ self modalSelection! ! !PSMenuMorph methodsFor: 'as yet unclassified' stamp: 'rca 6/21/2002 23:57'! popUpAt: aPoint width: w forHand: hand in: aWorld allowKeyboard: aBoolean "Present this menu at the given point under control of the given hand." | evt | self items isEmpty ifTrue: [^ self]. aWorld addMorphFront: self; startSteppingSubmorphsOf: self. self position: aPoint; width: w. "Acquire focus for valid pop up behavior" hand newMouseFocus: self. aBoolean ifTrue: [hand newKeyboardFocus: self]. evt _ hand lastEvent. (evt isKeyboard or: [evt isMouse and: [evt anyButtonPressed not]]) ifTrue: ["Select first item if button not down" self moveSelectionDown: 1 event: evt]. self changed! ! !String methodsFor: 'accessing' stamp: 'rca 6/23/2002 13:54'! string ^ self! ! !TextDisplay methodsFor: 'as yet unclassified' stamp: 'rca 7/26/2002 16:25'! initialize super initialize. self color: Color white. text _ TextMorph new contents: ''. self addMorphFront: text. text bounds: self bounds.! ! !TextDisplay methodsFor: 'as yet unclassified' stamp: 'rca 7/26/2002 16:19'! text: aString text contents: aString! ! TextDisplay removeSelector: #initalize! FaureWorld class removeSelector: #makeDefaultInterface! !FaureWorld reorganize! ('initialization' initialize) ('accessing' getPage gotoPage: makeWorld) ('world' isWorld makeStandAlone) ! FaureToDo removeSelector: #onName:! FaurePeople removeSelector: #onName:! FaureHome removeSelector: #initialisePrimaryBar! FaureHome removeSelector: #initialiseSecondaryBar! !FaureHome reorganize! ('initialization' initialiseBar initialize) ('updating' update:) ('accessing' getMorphBeneathMeCalled:) ! FaureEvents removeSelector: #onName:! DateButton class removeSelector: #triangleForm! !Morph reorganize! ('initialization' basicInitialize currentVocabulary inATwoWayScrollPane initialExtent initialize intoWorld: openCenteredInWorld openInHand openInMVC openInWindow openInWindowLabeled: openInWindowLabeled:inWorld: openInWorld openInWorld: outOfWorld: resourceJustLoaded standardPalette) ('classification' demandsBoolean isAlignmentMorph isBalloonHelp isFlapOrTab isFlapTab isFlashMorph isFlexMorph isHandMorph isModalShell isMorph isMorphicModel isPlayfieldLike isRenderer isStandardViewer isSyntaxMorph isTextMorph isWorldMorph isWorldOrHandMorph) ('accessing' actorState actorState: actorStateOrNil adoptPaneColor: asMorph balloonText balloonTextSelector balloonTextSelector: beFlap: beSticky beUnsticky borderColor borderColor: borderStyle borderStyle: borderStyleForSymbol: borderWidth borderWidth: borderWidthForRounding color color: colorForInsets couldHaveRoundedCorners eventHandler eventHandler: forwardDirection hasTranslucentColor highlight highlightColor highlightColor: highlightOnlySubmorph: insetColor isFlap isLocked isShared isSticky lock lock: methodCommentAsBalloonHelp modelOrNil player player: raisedColor regularColor regularColor: rememberedColor rememberedColor: resistsRemoval resistsRemoval: scaleFactor setBorderStyle: sqkPage sticky: toggleLocked toggleResistsRemoval toggleStickiness unHighlight unlock unlockContents url userString wantsToBeCachedByHand) ('access properties' hasProperty: removeProperty: setProperty:toValue: valueOfProperty: valueOfProperty:ifAbsent: valueOfProperty:ifAbsentPut: valueOfProperty:ifPresentDo:) ('copying' copy deepCopy duplicate fullCopy updateReferencesUsing: usableSiblingInstance veryDeepCopyWith: veryDeepFixupWith: veryDeepInner:) ('structure' activeHand allOwners allOwnersDo: firstOwnerSuchThat: hasOwner: isInWorld morphPreceding: nearestOwnerThat: orOwnerSuchThat: outermostMorphThat: outermostWorldMorph owner ownerThatIsA: ownerThatIsA:orA: pasteUpMorph pasteUpMorphHandlingTabAmongFields presenter primaryHand renderedMorph root rootAt: topPasteUp topRendererOrSelf withAllOwners withAllOwnersDo: world) ('submorphs-accessing' allKnownNames allMorphs allMorphsDo: allNonSubmorphMorphs allSubmorphNamesDo: findA: findDeepSubmorphThat:ifAbsent: findDeeplyA: findSubmorphBinary: firstSubmorph hasSubmorphWithProperty: hasSubmorphs indexOfMorphAbove: lastSubmorph morphsAt: morphsAt:behind:unlocked: morphsAt:unlocked: morphsAt:unlocked:do: morphsInFrontOf:overlapping:do: morphsInFrontOverlapping: morphsInFrontOverlapping:do: rootMorphsAt: rootMorphsAtGlobal: shuffleSubmorphs submorphAfter submorphBefore submorphCount submorphNamed: submorphNamed:ifNone: submorphOfClass: submorphThat:ifNone: submorphWithProperty: submorphs submorphsBehind:do: submorphsDo: submorphsInFrontOf:do: submorphsReverseDo: submorphsSatisfying:) ('submorphs-add/remove' abandon actWhen actWhen: addAllMorphs: addAllMorphs:after: addMorph: addMorph:after: addMorph:asElementNumber: addMorph:behind: addMorph:fullFrame: addMorph:inFrontOf: addMorphBack: addMorphCentered: addMorphFront: addMorphFront:fromWorldPosition: addMorphFrontFromWorldPosition: addMorphNearBack: comeToFront copyWithoutSubmorph: delete deleteSubmorphsWithProperty: dismissViaHalo goBehind privateDelete removeAllMorphs removeAllMorphsIn: replaceSubmorph:by: submorphIndexOf:) ('drawing' areasRemainingToFill: boundingBoxOfSubmorphs boundsWithinCorners changeClipSubmorphs clipLayoutCells clipLayoutCells: clipSubmorphs clipSubmorphs: clippingBounds doesOwnRotation drawDropHighlightOn: drawDropShadowOn: drawErrorOn: drawMouseDownHighlightOn: drawOn: drawOnCanvas: drawPostscriptOn: drawRolloverBorderOn: drawSubmorphsOn: expandFullBoundsForDropShadow: expandFullBoundsForRolloverBorder: flash fullDrawOn: fullDrawPostscriptOn: hasClipSubmorphsString hide highlightForMouseDown highlightForMouseDown: highlightedForMouseDown imageForm imageForm:forRectangle: imageFormDepth: imageFormForRectangle: imageFormWithout:andStopThere: refreshWorld shadowForm show visible visible:) ('geometry' align:with: bottom bottom: bottomLeft bottomLeft: bottomRight bottomRight: bounds bounds: bounds:from: bounds:in: boundsIn: boundsInWorld center center: extent extent: fullBoundsInWorld globalPointToLocal: gridPoint: griddedPoint: height height: innerBounds left left: localPointToGlobal: minimumExtent minimumExtent: nextOwnerPage outerBounds point:from: point:in: pointFromWorld: pointInWorld: position position: positionInWorld positionSubmorphs previousOwnerPage right right: screenLocation screenRectangle setConstrainedPosition:hangOut: shiftSubmorphsBy: shiftSubmorphsOtherThan:by: top top: topLeft topLeft: topRight topRight: transformedBy: width width: worldBounds worldBoundsForHalo) ('rotate scale and flex' addFlexShell addFlexShellIfNecessary keepsTransform newTransformationMorph rotationDegrees) ('geometry testing' containsPoint: fullContainsPoint: obtrudesBeyondContainer) ('geometry eToy' addTransparentSpacerOfSize: beTransparent cartesianBoundsTopLeft cartesianXY: color:sees: colorUnder degreesOfFlex forwardDirection: getIndexInOwner goHome heading heading: move:toPosition: referencePosition referencePosition: referencePositionInWorld referencePositionInWorld: rotationCenter rotationCenter: setDirectionFrom: setIndexInOwner: touchesColor: transparentSpacerOfSize: wrap x x: x:y: y y:) ('thumbnail' demandsThumbnailing morphRepresented permitsThumbnailing readoutForField: representativeNoTallerThan:norWiderThan:thumbnailHeight: updateThumbnailUrl updateThumbnailUrlInBook:) ('dropping/grabbing' aboutToBeGrabbedBy: asDraggableMorph disableDragNDrop dragEnabled dragEnabled: dragNDropEnabled dragSelectionColor dropEnabled dropEnabled: dropHighlightColor dropSuccessColor enableDrag: enableDragNDrop enableDragNDrop: enableDrop: formerOwner formerOwner: formerPosition formerPosition: grabTransform highlightForDrop highlightForDrop: highlightedForDrop justDroppedInto:event: justGrabbedFrom: nameForUndoWording rejectDropMorphEvent: repelsMorph:event: resetHighlightForDrop separateDragAndDrop slideBackToFormerSituation: slideToTrash: startDrag:with: toggleDragNDrop transportedMorph undoGrabCommand vanishAfterSlidingTo:event: wantsDroppedMorph:event: wantsToBeDroppedInto: wantsToBeOpenedInWorld willingToBeDiscarded) ('event handling' click click: cursorPoint doubleClick: doubleClickTimeout: dropFiles: firstClickTimedOut: handlesKeyboard: handlesMouseDown: handlesMouseOver: handlesMouseOverDragging: handlesMouseStillDown: hasFocus keyDown: keyStroke: keyUp: keyboardFocusChange: mouseDown: mouseEnter: mouseEnterDragging: mouseLeave: mouseLeaveDragging: mouseMove: mouseStillDown: mouseStillDownThreshold mouseUp: on:send:to: on:send:to:withValue: removeLink: restoreSuspendedEventHandler startDrag: suspendEventHandler transformFrom: transformFromOutermostWorld transformFromWorld wantsDropFiles: wantsEveryMouseMove wantsKeyboardFocusFor: wouldAcceptKeyboardFocus wouldAcceptKeyboardFocusUponTab) ('pen' choosePenColor: choosePenSize getPenColor getPenDown getPenSize liftPen lowerPen penColor: penUpWhile: trailMorph) ('naming' choosePartName defaultNameStemForInstances downshiftedNameOfObjectRepresented externalName innocuousName knownName name: nameForFindWindowFeature nameInModel nameOfObjectRepresented renameTo: setNamePropertyTo: setNameTo: specialNameInModel tryToRenameTo: updateAllScriptingElements) ('stepping and presenter' arrangeToStartStepping arrangeToStartSteppingIn: isStepping isSteppingSelector: start startStepping startStepping:at:arguments:stepTime: startSteppingIn: startSteppingSelector: step stepAt: stepTime stop stopStepping stopSteppingSelector: stopSteppingSelfAndSubmorphs wantsSteps) ('menus' absorbStateFromRenderer: adMiscExtrasTo: addAddHandMenuItemsForHalo:hand: addCopyItemsTo: addCustomHaloMenuItems:hand: addCustomMenuItems:hand: addExportMenuItems:hand: addFillStyleMenuItems:hand: addHaloActionsTo: addPaintingItemsTo:hand: addPlayerItemsTo: addStackItemsTo: addStandardHaloMenuItemsTo:hand: addTitleForHaloMenu: addToggleItemsToHaloMenu: adhereToEdge adhereToEdge: adjustedCenter adjustedCenter: allMenuWordings changeColor changeDirectionHandles changeDragAndDrop chooseNewGraphic chooseNewGraphicCoexisting: chooseNewGraphicFromHalo collapse dismissButton doMenuItem: exportAsBMP exportAsGIF exportAsJPEG hasDirectionHandlesString hasDragAndDropEnabledString helpButton inspectInMorphic inspectInMorphic: lockUnlockMorph lockedString makeNascentScript maybeAddCollapseItemTo: menuItemAfter: menuItemBefore: presentHelp printPSToFile printPSToFileNamed: putOnBackground putOnForeground resetForwardDirection resistsRemovalString setRotationCenter setRotationCenterFrom: setToAdhereToEdge: snapToEdgeIfAppropriate stickinessString transferStateToRenderer: uncollapseSketch) ('halos and balloon help' addHalo addHalo: addHalo:from: addHandlesTo:box: addMagicHaloFor: addOptionalHandlesTo:box: addSimpleHandlesTo:box: addWorldHandlesTo:box: balloonColor balloonColor: balloonFont balloonFont: balloonHelpAligner balloonHelpDelayTime balloonHelpTextForHandle: boundsForBalloon comeToFrontAndAddHalo defaultBalloonColor defaultBalloonFont defersHaloOnClickTo: deleteBalloon editBalloonHelpContent: editBalloonHelpText halo haloClass haloDelayTime hasHalo hasHalo: isLikelyRecipientForMouseOverHalos mouseDownOnHelpHandle: noHelpString okayToAddDismissHandle okayToAddGrabHandle okayToBrownDragEasily okayToExtractEasily okayToResizeEasily okayToRotateEasily removeHalo setBalloonText: setBalloonText:maxLineLength: setCenteredBalloonText: showBalloon: showBalloon:hand: transferHalo:from: wantsBalloon wantsDirectionHandles wantsDirectionHandles: wantsHalo wantsHaloFor: wantsHaloFromClick wantsHaloHandleWithSelector:inHalo: wantsScriptorHaloHandle) ('change reporting' addedOrRemovedSubmorph: changed colorChangedForSubmorph: invalidRect: invalidRect:from: ownerChanged userSelectedColor:) ('player' assureExternalName assuredCardPlayer assuredPlayer currentDataValue newPlayerInstance okayToDuplicate shouldRememberCostumes showPlayerMenu variableDocks) ('player commands' beep beep: jumpTo: makeFenceSound set:) ('player viewer' openViewerForArgument updateLiteralLabel) ('scripting' asEmptyPermanentScriptor bringTileScriptingElementsUpToDate bringUpToDate categoriesForViewer instantiatedUserScriptsDo: isTileLike isTileScriptingElement jettisonScripts makeAllTilesColored makeAllTilesGreen restoreTypeColor scriptEditorFor: scriptPerformer selectorsForViewer tearOffTile triggerScript: useUniformTileColor viewAfreshIn:showingScript:at:) ('e-toy support' adaptToWorld: adoptVocabulary: allMorphsAndBookPagesInto: appearsToBeSameCostumeAs: asNumber: asWearableCostume asWearableCostumeOfExtent: automaticViewing changeAllBorderColorsFrom:to: configureForKids containingWindow copyCostumeStateFrom: creationStamp currentPlayerDo: cursor cursor: defaultFloatPrecisionFor: defaultValueOrNil defaultVariableName definePath deletePath embedInWindow embeddedInMorphicWindowLabeled: enclosingEditor enforceTileColorPolicy fenceEnabled followPath getNumericValue gridFormOrigin:grid:background:line: isAViewer isCandidateForAutomaticViewing isTileEditor listViewLineForFieldList: makeGraphPaper makeGraphPaperGrid:background:line: mustBeBackmost noteNegotiatedName:for: objectViewed referencePlayfield rotationStyle rotationStyle: setAsActionInButtonProperties: setNaturalLanguageTo: setNumericValue: setStandardTexture slotSpecifications succeededInRevealing: textureParameters topEditor unlockOneSubpart updateCachedThumbnail wantsRecolorHandle wrappedInWindow: wrappedInWindowWithTitle:) ('button' doButtonAction fire firedMouseUpCode) ('parts bin' inPartsBin initializeToStandAlone isPartsBin isPartsDonor isPartsDonor: markAsPartsDonor partRepresented residesInPartsBin) ('printing' asEPS asPostscript asPostscriptPrintJob clipPostscript colorString: constructorString defaultLabelForInspector fullPrintOn: initString morphReport morphReportFor: morphReportFor:on:indent: pagesHandledAutomatically printConstructorOn:indent: printConstructorOn:indent:nodeDict: printOn: printSpecs printSpecs: printStructureOn:indent: structureString textToPaste) ('property extension' assureExtension extension otherProperties resetExtension) ('caching' fullLoadCachedState fullReleaseCachedState loadCachedState releaseCachedState) ('debug and other' addDebuggingItemsTo:hand: addMouseActionIndicatorsWidth:color: addMouseUpAction addMouseUpActionWith: addViewingItemsTo: allStringsAfter: altSpecialCursor0 altSpecialCursor1 altSpecialCursor2 altSpecialCursor3 altSpecialCursor3: buildDebugMenu: defineTempCommand deleteAnyMouseActionIndicators handMeTilesToFire inspectArgumentsPlayerInMorphic: inspectOwnerChain installModelIn: mouseUpCodeOrNil ownerChain programmedMouseDown:for: programmedMouseEnter:for: programmedMouseLeave:for: programmedMouseUp:for: programmedMouseUp:for:with: removeMouseUpAction reportableSize resumeAfterDrawError resumeAfterStepError tempCommand viewMorphDirectly) ('private' moveWithPenDownBy: moveWithPenDownByRAA: myEvents myEvents: privateAddMorph:atIndex: privateBounds: privateColor: privateDeleteWithAbsolutelyNoSideEffects privateFullBounds: privateFullMoveBy: privateMoveBy: privateOwner: privateRemoveMorph: privateRemoveMorphWithAbsolutelyNoSideEffects: privateSubmorphs privateSubmorphs:) ('fileIn/out' attachToResource objectForDataStream: prepareToBeSaved reserveUrl: saveAsResource saveDocPane saveOnFile saveOnURL saveOnURL: saveOnURLbasic storeDataOn: updateAllFromResources updateFromResource) ('object fileIn' convertAugust1998:using: convertNovember2000DropShadow:using: convertToCurrentVersion:refStream:) ('visual properties' canHaveFillStyles cornerStyle defaultColor fillStyle fillStyle: fillWithRamp:oriented: useBitmapFill useDefaultFill useGradientFill useSolidFill) ('texture support' asTexture installAsWonderlandTextureOn: isValidWonderlandTexture isValidWonderlandTexture: mapPrimitiveVertex: wonderlandTexture wonderlandTexture:) ('card in a stack' abstractAModel beAStackBackground containsCard: couldHoldSeparateDataForEachInstance currentDataInstance explainDesignations goToNextCardInStack goToPreviousCardInStack holdsSeparateDataForEachInstance insertAsStackBackground insertCard installAsCurrent: isStackBackground makeHoldSeparateDataForEachInstance newCard reassessBackgroundShape relaxGripOnVariableNames reshapeBackground setAsDefaultValueForNewCard showBackgroundObjects showDesignationsOfObjects showForegroundObjects stack stackDo: stopHoldingSeparateDataForEachInstance tabHitWithEvent: wrapWithAStack) ('WiW support' addMorphInFrontOfLayer: addMorphInLayer: eToyRejectDropMorph:event: morphicLayerNumber morphicLayerNumberWithin: randomBoundsFor: shouldGetStepsFrom:) ('rounding' cornerStyle: roundedCorners roundedCornersString toggleCornerRounding wantsRoundedCorners) ('undo' commandHistory undoMove:redo:owner:bounds:predecessor:) ('events-alarms' addAlarm:after: addAlarm:at: addAlarm:with:after: addAlarm:with:at: addAlarm:with:with:after: addAlarm:with:with:at: addAlarm:withArguments:after: addAlarm:withArguments:at: alarmScheduler removeAlarm: removeAlarm:at:) ('events-processing' containsPoint:event: defaultEventDispatcher handleDropFiles: handleDropMorph: handleEvent: handleFocusEvent: handleKeyDown: handleKeyUp: handleKeystroke: handleListenEvent: handleMouseDown: handleMouseEnter: handleMouseLeave: handleMouseMove: handleMouseOver: handleMouseStillDown: handleMouseUp: handleUnknownEvent: handlerForMouseDown: mouseDownPriority processEvent: processEvent:using: rejectDropEvent: rejectsEvent: transformedFrom:) ('meta-actions' addEmbeddingMenuItemsTo:hand: applyStatusToAllSiblings: beThisWorldsModel blueButtonDown: blueButtonUp: bringAllSiblingsToMe: buildHandleMenu: buildMetaMenu: changeColorTarget:selector:originalColor:hand: copyToPasteBuffer: dismissMorph: duplicateMorph: embedInto: grabMorph: handlerForBlueButtonDown: handlerForMetaMenu: inspectAt:event: invokeMetaMenu: invokeMetaMenuAt:event: makeMultipleSiblings: makeNewPlayerInstance: makeSiblings: makeSiblingsLookLikeMe: maybeDuplicateMorph maybeDuplicateMorph: openAButtonPropertySheet openAPropertySheet openATextPropertySheet potentialEmbeddingTargets resizeFromMenu resizeMorph: saveAsPrototype showActions showHiders subclassMorph) ('testing' canDrawAtHigherResolution canDrawBorder: completeModificationHash isFlexed modificationHash shouldDropOnMouseUp) ('drop shadows' addDropShadow addDropShadowMenuItems:hand: changeShadowColor hasDropShadow hasDropShadow: hasDropShadowString hasRolloverBorder hasRolloverBorder: removeDropShadow setShadowOffset: shadowColor shadowColor: shadowOffset shadowOffset: shadowPoint: toggleDropShadow) ('layout' acceptDroppingMorph:event: adjustLayoutBounds doLayoutIn: fullBounds layoutBounds layoutBounds: layoutChanged layoutInBounds: layoutProportionallyIn: minExtent minHeight minHeight: minWidth minWidth: privateFullBounds submorphBounds) ('layout-menu' addCellLayoutMenuItems:hand: addLayoutMenuItems:hand: addTableLayoutMenuItems:hand: changeCellInset: changeClipLayoutCells changeDisableTableLayout changeLayoutInset: changeListDirection: changeMaxCellSize: changeMinCellSize: changeNoLayout changeProportionalLayout changeReverseCells changeRubberBandCells changeTableLayout hasClipLayoutCellsString hasDisableTableLayoutString hasNoLayoutString hasProportionalLayoutString hasReverseCellsString hasRubberBandCellsString hasTableLayoutString layoutMenuPropertyString:from:) ('layout-properties' assureLayoutProperties assureTableProperties cellInset cellInset: cellPositioning cellPositioning: cellPositioningString: cellSpacing cellSpacing: cellSpacingString: disableTableLayout disableTableLayout: hResizing hResizing: hResizingString: layoutFrame layoutFrame: layoutInset layoutInset: layoutPolicy layoutPolicy: layoutProperties layoutProperties: listCentering listCentering: listCenteringString: listDirection listDirection: listDirectionString: listSpacing listSpacing: listSpacingString: maxCellSize maxCellSize: minCellSize minCellSize: reverseTableCells reverseTableCells: rubberBandCells rubberBandCells: spaceFillWeight spaceFillWeight: vResizeToFit: vResizing vResizing: vResizingString: wrapCentering wrapCentering: wrapCenteringString: wrapDirection wrapDirection: wrapDirectionString:) ('piano rolls' addMorphsTo:pianoRoll:eventTime:betweenTime:and: encounteredAtTime:inScorePlayer:atIndex:inEventTrack:secsPerTick: justDroppedIntoPianoRoll:event: pauseFrom: resetFrom: resumeFrom: triggerActionFromPianoRoll) ('genie-menu' addGenieMenuItems:hand: changeGestureDictionary hasNotExportedGestureDictionary hasReferencedGestureDictionary inspectGestureDictionary makeOwnCopyOfGestureDictionary makeOwnSubGestureDictionary) ('genie-dispatching' blueButtonClickHand:shift: gesture: gestureCode: gestureCommand: gestureKeystrokes: gestureMouseEvent: gestureStrokes: handleGesture: isGestureUndoable: isSpecialCharacterUndoable: modifyGesture:by: undoGesture:) ('genie-processing' allowsGestureEscape allowsGesturePreprocessing allowsGestureStart: defaultGestureDictionaryOrName disableGestures gestureDictionary gestureDictionaryOrName gestureDictionaryOrName: gestureHandler gestureStart: handlesGestureStart: onGestureSend:to:) ('button properties' buttonProperties buttonProperties: ensuredButtonProperties hasButtonProperties) ('other events' menuButtonMouseEnter: menuButtonMouseLeave:) ('miscellaneous' setExtentFromHalo:) ('other' removeAllButFirstSubmorph) ('messenger' affiliatedSelector) ('menu' addBorderStyleMenuItems:hand:) ('text-anchor' addTextAnchorMenuItems:hand: changeDocumentAnchor changeInlineAnchor changeParagraphAnchor hasDocumentAnchorString hasInlineAnchorString hasParagraphAnchorString relativeTextAnchorPosition relativeTextAnchorPosition: textAnchorType textAnchorType:) ('faure' getMorphBeneathMeCalled: gotoPage:) ! "Postscript: Sets some preferences to work out alright" !