Squeak Class Documentation category index | class index  
 
ChangeSorter
  category: Tools-Changes
  superclass: CodeHolder
  subclasses: ChangeSetBrowser

I display a ChangeSet. Two of me are in a DualChangeSorter.

instance methods
  access
  changeSet
changeSetCategory
changeSetCurrentlyDisplayed
label
labelString
modelWakeUp
myChangeSet:
parent
parent:
parenthesizedCategoryName
showChangeSet:
showChangeSetNamed:

  annotation
  addPriorVersionsCountForSelector:ofClass:to:

  changeSet menu
  addPreamble
addToCategoryOpposite
browseChangeSet
browseMethodConflicts
categorySubmenu:shifted:
changeSetList
changeSetListKey:from:
changeSetMenu:shifted:
checkForAlienAuthorship
checkForUnclassifiedMethods
checkForUncommentedMethods
checkForUnsentMessages
checkThatSidesDiffer:
chooseChangeSetCategory
chooseChangeSetCategoryInMorphic
chooseCngSet
clearChangeSet
copyAllToOther
currentCngSet
editPostscript
editPreamble
expungeUniclasses
fileIntoNewChangeSet
fileOut
fileOutAllChangeSets
fillAggregateChangeSet
findCngSet
goToChangeSetsProject
inspectChangeSet
lookForSlips
mailOut
mainButtonName
makeNewCategory
methodConflictsWithOppositeCategory
methodConflictsWithOtherSide
newCurrent
newSet
offerCategorySubmenu
offerShiftedChangeSetMenu
offerUnshiftedChangeSetMenu
openChangeSetBrowser
promoteToTopChangeSet
remove
removeCategory
removeFromCategory
removePostscript
removePreamble
removePrompting:
rename
renameCategory
reorderChangeSets
setRecentUpdatesMarker
shiftedChangeSetMenu:
showChangeSetCategory:
submergeIntoOtherSide
subtractOtherSide
trimHistory
uninstallChangeSet
update
updateIfNecessary

  class list
  classList
classListKey:from:
classListMenu:shifted:
classMenu:
classMenu:shifted:
copyClassToOther
currentClassName
currentClassName:
fileOutClass
forgetClass
messageListKey:from:
moveClassToOther
selectedClass
selectedClassOrMetaClass

  code pane
  contents:notifying:
setContents
toggleDiffing
wantsOptionalButtons

  creation
  morphicWindow
open
openAsMorph
openAsMorphIn:rect:
openView:offsetBy:
setDefaultChangeSetCategory
veryDeepFixupWith:
veryDeepInner:

  message list
  browseVersions
copyMethodToOther
currentSelector
currentSelector:
forget
messageList
messageListMenu:shifted:
messageMenu:shifted:
moveMethodToOther
removeFromCurrentChanges
removeMessage
selectedMessageName
shiftedMessageMenu:

class methods
  adding
  basicNewChangeSet:
newChangeSet
newChangeSet:
newChangeSetNamed:
newChangesFromStream:named:

  class initialization
  belongsInAdditions:
belongsInAll:
belongsInMyInitials:
belongsInNumbered:
belongsInProjectChangeSets:
belongsInProjectsInRelease:
belongsInRecentUpdates:
changeSetCategoryNamed:
changeSetNamesInReleaseImage
initialize
initializeChangeSetCategories

  enumerating
  allChangeSetNames
allChangeSets
allChangeSetsWithClass:selector:
changeSetNamed:
changeSetsNamedSuchThat:
existingOrNewChangeSetNamed:
gatherChangeSets
highestNumberedChangeSet
mostRecentChangeSetWithChangeForClass:selector:
promoteToTop:

  removing
  deleteChangeSetsNumberedLowerThan:
removeChangeSet:
removeChangeSetsNamedSuchThat:
removeEmptyUnnamedChangeSets

  services
  assuredChangeSetNamed:
browseChangeSetsWithClass:selector:
browseChangeSetsWithSelector:
buildAggregateChangeSet
countOfChangeSetsWithClass:andSelector:
doesAnyChangeSetHaveClass:andSelector:
prototypicalToolWindow
recentUpdateMarker
recentUpdateMarker:
reorderChangeSets
secondaryChangeSet

instance methods
  access top  
 

changeSet


 

changeSetCategory

Answer the current changeSetCategory object that governs which change sets are shown in this ChangeSorter


 

changeSetCurrentlyDisplayed


 

label


 

labelString

The label for my entire window. The large button that displays my name is gotten via mainButtonName


 

modelWakeUp

A window with me as model is being entered.
Make sure I am up-to-date with the changeSets.


 

myChangeSet:


 

parent


 

parent:


 

parenthesizedCategoryName

Answer my category name in parentheses


 

showChangeSet:


 

showChangeSetNamed:


  annotation top  
 

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


  changeSet menu top  
 

addPreamble


 

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


 

browseChangeSet

Open a message list browser on the new and changed methods in the current change set


 

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.


 

categorySubmenu:shifted:

Fill aMenu with less-frequently-needed category items


 

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


 

checkForAlienAuthorship

Open a message list browser on all uncommented methods in the current change set that have alien authorship


 

checkForUnclassifiedMethods

Open a message list browser on all methods in the current change set that have not been categorized


 

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


 

clearChangeSet

Clear out the current change set, after getting a confirmation.


 

copyAllToOther

Copy this entire change set into the one on the other side


 

currentCngSet


 

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.


 

expungeUniclasses

remove all memory of uniclasses in the receiver


 

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


 

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


 

goToChangeSetsProject

Transport the user to a project which bears the selected changeSet as its current changeSet


 

inspectChangeSet

Open a message list browser on the new and changed methods in the current change set


 

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


 

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.


 

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


 

openChangeSetBrowser

Open a ChangeSet browser on the current change set


 

promoteToTopChangeSet


 

remove

Completely destroy my change set. Check if it's OK first


 

removeCategory

Remove the current category


 

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


 

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


 

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


 

showChangeSetCategory:

Show the given change-set category


 

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.


 

trimHistory

Drop non-essential history (rename, reorg, method removals) from newly-added classes.


 

uninstallChangeSet

Attempt to uninstall the current change set, after confirmation.


 

update

recompute all of my panes


 

updateIfNecessary

Recompute all of my panes.


  class list top  
 

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


 

copyClassToOther

Place these changes in the other changeSet also


 

currentClassName


 

currentClassName:


 

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


 

forgetClass

Remove all mention of this class from the changeSet


 

messageListKey:from:

Respond to a Command key in the message-list pane.


 

moveClassToOther

Place class changes in the other changeSet and remove them from this one


 

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!


  code pane top  
 

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.


 

setContents

return the source code that shows in the bottom pane


 

toggleDiffing

Toggle whether diffs should be shown in the code pane


 

wantsOptionalButtons

No optional buttons for ChangeSorter


  creation top  
 

morphicWindow

ChangeSorter new openAsMorph


 

open

ChangeSorterPluggable 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.


 

openView:offsetBy:

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 360@0.


 

setDefaultChangeSetCategory

Set a default ChangeSetCategory for the receiver, and answer it


 

veryDeepFixupWith:

I have no fields and no superclass. Catch the super call.


 

veryDeepInner:

Copy all of my instance variables. Some need to be not copied at all, but shared.


  message list top  
 

browseVersions

Create and schedule a changelist browser on the versions of the
selected message.


 

copyMethodToOther

Place this change in the other changeSet also


 

currentSelector


 

currentSelector:


 

forget

Drop this method from the changeSet


 

messageList


 

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


 

moveMethodToOther

Place this change in the other changeSet and remove it from this side


 

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


 

selectedMessageName


 

shiftedMessageMenu:

Arm the menu so that it holds items appropriate to the message-list while the shift key is down. Answer the menu.


class methods
  adding top  
 

basicNewChangeSet:


 

newChangeSet

Prompt the user for a name, and establish a new change set of
that name (if ok), making it the current changeset. Return nil
of not ok, else return the actual changeset.


 

newChangeSet:

Makes a new change set called aName, add author initials to try to
ensure a unique change set name.


 

newChangeSetNamed:

Establish a new change set of the given name (if ok), making it the current changeset. Return nil of not ok, else return the actual changeset.


 

newChangesFromStream:named:

File in the code from the stream into a new change set whose
name is derived from aName. Leave the 'current change set'
unchanged. Return the new change set or nil on failure.


  class initialization top  
 

belongsInAdditions:

Answer whether a change set belongs in the Additions category, which is fed by all change sets that are neither numbered nor in the initial release


 

belongsInAll:

Answer whether a change set belongs in the All category


 

belongsInMyInitials:

Answer whether a change set belongs in the MyInitials category.


 

belongsInNumbered:

Answer whether a change set belongs in the Numbered category.


 

belongsInProjectChangeSets:

Answer whether a change set belongs in the MyInitials category.


 

belongsInProjectsInRelease:

Answer whether a change set belongs in the ProjectsInRelease category. You can hand-tweak this to suit your working style. This just covers the space of project names in the 2.9, 3.0, and 3.1a systems


 

belongsInRecentUpdates:

Answer whether a change set belongs in the RecentUpdates category.


 

changeSetCategoryNamed:

Answer the changeSetCategory of the given name, or nil if none


 

changeSetNamesInReleaseImage

Hard-coded: answer a list of names of project change sets that come pre-shipped in the latest sytem release


 

initialize

Initialize the class variables


 

initializeChangeSetCategories

Initialize the set of change-set categories


  enumerating top  
 

allChangeSetNames


 

allChangeSets

Return the list of all current ChangeSets


 

allChangeSetsWithClass:selector:


 

changeSetNamed:

Return the change set of the given name, or nil if none found. 1/22/96 sw


 

changeSetsNamedSuchThat:

(ChangeSorter changeSetsNamedSuchThat:
[:name | name first isDigit and: [name initialInteger >= 373]])
do: [:cs | AllChangeSets remove: cs wither]


 

existingOrNewChangeSetNamed:


 

gatherChangeSets

ChangeSorter gatherChangeSets


 

highestNumberedChangeSet

ChangeSorter highestNumberedChangeSet


 

mostRecentChangeSetWithChangeForClass:selector:


 

promoteToTop:

make aChangeSet the first in the list from now on


  removing top  
 

deleteChangeSetsNumberedLowerThan:

Delete all changes sets whose names start with integers smaller than anInteger


 

removeChangeSet:

Remove the given changeSet. Caller must assure that it's cool to do this


 

removeChangeSetsNamedSuchThat:


 

removeEmptyUnnamedChangeSets

Remove all change sets that are empty, whose names start with Unnamed,
and which are not nailed down by belonging to a Project.


  services top  
 

assuredChangeSetNamed:

Answer a change set of the given name. If one already exists, answer that, else create a new one and answer it.


 

browseChangeSetsWithClass:selector:

Put up a menu comprising a list of change sets that hold changes for the given class and selector. If the user selects one, open a single change-sorter onto it


 

browseChangeSetsWithSelector:

Put up a list of all change sets that contain an addition, deletion, or change of any method with the given selector


 

buildAggregateChangeSet

Establish a change-set named Aggregate which bears the union of all the changes in all the existing change-sets in the system (other than any pre-existing Aggregate). This can be useful when wishing to discover potential conflicts between a disk-resident change-set and an image. Formerly very useful, now some of its unique contributions have been overtaken by new features


 

countOfChangeSetsWithClass:andSelector:

Answer how many change sets record a change for the given class and selector


 

doesAnyChangeSetHaveClass:andSelector:

Answer whether any known change set bears a change for the given class and selector


 

prototypicalToolWindow

Answer a window representing a prototypical instance of the receiver


 

recentUpdateMarker

Answer the number representing the threshold of what counts as 'recent' for an update number. This allow you to use the RecentUpdates category in a ChangeSorter to advantage


 

recentUpdateMarker:

Set the recent update marker as indicated


 

reorderChangeSets

Change the order of the change sets to something more convenient:
First come the project changesets that come with the release. These are mostly empty.
Next come all numbered updates.
Next come all remaining changesets
In a ChangeSorter, they will appear in the reversed order.


 

secondaryChangeSet

Answer a likely change set to use as the second initial one in a Dual Change Sorter.