'From Cuis 1.0 of 26 March 2009 [latest update: #158] on 1 April 2009 at 9:55:40 pm'!

!MinimalStringMorph commentStamp: 'jmv 4/1/2009 21:43' prior: 0!
A greatly reduced StringMorph. May be of some use.!


!OneLineEditorMorph commentStamp: 'jmv 4/1/2009 21:45' prior: 0!
A plain text editor for Morphic. Handles only one line. Similar to StringMorphEditor. Does not handle fonts/styles, alignment, Smalltalk utilities and any other advanced stuff in OldTextMorph. Just a simple text editor.!


!AIFFFileReader methodsFor: 'other' stamp: 'jmv 4/1/2009 21:36'!
edit
"
	| ed |
	ed := WaveEditor new.
	ed data: channelData first.
	ed loopEnd: markers last last.
	ed loopLength: markers last last - markers first last + 1.
	ed openInWorld
	"! !


!AbstractSound methodsFor: 'playing' stamp: 'jmv 4/1/2009 21:36'!
viewSamples
	"Open a WaveEditor on my samples."

"	WaveEditor openOn: self samples"! !


!AbstractSound class methodsFor: 'sound library-file in/out' stamp: 'jmv 4/1/2009 21:39'!
updateScorePlayers
	"Force all ScorePlayers to update their instrument list from the sound library. This may done after loading, unloading, or replacing a sound to make all ScorePlayers feel the change."

	| soundsBeingEdited |
	ScorePlayer allSubInstancesDo: [:p | p pause].
	SoundPlayer shutDown.
"	soundsBeingEdited := EnvelopeEditorMorph allSubInstances 
				collect: [:ed | ed soundBeingEdited].
	ScorePlayerMorph 
		allSubInstancesDo: [:p | p updateInstrumentsFromLibraryExcept: soundsBeingEdited]"! !


!DeepCopier methodsFor: 'like fullCopy' stamp: 'jmv 4/1/2009 21:40'!
checkBasicClasses
	"Check that no indexes of instance vars have changed in certain classes.  If you get an error in this method, an implementation of veryDeepCopyWith: needs to be updated.  The idea is to catch a change while it is still in the system of the programmer who made it.  
	DeepCopier new checkVariables	"

	| str objCls morphCls |
	str := '|veryDeepCopyWith: or veryDeepInner: is out of date.'.
	(objCls := self objInMemory: #Object) ifNotNil: 
			[objCls instSize = 0 
				ifFalse: 
					[self error: 'Many implementers of veryDeepCopyWith: are out of date']].
	(morphCls := self objInMemory: #Morph) ifNotNil: 
			[morphCls superclass == Object ifFalse: [self error: 'Morph' , str].
			(morphCls instVarNames copyFrom: 1 to: 6) 
				= #('bounds' 'owner' 'submorphs' 'fullBounds' 'color' 'extension') 
					ifFalse: [self error: 'Morph' , str]]	"added ones are OK"! !


!FontSet class methodsFor: 'installing' stamp: 'jmv 2/12/2008 20:04'!
installAsDefault  "FontSetNewYork installAsDefault"
	(SelectionMenu confirm: 'Do you want to install
''' , self fontName , ''' as default font?')
		ifFalse: [^ self].
	self installAsTextStyle.
	"TextConstants at: #OldDefaultTextStyle put: TextStyle default."
	TextConstants at: #DefaultTextStyle put: (TextStyle named: self fontName).
	ListParagraph initialize.
	PopUpMenu initialize.
	"SelectionMenu notify: 'The old text style has been saved
as ''OldDefaultTextStyle''.'"! !


!LightWidget methodsFor: 'change reporting' stamp: 'jmv 4/1/2009 21:42'!
ownerChanged
	"The receiver's owner, some kind of a pasteup, has changed its layout."
	"Warning: called from PasteUpMorph (the world)"! !

!LightWidget methodsFor: 'geometry' stamp: 'jmv 4/1/2009 21:42'!
fullBoundsInWorld

	self revisar.
	"^self bounds: self fullBounds in: self world"
	^self fullBounds! !


!LoopedSampledSound methodsFor: 'other' stamp: 'jmv 4/1/2009 21:42'!
edit
	"Open a WaveEditor on this sound."

"
	| loopLen ed |
	loopLen := scaledLoopLength asFloat / LoopIndexScaleFactor.
	ed := (WaveEditor new)
				data: leftSamples;
				samplingRate: originalSamplingRate;
				loopEnd: loopEnd;
				loopLength: loopLen;
				loopCycles: (loopLen / (originalSamplingRate asFloat / perceivedPitch)) 
							rounded.
	ed openInWorld"! !


!MIDIFileReader class methodsFor: 'as yet unclassified' stamp: 'jmv 4/1/2009 21:42'!
playFileNamed: fileName 
"
	ScorePlayerMorph openOn: (self scoreFromFileNamed: fileName)
		title: (FileDirectory localNameFor: fileName)"! !

!MIDIFileReader class methodsFor: 'as yet unclassified' stamp: 'jmv 4/1/2009 21:43'!
playStream: binaryStream 
"
	ScorePlayerMorph openOn: (self scoreFromStream: binaryStream)
		title: 'a MIDI stream'"! !

!MIDIFileReader class methodsFor: 'as yet unclassified' stamp: 'jmv 4/1/2009 21:43'!
playURLNamed: urlString 
"
	| titleString |
	titleString := urlString copyFrom: (urlString findLast: [:c | c = $/]) + 1
				to: urlString size.
	ScorePlayerMorph openOn: (self scoreFromURL: urlString)
		title: titleString"! !


!Morph methodsFor: 'dropping/grabbing' stamp: 'jmv 4/1/2009 21:45'!
slideBackToFormerSituation: evt 
	| slideForm formerOwner formerPosition aWorld startPoint endPoint trans |
	formerOwner := self formerOwner.
	formerPosition := self formerPosition.
	aWorld := evt hand world.
	trans := formerOwner transformFromWorld.
	slideForm := "trans isPureTranslation " true
				ifTrue: [self imageForm offset: 0 @ 0]
"
				ifFalse: 
					[((TransformationMorph new asFlexOf: self) transform: trans) imageForm 
						offset: 0 @ 0]".
	startPoint := evt hand fullBounds origin.
	endPoint := trans localPointToGlobal: formerPosition.
	owner removeMorph: self.
	aWorld displayWorld.
	slideForm 
		slideFrom: startPoint
		to: endPoint
		nSteps: 12
		delay: 15.
	formerOwner addMorph: self.
	self position: formerPosition.
	self justDroppedInto: formerOwner event: evt! !

!Morph methodsFor: 'halos and balloon help' stamp: 'jmv 4/1/2009 21:44'!
haloClass
	"Answer the name of the desired kind of HaloMorph to launch on behalf of the receiver"

	^#HaloMorph! !

!Morph methodsFor: 'menus' stamp: 'jmv 4/1/2009 21:44'!
collapse
self halt"
	CollapsedMorph new beReplacementFor: self"! !


!MinimalStringMorph class methodsFor: 'instance creation' stamp: 'jmv 4/1/2009 21:43'!
contents: aString
	" 'StringMorph contents: str' is faster than 'StringMorph new contents: str' 
	(StringEditorMorph contents: 'Some string') openInWorld
	"
	^ self contents: aString font: nil! !


!OneLineEditorMorph class methodsFor: 'instance creation' stamp: 'jmv 4/1/2009 21:45'!
contents: aString
	" 'StringMorph contents: str' is faster than 'StringMorph new contents: str' 
	(StringEditorMorph contents: 'Some string') openInWorld
	"
	^ self contents: aString font: nil! !


!PluggableListMorph methodsFor: 'drag and drop' stamp: 'jmv 4/1/2009 21:46'!
startDrag: evt 
"
	| ddm draggedItem draggedItemMorph passenger |
	evt hand hasSubmorphs ifTrue: [^self].
	
	[(self dragEnabled and: [model okToChange]) ifFalse: [^self].
	(draggedItem := self selection) ifNil: [^self].
	draggedItemMorph := StringMorph contents: draggedItem asStringOrText.
	passenger := self model dragPassengerFor: draggedItemMorph inMorph: self.
	passenger ifNil: [^self].
	ddm := TransferMorph withPassenger: passenger from: self.
	ddm dragTransferType: (self model dragTransferTypeForMorph: self).
	Preferences dragNDropWithAnimation 
		ifTrue: [self model dragAnimationFor: draggedItemMorph transferMorph: ddm].
	evt hand grabMorph: ddm] 
			ensure: 
				[Cursor normal show.
				evt hand releaseMouseFocus: self]"! !


!Preferences class methodsFor: 'fonts' stamp: 'jmv 4/1/2009 21:46'!
setBalloonHelpFontTo: aFont 
	Smalltalk at: #BalloonMorph
		ifPresent: [:thatClass | thatClass setBalloonFontTo: aFont]! !


!ProcessBrowser class methodsFor: 'CPU utilization' stamp: 'jmv 4/1/2009 21:47'!
dumpPigStackOn: aStream andClose: aBoolean
	| promise process depth stack suspendedContext |
	promise := Processor tallyCPUUsageFor: 1 every: 10.
	
	[ | tally |
	tally := promise value.
		"WorldState addDeferredUIMessage: [self dumpTallyOnTranscript: tally]" 
		process _ tally sortedCounts first value.
		(100.0 * (tally occurrencesOf: process) / tally size) rounded printOn: aStream.
		aStream
			nextPutAll: ' % ';
			nextPutAll: (process browserPrintStringWith: (ProcessBrowser nameAndRulesFor: process) first);
			cr.
		depth _ 20.
		stack _ process == Processor activeProcess
			ifTrue: [thisContext stackOfSize: depth]
			ifFalse: [suspendedContext _ process suspendedContext.
				suspendedContext
					ifNil: [self changeStackListTo: nil]
					ifNotNil: [suspendedContext stackOfSize: depth]].
		stack do: [ :c | 
			c printOn: aStream.
			aStream cr].
		aBoolean ifTrue: [aStream close].
	] fork! !


!SimpleEditor methodsFor: 'typing support' stamp: 'jmv 4/1/2009 21:47'!
readKeyboard
	"Key struck on the keyboard. Find out which one and, if special, carry 
	out the associated special action. Otherwise, add the character to the 
	stream of characters.  Undoer & Redoer: see closeTypeIn."

	| typeAhead char |
	typeAhead _ WriteStream on: (String new: 128).
	"Seems that can be converted into an ifTrue: if sensor is an KeyboardBuffer... All this should be cleande. This old compatibility with a Sensor that is never there..."
	[ sensor keyboardPressed ] whileTrue: [
		self deselect.
		[ sensor keyboardPressed ] whileTrue: [
			char _ sensor keyboardPeek.
			(self dispatchOnCharacter: char with: typeAhead) ifTrue: [
				self doneTyping.
				^self].
			self openTypeIn ].
		self zapSelectionWith: typeAhead contents.
		typeAhead reset.
		self unselect ]! !


!SimpleHierarchicalListMorph methodsFor: 'event handling' stamp: 'jmv 4/1/2009 21:48'!
startDrag: evt 
"
	| ddm itemMorph passenger |
	self dragEnabled 
		ifTrue: 
			[itemMorph := scroller submorphs 
						detect: [:any | any highlightedForMouseDown]
						ifNone: []].
	(itemMorph isNil or: [evt hand hasSubmorphs]) ifTrue: [^self].
	itemMorph highlightForMouseDown: false.
	itemMorph ~= self selectedMorph ifTrue: [self setSelectedMorph: itemMorph].
	passenger := self model dragPassengerFor: itemMorph inMorph: self.
	passenger ifNotNil: 
			[ddm := TransferMorph withPassenger: passenger from: self.
			ddm dragTransferType: (self model dragTransferTypeForMorph: self).
			Preferences dragNDropWithAnimation 
				ifTrue: [self model dragAnimationFor: itemMorph transferMorph: ddm].
			evt hand grabMorph: ddm].
	evt hand releaseMouseFocus: self
	"! !


!SystemDictionary methodsFor: 'miscellaneous' stamp: 'jmv 4/1/2009 21:40'!
hasMorphic
	"Answer whether the Morphic classes are available in the system (they may have been stripped, such as by a call to Smalltalk removeMorphic"

	^(Smalltalk at: #Morph ifAbsent: [nil]) isKindOf: Class! !

!SystemDictionary methodsFor: 'shrinking' stamp: 'jmv 4/1/2009 21:51'!
computeImageSegmentation
	"Smalltalk computeImageSegmentation"

	"Here's how the segmentation works:
For each partition, we collect the classes involved, and also all messages no longer used in the absence of this partition.  We start by computing a 'Miscellaneous' segment of all the unused classes in the system as is."

	| partitions unusedCandM newClasses expandedCandM |
	partitions := Dictionary new.
	unusedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						{ 
							}.
						{ 
							}}.
	partitions at: 'Miscellaneous' put: unusedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'VMConstruction-*') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'VMConstruction'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'ST80-*') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'ST80'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'Morphic-Games') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Games'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'Morphic-Remote') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Nebraska'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					((SystemOrganization categoriesMatching: 'Network-*') 
						copyWithoutAll: #('Network-Kernel' 'Network-Url' 'Network-Protocols' 'Network-ObjectSocket')) 
							do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Network'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'Balloon3D-*') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Balloon3D'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'FFI-*') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'FFI'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'Genie-*') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Genie'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'Speech-*') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Speech'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					#('Morphic-Components') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Components'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					#('Sound-Scores' 'Sound-Interface') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	newClasses := newClasses 
				, #(#WaveletCodec #Sonogram #FWT #AIFFFileReader).
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Sound'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					((SystemOrganization categoriesMatching: 'Tools-*') 
						copyWithout: 'Tools-Menus') 
							do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	newClasses := newClasses 
				copyWithoutAll: #(#Debugger #Inspector #ContextVariablesInspector #SyntaxError #ChangeSet #ChangeRecord #ClassChangeRecord #ChangeList #VersionsBrowser).
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Tools'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'Balloon-MMFlash*') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	newClasses := newClasses , #(#ADPCMCodec).
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'Flash'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'Balloon-TrueType*') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'TrueType'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	newClasses := Array streamContents: 
					[:s | 
					(SystemOrganization categoriesMatching: 'Graphics-Files') 
						do: [:cat | (SystemOrganization superclassOrder: cat) do: [:c | s nextPut: c name]]].
	expandedCandM := Smalltalk unusedClassesAndMethodsWithout: { 
						unusedCandM first asArray , newClasses.
						unusedCandM second}.
	partitions at: 'GraphicFiles'
		put: { 
				(expandedCandM first copyWithoutAll: unusedCandM first)
					addAll: newClasses;
					yourself.
				expandedCandM second copyWithoutAll: unusedCandM second}.
	unusedCandM := expandedCandM.
	#(#AliceConstants 'Balloon3D' #B3DEngineConstants 'Balloon3D' #WonderlandConstants 'Balloon3D' #FFIConstants 'FFI' #KlattResonatorIndices 'Speech') 
		pairsDo: [:poolName :part | (partitions at: part) first add: poolName].
	partitions keysDo: 
			[:k | 
			k = 'Miscellaneous' 
				ifFalse: 
					[(partitions at: 'Miscellaneous') first 
						removeAllFoundIn: (partitions at: k) first]].
	^partitions! !


!SystemDictionary class methodsFor: 'initialization' stamp: 'jmv 4/1/2009 21:54'!
initialize
	"SystemDictionary initialize"

	| oldList |
	oldList := StartUpList.
	StartUpList := OrderedCollection new.
	"These get processed from the top down..."
	#(
		#Delay 
		#DisplayScreen 
		#Cursor 
		#InputSensor 
		#ProcessorScheduler 	"Starts low space watcher and bkground."
		#FileDirectory 			"Enables file stack dump and opens sources."
		#ShortIntegerArray 
		#ShortRunArray 
		#CrLfFileStream) 
			do: [ :clsName | 	
				Smalltalk at: clsName ifPresent: [:cls | Smalltalk addToStartUpList: cls]].

	oldList ifNotNil: [
		oldList do: [ :className | 
			Smalltalk 
				at: className
				ifPresent: [:theClass | Smalltalk addToStartUpList: theClass]]].

	#(
		#ImageSegment 
		#PasteUpMorph) 
			do:  [ :clsName | 
				Smalltalk at: clsName ifPresent: [:cls | Smalltalk addToStartUpList: cls]].
			
	oldList := ShutDownList.
	ShutDownList := OrderedCollection new.
	"These get processed from the bottom up..."
	#(
		#Delay 
		#DisplayScreen 
		#InputSensor 
		#Form 
		#PasteUpMorph 
		#StrikeFont 
		#Color 
		#FileDirectory 
		#SoundPlayer 
		#ImageSegment) 
			do: [ :clsName | 
				Smalltalk at: clsName ifPresent: [:cls | Smalltalk addToShutDownList: cls]].

	oldList ifNotNil: [
		oldList reverseDo: [ :className | 
			Smalltalk 
				at: className
				ifPresent: [:theClass | Smalltalk addToShutDownList: theClass]]]! !


!TextEditor methodsFor: 'private' stamp: 'jmv 4/1/2009 21:54'!
againOrSame: useOldKeys
	"Subroutine of search: and again.  If useOldKeys, use same FindText and ChangeText as before.
	 1/26/96 sw: real worked moved to againOrSame:many:"

	self againOrSame: useOldKeys many: sensor leftShiftDown.

	(morph respondsTo: #editView) 
		ifTrue: [morph editView selectionInterval: self selectionInterval]! !


!TextEditor class methodsFor: 'keyboard shortcut tables' stamp: 'jmv 4/1/2009 21:55'!
initializeTextEditorMenus
	"Initialize the yellow button pop-up menu and corresponding messages."
	"TextEditor initializeTextEditorMenus"

	TextEditorYellowButtonMenu _ SelectionMenu
		fromArray: {
		{'find...(f)' translated.		#find}.			     
		{'find again (g)' translated.		#findAgain}.		     
		{'set search string (h)' translated.	#setSearchString}.
		#-.	     
		{'do again (j)' translated.		#again}.		     
		{'undo (z)' translated.			#undo}.			     
		#-.	     
		{'copy (c)' translated.			#copySelection}.	     
		{'cut (x)' translated.			#cut}.			     
		{'paste (v)' translated.		#paste}.		     
		{'paste...' translated.			#pasteRecent}.		     
		#-.	     
		{'do it (d)' translated.		#doIt}.			     
		{'print it (p)' translated.		#printIt}.		     
		{'inspect it (i)' translated.		#inspectIt}.		     
		{'explore it (I)' translated.		#exploreIt}.		     
		{'debug it' translated.			#debugIt}.		     
		#-.	     
		{'accept (s)' translated.		#accept}.		     
		{'cancel (l)' translated.		#cancel}.		     
		#-.	     
		{'show bytecodes' translated.		#showBytecodes}.	     
		#-.	     
		{'more...' translated.			#shiftedTextPaneMenuRequest}.
	}! !

SystemDictionary initialize!
