Tools

BasicInspector
A BasicInspector is xxxxxxxxx.
Instance Variables
inspect:
Initialize the receiver so that it is inspecting anObject. There is no
current selection.
Browser
I represent a query path into the class descriptions, the software of the system.
acceptDroppingMorph:event:inMorph:
Here we are fetching informations from the dropped transferMorph
and
performing the correct action for this drop.
acceptMethod:dstMessageCategory:srcMessageCategory:dstClass:dstClassOrMeta:srcClassOrMeta:internal:copySemantic:
acceptMethod:messageCategory:class:atListMorph:internal:copy:
addAListPane:to:at:plus:
addAllMethodsToCurrentChangeSet
Add all the methods in the selected class or metaclass to the current change set. You ought to know what you're doing before you invoke this!
addCategory
Present a choice of categories or prompt for a new category name and add it before the current selection, or at the end if no current selection
addClassAndSwitchesTo:at:plus:
addExtraShiftedItemsTo:
The shifted selector-list menu is being built; some menu items are appropriate only for certain kinds of browsers, and this gives a hook for them to be added as approrpiate. If any is added here, a line should be added first -- browse reimplementors of this message for examples.
addLowerPanesTo:at:with:
addModelItemsToWindowMenu:
Add model-related items to the window menu
addMorphicSwitchesTo:at:
addSpecialMenu:
addSystemCategory
Prompt for a new category name and add it before the
current selection, or at the end if no current selection
addTrait
alphabetizeMessageCategories
alphabetizeSystemCategories
annotation
Provide a line of content for an annotation pane, representing information about the method associated with the selected class and selector in the receiver.
browseReference:
browseSelectionInPlace
In place code - incomplete
browserWindowActivated
Called when a window whose model is the receiver is reactivated, giving the receiver an opportunity to take steps if it wishes. The default is to do nothing. 8/5/96 sw
buildClassBrowser
Create and schedule a new class category browser for the current class
selection, if one exists.
buildMessageBrowser
Create and schedule a message browser on the currently selected
message. Do nothing if no message is selected. The initial text view
contains nothing.
buildMessageBrowserEditString:
Create and schedule a message browser for the receiver in which the
argument, aString, contains characters to be edited in the text view.
buildMessageCategoryBrowser
Create and schedule a message category browser for the currently
selected message category.
buildMessageCategoryBrowserEditString:
Create and schedule a message category browser for the currently
selected message category. The initial text view contains the characters
in aString.
buildMorphicClassList
buildMorphicCommentPane
Construct the pane that shows the class comment.
Respect the Preference for standardCodeFont.
buildMorphicMessageCatList
buildMorphicMessageList
Build a morphic message list, with #messageList as its list-getter
buildMorphicSwitches
buildMorphicSystemCatList
buildSystemCategoryBrowser
Create and schedule a new system category browser.
buildSystemCategoryBrowserEditString:
Create and schedule a new system category browser with initial textual
contents set to aString.
buildWith:
Create the ui for the browser
canShowMultipleMessageCategories
Answer whether the receiver is capable of showing multiple message categories
categorizeAllUncategorizedMethods
Categorize methods by looking in parent classes for a method category.
categoryOfCurrentMethod
Determine the method category associated with the receiver at the current moment, or nil if none
changeCategoryForClass:srcSystemCategory:atListMorph:internal:copy:
only move semantic
changeMessageCategories:
The characters in aString represent an edited version of the the message
categories for the selected class. Update this information in the system
and inform any dependents that the categories have been changed. This
message is invoked because the user had issued the categories command
and edited the message categories. Then the user issued the accept
command.
changeMessageCategoryForMethod:dstMessageCategory:srcMessageCategory:insideClassOrMeta:internal:copySemantic:
Recategorize the method named by methodSel.
If the dstMessageCategorySel is the allCategory, then recategorize
it from its parents.
changeSystemCategories:
Update the class categories by parsing the argument aString.
classComment:notifying:
The user has just entered aText.
It may be all red (a side-effect of replacing the default comment), so remove the color if it is.
classCommentIndicated
Answer true iff we're viewing the class comment.
classCommentText
return the text to display for the comment of the currently selected class
classDefinitionText
return the text to display for the definition of the currently selected class
classList
Answer an array of the class names of the selected category. Answer an
empty array if no selection exists.
classListIndex
Answer the index of the current class selection.
classListIndex:
Set anInteger to be the index of the current class selection.
classListMenu:
For backward compatibility with old browers stored in image segments
classListMenu:shifted:
Set up the menu to apply to the receiver's class list, honoring the #shifted boolean
classListSingleton
classMessagesIndicated
Answer whether the messages to be presented should come from the metaclass.
classNotFound
classOrMetaClassOrganizer
Answer the class organizer for the metaclass or class, depending on
which (instance or class) is indicated.
codePaneMenu:shifted:
Note that unless we override perform:orSendTo:,
PluggableTextController will respond to all menu items in a
text pane
compileMessage:notifying:
Compile the code that was accepted by the user, placing the compiled method into an appropriate message category. Return true if the compilation succeeded, else false.
contents
Depending on the current selection, different information is retrieved.
Answer a string description of that information. This information is the
method of the currently selected class and message.
contents:notifying:
The retrieved information has changed and its source must now be
updated. The information can be a variety of things, depending on
the list selections (such as templates for class or message definition,
methods) or the user menu commands (such as definition, comment,
hierarchy). Answer the result of updating the source.
contentsSelection
Return the interval of text in the code pane to select when I set the pane's contents
copyClass
couldBrowseAnyClass
Answer whether the receiver is equipped to browse any class. This is in
support of the system-brower feature that allows the browser to be
redirected at the selected class name. This implementation is clearly
ugly, but the feature it enables is handsome enough. 3/1/96 sw
createInstVarAccessors
Create getters and setters for all inst vars defined at the level of the current class selection, except do NOT clobber or override any selectors already understood by the instances of the selected class
defaultBrowserTitle
defineClass:notifying:
The receiver's textual content is a request to define a new class. The
source code is defString. If any errors occur in compilation, notify
aController.
defineMessage:notifying:
Compile the expressions in aString. Notify aController if a syntax error
occurs. Install the compiled method in the selected class classified under
the currently selected message category name. Answer true if
compilation succeeds, false otherwise.
defineMessageFrom:notifying:
Compile the expressions in aString. Notify aController if a syntax error occurs. Install the compiled method in the selected class classified under the currently selected message category name. Answer the selector obtained if compilation succeeds, nil otherwise.
defineTrait:notifying:
doItReceiver
This class's classPool has been jimmied to be the classPool of the class
being browsed. A doIt in the code pane will let the user see the value of
the class variables.
dragPassengerFor:inMorph:
dragTransferTypeForMorph:
dstCategoryDstListMorph:
dstClassDstListMorph:
dstMessageCategoryDstListMorph:
editClass
Retrieve the description of the class definition.
editComment
Retrieve the description of the class comment.
editMessageCategories
Indicate to the receiver and its dependents that the message categories of
the selected class have been changed.
editSelection
editSelection:
Set the editSelection as requested.
editSystemCategories
Retrieve the description of the class categories of the system organizer.
fileOutClass
Print a description of the selected class onto a file whose name is the
category name followed by .st.
fileOutMessageCategories
Print a description of the selected message category of the selected class
onto an external file.
fileOutSystemCategory
Print a description of each class in the selected category onto a file
whose name is the category name followed by .st.
findClass
Search for a class by name.
findMethod
Pop up a list of the current class's methods, and select the one chosen by the user
findMethodWithWildcard
Pop up a list of the current class's methods, and select the one chosen by the user
fullOnClass:
fullOnClass:selector:
hierarchy
Display the inheritance hierarchy of the receiver's selected class.
highlightClassList:with:
highlightMessageCategoryList:with:
highlightSystemCategoryList:with:
indexIsOne
When used as a singleton list, index is always one
indexIsOne:
When used as a singleton list, can't change it
indicateClassMessages
Indicate that the message selection should come from the metaclass
messages.
indicateInstanceMessages
Indicate that the message selection should come from the class (instance)
messages.
initialize
Initialize the state of the receiver with its default contents.
inspectInstances
Inspect all instances of the selected class. 1/26/96 sw
inspectSubInstances
Inspect all instances of the selected class and all its subclasses 1/26/96 sw
instanceMessagesIndicated
Answer whether the messages to be presented should come from the
class.
labelString
makeNewSubclass
message:compileInClass:fromClass:dstMessageCategory:srcMessageCategory:internal:copySemantic:
messageCatListSingleton
messageCategoryList
Answer the selected category of messages.
messageCategoryListIndex
Answer the index of the selected message category.
messageCategoryListIndex:
Set the selected message category to be the one indexed by anInteger.
messageCategoryListSelection
Return the selected category name or nil.
messageCategoryMenu:
messageList
Answer an Array of the message selectors of the currently selected message category, provided that the messageCategoryListIndex is in proper range. Otherwise, answer an empty Array If messageCategoryListIndex is found to be larger than the number of categories (it happens!), it is reset to zero.
messageListIndex
Answer the index of the selected message selector into the currently
selected message category.
messageListIndex:
Set the selected message selector to be the one indexed by anInteger.
messageListMenu:shifted:
Answer the message-list menu
messageListSingleton
metaClassIndicated
Answer the boolean flag that indicates which of the method dictionaries,
class or metaclass.
metaClassIndicated:
Indicate whether browsing instance or class messages.
methodCategoryChanged
methodReference
new
newClass
newOnCategory:
newOnClass:
newOnClass:label:
newOnClass:selector:
newTrait
noCommentNagString
noteSelectionIndex:for:
backstop
open
openAsMorphClassEditing:
Create a pluggable version a Browser on just a single class.
openAsMorphEditing:
Create a pluggable version of all the morphs for a Browser in Morphic
openAsMorphMessageEditing:
Create a pluggable version a Browser that shows just one message
openAsMorphMsgCatEditing:
Create a pluggable version a Browser on just a message category.
openAsMorphSysCatEditing:
Create a pluggable version of all the views for a Browser, including views and controllers.
openBrowser
openBrowserView:label:
openEditString:
Create a pluggable version of all the views for a Browser, including views and controllers.
openMessageBrowserForClass:selector:editString:
openMessageCatEditString:
Create a pluggable version of the views for a Browser that just shows one message category.
openMessageEditString:
Create a pluggable version of the views for a Browser that just shows one message.
openOnClassWithEditString:
Create a pluggable version of all the views for a Browser, including views and controllers.
openSystemCatEditString:
Create a pluggable version of all the views for a Browser, including views and controllers. The top list view is of the currently selected system class category--a single item list.
optionalButtonRow
Answer a row of control buttons
overwriteDialogHierarchyChange:higher:sourceClassName:destinationClassName:methodSelector:
plusButtonHit
Cycle among definition, comment, and hierachy
potentialClassNames
Answer the names of all the classes that could be viewed in this browser. This hook is provided so that HierarchyBrowsers can indicate their restricted subset. For generic Browsers, the entire list of classes known to Smalltalk is provided, though of course that really only is accurate in the case of full system browsers.
prototypicalToolWindow
rawMessageCategoryList
recategorizeMethodSelector:
Categorize method named sel by looking in parent classes for a
method category.
Answer true if recategorized.
recent
Let the user select from a list of recently visited classes. 11/96 stp.
12/96 di: use class name, not classes themselves.
: dont fall into debugger in empty case
reformulateList
If the receiver has a way of reformulating its message list, here is a chance for it to do so
registerInAppRegistry
registerInFlapsRegistry
removeClass
If the user confirms the wish to delete the class, do so
removeEmptyCategories
removeMessage
If a message is selected, create a Confirmer so the user can verify that
the currently selected message should be removed from the system. If
so,
remove it. If the Preference 'confirmMethodRemoves' is set to false, the
confirmer is bypassed.
removeMessageCategory
If a message category is selected, create a Confirmer so the user can
verify that the currently selected message category should be removed
from the system. If so, remove it.
removeMessageFromBrowser
Our list speaks the truth and can't have arbitrary things removed
removeNonLocalSelector:
removeSystemCategory
If a class category is selected, create a Confirmer so the user can
verify that the currently selected class category and all of its classes
should be removed from the system. If so, remove it.
renameCategory
Prompt for a new category name and add it before the
current selection, or at the end if no current selection
renameClass
renameSystemCategory
Prompt for a new category name and add it before the
current selection, or at the end if no current selection
request:initialAnswer:
selectCategoryForClass:
selectClass:
selectMessageCategoryNamed:
Given aSymbol, select the category with that name. Do nothing if
aSymbol doesn't exist.
selectOriginalCategoryForCurrentMethod
private - Select the message category for the current method.

Note: This should only be called when somebody tries to save
a method that they are modifying while ALL is selected.

Returns: true on success, false on failure.
selectReference:
selectedClass
Answer the class that is currently selected. Answer nil if no selection
exists.
selectedClassName
Answer the name of the current class. Answer nil if no selection exists.
selectedClassOrMetaClass
Answer the selected class/trait or metaclass/classTrait.
selectedClassOrMetaClassName
Answer the selected class name or metaclass name.
selectedEnvironment
Answer the name of the selected system category or nil.
selectedMessage
Answer a copy of the source code for the selected message.
selectedMessageCategoryName
Answer the name of the selected message category, if any. Answer nil
otherwise.
selectedMessageName
Answer the message selector of the currently selected message, if any.
Answer nil otherwise.
selectedMessageName:
Make the given selector be the selected message name
selectedSystemCategoryName
Answer the name of the selected system category or nil.
setClass:selector:
Set the state of a new, uninitialized Browser.
setClassOrganizer
Install whatever organization is appropriate
setOriginalCategoryIndexForCurrentMethod
private - Set the message category index for the currently selected method.

Note: This should only be called when somebody tries to save
a method that they are modifying while ALL is selected.
setSelector:
Make the receiver point at the given selector, in the currently chosen class
shiftedClassListMenu:
Set up the menu to apply to the receiver's class list when the shift key is down
shiftedMessageListMenu:
Fill aMenu with the items appropriate when the shift key is held down
shoutAboutToStyle:
This is a notification that aPluggableShoutMorphOrView is about to re-style its text.
Set the classOrMetaClass in aPluggableShoutMorphOrView, so that identifiers
will be resolved correctly.
Answer true to allow styling to proceed, or false to veto the styling
showBytecodes
Show or hide the bytecodes of the selected method -- an older protocol now mostly not relevant.
showHomeCategory
Show the home category of the selected method. This is only really useful if one is in a tool that supports the showing of categories. Thus, it's good in browsers and hierarchy browsers but not in message-list browsers
suggestCategoryToSpawnedBrowser:
aBrowser is a message-category browser being spawned from the receiver. Tell it what it needs to know to get its category info properly set up.
systemCatSingletonKey:from:
systemCatSingletonMenu:
systemCategoryList
Answer the class categories modelled by the receiver.
systemCategoryListIndex
Answer the index of the selected class category.
systemCategoryListIndex:
Set the selected system category index to be anInteger. Update all other
selections to be deselected.
systemCategoryMenu:
systemCategorySingleton
systemOrganizer:
Initialize the receiver as a perspective on the system organizer,
aSystemOrganizer. Typically there is only one--the system variable
SystemOrganization.
toggleBreakOnEntry
Install or uninstall a halt-on-entry breakpoint
toggleClassListIndex:
If anInteger is the current class index, deselect it. Else make it the
current class selection.
toggleMessageListIndex:
If the currently selected message index is anInteger, deselect the message
selector. Otherwise select the message selector whose index is anInteger.
toggleSystemCategoryListIndex:
If anInteger is the current system category index, deselect it. Else make
it the current system category selection.
unload
updateSystemCategories
The class categories were changed in another browser. The receiver must
reorganize its lists based on these changes.
veryDeepInner:
Copy all of my instance variables. Some need to be not copied at all, but shared. See DeepCopier class comment.
wantsDroppedMorph:event:inMorph:
We are only interested in TransferMorphs as wrappers for
informations. If their content is really interesting for us, will
determined later in >>acceptDroppingMorph:event:.
windowColorSpecification
BrowserCommentTextMorph
I am a PluggableTextMorph that knows enough to make myself invisible when necessary.
hideOrShowPane
hidePane
Fixed to not keep doing the splitters. If we are hiden don't hide again!
lowerPane
Answer the AlignmentMorph that I live beneath
noteNewOwner:
Dirty fix for when the 'lower pane' hasn't been reset to the bottom at the
time the receiver is added
showPane
Fixed to not keep doing the splitters. If we are showing don't show again!
update:
Receive a change notice from an object of whom the receiver is a
dependent. The default behavior is to do nothing; a subclass might want
to change itself in some way.
window
Answer the receiver's window.
CPUWatcher
CPUWatcher implements a simple runaway process monitoring tool
that will suspend a process that is taking up too much of Squeak's
time and allow user interaction. By default it watches for a Process that
is taking more than 80% of the time; this threshold can be changed.
CPUWatcher can also be used to show cpu percentages for each process
from within the ProcessBrowser.
CPUWatcher startMonitoring. "process period 20 seconds, sample rate 100 msec"
CPUWatcher current monitorProcessPeriod: 10 sampleRate: 20.
CPUWatcher current threshold: 0.5. "change from 80% to 50%"
CPUWatcher stopMonitoring.
catchThePig:
nickname, allow-stop, allow-debug
current
currentWatcherProcess
debugProcess:
debugProcess:fromMenu:
dumpTallyOnTranscript
findThePig
tally has been updated. Look at it to see if there is a bad process.
This runs at a very high priority, so make it fast
initialize
Subclasses should redefine this method to perform initializations on instance creation
isMonitoring
monitorPreferenceChanged
monitorProcessPeriod:sampleRate:
openMorphicWindowForSuspendedProcess:
openWindowForSuspendedProcess:
resumeProcess:fromMenu:
shutDown
startMonitoring
startMonitoringPeriod:rate:threshold:
startUp
stopMonitoring
tally
terminateProcess:fromMenu:
threshold
What fraction of the time can a process be the active process before we stop it?
threshold:
What fraction of the time can a process be the active process before we stop it?
watcherProcess
ChangeList
A ChangeList represents a list of changed methods that reside on a file in fileOut format. The classes and methods in my list are not necessarily in this image! Used as the model for both Version Lists and Changed Methods (in Screen Menu, Changes...). Note that the two kinds of window have different controller classes!!
It holds three lists:
changeList - a list of ChangeRecords
list - a list of one-line printable headers
listSelections - a list of Booleans (true = selected, false = not selected) multiple OK.
listIndex
Items that are removed (removeDoits, remove an item) are removed from all three lists.
Most recently clicked item is the one showing in the bottom pane.
addItem:text:
annotation
Answer the string to be shown in an annotation pane. Make plain that the annotation is associated with the current in-image version of the code, not of the selected disk-based version, and if the corresponding method is missing from the in-image version, mention that fact.
browseAllVersionsOfSelections
Opens a Versions browser on all the currently selected methods, showing each alongside all of their historical versions.
browseChangesFile:
browseCompressedChangesFile:
browseCurrentVersionsOfSelections
Opens a message-list browser on the current in-memory versions of all methods that are currently seleted
browseFile:
browseRecent:
browseRecent:on:
browseRecentLog
browseRecentLogOn:
browseRecentLogOn:startingFrom:
browseRecentLogOnPath:
browseStream:
browseVersions
Create and schedule a Versions Browser, showing all versions of the
currently selected message. Answer the browser or nil.
buildMorphicCodePaneWith:
Construct the pane that shows the code.
Respect the Preference for standardCodeFont.
buildWith:
buildWith:multiSelect:
Open a morphic view for the messageSet, whose label is labelString.
The listView may be either single or multiple selection type
changeList
changeListButtonSpecs
changeListKey:from:
Respond to a Command key in the list pane.
changeListMenu:
Fill aMenu up so that it comprises the primary changelist-browser menu
changeTo:
changes:file:
compareToCurrentVersion
If the current selection corresponds to a method in the system, then spawn a window showing the diffs as text
contents
Answer the contents string, obeying diffing directives if needed
contents:
Set textOrString to be the contents of the receiver.
contentsDiffedFromCurrent
Answer the contents diffed forward from current (in-memory) method version
contentsSymbolQuints
Answer a list of quintuplets representing information on the alternative views available in the code pane
currentChange
return the current change being viewed, or nil if none
deselectAll
Deselect all items in the list pane, and clear the code pane
destroyCurrentCodeOfSelections
Actually remove from the system any in-memory methods with class and selector identical to items current selected. This may seem rather arcane but believe me it has its great uses, when trying to split out code. To use effectively, first file out a change set that you wish to split off. Then open a ChangeList browser on that fileout. Now look through the methods, and select any of them which you want to remove completely from the system, then issue this command. For those methods where you have made changes to pre-existing versions, of course, you won't want to remove them from the system, so use this mechanism with care!
diffedVersionContents
Answer diffed version contents, maybe pretty maybe not
file
fileInSelections
fileOutSelections
fileReaderServicesForFile:suffix:
getRecentLocatorWithPrompt:
initialize
Initialize a blank ChangeList. Set the contentsSymbol to reflect whether diffs will initally be shown or not
invertSelections
Invert the selectedness of each item in the changelist
list
listHasSingleEntry
does the list of changes have only a single item?
listIndex
listSelectionAt:
listSelectionAt:put:
listSelections
open:name:multiSelect:
openAsMorph:name:multiSelect:
openAsMorphName:multiSelect:
Open a morphic view for the messageSet, whose label is labelString.
The listView may be either single or multiple selection type
optionalButtonRow
Answer a row of buttons to occur in a tool pane
recent:on:
recentLogOn:startingFrom:
removeDoIts
Remove doits from the receiver, other than initializes. 1/26/96 sw
removeExistingMethodVersions
Remove all up to date version of entries from the receiver
removeNonSelections
Remove the unselected items from the receiver.
removeOlderMethodVersions
Remove older versions of entries from the receiver.
removeSelections
Remove the selected items from the receiver. 9/18/96 sw
restoreDeletedMethod
If lostMethodPointer is not nil, then this is a version browser for a method that has been removed. In this case we want to establish a sourceCode link to prior versions. We do this by installing a dummy method with the correct source code pointer prior to installing this version.
scanCategory
Scan anything that involves more than one chunk; method name is historical only
scanCategory:class:meta:stamp:
scanFile:from:to:
selectAll
selectAllConflicts
Selects all method definitions in the receiver which are also in any existing change set in the system. This makes no statement about whether the content of the methods differ, only whether there is a change represented.
selectConflicts
Selects all method definitions for which there is ALSO an entry in changes
selectConflicts:
Selects all method definitions for which there is ALSO an entry in the specified changeSet or changList
selectConflictsWith
Selects all method definitions for which there is ALSO an entry in the specified changeSet or changList chosen by the user. 4/11/96 tk
selectMethodsForThisClass
selectNewMethods
Selects all method definitions for which there is no counterpart method in the current image
selectSuchThat
query the user for a selection criterio. By Lex Spoon. NB: the UI for invoking this from a changelist browser is currently commented out; to reenfranchise it, you'll need to mild editing to ChangeList method #changeListMenu:
selectSuchThat:
select all changes for which block returns true
selectUnchangedMethods
Selects all method definitions for which there is already a method in the current image, whose source is exactly the same. 9/18/96 sw
selectedClass
All owners of TextViews are asked this during a doIt
selectedClassOrMetaClass
selectedMessageName
serviceBrowseChangeFile
serviceBrowseCompressedChangeFile
serviceBrowseDotChangesFile
services
setLostMethodPointer:
showsVersions
toggleListIndex:
undiffedContents
unload
wantsPrettyDiffOption
Answer whether pretty-diffs are meaningful for this tool
windowColorSpecification
ChangeListForProjects
A ChangeList that looks at the changes in a revokable project. This class has no users at present.
contents
Answer the contents string, obeying diffing directives if needed
currentDiffedFromContents
Answer the current in-memory method diffed from the current contents
ChangeSetBrowser
A tool allowing you to browse the methods of a single change set.
addModelItemsToWindowMenu:
Add model-related items to the given window menu
offerUnshiftedChangeSetMenu
The user chose 'more' from the shifted window menu; go back to the regular window menu
openAsMorphIn:rect:
Add a set of changeSetBrowser views to the given top view offset by the given amount
shiftedChangeSetMenu:
Set up aMenu to hold items relating to the change-set-list pane when the shift key is down
wantsAnnotationPane
This kind of browser always wants annotation panes, so answer true
wantsOptionalButtons
Sure, why not?
ChangeSetCategory
A ChangeSetCategory represents a list of change sets to be shown in a ChangeSorter. It computes whether a given change set is in the list by sending its membershipSelector to ChangeSorter (i.e. the class object) with the change set as message argument.
acceptsManualAdditions
Answer whether the user is allowed manually to manipulate the contents of the change-set-category.
changeSetList
Answer the list of change-set names in the category
defaultChangeSetToShow
Answer the name of a change-set to show
fileOutAllChangeSets
File out all the nonempty change sets in the current category, suppressing the checks for slips that might otherwise ensue. Obtain user confirmation before undertaking this possibly prodigious task.
fillAggregateChangeSet
Create a change-set named Aggregate and pour into it all the changes in all the change-sets of the currently-selected category
hasChangeForClassName:selector:otherThanIn:
Answer whether any change set in this category, other than the excluded one, has a change marked for the given class and selector
includesChangeSet:
Answer whether the receiver includes aChangeSet in its retrieval list
membershipSelector:
Set the membershipSelector
reconstituteList
Clear out the receiver's elements and rebuild them
ChangeSetCategoryWithParameters
A ChangeSetCategoryWithParameters is xxxxxxxxx.
Instance Variables
parameters: <Object>
parameters
- xxxxx
acceptsManualAdditions
Answer whether the user is allowed manually to manipulate the contents of the change-set-category.
addChangeSet:
includesChangeSet:
Answer whether the receiver includes aChangeSet in its retrieval list
parameters:
reconstituteList
Clear out the receiver's elements and rebuild them
ChangeSorter
I display a ChangeSet. Two of me are in a DualChangeSorter.
addPreamble
addPriorVersionsCountForSelector:ofClass:to:
Add an annotation detailing the prior versions count. Specially handled here for the case of a selector no longer in the system, whose prior version is pointed to by the lost-method pointer in the change held on to by the changeset
addToCategoryOpposite
Add the current change set to the category viewed on the opposite side, if it's of the sort to accept things like that
allChangeSetNames
allChangeSets
allChangeSetsWithClass:selector:
assuredChangeSetNamed:
basicNewChangeSet:
belongsInAdditions:
belongsInAll:
belongsInMyInitials:
belongsInNumbered:
belongsInProjectsInRelease:
belongsInRecentUpdates:
browseChangeSet
Open a message list browser on the new and changed methods in the current change set
browseChangeSetsWithClass:selector:
browseChangeSetsWithSelector:
browseMethodConflicts
Check to see if any other change set also holds changes to any methods in the selected change set; if so, open a browser on all such.
browseVersions
Create and schedule a changelist browser on the versions of the
selected message.
buildAggregateChangeSet
buildWith:
MorphicUIBuilder open: ChangeSorter.
buildWith:in:rect:
categorySubmenu:shifted:
Fill aMenu with less-frequently-needed category items
changeSet
changeSet:containsClass:
changeSetCategories
changeSetCategory
Answer the current changeSetCategory object that governs which change sets are shown in this ChangeSorter
changeSetCategoryNamed:
changeSetCurrentlyDisplayed
changeSetList
Answer a list of ChangeSet names to be shown in the change sorter.
changeSetListKey:from:
Respond to a Command key. I am a model with a listView that has a list of changeSets.
changeSetMenu:shifted:
Set up aMenu to hold commands for the change-set-list pane. This could be for a single or double changeSorter
changeSetNamed:
changeSetNamesInReleaseImage
changeSetNamesInThreeOh
changeSetsNamedSuchThat:
checkForAlienAuthorship
Open a message list browser on all uncommented methods in the current change set that have alien authorship
checkForAnyAlienAuthorship
Open a message list browser on all uncommented methods in the current change set that have alien authorship, even historically
checkForUnclassifiedMethods
Open a message list browser on all methods in the current change set that have not been categorized
checkForUncommentedClasses
Open a class list browser on classes in the change set that lack class comments
checkForUncommentedMethods
Open a message list browser on all uncommented methods in the current change set
checkForUnsentMessages
Open a message list browser on all unsent messages in the current change set
checkThatSidesDiffer:
If the change sets on both sides of the dual sorter are the same, put up an error message and escape via escapeBlock, else proceed happily
chooseChangeSetCategory
Present the user with a list of change-set-categories and let her choose one
chooseChangeSetCategoryInMorphic
Present the user with a list of change-set-categories and let her choose one. In this morphic variant, we include balloon help
chooseCngSet
Present the user with an alphabetical list of change set names, and let her choose one
classList
Computed. View should try to preserve selections, even though index changes
classListKey:from:
Respond to a Command key in the class-list pane.
classListMenu:shifted:
Fill aMenu with items appropriate for the class list
classMenu:
Set up aMenu for the class-list. Retained for backward compatibility with old change sorters in image segments
classMenu:shifted:
Fill aMenu with items appropriate for the class list. Retained for bkwd compatibility
clearChangeSet
Clear out the current change set, after getting a confirmation.
contents:notifying:
Compile the code in aString. Notify aController of any syntax errors.
Create an error if the category of the selected message is unknown.
Answer false if the compilation fails. Otherwise, if the compilation
created a new method, deselect the current selection. Then answer true.
copyAllToOther
Copy this entire change set into the one on the other side
copyClassToOther
Place these changes in the other changeSet also
copyMethodToOther
Place this change in the other changeSet also
countOfChangeSetsWithClass:andSelector:
currentClassName
currentClassName:
currentCngSet
currentSelector
currentSelector:
deleteChangeSetsNumberedLowerThan:
doesAnyChangeSetHaveClass:andSelector:
editPostscript
Allow the user to edit the receiver's change-set's postscript -- in a separate window
editPreamble
Allow the user to edit the receiver's change-set's preamble -- in a separate window.
existingOrNewChangeSetNamed:
fileIntoNewChangeSet
Obtain a file designation from the user, and file its contents into a
new change set whose name is a function of the filename. Show the
new set and leave the current changeSet unaltered.
fileOut
File out the current change set.
fileOutAllChangeSets
File out all nonempty change sets in the current category, probably
fileOutChangeSetsNamed:
fileOutClass
this is a hack!! makes a new change set, called the class name, adds author initials to try to make a unique change set name, files it out and removes it. kfr 16 june 2000
fillAggregateChangeSet
Create a change-set named Aggregate and pour into it all the changes in all the change-sets of the currently-selected category
findCngSet
Search for a changeSet by name. Pop up a menu of all changeSets whose name contains the string entered by the user. If only one matches, then the pop-up menu is bypassed
forget
Drop this method from the changeSet
forgetClass
Remove all mention of this class from the changeSet
gatherChangeSets
highestNumberedChangeSet
initialize
Initialize the state of the receiver with its default contents.
initializeChangeSetCategories
inspectChangeSet
Open a message list browser on the new and changed methods in the current change set
label
labelString
The label for my entire window. The large button that displays my name is gotten via mainButtonName
lookForSlips
Open a message list browser on the new and changed methods in the current change set
mailOut
Create a mail with a gzipped attachment holding out the current change
set.
mainButtonName
makeNewCategory
Create a new, static change-set category, which will be populated entirely by change sets that have been manually placed in it
makeNewCategoryShowingClassChanges
Create a new, static change-set category, which will be populated entirely by change sets that have been manually placed in it
messageList
messageListKey:from:
Respond to a Command key in the message-list pane.
messageListMenu:shifted:
Fill aMenu with items appropriate for the message list; could be for a single or double changeSorter
messageMenu:shifted:
Fill aMenu with items appropriate for the message list; could be for a single or double changeSorter
methodConflictsWithOppositeCategory
Check to see if ANY change set on the other side shares any methods with the selected change set; if so, open a browser on all such.
methodConflictsWithOtherSide
Check to see if the change set on the other side shares any methods with the selected change set; if so, open a browser on all such.
modelWakeUp
A window with me as model is being entered.
Make sure I am up-to-date with the changeSets.
morphicWindow
ChangeSorter new openAsMorph
mostRecentChangeSetWithChangeForClass:selector:
moveClassToOther
Place class changes in the other changeSet and remove them from this one
moveMethodToOther
Place this change in the other changeSet and remove it from this side
myChangeSet:
newChangeSet
newChangeSet:
newChangesFromStream:named:
newCurrent
make my change set be the current one that changes go into
newSet
Create a new changeSet and show it., making it the current one. Reject name if already in use.
offerCategorySubmenu
Offer a menu of category-related items
offerShiftedChangeSetMenu
Offer the shifted version of the change set menu
offerUnshiftedChangeSetMenu
Offer the unshifted version of the change set menu
open
ChangeSorter new open
openAsMorph
ChangeSorter new openAsMorph
openAsMorphIn:rect:
Add a set of change sorter views to the given top view offset by the given amount. To create a single change sorter, call this once with an offset of 0@0. To create a dual change sorter, call it twice with offsets of 0@0 and 0.5@0.
openChangeSetBrowser
Open a ChangeSet browser on the current change set
parent
parent:
parenthesizedCategoryName
Answer my category name in parentheses
promoteToTop:
promoteToTopChangeSet
Move the selected change-set to the top of the list
prototypicalToolWindow
recentUpdateMarker
recentUpdateMarker:
registerInFlapsRegistry
remove
Completely destroy my change set. Check if it's OK first
removeCategory
Remove the current category
removeChangeSet:
removeChangeSetsNamedSuchThat:
removeContainedInClassCategories
removeEmptyUnnamedChangeSets
removeFromCategory
Add the current change set to the category viewed on the opposite side, if it's of the sort to accept things like that
removeFromCurrentChanges
Redisplay after removal in case we are viewing the current changeSet
removeMessage
Remove the selected msg from the system. Real work done by the
parent, a ChangeSorter
removePostscript
removePreamble
removePrompting:
Completely destroy my change set. Check if it's OK first, and if doPrompt is true, get the user to confirm his intentions first.
rename
Store a new name string into the selected ChangeSet. reject duplicate name; allow user to back out
renameCategory
Obtain a new name for the category and, if acceptable, apply it
reorderChangeSets
apply a standard reordering -- let the class handle this
secondaryChangeSet
selectedClass
Answer the currently-selected class. If there is no selection, or if the selection refers to a class no longer extant, return nil
selectedClassOrMetaClass
Careful, the class may have been removed!
selectedMessageName
setContents
return the source code that shows in the bottom pane
setDefaultChangeSetCategory
Set a default ChangeSetCategory for the receiver, and answer it
setRecentUpdatesMarker
Allow the user to change the recent-updates marker
shiftedChangeSetMenu:
Set up aMenu to hold items relating to the change-set-list pane when the shift key is down
shiftedMessageMenu:
Arm the menu so that it holds items appropriate to the message-list while the shift key is down. Answer the menu.
shoutAboutToStyle:
This is a notification that aPluggableShoutMorphOrView is about to re-style its text.
Set the classOrMetaClass in aPluggableShoutMorphOrView, so that identifiers
will be resolved correctly.
Answer true to allow styling to proceed, or false to veto the styling
showCategoriesOfChangeSet
Show a list of all the categories in which the selected change-set occurs
at the moment. Install the one the user chooses, if any.
showChangeSet:
showChangeSetCategory:
Show the given change-set category
showChangeSetNamed:
submergeIntoOtherSide
Copy the contents of the receiver to the other side, then remove the receiver -- all after checking that all is well.
subtractOtherSide
Subtract the changes found on the other side from the requesting side.
toggleDiffing
Toggle whether diffs should be shown in the code pane
trimHistory
Drop non-essential history (rename, reorg, method removals) from newly-added classes.
uninstallChangeSet
Attempt to uninstall the current change set, after confirmation.
unload
update
recompute all of my panes
updateIfNecessary
Recompute all of my panes.
veryDeepFixupWith:
See if the dependents are being copied also. If so, point at the new copies. (The dependent has self as its model.)
Dependents handled in class Object, when the model is not a Model, are fixed up in Object veryDeepCopy.
veryDeepInner:
Copy all of my instance variables. Some need to be not copied at all, but shared.
wantsOptionalButtons
No optional buttons for ChangeSorter
windowColorSpecification
ChangedMessageSet
A ChangedMessageSet is a message set associated with a change-set; it bears an entry for every method added or changed in the change set, as well as for every class-comment of which the change-set bears a note.
changeSet:
contents:notifying:
Accept the string as new source for the current method, and make certain the annotation pane gets invalidated
growable
Answer whether the receiver can be changed by manual additions & deletions
openFor:
openMessageList:name:autoSelect:changeSet:
reformulateList
Reformulate the message list of the receiver
ClassCommentVersionsBrowser
A class-comment-versions-browser tool
browseCommentOf:
classCommentIndicated
Answer whether the receiver is pointed at a class comment
commentRecordsOf:
compareToCurrentVersion
If the current selection corresponds to a method in the system, then spawn a window showing the diffs as text
contentsSymbolQuints
Answer a list of quintuplets representing information on the alternative views available in the code pane
diffedVersionContents
Answer diffed version contents, maybe pretty maybe not
offerVersionsHelp
openSingleMessageBrowser
Create and schedule a message list browser populated only by the currently selected message
priorSourceOrNil
If the currently-selected method has a previous version, return its source, else return nil
reformulateList
Some uncertainty about how to deal with lost methods here
scanVersionsOf:
Scan for all past versions of the class comment of the given class
selectedClass
Answer the class currently selected in the browser. In the case of a VersionsBrowser, the class and selector are always the same, regardless of which version is selected and indeed whether or not any entry is selected in the list pane
timeStampFor:class:reverseOrdinal:
updateListsAndCodeIn:
versionsMenu:
Fill aMenu with menu items appropriate to the receiver
wantsPrettyDiffOption
Answer whether pretty-diffs are meaningful for this tool
windowColorSpecification
ClassListBrowser
A ClassListBrowser displays the code for an arbitrary list of classes.
ClassListBrowser example1. "all classes that have the string 'Pluggable' in their names"
ClassListBrowser example2. "all classes whose names start with the letter S"
ClassListBrowser example3. "all variable classes"
ClassListBrowser example4. "all classes with more than 100 methods"
ClassListBrowser example5. "all classes that lack class comments"
ClassListBrowser example6. "all classes that have class instance variables"
ClassListBrowser new initForClassesNamed: #(Browser Boolean) title: 'Browser and Boolean!'.
browseClassesSatisfying:title:
defaultTitle:
Set the browser's default title
example1
example2
example3
example4
example5
example6
initForClassesNamed:title:
Initialize the receiver for the class-name-list and title provided
labelString
Answer the label strilng to use on the browser
CodeHolder
An ancestor class for all models which can show code. Eventually, much of the code that currently resides in StringHolder which only applies to code-holding StringHolders might get moved down here.
addContentsTogglesTo:
Add updating menu toggles governing contents to aMenu.
addLowerPanesTo:at:with:
addModelItemsToWindowMenu:
Add model-related item to the window menu
addOptionalAnnotationsTo:at:plus:
Add an annotation pane to the window if preferences indicate a desire for it, and return the incoming verticalOffset plus the height of the added pane, if any
addOptionalButtonsTo:at:plus:
If the receiver wishes it, add a button pane to the window, and
answer the verticalOffset plus the height added
addPriorVersionsCountForSelector:ofClass:to:
add an annotation detailing the prior versions count
adoptMessageInCurrentChangeset
Add the receiver's method to the current change set if not already there
annotation
Provide a line of content for an annotation pane, representing information about the method associated with the selected class and selector in the receiver.
annotationForClassCommentFor:
Provide a line of content for an annotation pane, given that the receiver is pointing at the clas comment of the given class.
annotationForClassDefinitionFor:
Provide a line of content for an annotation pane, given that the receiver is pointing at the class definition of the given class.
annotationForHierarchyFor:
Provide a line of content for an annotation pane, given that the receiver is pointing at the hierarchy of the given class.
annotationForSelector:ofClass:
Provide a line of content for an annotation pane, representing
information about the given selector and class
annotationPaneMenu:shifted:
annotationRequests
annotationSeparator
Answer the separator to be used between annotations
browseImplementors
Create and schedule a message set browser on all implementors of the currently selected message selector. Do nothing if no message is selected.
browseSenders
Create and schedule a message set browser on all senders of the currently selected message selector. Of there is no message currently selected, offer a type-in
buildClassBrowserEditString:
Create and schedule a new class browser for the current selection, with initial textual contents set to aString. This is used specifically in spawning where a class is established but a method-category is not.
buildCodeProvenanceButtonWith:
buildMorphicCodePaneWith:
Construct the pane that shows the code.
Respect the Preference for standardCodeFont.
buildOptionalButtonsWith:
buttonWithSelector:
If receiver has a control button with the given action selector answer it, else answer nil. morphic only at this point
canShowMultipleMessageCategories
Answer whether the receiver is capable of showing multiple message categories
categoryFromUserWithPrompt:for:
self new categoryFromUserWithPrompt: 'testing' for: SystemDictionary
categoryOfCurrentMethod
Answer the category that owns the current method. If unable to determine a category, answer nil.
changeCategory
Present a menu of the categories of messages for the current class,
and let the user choose a new category for the current message
codePaneProvenanceButton
Answer a button that reports on, and allow the user to modify,
the code-pane-provenance setting
codePaneProvenanceIndex
Answer the selected code provenance index.
codePaneProvenanceIndex:
Set the code provenance to the item with the given index.
codePaneProvenanceList
Answer a list of the display strings for code provenance.
codePaneProvenanceString
Answer a string that reports on code-pane-provenance
color
commentContents
documentation for the selected method
contents
Answer the source code or documentation for the selected method
contentsChanged
contentsSymbol
Answer a symbol indicating what kind of content should be shown for the method; for normal showing of source code, this symbol is #source. A nil value in the contentsSymbol slot will be set to #source by this method
contentsSymbol:
Set the contentsSymbol as indicated. #source means to show source code, #comment means to show the first comment found in the source code
contentsSymbolQuints
Answer a list of quintuplets representing information on the alternative views available in the code pane
first element: the contentsSymbol used
second element: the selector to call when this item is chosen.
third element: the selector to call to obtain the wording of the menu item.
fourth element: the wording to represent this view
fifth element: balloon help
A hypen indicates a need for a seperator line in a menu of such choices
copyUpOrCopyDown
Used to copy down code from a superclass to a subclass or vice-versa in one easy step, if you know what you're doing. Prompt the user for which class to copy down or copy up to, then spawn a fresh browser for that class, with the existing code planted in it, and with the existing method category also established.
decompiledSourceIntoContents
Obtain a source string by decompiling the method's code, and place
that source string into my contents. Also return the string.
Get temps from source file if shift key is pressed.
decorateButtons
Change screen feedback for any buttons in the UI of the receiver that may wish it. Initially, it is only the Inheritance button that is decorated, but one can imagine others.
decorateForInheritance
Check to see if the currently-viewed method has a super send or an override, and if so, change screen feedback, unless the #decorateBrowserButtons says not to.
defaultAnnotationPaneHeight
Answer the receiver's preferred default height for new annotation panes.
defaultButtonPaneHeight
Answer the user's preferred default height for new button panes.
defaultDiffsSymbol
Answer the code symbol to use when generically switching to diffing
didCodeChangeElsewhere
Determine whether the code for the currently selected method and class has been changed somewhere else.
diffButton
Return a checkbox that lets the user decide whether diffs should be shown or not. Not sent any more but retained against the possibility of existing subclasses outside the base image using it.
diffFromPriorSourceFor:
If there is a prior version of source for the selected method, return a diff, else just return the source code
getSelectorAndSendQuery:to:
Obtain a selector relevant to the current context, and then send the querySelector to the queryPerformer with the selector obtained as its argument. If no message is currently selected, then obtain a method name from a user type-in
getSelectorAndSendQuery:to:with:
Obtain a selector relevant to the current context, and then send the querySelector to the queryPerformer with the selector obtained and queryArgs as its arguments. If no message is currently selected, then obtain a method name from a user type-in
inheritanceButton
If receiver has an Inheritance button, answer it, else answer nil. morphic only at this point
inheritanceButtonColor
Check to see if the currently-viewed method has a super send or an override, and if so, change screen feedback, unless the #decorateBrowserButtons says not to.
isThereAnOverride
Answer whether any subclass of my selected class implements my
selected selector
isThisAnOverride
Answer whether any superclass of my selected class implements my selected selector
letUserReclassify:in:
Put up a list of categories and solicit one from the user.
Answer true if user indeed made a change, else false
listPaneWithSelector:
If, among my window's paneMorphs, there is a list pane defined with aSelector as its retriever, answer it, else answer nil
makeSampleInstance
menuButton
Answer a button that brings up a menu. Useful when adding new features, but at present is between uses
messageListKey:from:
Respond to a Command key. I am a model with a code pane, and I also
have a listView that has a list of methods. The view knows how to get
the list and selection.
methodCategoryChanged
modelWakeUpIn:
The window has been activated. Respond to possible changes that may have taken place while it was inactive
newSearchPane
Answer a new search pane for the receiver
offerMenu
Offer a menu to the user from the bar of tool buttons
offerShiftedClassListMenu
Offer the shifted class-list menu.
offerUnshiftedClassListMenu
Offer the shifted class-list menu.
offerWhatToShowMenu
Offer a menu governing what to show
okayToAccept
Answer whether it is okay to accept the receiver's input
optionalButtonPairs
Answer a tuple (formerly pairs) defining buttons, in the format:
button label
selector to send
help message
optionalButtonRow
Answer a row of control buttons
prettyDiffButton
Return a checkbox that lets the user decide whether prettyDiffs should be shown or not
prettyPrintString
Answer whether the receiver is showing pretty-print
priorSourceOrNil
If the currently-selected method has a previous version, return its source, else return nil
receiverClass
refreshAnnotation
If the receiver has an annotation pane that does not bear unaccepted edits, refresh it
refusesToAcceptCode
Answer whether receiver, given its current contentsSymbol, could accept code happily if asked to
regularDiffButton
Return a checkbox that lets the user decide whether regular diffs should be shown or not
releaseCachedState
Can always be found again. Don't write on a file.
removeClass
Remove the selected class from the system, at interactive user request. Make certain the user really wants to do this, since it is not reversible. Answer true if removal actually happened.
requestor
returns the focused window's requestor
sampleInstanceOfSelectedClass
Return a sample instance of the class currently being pointed at
searchPane
Answer the search pane associated with the receiver in its window, or nil if none. Morphic only
selectedBytecodes
Answer text to show in a code pane when in showing-byte-codes mode
selectedMessage
Answer a copy of the source code for the selected message. This generic version is probably actually never reached, since every subclass probably reimplements and does not send to super. In time, ideally, most, or all, reimplementors would vanish and all would defer instead to a universal version right here. Everything in good time.
selectedMessageCategoryName
Answer the name of the message category of the message of the currently selected context.
sendQuery:to:
Apply a query to the primary selector associated with the current context. If no such selection exists, obtain one by user type-in. Then send querySelector to queryPerformer with the selector as its argument.
setClassAndSelectorIn:
Evaluate csBlock with my selected class and and selector as its arguments; provide nil arguments if I don't have a method currently selected
setContentsToForceRefetch
Set the receiver's contents such that on the next update the contents will be formulated afresh. This is a critical and obscure difference between Browsers on the one hand and MessageSets on the other, and has over the years been the source of much confusion and much difficulty. By centralizing the different handling here, we don't need so many idiosyncratic overrides in MessageSet any more
shiftedYellowButtonActivity
Offer the shifted selector-list menu
shoutAboutToStyle:
This is a notification that aPluggableShoutMorphOrView is about to re-style its text.
The default is to answer false to veto the styling
shoutIsModeStyleable
determine if Shout can style in the current mode
showByteCodes:
Get into or out of bytecode-showoing mode
showComment
Answer whether the receiver should show documentation rather than, say, source code
showDecompile:
Set the decompile toggle as indicated
showDiffs
Answer whether the receiver is showing diffs of source code. The preferred protocol here is #showingRegularDiffs, but this message is still sent by some preexisting buttons so is retained.
showDiffs:
Set whether I'm showing diffs as indicated; use the global preference to determine which kind of diffs to institute.
showDocumentation:
Set the showDocumentation toggle as indicated
showPrettyDiffs:
Set whether I'm showing pretty diffs as indicated
showRegularDiffs:
Set whether I'm showing regular diffs as indicated
showUnreferencedClassVars
Search for all class variables known to the selected class, and put up a
list of those that have no references anywhere in the system. The
search includes superclasses, so that you don't need to navigate your
way to the class that defines each class variable in order to determine
whether it is unreferenced
showUnreferencedInstVars
Search for all instance variables known to the selected class, and put up a list of those that have no references anywhere in the system. The search includes superclasses, so that you don't need to navigate your way to the class that defines each inst variable in order to determine whether it is unreferenced
showingAnyKindOfDiffs
Answer whether the receiver is currently set to show any kind of diffs
showingByteCodes
Answer whether the receiver is showing bytecodes
showingByteCodesString
Answer whether the receiver is showing bytecodes
showingDecompile
Answer whether the receiver should show decompile rather than, say, source code
showingDecompileString
Answer a string characerizing whether decompilation is showing
showingDiffsString
Answer a string representing whether I'm showing diffs. Not sent any more but retained so that prexisting buttons that sent this will not raise errors.
showingDocumentation
Answer whether the receiver should show documentation rather than, say, source code
showingDocumentationString
Answer a string characerizing whether documentation is showing
showingPlainSource
Answer whether the receiver is showing plain source
showingPlainSourceString
Answer a string telling whether the receiver is showing plain source
showingPrettyDiffs
Answer whether the receiver is showing pretty diffs of source code
showingPrettyDiffsString
Answer a string representing whether I'm showing pretty diffs
showingPrettyPrint
Answer whether the receiver is showing pretty-print
showingRegularDiffs
Answer whether the receiver is showing regular diffs of source code
showingRegularDiffsString
Answer a string representing whether I'm showing regular diffs
showingSource
Answer whether the receiver is currently showing source code
sourceAndDiffsQuintsOnly
Answer a list of quintuplets representing information on the alternative views available in the code pane for the case where the only plausible choices are showing source or either of the two kinds of diffs
sourceStringPrettifiedAndDiffed
Answer a copy of the source code for the selected message, transformed by diffing and pretty-printing exigencies
spawnFullProtocol
Create and schedule a new protocol browser on the currently selected class or meta.
spawnHierarchy
Create and schedule a new hierarchy browser on the currently selected
class or meta.
spawnProtocol
Create and schedule a new protocol browser on the currently selected class or meta.
spawnToClass:
Used to copy down code from a superclass to a subclass in one easy step, if you know what you're doing. Spawns a new message-category browser for the indicated class, populating it with the source code seen in the current tool.
spawnToCollidingClass:
Potentially used to copy down code from a superclass to a subclass in one easy step, in the case where the given class already has its own version of code, which would consequently be clobbered if the spawned code were accepted.
stepIn:
suggestCategoryToSpawnedBrowser:
aBrowser is a message-category browser being spawned from the receiver. Tell it what it needs to know to get its category info properly set up.
textPaneWithSelector:
If, among my window's paneMorphs, there is a text pane defined with aSelector as its retriever, answer it, else answer nil
toggleBreakOnEntry
Install or uninstall a halt-on-entry breakpoint
toggleDecompile
Toggle the setting of the showingDecompile flag, unless there are unsubmitted edits that the user declines to discard
toggleDiff
Retained for backward compatibility with existing buttons in existing images
toggleDiffing
Toggle whether diffs should be shown in the code pane. If any kind of diffs were being shown, stop showing diffs. If no kind of diffs were being shown, start showing whatever kind of diffs are called for by default.
togglePlainSource
Toggle whether plain source shown in the code pane
togglePrettyDiffing
Toggle whether pretty-diffing should be shown in the code pane
togglePrettyPrint
Toggle whether pretty-print is in effectin the code pane
toggleRegularDiffing
Toggle whether regular-diffing should be shown in the code pane
toggleShowDocumentation
Toggle the setting of the showingDocumentation flag, unless there are unsubmitted edits that the user declines to discard
toggleShowingByteCodes
Toggle whether the receiver is showing bytecodes
unshiftedYellowButtonActivity
Offer the unshifted shifted selector-list menu
updateCodePaneIfNeeded
If the code for the currently selected method has changed underneath me, then update the contents of my code pane unless it holds unaccepted edits
updateListsAndCodeIn:
useSelector:orGetSelectorAndSendQuery:to:
If incomingSelector is not nil, use it, else obtain a selector from user type-in. Using the determined selector, send the query to the performer provided.
validateMessageSource:forSelector:
Check whether there is evidence that method source is invalid
wantsDiffFeedback
Answer whether the receiver is showing diffs of source code
wantsStepsIn:
CompiledMethodInspector
A CompiledMethodInspector is xxxxxxxxx.
Instance Variables
contentsIsString
Hacked so contents empty when deselected
fieldList
Answer the base field list plus an abbreviated list of indices.
selection
The receiver has a list of variables of its inspected object.
One of these is selected. Answer the value of the selected variable.
selectionUnmodifiable
Answer if the current selected variable is unmodifiable via acceptance in the code pane. For most inspectors, no selection and a selection of self (selectionIndex = 1) are unmodifiable
ContextVariablesInspector
I represent a query path into the internal representation of a ContextPart. Typically this is a context at a point in the query path of a Debugger. As a StringHolder, the string I represent is the value of the currently selected variable of the observed temporary variable of the context.
contents
Answer the contents that the receiver is holding--presumably a string.
contentsIsString
Hacked so contents empty when deselected
doItContext
Answer the context in which a text selection can be evaluated.
doItReceiver
Answer the object that should be informed of the result of evaluating a
text selection.
fieldList
Refer to the comment in Inspector|fieldList.
inspect:
Initialize the receiver so that it is inspecting anObject. There is no
current selection.

Because no object's inspectorClass method answers this class, it is OK for this method to
override Inspector >> inspect:
replaceSelectionValue:
Refer to the comment in Inspector|replaceSelectionValue:.
selection
Refer to the comment in Inspector|selection.
Debugger
I represent the machine state at the time of an interrupted process. I also represent a query path into the state of the process. The debugger is typically viewed through a window that views the stack of suspended contexts, the code for, and execution point in, the currently selected message, and inspectors on both the receiver of the currently selected message, and the variables in the current context.
Special note on recursive errors:
Some errors affect Squeak's ability to present a debugger. This is normally an unrecoverable situation. However, if such an error occurs in an isolation layer, Squeak will attempt to exit from the isolation layer and then present a debugger. Here is the chain of events in such a recovery.
* A recursive error is detected.
* The current project is queried for an isolationHead
* Changes in the isolationHead are revoked
* The parent project of isolated project is returned to
* The debugger is opened there and execution resumes.
If the user closes that debugger, execution continues in the outer project and layer. If, after repairing some damage, the user proceeds from the debugger, then the isolationHead is re-invoked, the failed project is re-entered, and execution resumes in that world.
addOptionalButtonsTo:at:plus:
Add button panes to the window. A row of custom
debugger-specific buttons (Proceed, Restart, etc.) is always
added, and if optionalButtons is in force, then the standard
code-tool buttons are also added. Answer the verticalOffset
plus the height added.
askForCategoryIn:default:
askForSuperclassOf:toImplement:ifCancel:
browseMessages
Present a menu of all messages sent by the currently selected message.
Open a message set browser of all implementors of the message chosen.
Do nothing if no message is chosen.
browseSendersOfMessages
Present a menu of the currently selected message, as well as all
messages sent by it. Open a message set browser of all implementors
of the message chosen.
browseVersions
Create and schedule a message set browser on all versions of the
currently selected message selector.
buildFullWith:
buildMessageBrowser
Create and schedule a message browser on the current method.
buildMorphicNotifierLabelled:message:
buildNotifierLabelled:message:
buildNotifierWith:label:message:
buildWith:
buttonRowForPreDebugWindow:
Answer a row of button for a pre-debug notifier.
checkContextSelection
close:
The argument is a controller on a view of the receiver.
That view is closed.
codePaneMenu:shifted:
Note that unless we override perform:orSendTo:,
PluggableTextController will respond to all menu items in a
text pane
contents
Depending on the current selection, different information is retrieved.
Answer a string description of that information. This information is the
method in the currently selected context.
contents:notifying:
The retrieved information has changed and its source must now be updated.
In this case, the retrieved information is the method of the selected context.
contentsSelection
Return the interval of text in the code pane to select when I set the pane's contents
context:
context:isolationHead:
contextStackIndex
Answer the index of the selected context.
contextStackIndex:oldContextWas:
Change the context stack index to anInteger, perhaps in response to user selection.
contextStackKey:from:
Respond to a keystroke in the context list
contextStackList
Answer the array of contexts.
contextStackMenu:shifted:
Set up the menu appropriately for the context-stack-list, either shifted
or unshifted as per the parameter provided
contextVariablesInspector
Answer the instance of Inspector that is providing a view of the
variables of the selected context.
createMethod
Should only be called when this Debugger was created in response to a
MessageNotUnderstood exception. Create a stub for the method that was
missing and proceed into it.
customButtonRow
Answer a button pane affording the user one-touch access to certain functions; the pane is given the formal name 'customButtonPane' by which it can be retrieved by code wishing to send messages to widgets residing on the pane
customButtonSpecs
Answer an array of elements of the form wording, selector, help-message, that characterize the custom button row of a debugger.
debug
Open a full DebuggerView.
debugAt:
debugProceedMenu:
doItContext
Answer the context in which a text selection can be evaluated.
doItReceiver
Answer the object that should be informed of the result of evaluating a
text selection.
doStep
Send the selected message in the accessed method, and regain control
after the invoked method returns.
down
move down the context stack to the previous (enclosing) context
errorWasInUIProcess:
expandStack
A Notifier is being turned into a full debugger. Show a substantial amount of stack in the context pane.
externalInterrupt:
fullStack
Change from displaying the minimal stack to a full one.
fullyExpandStack
Expand the stack to include all of it, rather than the first four or five
contexts.
getSelectedText
getTextMorph
guessTypeForName:
implement:inClass:
informExistingDebugger:label:
initialExtent
Make the full debugger longer!
initialize
Initialize the state of the receiver with its default contents.
interruptedContext
Answer the suspended context of the interrupted process.
interruptedProcess
Answer the interrupted process.
isNotifier
Return true if this debugger has not been expanded into a full sized window
isolationRecoveryAdvice
Return a notifier message string to be presented in case of recovery from recursive error by revoking the changes in an isolation layer. This surely ranks as one of Squeak's longer help messages.
labelString
labelString:
lowSpaceChoices
Return a notifier message string to be presented when space is running low.
mailOutBugReport
Compose a useful bug report showing the state of the process as well as vital image statistics as suggested by Chris Norton -
'Squeak could pre-fill the bug form with lots of vital, but
oft-repeated, information like what is the image version, last update
number, VM version, platform, available RAM, author...'
and address it to the list with the appropriate subject prefix.
messageListIndex
Answer the index of the currently selected context.
messageListMenu:shifted:
The context-stack menu takes the place of the message-list menu in the debugger, so pass it on
newStack:
notifierButtonHeight
openContext:label:contents:
openFullMorphicLabel:
Open a full morphic debugger with the given label
openFullNoSuspendLabel:
Create and schedule a full debugger with the given label. Do not
terminate the current active process.
openInterrupt:onProcess:
openNotifierContents:label:
Create and schedule a notifier view with the given label and message.
A notifier view shows just the message or the first several lines of the
stack, with a menu that allows the user to open a full debugger if so
desired.
openOn:context:label:contents:fullView:
optionalAnnotationHeight
optionalButtonRow
Answer a button pane affording the user one-touch access to certain functions; the pane is given the formal name 'buttonPane' by which it can be retrieved by code wishing to send messages to widgets residing on the pane
pc
pcRange
Answer the indices in the source code for the method corresponding to
the selected context's program counter value.
peelToFirst
Peel the stack back to the second occurance of the currently selected message. Very useful for an infinite recursion. Gets back to the second call so you can see one complete recursion cycle, and how it was called at the beginning. Also frees a lot of space!
perform:orSendTo:
Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked.
populateImplementInMenu:
preDebugButtonQuads
preDebugMessageString
preDebugNotifierContentsFrom:
proceed
Proceed execution of the receiver's model, starting after the expression at
which an interruption occurred.
proceed:
Proceed from the interrupted state of the currently selected context. The
argument is the topView of the receiver. That view is closed.
proceedValue
Answer the value to return to the selected context when the interrupted
process proceeds.
proceedValue:
Set the value to be returned to the selected context when the interrupted
process proceeds.
process:controller:context:
process:controller:context:isolationHead:
receiver
Answer the receiver of the selected context, if any. Answer nil
otherwise.
receiverInspector
Answer the instance of Inspector that is providing a view of the
variables of the selected context's receiver.
receiverInspectorObject:context:
set context before object so it can refer to context when building field list
release
Remove references to objects that may refer to the receiver. This message
should be overridden by subclasses with any cycles, in which case the
subclass should also include the expression super release.
resetContext:
Used when a new context becomes top-of-stack, for instance when the
method of the selected context is re-compiled, or the simulator steps or
returns to a new method. There is room for much optimization here, first
to save recomputing the whole stack list (and text), and secondly to avoid
recomposing all that text (by editing the paragraph instead of recreating it).
restart
Proceed from the initial state of the currently selected context. The
argument is a controller on a view of the receiver. That view is closed.
resumeProcess:
returnValue
Force a return of a given value to the previous context!
runToSelection
runToSelection:
selectPC
Toggle the flag telling whether to automatically select the expression
currently being executed by the selected context.
selectedClass
Answer the class in which the currently selected context's method was
found.
selectedContext
selectedMessage
Answer the source code of the currently selected context.
selectedMessageName
Answer the message selector of the currently selected context.
If the method is unbound we can still usefully answer its old selector.
send
Send the selected message in the accessed method, and take control in
the method invoked to allow further step or send.
shoutAboutToStyle:
This is a notification that aPluggableShoutMorphOrView is about to re-style its text.
Set the classOrMetaClass in aPluggableShoutMorphOrView, so that identifiers
will be resolved correctly.
Answer true to allow styling to proceed, or false to veto the styling
step
Update the inspectors.
stepIntoBlock
Send messages until you return to the present method context.
Used to step into a block in the method.
storeLog
tally
toggleBreakOnEntry
Install or uninstall a halt-on-entry breakpoint
toggleContextStackIndex:
If anInteger is the same as the index of the selected context, deselect it.
Otherwise, the context whose index is anInteger becomes the selected
context.
up
move up the context stack to the next (enclosed) context
updateInspectors
Update the inspectors on the receiver's variables.
wantsOptionalButtons
The debugger benefits so majorly from the optional buttons that we put them up regardless of the global setting. Some traditionalists will want to change this method manually!
wantsSteps
Overridden by morphic classes whose instances want to be stepped,
or by model classes who want their morphic views to be stepped.
where
Select the expression whose evaluation was interrupted.
windowColorSpecification
windowIsClosing
My window is being closed; clean up. Restart the low space watcher.
DebuggerMethodMap
I am a place-holder for information needed by the Debugger to inspect method activations. I insulate the debugger from details of code generation such as exact bytecode offsets and temporary variable locations. I have two concreate subclasses, one for methods compiled using BlueBook blocks and one for methods compiled using Closures. These classes deal with temporary variable access. My function is to abstract the source map away from actual bytecode pcs to abstract bytecode pcs.
To reduce compilation time I try and defer as much computation to access time as possible as instances of me will be created after each compilation.
I maintain a WeakIdentityDictionary of method to DebuggerMethodMap to cache maps. I refer to my method through a WeakArray to keep the map cache functional. If the reference from a DebuggerMethodMap to its method were strong then the method would never be dropped from the cache because the reference from its map would keep it alive.
abstractSourceMap
Answer with a Dictionary of abstractPC <Integer> to sourceRange <Interval>.
cacheDebugMap:forMethod:
forMethod:
forMethod:methodNode:
<CompiledMethod>
initialize
Subclasses should redefine this method to perform initializations on instance creation
markRecentlyUsed
method
namedTempAt:in:
Answer the value of the temp at index in aContext where index is relative
to the array of temp names answered by tempNamesForContext:
namedTempAt:put:in:
Assign the value of the temp at index in aContext where index is relative
to the array of temp names answered by tempNamesForContext:
rangeForPC:contextIsActiveContext:
Answer the indices in the source code for the supplied pc.
If the context is the actve context (is at the hot end of the stack)
then its pc is the current pc. But if the context isn't, because it is
suspended sending a message, then its current pc is the previous pc.
sourceText
tempNamesForContext:
Answer an Array of all the temp names in scope in aContext starting with
the home's first local (the first argument or first temporary if no arguments).
tempsAndValuesForContext:
Return a string of the temporary variabls and their current values
timestamp
voidMapCache
DebuggerMethodMapForBlueBookMethods
I am a place-holder for information needed by the Debugger to inspect method activations. See my superclass's comment. I map methods compiled using Closures.
forMethod:methodNode:
<CompiledMethod>
namedTempAt:in:
Answer the value of the temp at index in aContext where index is relative
to the array of temp names answered by tempNamesForContext:
namedTempAt:put:in:
Assign the value of the temp at index in aContext where index is relative
to the array of temp names answered by tempNamesForContext:
tempNamesForContext:
Answer an Array of all the temp names in scope in aContext starting with
the home's first local (the first argument or first temporary if no arguments).
DebuggerMethodMapForClosureCompiledMethods
I am a place-holder for information needed by the Debugger to inspect method activations. See my superclass's comment. I map methods compiled using BlueBook blocks.
Instance variables
blockExtentsToTempsRefs <Dictionary of: Interval -> Array of: (Array with: String with: (Integer | (Array with: Integer with: Integer)))>
maps a block extent to an Array of temp references for that block/method.
Each reference is a pair of temp name and index, where the index can itself be a pair for a remote temp.
startpcsToTempRefs <Dictionary of: Integer -> Array of: (Array with: String with: temp reference)> where
temp reference ::= Integer
| (Array with: Integer with: Integer)
| (Array with: #outer with: temp reference)
ensureExtentsMapsInitialized
<Dictionary of: Interval -> <Array of: <String | <Array of: String>>>>
namedTempAt:in:
Answer the value of the temp at index in aContext where index is relative
to the array of temp names answered by tempNamesForContext:
namedTempAt:put:in:
Assign the value of the temp at index in aContext where index is relative
to the array of temp names answered by tempNamesForContext:.
If the value is a copied value we also need to set it along the lexical chain.
privateDereference:in:
Fetch the temporary with reference tempReference in aContext.
tempReference can be
integer - direct temp reference
#( indirectionVectorIndex tempIndex ) - remote temp in indirectionVector at index
#( outer. temp reference ) - a temp reference in an outer context.
privateDereference:in:put:
Assign the temporary with reference tempReference in aContext.
tempReference can be
integer - direct temp reference
#( indirectionVectorIndex tempIndex ) - remote temp in indirectionVector at index
#( outer. temp reference ) - a temp reference in an outer context.
privateIsOuter:
privateTempAt:in:put:startpcsToBlockExtents:
privateTempAt:in:startpcsToBlockExtents:
privateTempRefsForContext:startpcsToBlockExtents:
Answer the sequence of temps in scope in aContext in the natural order,
outermost arguments and temporaries first, innermost last. Each temp is
a pair of the temp's name followed by a reference. The reference can be
integer - index of temp in aContext
#( indirectionVectorIndex tempIndex ) - remote temp in indirectionVector at index in aContext
#( outer. temp reference ) - a temp reference in an outer context.
tempNamesForContext:
Answer an Array of all the temp names in scope in aContext starting with
the home's first local (the first argument or first temporary if no arguments).
tempNamesScopedForContext:
Answer an Array of all the temp names in scope in aContext starting with
the home's first local (the first argument or first temporary if no arguments).
DictionaryInspector
A DictionaryInspector is xxxxxxxxx.
Instance Variables
keyArray: <Object>
keyArray
- xxxxx
addEntry
addEntry:
calculateKeyArray
Recalculate the KeyArray from the object being inspected
contentsIsString
Hacked so contents empty when deselected
copyName
Copy the name of the current variable, so the user can paste it into the
window below and work with is. If collection, do (xxx at: 1).
fieldList
Answer the base field list plus an abbreviated list of indices.
fieldListMenu:
Arm the supplied menu with items for the field-list of the receiver
initialize
Initialize the state of the receiver with its default contents.
numberOfFixedFields
refreshView
removeSelection
renameEntry
replaceSelectionValue:
The receiver has a list of variables of its inspected object. One of these
is selected. The value of the selected variable is set to the value,
anObject.
selection
The receiver has a list of variables of its inspected object.
One of these is selected. Answer the value of the selected variable.
selectionReferences
Create a browser on all references to the association of the current selection.
sendersOfSelectedKey
Create a browser on all senders of the selected key
DualChangeSorter
This class presents a view of a two change sets at once, and supports copying changes between change sets.
buildWith:
isLeftSide:
Which side am I?
labelString
The window label
modelWakeUp
A window with me as model is being entered. Make sure I am up-to-date with the changeSets.
Treat each side individually rather than going through the . Changed here to avoid endless confirm dialogs.
morphicWindow
okToChange
Allows a controller to ask this of any model
open
openAsMorph
Open a morph, as best one can, on the receiver
other:
Return the other side's ChangeSorter
prototypicalToolWindow
registerInFlapsRegistry
release
Remove references to objects that may refer to the receiver. This message
should be overridden by subclasses with any cycles, in which case the
subclass should also include the expression super release.
unload
windowColorSpecification
ElementCategory
ElementCategory

Contains a list of elements that affords keyed access but also has an inherent order.
Add items to the category by sending it elementAt:put:.
Obtain the elements in order by sending #elementsInOrder
Obtain the value of an element at a given key by sending #elementAt:
addCategoryItem:
Add the item at the end, obtaining its key from itself (it must respond to #categoryName)
categoryName
Answer the formal name of the category
categoryName:
Set the category name
clear
Clear the receiber's keysInOrder and elementDictionary
copy
Answer a copy of the receiver
copyFrom:
Copy the receiver's contents from the donor
copyOfElementDictionary
Answer a copy of the element dictionary
elementAt:
Answer the element at the given key
elementAt:put:
Add symbol at the end of my sorted list (unless it is already present), and put the element in the dictionary
elementSymbol
Answer the element symbol for the receiver. Here, the categoryName dominates
elementsInOrder
Answer the elements in order
fasterElementAt:put:
Add symbol at the end of my sorted list and put the element in the dictionary. This variant adds the key at the end of the keys list without checking whether it already exists.
includesKey:
Answer whether the receiver's dictionary holds the given key
initWordingAndDocumentation
Initialize wording and documentation (helpMessage) for getters and setters
initialize
Initialize the receiver (automatically called when instances are created via 'new')
keysInOrder
Answer the keys in their sorted order
printOn:
Append to the argument, aStream, a sequence of characters that identifies the receiver.
removeElementAt:
Remove the element at the given key
translated
answer the receiver translated to the current language
FileContentsBrowser
I am a class browser view on a fileout (either a source file (.st) or change set (.cs)). I do not actually load the code into to the system, nor do I alter the classes in the image. Use me to vet code in a comfortable way before loading it into your image.
From a FileList, I can be invoked by selecting a source file and selecting the "browse code" menu item from the yellow button menu.
I use PseudoClass, PseudoClassOrganizers, and PseudoMetaclass to model the class structure of the source file.
addLowerPanesTo:at:with:
browseCompressedCodeStream:
browseFile:
browseFiles:
browseMethodFull
Create and schedule a full Browser and then select the current class and message.
browseSenders
Create and schedule a message set browser on all senders of the
currently selected message selector. Do nothing if no message is selected.
browseStream:
browseStream:named:
browseVersions
Create and schedule a message set browser on all versions of the
currently selected message selector.
buildWith:
Create the ui for the browser
changeMessageCategories:
The characters in aString represent an edited version of the the message
categories for the selected class. Update this information in the system
and inform any dependents that the categories have been changed. This
message is invoked because the user had issued the categories command
and edited the message categories. Then the user issued the accept
command.
classList
Answer an array of the class names of the selected category. Answer an
empty array if no selection exists.
classListKey:from:
Respond to a Command key. I am a model with a list of classes and a
code pane, and I also have a listView that has a list of methods. The
view knows how to get the list and selection.
classListMenu:
For backward compatibility with old browers stored in image segments
classListMenu:shifted:
Answer the class list menu, ignoring the state of the shift key in this case
contents
Depending on the current selection, different information is retrieved.
Answer a string description of that information. This information is the
method of the currently selected class and message.
contents:notifying:
The retrieved information has changed and its source must now be
updated. The information can be a variety of things, depending on the
list selections (such as templates for class or message definition, methods)
or the user menu commands (such as definition, comment, hierarchy).
Answer the result of updating the source.
contentsSymbolQuints
Answer a list of quintuplets representing information on the alternative views available in the code pane. For the file-contents browser, the choices are restricted to source and the two diffing options
createViews
defaultBrowserTitle
didCodeChangeElsewhere
Determine whether the code for the currently selected method and class has been changed somewhere else.
extraInfo
fileInClass
fileInMessage
fileInMessageCategories
fileInPackage
fileIntoNewChangeSet
fileOutClass
Print a description of the selected class onto a file whose name is the
category name followed by .st.
fileOutMessage
Put a description of the selected message on a file
fileOutMessageCategories
Print a description of the selected message category of the selected class
onto an external file.
fileOutPackage
fileReaderServicesForDirectory:
fileReaderServicesForFile:suffix:
findClass
Search for a class by name.
infoString
infoViewContents
Answer the string to show in the info view
initialize
Initialize the state of the receiver with its default contents.
labelString
Answer the string for the window title
messageCategoryMenu:
messageListKey:from:
Respond to a Command key. I am a model with a code pane, and I also
have a listView that has a list of methods. The view knows how to get
the list and selection.
messageListMenu:
methodDiffFor:class:selector:meta:
Answer the diff between the current copy of the given class/selector/meta for the string provided
methodHierarchy
Create and schedule a method browser on the hierarchy of implementors.
modifiedClassDefinition
openAsMorph
Create a pluggable version of all the views for a Browser, including views and controllers.
packageInfo:
packageListKey:from:
Respond to a Command key in the package pane in the PackageBrowser
packageListMenu:
packages
packages:
removeClass
If the user confirms the wish to delete the class, do so
removeMessage
If a message is selected, create a Confirmer so the user can verify that
the currently selected message should be removed from the system. If
so,
remove it. If the Preference 'confirmMethodRemoves' is set to false, the
confirmer is bypassed.
removeMessageCategory
If a message category is selected, create a Confirmer so the user can
verify that the currently selected message category should be removed
from the system. If so, remove it.
removePackage
removeUnmodifiedCategories
removeUnmodifiedClasses
removeUnmodifiedMethods
renameClass
selectAndBrowseFile:
selectedBytecodes
Compile the source code for the selected message selector and extract and return
the bytecode listing.
selectedClass
Answer the class that is currently selected. Answer nil if no selection
exists.
selectedClassOrMetaClass
Answer the selected class or metaclass.
selectedMessage
Answer a copy of the source code for the selected message selector.
selectedPackage
serviceBrowseCode
serviceBrowseCodeFiles
serviceBrowseCompressedCode
services
setClassOrganizer
Install whatever organization is appropriate
shoutAboutToStyle:
This is a notification that aPluggableShoutMorphOrView is about to re-style its text.
Set the classOrMetaClass in aPluggableShoutMorphOrView, so that identifiers
will be resolved correctly.
Answer true to allow styling to proceed, or false to veto the styling
unload
updateInfoView
windowColorSpecification
HierarchyBrowser
A HierarchyBrowser is xxxxxxxxx.
Instance Variables
centralClass: <Object>
classList: <Object>
centralClass
- xxxxx
classList
- xxxxx
assureSelectionsShow
This is a workaround for the fact that a hierarchy browser, when launched, often does not show the selected class
buildClassBrowserEditString:
Create and schedule a new class browser for the current selection, if one
exists, with initial textual contents set to aString.
changed:
Receiver changed. The change is denoted by the argument aParameter.
Usually the argument is a Symbol that is part of the dependent's change
protocol. Inform all of the dependents.
classList
Answer an array of the class names of the selected category. Answer an
empty array if no selection exists.
classListIndex:
Cause system organization to reflect appropriate category
defaultBrowserTitle
initAlphabeticListing
initHierarchyForClass:
newFor:
newFor:labeled:
openEditString:
Create a pluggable version of all the views for a HierarchyBrowser, including views and controllers. The top list view is of the currently selected system class category--a single item list.
potentialClassNames
Answer the names of all the classes that could be viewed in this browser
removeSystemCategory
If a class category is selected, create a Confirmer so the user can
verify that the currently selected class category and all of its classes
should be removed from the system. If so, remove it.
selectClass:
selectedClassName
Answer the name of the class currently selected. di
bug fix for the case where name cannot be found -- return nil rather than halt
systemCatSingletonKey:from:
systemCatSingletonMenu:
systemCategorySingleton
updateAfterClassChange
It is possible that some the classes comprising the hierarchy have changed, so reinitialize the entire browser.
IndentingListItemMorph
An IndentingListItemMorph is a StringMorph that draws itself with an optional toggle at its left, as part of the display of the SimpleHierarchicalListMorph.
It will also display lines around the toggle if the #showLinesInHierarchyViews Preference is set.
Instance variables:
indentLevel <SmallInteger> the indent level, from 0 at the root and increasing by 1 at each level of the hierarchy.
isExpanded <Boolean> true if this item is expanded (showing its children)
complexContents <ListItemWrapper> an adapter wrapping my represented item that can answer its children, etc.

firstChild <IndentingListItemMorph|nil> my first child, or nil if none

container <SimpleHierarchicalListMorph> my container

nextSibling <IndentingListItemMorph|nil> the next item in the linked list of siblings, or nil if none.
Contributed by Bob Arning as part of the ObjectExplorer package.
Don't blame him if it's not perfect. We wanted to get it out for people to play with.
acceptDroppingMorph:event:
This message is sent when a morph is dropped onto a morph that has agreed to accept the dropped morph by responding 'true' to the wantsDroppedMorph:Event: message. This default implementation just adds the given morph to the receiver.
addChildrenForList:addingTo:withExpandedItems:
balloonText
Answer balloon help text or nil, if no help is available.
NB: subclasses may override such that they programatically
construct the text, for economy's sake, such as model phrases in
a Viewer
boundsForBalloon
some morphs have bounds that are way too big
canExpand
changed
Need to invalidate the selection frame.
children
childrenDo:
complexContents
drawLineToggleToTextOn:lineColor:hasToggle:
If I am not the only item in my container, draw the line between:
- my toggle (if any) or my left edge (if no toggle)
- and my text left edge.
Only draw now if no toggle.
drawLinesOn:lineColor:
drawLinesToFirstChildOn:lineColor:
Draw line from me to first child.
Don't bother if the first child has a toggle..
drawLinesToNextSiblingOn:lineColor:hasToggle:
Draw line from me to next sibling
drawMouseDownHighlightOn:
Draw with a dotted border.
drawOn:
drawToggleOn:in:
firstChild
hasIcon
Answer whether the receiver has an icon.
hasToggle
highlight
The receiver is being asked to appear in a highlighted state. Mostly used for textual morphs
icon
answer the receiver's icon
inToggleArea:
indentLevel
initWithContents:prior:forList:indentLevel:
initialize
initialize the state of the receiver
isExpanded
isExpanded:
isFirstItem
isSoleItem
lastChild
Answer the last child.
minHeight
Answer the minimum height of the receiver.
minWidth
Fixed to work such that guessed width is unnecessary in
#adjustSubmorphPositions.
nextSibling
nextSibling:
openItemPath:
Open a path based on wrapper item equivalence. Generally more specific
than #openPath: (string based).
openPath:
outerBounds
Return the 'outer' bounds of the receiver, e.g., the bounds that need to be invalidated when the receiver changes.
recursiveAddTo:
recursiveDelete
selectionFrame
Answer the selection frame rectangle.
theme
Answer the ui theme that provides controls.
Done directly here to avoid performance hit of
looking up in window.
toggleBounds
toggleExpandedState
toggleRectangle
unhighlight
userString
Add leading tabs to my userString
withSiblingsDo:
withoutListWrapper
Inspector
I represent a query path into the internal representation of an object. As a StringHolder, the string I represent is the value of the currently selected variable of the observed object.
accept:
addCollectionItemsTo:
If the current selection is an appropriate collection, add items to aMenu that cater to that kind of selection
baseFieldList
Answer an Array consisting of 'self'
and the instance variable names of the inspected object.
browseFullProtocol
Open up a protocol-category browser on the value of the receiver's current selection.
chasePointers
Open a PointerFinder on self
classOfSelection
Answer the class of the receiver's current selection
classVarRefs
Request a browser of methods that store into a chosen instance variable
contentsIsString
Hacked so contents empty when deselected and = long printString when item 2
context:
Set the context of inspection. Currently only used by my subclass ClosureEnvInspector. The inst var is here because we do primitiveChangeClassTo: between subclasses (see inspect:) between different subclasses, but also context could be used as a general concept in all inspectors
copyName
Copy the name of the current variable, so the user can paste it into the
window below and work with is. If collection, do (xxx at: 1).
defsOfSelection
Open a browser on all defining references to the selected instance variable, if that's what currently selected.
doItReceiver
Answer the object that should be informed of the result of evaluating a
text selection.
explorePointers
exploreSelection
fieldList
Answer the base field list plus an abbreviated list of indices.
fieldListMenu:
Arm the supplied menu with items for the field-list of the receiver
horizontalDividerProportion
i1
This is the max index shown before skipping to the
last i2 elements of very long arrays
i2
This is the number of elements to show at the end
of very long arrays
initialExtent
Answer the desired extent for the receiver when it is first opened on the screen.
initialize
Initialize the state of the receiver with its default contents.
inspect:
Initialize the receiver so that it is inspecting anObject. There is no current selection.

Normally the receiver will be of the correct class (as defined by anObject inspectorClass),
because it will have just been created by sedning inspect to anObject. However, the
debugger uses two embedded inspectors, which are re-targetted on the current receiver
each time the stack frame changes. The left-hand inspector in the debugger has its
class changed by the code here. Care should be taken if this method is overridden to
ensure that the overriding code calls 'super inspect: anObject', or otherwise ensures that
the class of these embedded inspectors are changed back.
inspectBasic
Bring up a non-special inspector
inspectElement
Create and schedule an Inspector on an element of the receiver's model's currently selected collection.
inspectSelection
Create and schedule an Inspector on the receiver's model's currently selected object.
inspectorKey:from:
Respond to a Command key issued while the cursor is over my field list
modelWakeUpIn:
A window with me as model is being entered or expanded. Default response is no-op
noteSelectionIndex:for:
backstop
object
Answer the object being inspected by the receiver.
object:
Set anObject to be the object being inspected by the receiver.
objectReferencesToSelection
Open a list inspector on all the objects that point to the value of the selected instance variable, if any.
openAsMorphOn:
openAsMorphOn:withEvalPane:withLabel:valueViewClass:
openAsMorphOn:withLabel:
openOn:
openOn:withEvalPane:
openOn:withEvalPane:withLabel:
printStringErrorText
referencesToSelection
Open a browser on all references to the selected instance variable, if that's what currently selected. 1/25/96 sw
replaceSelectionValue:
The receiver has a list of variables of its inspected object. One of these
is selected. The value of the selected variable is set to the value,
anObject.
selectedClass
Answer the class of the receiver's current selection
selectedSlotName
selection
The receiver has a list of variables of its inspected object.
One of these is selected. Answer the value of the selected variable.
selectionIndex
The receiver has a list of variables of its inspected object. One of these
is selected. Answer the index into the list of the selected variable.
selectionPrintString
selectionUnmodifiable
Answer if the current selected variable is modifiable via acceptance in the code pane. For most inspectors, no selection and a selection of 'self' (selectionIndex = 1) and 'all inst vars' (selectionIndex = 2) are unmodifiable
spawnFullProtocol
Spawn a window showing full protocol for the receiver's selection
spawnProtocol
Spawn a protocol on browser on the receiver's selection
stepAt:in:
stepTimeIn:
timeOfLastListUpdate
toggleIndex:
The receiver has a list of variables of its inspected object. One of these
is selected. If anInteger is the index of this variable, then deselect it.
Otherwise, make the variable whose index is anInteger be the selected
item.
trash:
Don't save it
update
Reshow contents, assuming selected value may have changed.
verticalDividerProportion
wantsSteps
Overridden by morphic classes whose instances want to be stepped,
or by model classes who want their morphic views to be stepped.
InspectorBrowser
An InspectorBrowser is xxxxxxxxx.
Instance Variables
fieldList: <Object>
msgList: <Object>
msgListIndex: <Object>
fieldList
- xxxxx
msgList
- xxxxx
msgListIndex
- xxxxx
fieldList
Answer the base field list plus an abbreviated list of indices.
initialize
Initialize the state of the receiver with its default contents.
inspect:
Initialize the receiver so that it is inspecting anObject. There is no current selection.
Overriden so that my class is not changed to 'anObject inspectorClass'.
msgAccept:from:
msgList
msgListIndex
msgListIndex:
A selection has been made in the message pane
msgListMenu:
msgPaneMenu:shifted:
msgText
openAsMorphOn:
step
Default for morphic models is no-op
MessageNames
A MessageNames is xxxxxxxxx.
Instance Variables
searchString: <Object>
selectorList: <Object>
selectorListIndex: <Object>
searchString
- xxxxx
selectorList
- xxxxx
selectorListIndex
- xxxxx
computeSelectorListFromSearchString
Compute selector list from search string
copyName
Copy the current selector to the clipboard
doSearchFrom:
The user hit the Search button -- treat it as a synonym for the user having hit the Return or Enter (or cmd-s) in the type-in pane
inMorphicWindowLabeled:
Answer a morphic window with the given label that can display the receiver
inMorphicWindowWithInitialSearchString:
Answer a morphic window with the given initial search string, nil if none
messageList
Answer the receiver's message list, computing it if necessary. The way
to force a recomputation is to set the messageList to nil
methodBrowserSearchingFor:
openMessageNames
prototypicalToolWindow
searchString
Answer the current searchString, initializing it if need be
searchString:notifying:
Take what the user typed and find all selectors containing it
selection
Answer the item in the list that is currently selected, or nil if no selection is present
selectorList
Answer the selectorList
selectorListIndex
Answer the selectorListIndex
selectorListIndex:
Set the selectorListIndex as specified, and propagate consequences
selectorListKey:from:
Respond to a Command key in the message-list pane.
selectorListMenu:
Answer the menu associated with the selectorList
selectorListMenuTitle
Answer the title to supply for the menu belonging to the selector-list pane
showOnlyImplementedSelectors
Caution -- can be slow! Filter my selector list down such that it only
shows selectors that are actually implemented somewhere in the system.
windowColorSpecification
MessageSet
I represent a query path of the retrieval result of making a query about methods in the system. The result is a set of methods, denoted by a message selector and the class in which the method was found. As a StringHolder, the string I represent is the source code of the currently selected method. I am typically viewed in a Message Set Browser consisting of a MessageListView and a BrowserCodeView.
addExtraShiftedItemsTo:
The shifted selector-list menu is being built. Add items specific to MessageSet
addItem:
Append a classAndMethod string to the list. Select the new item.
adjustWindowTitleAfterFiltering
Set the title of the receiver's window, if any, to reflect the just-completed filtering
autoSelectString
Return the string to be highlighted when making new selections
autoSelectString:
Set the string to be highlighted when making new selections
browseReference:
buildMorphicMessageList
Build my message-list object in morphic
buildWith:
Create the ui for the browser
canShowMultipleMessageCategories
Answer whether the receiver is capable of showing multiple message categories
classCommentIndicated
Answer true iff we're viewing the class comment.
contents
Answer the contents of the receiver
contents:notifying:
Compile the code in aString. Notify aController of any syntax errors.
Answer false if the compilation fails. Otherwise, if the compilation
created a new method, deselect the current selection. Then answer true.
deleteFromMessageList:
Delete the given message from the receiver's message list
dragPassengerFor:inMorph:
extantMethodsIn:
filterFrom:
Filter the receiver's list down to only those items that satisfy aBlock, which takes a class an a selector as its arguments.
filterMessageList
Allow the user to refine the list of messages.
filterToAnyChangeSet
Filter down only to messages present in ANY change set
filterToCommentedMethods
Filter the receiver's list down to only those items which have comments
filterToCurrentAuthor
Filter down only to messages with my full name as most recent author
filterToCurrentChangeSet
Filter the receiver's list down to only those items in the current change set
filterToImplementorsOf
Filter the receiver's list down to only those items with a given selector
filterToMessagesInChangesFile
Filter down only to messages whose source code risides in the Changes file. This allows one to ignore long-standing methods that live in the .sources file.
filterToMessagesInSourcesFile
Filter down only to messages whose source code resides in the .sources file.
filterToMessagesThat
Allow the user to type in a block which will be
filterToMessagesWithPriorVersions
Filter down only to messages which have at least one prior version
filterToMessagesWithoutPriorVersions
Filter down only to messages which have no prior version stored
filterToNotAnyChangeSet
Filter down only to messages present in NO change set
filterToNotCurrentAuthor
Filter down only to messages not stamped with my initials
filterToNotCurrentChangeSet
Filter the receiver's list down to only those items not in the current change set
filterToNotImplementorsOf
Filter the receiver's list down to only those items whose selector is NOT one solicited from the user.
filterToNotSendersOf
Filter the receiver's list down to only those items which do not send a given selector
filterToSendersOf
Filter the receiver's list down to only those items which send a given selector
filterToUncommentedMethods
Filter the receiver's list down to only those items which lack comments
filterToUnsentMessages
Filter the receiver's list down to only those items which have no
senders
growable
Answer whether the receiver is capable of growing/shrinking dynamically
growable:
Give or take away the growable trait; when a message set is growable, methods submitted within it will be added to its message list
inMorphicWindowLabeled:
Answer a morphic window with the given label that can display the receiver
initialExtent
Answer the desired extent for the receiver when a view on it is first opened on the screen.
5/22/96 sw: in the absence of any override, obtain from RealEstateAgent
initializeMessageList:
Initialize my messageList from the given list of MethodReference or string objects. NB: special handling for uniclasses.
isPseudoSelector:
messageList
Answer the current list of messages.
messageList:
messageListIndex:
Set the index of the selected item to be anInteger.
metaClassIndicated
Answer the boolean flag that indicates whether
this is a class method.
methodCategoryChanged
methodDisplayStringForClass:selector:
open:name:
openAsMorph:name:
openAsMorph:name:inWorld:
openAsMorphNamed:inWorld:
Open the receiver in a morphic window in the given world
openMessageList:name:
openMessageList:name:autoSelect:
parse:toClassAndSelector:
reformulateList
The receiver's messageList has been changed; rebuild it
removeMessage
Remove the selected message from the system. 1/15/96 sw
removeMessageFromBrowser
Remove the selected message from the browser.
selectReference:
selectedClass
Return the base class for the current selection. 1/17/96 sw fixed up so that it doesn't fall into a debugger in a msg browser that has no message selected
selectedClassName
Answer the name of class of the currently selected message. Answer nil if no selection
exists.
selectedClassOrMetaClass
Answer the currently selected class (or metaclass).
selectedMessage
Answer the source method for the currently selected message.
selectedMessageCategoryName
Answer the name of the selected message category or nil.
selectedMessageName
Answer the name of the currently selected message.
selection
Answer the item in the list that is currently selected, or nil if no selection is present
setClassAndSelectorIn:
Decode strings of the form <className> [class] <selectorName>.
setContentsToForceRefetch
Set the receiver's contents such that on the next update the contents will be formulated afresh. This is a critical and obscure difference between Browsers on the one hand and MessageSets on the other, and has over the years been the source of much confusion and much difficulty. By centralizing the different handling here, we don't need so many idiosyncratic overrides in MessageSet any more
setFilteredList:
Establish newList as the new list if appropriate, and adjust the window title accordingly; if the new list is of the same size as the old, warn and do nothing
shoutAboutToStyle:
This is a notification that aPluggableShoutMorphOrView is about to re-style its text.
Set the classOrMetaClass in aPluggableShoutMorphOrView, so that identifiers
will be resolved correctly.
Answer true to allow styling to proceed, or false to veto the styling
sortByDate
Sort the message-list by date of time-stamp
windowColorSpecification
MessageTally
My instances observe and report the amount of time spent in methods.
NOTE: a higher-level user interface (combining the MessageTally result tree with a method browser) is available from TimeProfileBrowser. Note that TimeProfileBrowser was not fancy with the different setting possibilities.
TimeProfileBrowser spyOn: [20 timesRepeat:
[Transcript show: 100 factorial printString]]

Strategies
-----------
MessageTally provides two different strategies available for profiling:
* spyOn: and friends use a high-priority Process to interrupt the block or process being spied on at periodic intervals. The interrupted call stack is then examined for caller information. See below for an example showing different settings
* tallySends: and friends use the interpreter simulator to run the block, recording every method call.
The two give you different results:
* spyOn: gives you a view of where the time is being spent in your program, at least on a rough statistical level (assuming you've run the block for long enough and have a high enough poll rate). If you're trying to optimize your code, start here and optimize the methods where most of the time is being spent first.
* tallySends: gives you accurate counts of how many times methods get called, and by exactly which route. If you're debugging, or trying to figure out if a given method is getting called too many times, this is your tool.
Q: How do you interpret MessageTally>>tallySends
A: The methods #tallySends and #spyOn: measure two very different quantities, but broken down in the same who-called-who format. #spyOn: is approximate, but more indicative of real time spent, whereas #tallySends is exact and a precise record of how many times each method got executed.
Examples
----------
Here you can see all the processes computation time

[1000 timesRepeat: [3.14159 printString. Processor yield]] fork.
[1000 timesRepeat: [30 factorial. Processor yield]] fork.
[1000 timesRepeat: [30 factorial. Processor yield]] fork.
MessageTally spyAllOn: [ (Delay forMilliseconds: 100) wait]
Settings
---------
You can change the printing format (that is, the whitespace and string compression) by using these instance methods:
maxClassNameSize:
maxClassPlusSelectorSize:
maxTabs:
You can change the default polling period (initially set to 1) by calling
MessageTally defaultPollPeriod: numberOfMilliseconds
To understand the difference
----------------------------------
Here we see all the processes
[1000 timesRepeat: [
100 timesRepeat: [120 factorial].
(Delay forMilliseconds: 10) wait
]] forkAt: 45 named: '45'.
MessageTally spyAllOn: [10000 timesRepeat: [1.23 printString]]


Here we only see the execution of the expression [10000 timesRepeat: [1.23 printString]
[1000 timesRepeat: [
100 timesRepeat: [120 factorial].
(Delay forMilliseconds: 10) wait
]] forkAt: 45 named: '45'.
MessageTally spyOn: [10000 timesRepeat: [1.23 printString]]

Here we only check the exact message sends: this is not a pc-sampling approach
[1000 timesRepeat: [
100 timesRepeat: [120 factorial].
(Delay forMilliseconds: 10) wait
]] forkAt: 45 named: '45'.
MessageTally tallySends: [10000 timesRepeat: [1.23 printString]]
<
Refer to the comment in Magnitude|<.
=
Compare the receiver with the argument and answer with true if the
receiver is equal to the argument. Otherwise answer false.
>
Refer to the comment in Magnitude|>.
bump:
bump:fromSender:
Add this hitCount to the total, and include a reference to the
sender responsible for the increment
bumpBy:
class:method:
close
copyWithTally:
defaultMaxClassNameSize
defaultMaxClassPlusSelectorSize
defaultMaxTabs
defaultPollPeriod
defaultPollPeriod:
fullPrintExactOn:
fullPrintOn:threshold:
hash
Hash is reimplemented because = is implemented.
initialize
Subclasses should redefine this method to perform initializations on instance creation
into:fromSender:
isPrimitives
Detect pseudo node used to carry tally of local hits
leavesInto:fromSender:
leavesPrintExactOn:
leavesPrintOn:threshold:
maxClassNameSize
maxClassNameSize:
maxClassPlusSelectorSize
maxClassPlusSelectorSize:
maxTabs
maxTabs:
method
primitives:
printOn:
Append to the argument, aStream, a sequence of characters that
identifies the receiver.
printOn:total:totalTime:tallyExact:
printSenderCountsOn:
process
process:
report:
Print a report, with cutoff percentage of each element of the tree
(leaves, roots, tree), on the stream, strm.
report:cutoff:
reportGCStatsOn:
reportOtherProcesses:
rootPrintOn:total:totalTime:threshold:
sonsOver:
species
Answer the preferred class for reconstructing the receiver. For example,
collections create new collections whenever enumeration messages such as
collect: or select: are invoked. The new kind of collection is determined by
the species of the original collection. Species and class are not always the
same. For example, the species of Interval is Array.
spyAllEvery:on:
Create a spy and spy on the given block at the specified rate.
spyAllOn:
spyEvery:on:
Create a spy and spy on the given block at the specified rate.
spyEvery:onProcess:forMilliseconds:
Create a spy and spy on the given process at the specified rate.
spyOn:
spyOn:reportOtherProcesses:
spyOn:toFileNamed:reportOtherProcesses:
spyOnProcess:forMilliseconds:
spyOnProcess:forMilliseconds:reportOtherProcesses:
spyOnProcess:forMilliseconds:toFileNamed:reportOtherProcesses:
tally
Answer the receiver's number of tally.
tally:by:
Explicitly tally the specified context and its stack.
tally:in:by:
Explicitly tally the specified context and its stack.
tallyPath:by:
tallyPath:in:by:
tallySends:
tallySendsTo:inBlock:showTree:
time
Answer the receiver's run time.
time:
treePrintOn:tabs:thisTab:total:totalTime:tallyExact:orThreshold:
MethodFinder
Find a method in the system from a set of examples. Done by brute force, trying every possible selector. Errors are skipped over using ( [3 + 'xyz'] ifError: [^ false] ).
Submit an array of the form ((data1 data2) answer (data1 data2) answer).
MethodFinder methodFor: #( (4 3) 7 (0 5) 5 (5 5) 10).
answer: 'data1 + data2'
More generally, use the brace notation to construct live examples.
The program tries data1 as the receiver, and
tries all other permutations of the data for the receiver and args, and
tries leaving out one argument, and
uses all selectors data understands, and
uses all selectors in all od data's superclasses.
Floating point values must be precise to 0.01 percent, or (X * 0.0001).
If you get an error, you have probably discovered a selector that needs to be removed from the Approved list. See MethodFinder.initialize. Please email the Squeak Team.
Only considers 0, 1, 2, and 3 argument messages. The argument data may have 1 to 5 entries, but only a max of 4 used at a time. For now, we only test messages that use given number of args or one fewer. For example, this data (100 true 0.6) would test the receiver plus two args, and the receiver plus one arg, but not any other patterns.
Three sets of selectors: Approved, AddAndRemove, and Blocks selectors. When testing a selector in AddAndRemove, deepCopy the receiver. We do not handle selectors that modify an argument (printOn: etc.). Blocks is a set of (selector argNumber) where that argument must be a block.
For perform, the selector is tested. It must be in the Approved list.
do: is not on the Approved list. It does not produce a result that can be tested. Type 'do' into the upper pane of the Selector Finder to find messages list that.
[Later, allow the user to supply a block that tests the answer, not just the literal answer.]
MethodFinder methodFor: { { true. [3]. [4]}. 3}.
Later allow this to work without the blocks around 3 and 4.
allNumbers
Return true if all answers and all data are numbers.
answers
argMap
cleanInputs:
Find an remove common mistakes. Complain when ill formed.
const
See if (^ constant) is the answer
constDiv
See if (data1 // C) is the answer
constEquiv
See if (data1 = C) or (data1 ~= C) is the answer
constLinear
See if (data1 * C1) + C2 is the answer. In the form #(C2 C1) polynomialEval: data1
constMod
See if mod, (data1 \\ C) is the answer
constMult
See if (data1 * C) is the answer
constPlus
See if (data1 + C) is the answer
constUsingData1Value
See if (data1 <= C) or (data1 >= C) is the answer
copy:addArg:
Copy inputs and answers, add an additional data argument to the inputs. The same constant for every example
data
exceptions
Handle some very slippery selectors.
asSymbol -- want to be able to produce it, but do not want to make every string submitted into a Symbol!
expressions
findMessage
Control the search.
initialize
The methods we are allowed to use. (MethodFinder new initialize)
initialize2
The methods we are allowed to use. (MethodFinder new initialize)
initialize3
additional selectors to consider
insertConstants
see if one of several known expressions will do it. C is the constant we discover here.
load:
Find a function that takes the data and gives the answers. Odd list entries are data for it, even ones are the answers. nil input means data and answers were supplied already.
makeAllMaps
Make a giant list of all permutations of the args. To find the function, we will try these permutations of the input data. receiver, args.
mapData
Force the data through the map (permutation) to create the data to test.
methodFor:
noteDangerous
Remember the methods with really bad side effects.
organizationFiltered:
Return the organization of the class with all selectors defined in superclasses removed. (except those in Object)
permuteArgs
Run through ALL the permutations. First one was as presented.
search:
if Multi is true, collect all selectors that work.
searchForOne
Look for and return just one answer
selectors
Note the inst var does not have an S on the end
simpleSearch
Run through first arg's class' selectors, looking for one that works.
test2:
look for bad association
test3
find the modification of the caracter table
testFromTuple:
verify that the methods allowed don't crash the system. Try N of each of the fundamental types. up to 4 of each kind.
testPerfect:
Try this selector! Return true if it answers every example perfectly. Take the args in the order they are. Do not permute them. Survive errors. later cache arg lists.
testRandom
verify that the methods allowed don't crash the system. Pick 3 or 4 from a mixed list of the fundamental types.
thisData
verify
Test a bunch of examples
ObjectExplorer
ObjectExplorer provides a hierarchical alternative to #inspect. Simply evaluate an expression like:
World explore
and enjoy.
about
chasePointers
Open a PointerFinder on the selected item
codePaneMenu:shifted:
Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items
contentsSelection
Return the interval of text in the code pane to select when I set the pane's contents
defsOfSelection
Open a browser on all defining references to the selected instance variable, if that's what's currently selected.
doItContext
Answer the context in which a text selection can be evaluated.
doItReceiver
Answer the object that should be informed of the result of evaluating a
text selection.
doesNotUnderstand:
Handle the fact that there was an attempt to send the given message to the receiver but the receiver does not understand this message (typically sent from the machine when a message is sent to the receiver and no method is defined for that selector).
explorePointers
Open a PointerExplorer on the current selection
exploreSelection
Open an ObjectExplorer on the current selection
explorerFor:
explorerFor:withLabel:
explorerKey:from:
Similar to #genericMenu:...
genericMenu:
Borrow a menu from my inspector
getList
initialExtent
Answer the desired extent for the receiver when a view on it is first opened on the screen.
5/22/96 sw: in the absence of any override, obtain from RealEstateAgent
inspectSelection
Open an Inspector on the current selection
monitor:
Start stepping and watching the given wrapper for changes.
monitorList
object
objectReferencesToSelection
Open a browser on all references to the selected instance variable, if that's what currently selected.
openBrowser:
openExplorerFor:
ObjectExplorer new openExplorerFor: Smalltalk
openExplorerFor:withLabel:
ObjectExplorer new openExplorerFor: Smalltalk withLabel: 'Smalltalk'
parentObject
referencesToSelection
Open a browser on all references to the selected instance variable, if that's what's currently selected.
release
Remove references to objects that may refer to the receiver. This message
should be overridden by subclasses with any cycles, in which case the
subclass should also include the expression super release.
selectedClass
Answer the class of the receiver's current selection
selector
shouldGetStepsFrom:
step
If there's anything in my monitor list, see if the strings have changed.
stopMonitoring
world
ObjectWithDocumentation
ObjectWithDocumentation - an abstract superclass for objects that allows maintenance of an authoring stamp, a body of documentation, and a properties dictionary.
The Properties implementation has not happened yet -- it would closely mirror the implemenation of properties in the MorphExtension, for example.
documentation
Answer the receiver's documentation
documentation:
Set the receiver's documentation, in the current langauge
elementSymbol
Answer the receiver's element symbol
getterSetterHelpMessage
Returns a helpMessage that has been computed previously and needs to be translated and then formatted with the elementSymbol.
'get value of {1}' translated format: {elSym}
getterSetterHelpMessage:
Sets a helpMessage that needs to be translated and then formatted with the elementSymbol.
'get value of {1}' translated format: {elSym}
helpMessage
Check if there is a getterSetterHelpMessage.
Otherwise try the normal help message or return nil.
helpMessage:
Set the receiver's documentation, in the current langauge
initWordingAndDocumentation
Initialize wording and documentation (helpMessage) for getters and setters
initialize
Initialize the receiver (automatically called when instances are created via 'new')
legacyHelpMessage
If I have a help message stashed in my legacy naturalTranslations slot, answer its translated rendition, else answer nil. If I *do* come across a legacy help message, transfer it to my properties dictionary.
properties
propertyAt:ifAbsent:
propertyAt:put:
wording
Answer the receiver's wording
wording:
Set the receiver's wording, in the current langauge
OrderedCollectionInspector
An OrderedCollectionInspector is xxxxxxxxx.
Instance Variables
fieldList
Answer the base field list plus an abbreviated list of indices.
replaceSelectionValue:
The receiver has a list of variables of its inspected object. One of these
is selected. The value of the selected variable is set to the value, anObject.
selectedObjectIndex
Answer the index of the inspectee's collection that the current selection refers to.
selection
The receiver has a list of variables of its inspected object.
One of these is selected. Answer the value of the selected variable.
PointerExplorer
A variant on the ObjectExlorer that works "backwards": like the ObjectExplorer, it shows a tree of objects, but expanding a node won't show the objects which that node references, but rather the objects that reference that node. Its main use is to track down memory leaks: if you want to know why a particular object is still alive, open a PointerExplorer on it and drill down until you find the root object that's referencing it. For example, find all the references to the symbol #zot with:
PointerExplorer new openExplorerFor: #zot
For the "name" of the object, the PointerExplorer shows each object's identityHash, to allow the user to identify when two similar objects are identical and notice cycles.
getList
PointerExplorerWrapper
A subclass of ObjectExplorerWrapper for use with PointerExplorer. #contents is overridden to work backwards: it returns wrappers for the objects pointing to item rather than for the objects that item points to.
contents
hasContents
PointerFinder
I can search for reasons why a certain object isn't garbage collected. I'm a quick port of a VisualWorks program written by Hans-Martin Mosner. Call me as shown below. I'll search for a path from a global variable to the given object, presenting it in a small morphic UI.
Examples:
PointerFinder on: self currentHand
PointerFinder on: StandardSystemView someInstance
Now, let's see why this image contains more HandMorphs as expected...
HandMorph allInstancesDo: [:e | PointerFinder on: e]
arrowKey:from:
backstop; all the PluggableList* classes actually handle arrow keys, and the models handle other keys.
buildList
follow:from:
followObject:
goal:
initialExtent
Answer the desired extent for the receiver when a view on it is first opened on the screen.
5/22/96 sw: in the absence of any override, obtain from RealEstateAgent
initialize
Subclasses should redefine this method to perform initializations on instance creation
inspectObject
isLiteral
Horrible hack to omit other Pointer Finders from scanning.
isSelfEvaluating
menu:shifted:
on:
open
perform:orSendTo:
Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked.
pointerList
pointerListIndex
pointerListIndex:
pointersTo:
pointersTo:except:
pointersToItem:of:
search
searchAgain
update
ProcessBrowser
Change Set: ProcessBrowser
Date: 14 March 2000
Author: Ned Konz
email: ned@bike-nomad.com
This is distributed under the Squeak License.
Added 14 March:
CPUWatcher integration
automatically start and stop CPUWatcher
added CPUWatcher to process list menu
Added 29 October:
MVC version
2.8, 2.7 compatibility
rearranged menus
added pointer inspection and chasing
added suspend/resume
recognized more well-known processes
misc. bug fixes
Added 26 October: highlight pc in source code
Added 27 October: added 'signal semaphore'
added 'inspect receiver', 'explore receiver', 'message tally' to stack list menu
added 'find context', 'next context' to process list menu
added 'change priority' and 'debug' choices to process list menu
27 October mods by Bob Arning:
alters process display in Ned's ProcessBrowser to
- show process priority
- drop 'a Process in' that appears on each line
- show in priority order
- prettier names for known processes
- fix to Utilities to forget update downloading process when it ends (1 less dead
process)
- correct stack dump for the active process
asPrototypeInWindow
Create a pluggable version of me, answer a window
browseContext
buildWith:
Create a pluggable version of me, answer a window
changePriority
changeStackListTo:
chasePointers
Open a PointerFinder on self
debugProcess
debugProcess:
dumpPigStackOn:andClose:
dumpTally:on:
dumpTallyOnTranscript:
exploreContext
exploreProcess
exploreReceiver
findContext
hasView
initialize
Subclasses should redefine this method to perform initializations on instance creation
inspectContext
inspectPointers
inspectProcess
inspectReceiver
isAutoUpdating
isAutoUpdatingPaused
isUIProcess:
messageTally
moreStack
nameAndRulesFor:
Answer a nickname and two flags: allow-stop, and allow-debug
nameAndRulesForSelectedProcess
Answer a nickname and two flags: allow-stop, and allow-debug
nextContext
notify:at:in:
A syntax error happened when I was trying to highlight my pc.
Raise a signal so that it can be ignored.
open
openAsMorph
Create a pluggable version of me, answer a window
pauseAutoUpdate
pcRange
Answer the indices in the source code for the method corresponding to
the selected context's program counter value.
perform:orSendTo:
Selector was just chosen from a menu by a user. If can respond, then
perform it on myself. If not, send it to otherTarget, presumably the
editPane from which the menu was invoked.
prettyNameForProcess:
processList
processListIndex
processListIndex:
processListKey:from:
processListMenu:
processNameList
since processList is a WeakArray, we have to strengthen the result
prototypicalToolWindow
registerInFlapsRegistry
registerWellKnownProcess:label:allowStop:allowDebug:
registerWellKnownProcesses
resumeProcess
resumeProcess:
selectedClass
Answer the class in which the currently selected context's method was
found.
selectedMethod
selectedSelector
Answer the class in which the currently selected context's method was
found.
setProcess:toPriority:
setUpdateCallbackAfter:
shutDown
signalSemaphore
stackList
stackListIndex
stackListIndex:
stackListKey:from:
stackListMenu:
stackNameList
startAutoUpdate
startCPUWatcher
Answers whether I started the CPUWatcher
startUp
stopAutoUpdate
stopCPUWatcher
suspendProcess
suspendProcess:
suspendedProcesses
tallyCPUUsageFor:
tallyCPUUsageFor:every:
terminateProcess
terminateProcess:
text
toggleAutoUpdate
unload
unregisterWellKnownProcess:
updateProcessList
updateStackList
updateStackList:
wasProcessSuspendedByProcessBrowser:
windowIsClosing
This message is used to inform a models that its window is closing. Most models do nothing, but some, such as the Debugger, must do some cleanup. Note that this mechanism must be used with care by models that support multiple views, since one view may be closed while others left open.
ProtocolBrowser
An instance of ProtocolBrowser shows the methods a class understands--inherited or implemented at this level--as a "flattened" list.
getList
Answer the receiver's message list.
growable
Answer whether the receiver is subject to manual additions and deletions
initListFrom:highlighting:
Make up the messageList with items from aClass in boldface.
list
Answer the receiver's message list.
on:
Initialize with the entire protocol for the class, aClass.
onSubProtocolOf:
Initialize with the entire protocol for the class, aClass,
but excluding those inherited from Object.
openFullProtocolForClass:
openSubProtocolForClass:
selectedClassOrMetaClass
Answer the currently selected class (or metaclass).
selector
Answer the receiver's selected selector.
selector:
Set the currently selected message selector to be aString.
setClassAndSelectorIn:
Decode strings of the form <selectorName> (<className> [class])
setSelector:
Set the currently selected message selector to be aString.
RecentMessageSet
RecentMessageSet is a message set that shows the most recently-submitted methods, in chronological order.
addExtraShiftedItemsTo:
The shifted selector-list menu is being built. Overridden here to defeat the presence of the items that add or change order, since RecentMessageSet defines methods & order explicitly based on external criteria
contents:notifying:
Compile the code in aString. Notify aController of any syntax errors.
Answer false if the compilation fails. Otherwise, if the compilation
created a new method, deselect the current selection. Then answer true.
growable
Answer whether the receiver can be changed by manual additions & deletions
maybeSetSelection
After a browser's message list is changed, this message is dispatched to the model, to give it a chance to refigure a selection
messageListMenu:shifted:
Answer the message-list menu
reformulateList
Reformulate the receiver's list. Exclude methods now deleted
removeFromRecentSubmissions
Remove the currently-selected method from the RecentSubmissions list
setRecentHistorySize
Let the user specify the recent history size
updateListsAndCodeIn:
RAA 20 june 2000 - a recent change to how messages were displayed in the list caused them not to match what was stored in Utilities. This caused the recent submissions to be continuously updated. The hack below fixed that problem
SelectorBrowser
A SelectorBrowser is xxxxxxxxx.
Instance Variables
classList: <Object>
classListIndex: <Object>
selectorIndex: <Object>
selectorList: <Object>
classList
- xxxxx
classListIndex
- xxxxx
selectorIndex
- xxxxx
selectorList
- xxxxx
byExample
The comment in the bottom pane
byExample:
Don't save it
classList
classListIndex
classListIndex:
classListSelectorTitle
contents:notifying:
Take what the user typed and find all selectors containing it
implementors
initialExtent
Answer the desired extent for the receiver when a view on it is first opened on the screen.
5/22/96 sw: in the absence of any override, obtain from RealEstateAgent
listFromResult:
ResultOC is of the form #('(data1 op data2)' '(...)'). Answer a sorted array.
markMatchingClasses
If an example is used, mark classes matching the example instance with an asterisk.
messageList
Find all the selectors containing what the user typed in.
messageListIndex
Answer the index of the selected message selector.
messageListIndex:
Set the selected message selector to be the one indexed by anInteger.
Find all classes it is in.
messageListKey:from:
Respond to a command key. Handle (m) and (n) here,
else defer to the StringHolder behaviour.
morphicWindow
Create a Browser that lets you type part of a selector, shows a list of selectors, shows the classes of the one you chose, and spawns a full browser on it. Answer the window
SelectorBrowser new open
open
Create a Browser that lets you type part of a selector, shows a list of selectors,
shows the classes of the one you chose, and spwns a full browser on it.
SelectorBrowser new open
openAsMorph
Create a Browser that lets you type part of a selector, shows a list of selectors, shows the classes of the one you chose, and spwns a full browser on it.
SelectorBrowser new open
prototypicalToolWindow
quickList
Compute the selectors for the single example of receiver and args, in the very top pane
searchResult:
selectedClass
Answer the currently selected class.
selectedClassName
Answer the name of the currently selected class.
selectedMessageName
Answer the name of the currently selected message.
selectorList:
selectorMenu:
selectorMenuTitle
senders
testObjects:strings:
Try to make substitutions in the user's inputs and search for the selector again.
1 no change to answer.
2 answer Array -> OrderedCollection.
2 answer Character -> String
4 answer Symbol or String of len 1 -> Character
For each of these, try straight, and try converting args:
Character -> String
Symbol or String of len 1 -> Character
Return array with result, dataObjects, dataStrings. Don't ever do a find on the same set of data twice.
windowColorSpecification
SetInspector
A verison of the Inspector specialized for inspecting Sets. It displays the elements of the set like elements of an array. Note that the indices, being phyical locations in the hash table, are not meaningful outside of the set.
arrayIndexForSelection
copyName
Copy the name of the current variable, so the user can paste it into the
window below and work with is. If collection, do (xxx at: 1).
fieldList
Answer the base field list plus an abbreviated list of indices.
fieldListMenu:
Arm the supplied menu with items for the field-list of the receiver
removeSelection
replaceSelectionValue:
The receiver has a list of variables of its inspected object. One of these
is selected. The value of the selected variable is set to the value,
anObject.
selection
The receiver has a list of variables of its inspected object.
One of these is selected. Answer the value of the selected variable.
StandardToolSet
Main comment stating the purpose of this class and relevant relationship to other classes.
Possible useful expressions for doIt or printIt.
Structure:
instVar1 type -- comment about the purpose of instVar1
instVar2 type -- comment about the purpose of instVar2
Any further useful comments about the general approach of this implementation.
basicInspect:
browse:selector:
browseChangeSetsWithClass:selector:
browseHierarchy:selector:
browseImplementorsOf:name:autoSelect:
browseMessageNames:
browseMessageSet:name:autoSelect:
browseSendersOf:name:autoSelect:
browseVersionsOf:selector:
codeCompletionAround:textMorph:keyStroke:
debug:context:label:contents:fullView:
debugContext:label:contents:
debugError:
debugSyntaxError:
explore:
initialize
Subclasses should redefine this method to perform initializations on instance creation
inspect:
inspect:label:
inspectorClassOf:
interrupt:label:
mainMenuItems
menuItems
openChangeSorter
openChangedMessageSet:
openClassBrowser
openClassListBrowser:title:
openDualChangeSorter
openFileList
openMessageNames
openMethodFinder
openMonticelloBrowser
openMonticelloConfigurations
openProcessBrowser
openRecentChangesLog
openTestRunner
openTranscript
openWorkspace
unload
StaticChangeSetCategory
StaticChangeSetCategory is a user-defined change-set category that has in it only those change sets specifically placed there.
acceptsManualAdditions
Answer whether the user is allowed manually to manipulate the contents of the change-set-category.
addChangeSet:
Add the change set manually
includesChangeSet:
Answer whether the receiver includes aChangeSet in its retrieval list
reconstituteList
Reformulate the list. Here, since we have a manually-maintained list, at this juncture we only make sure change-set-names are still up to date, and we purge moribund elements
SyntaxError
I represent syntax error report for syntax errors encountered when filing in class descriptions from a non-interactive source such as an external file. As a StringHolder, the string to be viewed is the method code or expression containing the error.
The user may fix the error and accept the method to continue the fileIn.
buildMorphicViewOn:
category:
Record the message category of method being compiled. This is used when the user corrects the error and accepts.
contents:notifying:
Compile the code in aString and proceed. Do not notify anybody of errors, because nobody would have been notified of errors if this syntax error had not arisen
debug
Show the stack of the process leading to this syntax editor, typically showing the stack of the compiler as called from fileIn.
errorInClass:withCode:doitFlag:
list
Answer an array of one element made up of the class name, message category, and message selector in which the syntax error was found. This is the single item in the message list of a view/browser on the receiver.
listIndex
There is always exactly one element in my list and it is always selected.
listMenu:
notify:at:in:
Open a syntax error view, inserting the given error message into the given source at the given location. This message is sent to the 'requestor' when the parser or compiler finds a syntax error.
open:
proceed
The user has has edited and presumably fixed the syntax error and the filein can now proceed.
selectedClass
Answer the class in which the syntax error occurred.
selectedClassOrMetaClass
Answer the class of the method being compiled.
selectedMessageName
Answer the selector of the method being compiled.
setClass:code:debugger:doitFlag:
SystemBrowser
This is the AppRegistry class for class browsing
addRegistryMenuItemsTo:inAccountOf:
defaultOpenBrowser
unload
ThreadSafeTranscript
I'm an output device.
Ultimately I can replace TranscripterStream since I'm thread safe and TranscripterStream.
ThreadSafeTranscript can be installed as the default transcript using
ThreadSafeTranscript installThreadSafeAsTranscript
It can be installed as another Transcript accessible using STranscript
ThreadSafeTranscript installThreadSafeAsSTranscript
<<
black
copied from Transcripter
buildWith:
buildWith:labeled:
characterLimit
clear
Clear all characters and redisplay the view
close
closeAllViews
self new closeAllViews
codePaneMenu:shifted:
Copied from TranscriptStream>>#codePaneMenu:shifted:
contents
cr
crShow:
endEntry
Display all the characters since the last endEntry, and reset the
stream
examples
examplesConcurrent
examplesForegroundUpdate
examplesHighlyConcurrent
flush
initialExtent
Answer the desired extent for the receiver when a view on it is first opened on the screen.
5/22/96 sw: in the absence of any override, obtain from RealEstateAgent
initialize
Subclasses should redefine this method to perform initializations on instance creation
install
installThreadSafeAsSTranscript
installThreadSafeAsTranscript
isSelfEvaluating
nextPut:
nextPutAll:
open
self new open
openAsMorphLabel:
pastEndPut:
If the stream reaches its limit, just output the contents and reset.
print:
printOn:
Append to the argument, aStream, a sequence of characters that
identifies the receiver.
reset
show:
space
tab
title
white
copied from Transcripter
windowColorSpecification
with:
TimeProfileBrowser
A TimeProfileBrowser is a browser visualizing the runtime profile of an executed Smalltalk block. It is useful for finding performance bottlenecks in code. When optimizing code it can
be hard to know what methods actually constitute the bulk of the execution time. Is it a few
methods that take very long time to execute or is it perhaps a single method that gets executed a thousand times?
The block is first spied on using a MessageTally instance (which has even more funtionality than used by the TimeProfileBrowser) which samples the block during it's execution and collects the amount of time approximately spent in the methods executed. Then the methods are shown in the browser with their relative execution time in percent.
Example:
TimeProfileBrowser onBlock: [20 timesRepeat: [Transcript show: 100 factorial printString]]
initializeMessageList:
Initialize my messageList from the given list of MethodReference or string objects. NB: special handling for uniclasses.
messageListKey:from:
Respond to a Command key. Cmd-D means re-run block.
messageListMenu:shifted:
Add a menu to the inherited one.
onBlock:
runBlock:
runBlock:pollingEvery:
runProcess:forMilliseconds:pollingEvery:
selectedClass
Answer the receiver's 'selectedClass'.
selectedClass:
Set the receiver's instance variable 'selectedClass' to be anObject.
selectedMessage
Answer the source method for the currently selected message.
selectedSelector
Answer the receiver's 'selectedSelector'.
selectedSelector:
Set the receiver's instance variable 'selectedSelector' to be anObject.
setClassAndSelectorIn:
Decode strings of the form <selectorName> (<className> [class])
spyOn:
spyOnProcess:forMilliseconds:
tally
Answer the receiver's 'tally'.
tally:
Set the receiver's instance variable 'tally' to be anObject.
VersionsBrowser
VersionsBrowser shows all the versions of a particular method, and lets you compare them, revert to selected versions, and so on.
addPriorVersionsCountForSelector:ofClass:to:
Add an annotation detailing the prior versions count. Specially handled here for the case of a selector no longer in the system, whose prior versions are seen in a versions browser -- in this case, the inherited version of this method will not work.
addedChangeRecord
addedChangeRecord:
browseVersionsForClass:selector:
browseVersionsOf:class:meta:category:selector:
browseVersionsOf:class:meta:category:selector:lostMethodPointer:
changeListButtonSpecs
changeListKey:from:
Respond to a Command key in the list pane. of the versions browser
compareToOtherVersion
Prompt the user for a reference version, then spawn a window
showing the diffs between the older and the newer of the current
version and the reference version as text.
fileInSelections
findOriginalChangeSet
offerVersionsHelp
reformulateList
Some uncertainty about how to deal with lost methods here
removeMethodFromChanges
Remove my method from the current change set
scanVersionsOf:class:meta:category:selector:
selectedClass
Answer the class currently selected in the browser. In the case of a VersionsBrowser, the class and selector are always the same, regardless of which version is selected and indeed whether or not any entry is selected in the list pane
selectedClassOrMetaClass
Answer the class or metaclass currently selected in the browser. In the case of a VersionsBrowser, the class and selector are always the same, regardless of which version is selected and indeed whether or not any entry is selected in the list pane
selectedMessageName
Answer the message name currently selected in the browser. In the case of a VersionsBrowser, the class and selector are always the same, regardless of which version is selected and indeed whether or not any entry is selected in the list pane
showsVersions
timeStampFor:class:reverseOrdinal:
updateListsAndCodeIn:
versionCountForSelector:class:
versionFrom:
Return changeRecord of the version in effect at that time. Accept in the VersionsBrowser does not use this code.
versionsHelpString
versionsMenu:
Fill aMenu with menu items appropriate to the receiver
windowColorSpecification
WeakSetInspector
A verison of the SetInspector specialized for inspecting WeakSets. It knows about the flag object used to indicate empty locations in the hash table.
fieldList
Answer the base field list plus an abbreviated list of indices.
initialize
Initialize the state of the receiver with its default contents.
Workspace
A Workspace is a text area plus a lot of support for executable code. It is a great place to execute top-level commands to compute something useful, and it is a great place to develop bits of a program before those bits get put into class methods.
To open a new workspace, execute:
Workspace open
A workspace can have its own variables, called "workspace variables", to hold intermediate results. For example, if you type into a workspace "x := 5" and do-it, then later you could type in "y := x * 2" and y would become 10.
Additionally, in Morphic, a workspace can gain access to morphs that are on the screen. If acceptDroppedMorphss is turned on, then whenever a morph is dropped on the workspace, a variable will be created which references that morph. This functionality is toggled with the window-wide menu of a workspace.
The instance variables of this class are:
bindings - holds the workspace variables for this workspace
acceptDroppedMorphss - whether dropped morphs should create new variables
acceptAction
acceptAction:
acceptContents:
Set aString to be the contents of the receiver. Return true cuz happy
acceptDroppedMorphsWording
acceptDroppingMorph:event:inMorph:
Return the dropee to its old position, and add a reference to it at the cursor point.
acceptsDroppingMorphForReference
acceptsDroppingMorphForReference:
addModelItemsToWindowMenu:
aMenu is being constructed to be presented to the user in response to the user's pressing on the menu widget in the title bar of a morphic window. Here, the model is given the opportunity to add any model-specific items to the menu, whose default target is the SystemWindow itself.
addSymbols:
appendContentsOfFile
Prompt for a file, and if one is obtained, append its contents to the contents of the receiver. Caution: as currently implemented this abandons any custom style information previously in the workspace. Someone should fix this. Also, for best results you should accept the contents of the workspace before requesting this.
bindingOf:
completionAdditionals
createCompletionController
embeddedInMorphicWindowLabeled:
guessTypeForName:
hasBindingOf:
hasBindingThatBeginsWith:
historyLength
Number of contents being stored
initialExtent
Start small. Window aspect ratio is 5 sqrt::1 . Good asthetics. -wiz
initialize
Initialize the state of the receiver with its default contents.
initializeBindings
lastContents
mustDeclareVariableWording
mustDeclareVariables:
okToChange
This method is called by SystemWindow just before closing a workspace window.
The caller of this method is SystemWindow>>delete
prototypicalToolWindow
selectPreviousContent
setBindings:
Sets the Workspace to use the specified dictionary as its namespace
setContent:
toggleDroppingMorphForReference
toggleVariableDeclarationMode
trimHistoryIfNecessary
wantsDroppedMorph:event:inMorph: