changed: #setEnforcedNameSpace
authorClaus Gittinger <cg@exept.de>
Tue, 08 May 2012 14:07:14 +0200
changeset 11499 dcd14a0cdbc5
parent 11498 b14061395b3a
child 11500 6d4470524d8b
changed: #setEnforcedNameSpace forward to workspace for correct doIt
ChangesBrowser.st
--- a/ChangesBrowser.st	Mon May 07 14:11:54 2012 +0200
+++ b/ChangesBrowser.st	Tue May 08 14:07:14 2012 +0200
@@ -1615,6 +1615,1285 @@
 
 !ChangesBrowser methodsFor:'menu actions'!
 
+doApply
+    "user wants a change to be applied"
+
+    self withSelectedChangesDo:[:changeNr |
+        (self applyChange:changeNr) ifFalse:[
+            ^ self "/ cancel
+        ].
+        self autoSelect:(changeNr + 1)
+    ]
+!
+
+doApplyAll
+    "user wants all changes to be applied"
+
+    self withExecuteCursorDo:[
+        |lastNr "{ Class: SmallInteger }" |
+
+        self clearCodeView.
+        lastNr := self numberOfChanges.
+
+        "if we apply multiple changes, and an error occurs,
+         ask the user if all operations should be aborted..."
+        multipleApply := lastNr > 1.
+
+        1 to:lastNr do:[:changeNr |
+            changeListView setSelection:changeNr.
+            self applyChange:changeNr
+        ].
+        self autoSelectLast
+    ]
+
+    "Modified: 21.1.1997 / 22:26:30 / cg"
+!
+
+doApplyClassFromBeginning
+    "user wants all changes for this class from 1 to changeNr to be applied"
+
+    self withSingleSelectedChangeDo:[:changeNr |
+        |thisClassName classNameToApply lastChange
+         lastNr "{ Class: SmallInteger }" |
+
+        classNameToApply := self classNameOfChange:changeNr.
+        classNameToApply notNil ifTrue:[
+            self clearCodeView.
+
+            "if we apply multiple changes, and an error occurs,
+             ask the user if all operations should be aborted..."
+            multipleApply := changeNr ~= 1.
+
+            1 to:changeNr do:[:changeNr |
+                thisClassName := self classNameOfChange:changeNr.
+                thisClassName = classNameToApply ifTrue:[
+                    changeListView setSelection:changeNr.
+                    self applyChange:changeNr.
+                    lastChange := changeNr
+                ].
+            ].
+            self autoSelect:changeNr+1.
+        ]
+    ]
+
+    "Modified: 21.1.1997 / 22:26:04 / cg"
+!
+
+doApplyClassRest
+    "user wants all changes for this class from changeNr to be applied"
+
+    self withSingleSelectedChangeDo:[:changeNr |
+        |thisClassName classNameToApply lastChange
+         lastNr "{ Class: SmallInteger }" |
+
+        classNameToApply := self classNameOfChange:changeNr.
+        classNameToApply notNil ifTrue:[
+            self clearCodeView.
+
+            lastNr := self numberOfChanges.
+
+            "if we apply multiple changes, and an error occurs,
+             ask the user if all operations should be aborted..."
+            multipleApply := (lastNr - changeNr) > 1.
+
+            changeNr to:lastNr do:[:changeNr |
+                thisClassName := self classNameOfChange:changeNr.
+                thisClassName = classNameToApply ifTrue:[
+                    changeListView setSelection:changeNr.
+                    self applyChange:changeNr.
+                    lastChange := changeNr
+                ].
+            ].
+            self autoSelect:lastChange.
+        ]
+    ]
+
+    "Modified: 21.1.1997 / 22:26:04 / cg"
+!
+
+doApplyFromBeginning
+    "user wants all changes from 1 to changeNr to be applied"
+
+    self withSingleSelectedChangeDo:[:changeNr |
+        |lastNr "{ Class: SmallInteger }" |
+
+        self clearCodeView.
+
+        "if we apply multiple changes, and an error occurs,
+         ask the user if all operations should be aborted..."
+        multipleApply := changeNr ~= 1.
+
+        1 to:changeNr do:[:changeNr |
+            changeListView setSelection:changeNr.
+            self applyChange:changeNr
+        ].
+        self autoSelect:changeNr+1.
+    ]
+!
+
+doApplyRest
+    "apply all changes from changeNr to the end"
+
+    self withSingleSelectedChangeDo:[:changeNr |
+        |lastNr "{ Class: SmallInteger }" |
+
+        self clearCodeView.
+
+        lastNr := self numberOfChanges.
+
+        "if we apply multiple changes, and an error occurs,
+         ask the user if all operations should be aborted..."
+        multipleApply := (lastNr - changeNr) > 1.
+
+        changeNr to:lastNr do:[:changeNr |
+            changeListView setSelection:changeNr.
+            self applyChange:changeNr
+        ].
+        self autoSelect:self numberOfChanges.
+    ]
+
+    "Modified: 21.1.1997 / 22:25:29 / cg"
+!
+
+doApplyToConflictOrEnd
+    "apply all changes from changeNr to either a conflict (i.e. method exists)
+     or the end."
+
+    self withSingleSelectedChangeDo:[:changeNr |
+        |lastNr "{ Class: SmallInteger }"|
+
+        self clearCodeView.
+
+        lastNr := self numberOfChanges.
+
+        "if we apply multiple changes, and an error occurs,
+         ask the user if all operations should be aborted..."
+        multipleApply := (lastNr - changeNr) > 1.
+
+        changeNr to:lastNr do:[:changeNr |
+            | cls sel |
+            changeListView setSelection:changeNr.
+
+            ((cls := self classOfChange:changeNr ifAbsent:[:className| nil]) notNil
+            and:[(sel := self selectorOfMethodChange:changeNr) notNil])
+            ifTrue:[
+                (cls includesSelector:sel) ifTrue:[
+                    self autoSelect:changeNr.
+                    ^ self
+                ].
+            ].
+            self applyChange:changeNr
+        ].
+        self autoSelect:self numberOfChanges.
+    ]
+!
+
+doBrowse
+    "user wants a browser on the class of a change"
+
+    self withSingleSelectedChangeDo:[:changeNr |
+	|cls|
+
+	cls := self classOfChange:changeNr.
+	cls notNil ifTrue:[
+	    UserPreferences systemBrowserClass
+		openInClass:cls
+		selector:(self selectorOfMethodChange:changeNr)
+	]
+    ]
+!
+
+doBrowseImplementors
+    "open an implementors-browser"
+
+    |changeNr initial selector|
+
+    (changeNr := self theSingleSelection) notNil ifTrue:[
+	initial := self selectorOfMethodChange:changeNr.
+    ].
+
+    selector := Dialog
+		    request:'Selector to browse implementors of:'
+		    initialAnswer:(initial ? '').
+    selector size ~~ 0 ifTrue:[
+	UserPreferences systemBrowserClass
+	    browseImplementorsMatching:selector.
+    ]
+!
+
+doBrowseSenders
+    "user wants a browser on the class of a change"
+
+    |changeNr initial selector|
+
+    (changeNr := self theSingleSelection) notNil ifTrue:[
+	initial := self selectorOfMethodChange:changeNr.
+    ].
+
+    selector := Dialog
+		    request:'Selector to browse senders of:'
+		    initialAnswer:(initial ? '').
+    selector size ~~ 0 ifTrue:[
+	UserPreferences systemBrowserClass
+	    browseAllCallsOn:selector asSymbol.
+    ]
+!
+
+doCheckinAndDeleteClassAll
+    "first checkin the selected changes class then delete all changes
+     for it."
+
+    |classes answer logTitle checkinInfo|
+
+"/    self theSingleSelection isNil ifTrue:[
+"/        ^ self information:'Only possible if a single change is selected.'.
+"/    ].
+
+    self withExecuteCursorDo:[
+        classes := IdentitySet new.
+
+        self withSelectedChangesDo:[:changeNr |
+            | className class |
+
+            className := self classNameOfChange:changeNr.
+            className notNil ifTrue:[
+                class := Smalltalk classNamed:className.
+                class isNil ifTrue:[
+                    self error:'oops - no class: ', className mayProceed:true.
+                ].
+                class notNil ifTrue:[
+                    class := class theNonMetaclass.
+                    (classes includes:class) ifFalse:[
+                        class isPrivate ifTrue:[
+                            (classes includes:class owningClass) ifFalse:[
+                                answer := self confirmWithCancel:('This is a private class.\\CheckIn the owner ''%1'' and all of its private classes ?'
+                                                                    bindWith:class owningClass name allBold) withCRs.
+                                answer isNil ifTrue:[^ self].
+                                answer ifTrue:[
+                                    classes add:class owningClass
+                                ]
+                            ]
+                        ] ifFalse:[
+                            classes add:class
+                        ].
+                    ]
+                ]
+            ]
+        ].
+
+        classes size == 1 ifTrue:[
+            logTitle := classes first name.
+        ] ifFalse:[
+            logTitle := '%1 classes' bindWith:classes size.
+        ].
+        checkinInfo := SourceCodeManagerUtilities default
+                        getCheckinInfoFor:logTitle
+                        initialAnswer:nil.
+        checkinInfo isNil ifTrue:[^ self ].
+
+        changeListView setSelection:nil.
+        classes do:[:eachClass |
+            (SourceCodeManagerUtilities default checkinClass:eachClass withInfo:checkinInfo)
+                ifTrue:[
+                    self silentDeleteChangesForClassAndPrivateClasses:eachClass name
+                           from:1 to:(self numberOfChanges).
+                ]
+        ].
+        self setChangeList.
+    ]
+
+    "Modified: / 6.9.1995 / 17:11:16 / claus"
+    "Modified: / 17.11.2001 / 14:21:13 / cg"
+!
+
+doCompare
+    "compare change with current system version"
+
+    classesNotToBeAutoloaded removeAll.
+
+    self withSingleSelectedChangeDo:[:changeNr |
+        self withExecuteCursorDo:[
+            self compareChange:changeNr
+        ].
+        self newLabel:''
+    ].
+
+    "Modified: 24.2.1996 / 19:37:19 / cg"
+!
+
+doCompareAndCompress
+    "remove all changes, which are equivalent to the current image version"
+
+    |toDelete|
+
+    classesNotToBeAutoloaded removeAll.
+    toDelete := OrderedCollection new.
+    self withExecuteCursorDo:[
+        1 to:self numberOfChanges do:[:changeNr |
+            (self compareChange:changeNr showResult:false) == true ifTrue:[
+                toDelete add:changeNr
+            ]
+        ].
+    ].
+
+    toDelete reverseDo:[:changeNr |
+        self silentDeleteChange:changeNr.
+    ].
+    self setChangeList.
+    "
+     scroll back a bit, if we are left way behind the list
+    "
+    changeListView firstLineShown > self numberOfChanges ifTrue:[
+        changeListView makeLineVisible:self numberOfChanges
+    ].
+    self clearCodeView.
+
+    self newLabel:''.
+    classesNotToBeAutoloaded removeAll.
+!
+
+doCompress
+    "compress the change-set; this replaces multiple method-changes by the last
+     (i.e. the most recent) change"
+
+    self compressForClass:nil
+
+    "Modified: / 29.10.1997 / 01:03:26 / cg"
+!
+
+doCompressClass
+    "compress changes for the selected class.
+     this replaces multiple method-changes by the last (i.e. the most recent) change."
+
+    self theSingleSelection isNil ifTrue:[
+	^ self information:'Only possible if a single change is selected.'.
+    ].
+
+    self selectedClassNames do:[:classNameToCompress |
+	self compressForClass:classNameToCompress.
+    ]
+
+    "Created: / 29.10.1997 / 01:05:16 / cg"
+    "Modified: / 19.11.2001 / 21:55:17 / cg"
+!
+
+doCompressSelector
+    "compress changes for the selected class & selector.
+     this replaces multiple method-changes by the last (i.e. the most recent) change."
+
+    |classSelectorPairs|
+
+    self theSingleSelection isNil ifTrue:[
+	^ self information:'Only possible if a single change is selected.'.
+    ].
+
+    classSelectorPairs := Set new.
+    self withSelectedChangesDo:[:changeNr |
+	| classNameToCompress selector |
+
+	classNameToCompress := self classNameOfChange:changeNr.
+	classNameToCompress notNil ifTrue:[
+	    selector := self selectorOfMethodChange:changeNr.
+	    selector notNil ifTrue:[
+		classSelectorPairs add:(classNameToCompress -> selector).
+	    ]
+	]
+    ].
+
+    classSelectorPairs do:[:pair |
+	self compressForClass:pair key selector:pair value.
+    ]
+
+    "Created: / 19.11.2001 / 21:50:59 / cg"
+    "Modified: / 19.11.2001 / 22:10:08 / cg"
+!
+
+doDelete
+    "delete currently selected change(s)"
+
+    |rangeEnd rangeStart firstDeleted|
+
+    changeListView selection size <= 5 ifTrue:[
+	self withSelectedChangesReverseDo:[:changeNr |
+	    self deleteChange:changeNr.
+	    self autoSelectOrEnd:changeNr
+	].
+	^ self
+    ].
+
+    self withSelectedChangesReverseDo:[:changeNr |
+	rangeEnd isNil ifTrue:[
+	    rangeEnd := rangeStart := changeNr
+	] ifFalse:[
+	    (changeNr = (rangeEnd + 1)) ifTrue:[
+		rangeEnd := changeNr
+	    ] ifFalse:[
+		(changeNr = (rangeStart - 1)) ifTrue:[
+		    rangeStart := changeNr
+		] ifFalse:[
+		    self deleteChangesFrom:rangeStart to:rangeEnd.
+		    firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
+		    rangeStart := rangeEnd := nil.
+		].
+	    ].
+	].
+    ].
+    rangeStart notNil ifTrue:[
+	self deleteChangesFrom:rangeStart to:rangeEnd.
+	firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
+    ].
+    self autoSelectOrEnd:firstDeleted
+!
+
+doDeleteAndSelectPrevious
+    "delete currently selected change(s)"
+
+    self withSelectedChangesReverseDo:[:changeNr |
+	self deleteChange:changeNr.
+	self autoSelectOrEnd:changeNr-1
+    ]
+!
+
+doDeleteClassAll
+    "delete all changes with same class as currently selected change"
+
+    |classNamesToDelete lastChangeNr overAllNumDeletedBefore|
+
+    lastChangeNr := -1.
+    classNamesToDelete := Set new.
+    self withSelectedChangesDo:[:changeNr |
+	|classNameToDelete|
+
+	classNameToDelete := self classNameOfChange:changeNr.
+	classNameToDelete notNil ifTrue:[
+	    classNamesToDelete add:classNameToDelete.
+	].
+	lastChangeNr := lastChangeNr max:changeNr.
+    ].
+
+    overAllNumDeletedBefore := 0.
+    changeListView setSelection:nil.
+
+    self withExecuteCursorDo:[
+	classNamesToDelete do:[:classNameToDelete |
+	    |numDeletedBefore|
+
+	    self silentDeleteChangesFor:classNameToDelete
+				   from:lastChangeNr
+				     to:(self numberOfChanges).
+	    numDeletedBefore := self
+				   silentDeleteChangesFor:classNameToDelete
+				   from:1
+				   to:(lastChangeNr-1).
+	    lastChangeNr := lastChangeNr - numDeletedBefore.
+	    overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+	].
+    ].
+
+    self setChangeList.
+    self autoSelectOrEnd:lastChangeNr
+
+    "Created: / 13.12.1995 / 16:07:14 / cg"
+    "Modified: / 28.1.1998 / 20:42:14 / cg"
+!
+
+doDeleteClassAndPrivateClassesAll
+    "delete all changes with same class and private classes
+     as currently selected change"
+
+    |lastChangeNr classNamesToDelete overAllNumDeletedBefore|
+
+    lastChangeNr := -1.
+    classNamesToDelete := Set new.
+    self withSelectedChangesDo:[:changeNr |
+	|classNameToDelete|
+
+	classNameToDelete := self ownerClassNameOfChange:changeNr.
+	classNameToDelete notNil ifTrue:[
+	    classNamesToDelete add:classNameToDelete.
+	].
+	lastChangeNr := lastChangeNr max:changeNr.
+    ].
+
+    overAllNumDeletedBefore := 0.
+    changeListView setSelection:nil.
+
+    self withExecuteCursorDo:[
+	classNamesToDelete do:[:classNameToDelete |
+	    | changeNr numDeletedBefore|
+
+	    classNameToDelete notNil ifTrue:[
+		changeListView setSelection:nil.
+		self silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
+				       from:lastChangeNr
+					 to:(self numberOfChanges).
+		numDeletedBefore := self
+				       silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
+				       from:1
+				       to:(lastChangeNr-1).
+		lastChangeNr := lastChangeNr - numDeletedBefore.
+		overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+	    ]
+	]
+    ].
+    self setChangeList.
+    self autoSelectOrEnd:lastChangeNr
+
+    "Created: / 13.12.1995 / 16:07:14 / cg"
+    "Modified: / 28.1.1998 / 20:42:14 / cg"
+!
+
+doDeleteClassFromBeginning
+    "delete changes with same class as currently selected change from the beginning
+     up to the selected change.
+     Useful to get rid of obsolete changes before a fileout or checkin entry."
+
+    self withSingleSelectedChangeDo:[:changeNr |
+	|classNameToDelete prevSelection numDeleted|
+
+	classNameToDelete := self classNameOfChange:changeNr.
+	classNameToDelete notNil ifTrue:[
+	    prevSelection := changeNr.
+	    changeListView setSelection:nil.
+	    numDeleted := self
+				silentDeleteChangesFor:classNameToDelete
+				from:1
+				to:changeNr.
+	    self setChangeList.
+	    self autoSelectOrEnd:(changeNr + 1 - numDeleted)
+	]
+    ].
+
+    "Created: 13.12.1995 / 15:41:58 / cg"
+    "Modified: 25.5.1996 / 12:26:34 / cg"
+!
+
+doDeleteClassRest
+    "delete rest of changes with same class as currently selected change"
+
+    self withSingleSelectedChangeDo:[:changeNr |
+	| classNameToDelete |
+
+	classNameToDelete := self classNameOfChange:changeNr.
+	classNameToDelete notNil ifTrue:[
+	    changeListView setSelection:nil.
+	    self silentDeleteChangesFor:classNameToDelete
+				   from:changeNr
+				     to:(self numberOfChanges).
+	    self setChangeList.
+	    self autoSelectOrEnd:changeNr
+	]
+    ]
+
+    "Modified: / 18.5.1998 / 14:25:07 / cg"
+!
+
+doDeleteClassSelectorAll
+    "delete all changes with same class and selector as currently selected change"
+
+    |classNameSelectorPairsToDelete lastChangeNr overAllNumDeletedBefore|
+
+    lastChangeNr := -1.
+    classNameSelectorPairsToDelete := Set new.
+    self withSelectedChangesDo:[:changeNr |
+	|className selector|
+
+	className := self classNameOfChange:changeNr.
+	selector := self selectorOfMethodChange:changeNr.
+	selector notNil ifTrue:[
+	    (className notNil and:[selector notNil]) ifTrue:[
+		classNameSelectorPairsToDelete add:(className -> selector).
+	    ]
+	].
+	lastChangeNr := lastChangeNr max:changeNr.
+    ].
+
+    overAllNumDeletedBefore := 0.
+    changeListView setSelection:nil.
+
+    self withExecuteCursorDo:[
+	classNameSelectorPairsToDelete do:[:pair |
+	    |numDeletedBefore className selector|
+
+	    className := pair key.
+	    selector  := pair value.
+	    self silentDeleteChangesFor:className selector:selector
+				   from:lastChangeNr
+				     to:(self numberOfChanges).
+	    numDeletedBefore := self
+				   silentDeleteChangesFor:className selector:selector
+				   from:1
+				   to:(lastChangeNr-1).
+	    lastChangeNr := lastChangeNr - numDeletedBefore.
+	    overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+	].
+    ].
+
+    self setChangeList.
+    self autoSelectOrEnd:lastChangeNr
+
+    "Created: / 13.12.1995 / 16:07:14 / cg"
+    "Modified: / 28.1.1998 / 20:42:14 / cg"
+!
+
+doDeleteFromBeginning
+    "delete all changes from 1 to the current"
+
+    self withSingleSelectedChangeDo:[:changeNr |
+	self deleteChangesFrom:1 to:changeNr.
+	self clearCodeView.
+	self autoSelectOrEnd:changeNr
+    ]
+!
+
+doDeleteRest
+    "delete all changes from current to the end"
+
+    self withSingleSelectedChangeDo:[:changeNr |
+	self deleteChangesFrom:changeNr to:(self numberOfChanges).
+	self clearCodeView.
+	self autoSelectOrEnd:changeNr-1
+    ]
+!
+
+doFileoutAndDeleteClassAll
+    "first fileOut the selected changes class then delete all changes
+     for it."
+
+    self withSingleSelectedChangeDo:[:changeNr |
+	| className class |
+
+	className := self classNameOfChange:changeNr.
+	className notNil ifTrue:[
+	    class := Smalltalk classNamed:className.
+	    class notNil ifTrue:[
+		Class fileOutErrorSignal handle:[:ex |
+		    self warn:('fileout failed: ' , ex description).
+		] do:[
+		    class fileOut.
+		    self doDeleteClassAll
+		].
+	    ].
+
+	].
+    ]
+
+    "Modified: 6.9.1995 / 17:11:16 / claus"
+!
+
+doMakePatch
+    "user wants a change to be made a patch
+     - copy it over to the patches file"
+
+    self withSelectedChangesDo:[:changeNr |
+	self makeChangeAPatch:changeNr.
+	self autoSelect:(changeNr + 1)
+    ]
+!
+
+doMakePermanent
+    "user wants a change to be made permanent
+     - rewrite the source file where this change has to go"
+
+    |yesNoBox|
+
+    (self theSingleSelection) isNil ifTrue:[
+        ^ self information:'Only possible if a single change is selected.'.
+    ].
+
+    yesNoBox := YesNoBox new.
+    yesNoBox title:(resources string:'Warning: this operation cannot be undone').
+    yesNoBox okText:(resources string:'continue') noText:(resources string:'abort').
+    yesNoBox okAction:[   |changeNr|
+
+                          changeNr := self theSingleSelection.
+                          changeNr notNil ifTrue:[
+                              self makeChangePermanent:changeNr.
+                              self autoSelect:(changeNr + 1)
+                          ]
+                      ].
+    yesNoBox showAtPointer.
+    yesNoBox destroy
+
+    "Modified: 7.1.1997 / 23:03:33 / cg"
+!
+
+doSave
+    "user wants a change to be appended to a file"
+
+    |fileName|
+
+    self withSelectedChangesDo:[:changeNr |
+        fileName := Dialog
+                        requestFileNameForSave:(resources string:'Append change to:')
+                        default:(lastSaveFileName ? '')
+                        ok:(resources string:'Append')
+                        abort:(resources string:'Abort')
+                        pattern:'*.chg'.
+
+        fileName notNil ifTrue:[
+            lastSaveFileName := fileName.
+            self withCursor:(Cursor write) do:[
+                self appendChange:changeNr toFile:fileName.
+            ].
+            self autoSelect:(changeNr + 1)
+        ].
+    ]
+
+    "Modified: / 27-10-2010 / 11:30:07 / cg"
+!
+
+doSaveClass
+    "user wants changes for some class from current to end to be appended to a file"
+
+    (self theSingleSelection) isNil ifTrue:[
+	^ self information:'Only possible if a single change is selected.'.
+    ].
+    self doSaveClassFrom:1
+!
+
+doSaveClassAll
+    "user wants changes for some class from current to end to be appended to a file"
+
+    (self theSingleSelection) isNil ifTrue:[
+	^ self information:'Only possible if a single change is selected.'.
+    ].
+    self doSaveClassFrom:1
+!
+
+doSaveClassFrom:startNr
+    "user wants changes from current to end to be appended to a file"
+
+    |changeNr classNameToSave|
+
+    (changeNr := self theSingleSelection) isNil ifTrue:[
+	^ self information:'Only possible if a single change is selected.'.
+    ].
+    classNameToSave := self classNameOfChange:changeNr.
+    classNameToSave notNil ifTrue:[
+	self saveClass:classNameToSave from:startNr
+    ]
+!
+
+doSaveClassRest
+    "user wants changes for some class from current to end to be appended to a file"
+
+    |changeNr|
+
+    (changeNr := self theSingleSelection) isNil ifTrue:[
+        ^ self information:'Only possible if a single change is selected.'.
+    ].
+    self doSaveClassFrom:changeNr.
+
+    changeListView setSelection:changeNr.
+    "/ self changeSelection:changeNr.
+!
+
+doSaveRest
+    "user wants changes from current to end to be appended to a file"
+
+    |changeNr fileName|
+
+    (changeNr := self theSingleSelection) isNil ifTrue:[
+        ^ self information:(resources string:'Only possible if a single change is selected.').
+    ].
+
+    fileName := Dialog
+                    requestFileNameForSave:(resources string:'Append changes to:')
+                    default:(lastSaveFileName ? '')
+                    ok:(resources string:'Append')
+                    abort:(resources string:'Abort')
+                    pattern:'*.chg'.
+
+    fileName notNil ifTrue:[
+        lastSaveFileName := fileName.
+        self withCursor:(Cursor write) do:[
+            changeNr to:(self numberOfChanges) do:[:changeNr |
+                changeListView setSelection:changeNr.
+                (self appendChange:changeNr toFile:fileName) ifFalse:[
+                    ^ self
+                ]
+            ]
+        ]
+    ]
+
+    "Modified: / 27-10-2010 / 11:30:37 / cg"
+!
+
+doUpdate
+    "reread the changes-file"
+
+    self readChangesFileInBackground:true.
+    self newLabel:''.
+    realized ifTrue:[
+	self setChangeList.
+    ]
+!
+
+doWriteBack
+    "write back the list onto the changes file"
+
+    anyChanges ifTrue:[
+        (self writeBackChanges) ifTrue:[
+            realized ifTrue:[
+                self readChangesFile.
+                realized ifTrue:[
+                    self setChangeList
+                ]
+            ]
+        ]
+    ]
+
+    "Modified: 5.9.1996 / 17:19:46 / cg"
+!
+
+findClass
+    "findClass menu action: let user enter a classes name, and select the next change for that class"
+
+    |current|
+
+    changeNrShown notNil ifTrue:[
+        current := self classNameOfChange:changeNrShown.
+    ].
+
+    self
+        askForSearch:'Class to search for:'
+        initialAnswer:current
+        thenSearchUsing:[:searchString :changeNr |
+                            |thisClassName|
+
+                            thisClassName := self classNameOfChange:changeNr.
+                            thisClassName notNil
+                            and:[
+                                (thisClassName sameAs: searchString)
+                                or:[searchString includesMatchCharacters and:[searchString match:thisClassName ignoreCase:true]]]
+                        ]
+        onCancel:[^ self].
+
+    lastSearchType := #class.
+    changeNrShown == 0 ifTrue:[changeNrShown := nil].
+!
+
+findFirstForClass
+    "findNextForClass menu action: select the next change for the selected changes class"
+
+    self findNextForClassStartingAt:1
+
+    "Created: / 20-11-2006 / 16:37:56 / cg"
+!
+
+findLastForClass
+    "findPreviousForClass menu action: select the previous change for the selected changes class"
+
+    self findPreviousForClassStartingAt:(self numberOfChanges)
+
+    "Created: / 20-11-2006 / 16:39:15 / cg"
+!
+
+findLastSnapshot
+    "findLastSnapshot menu action: select the last change which is for a snapShot-image save action"
+
+    "/ lastSearchType := #snapshot.
+
+    self 
+        findPreviousForWhich: [:changeNr | self changeIsSnapShotInfo:changeNr ]
+        startingAt:(self numberOfChanges)
+
+    "Created: / 06-10-2006 / 11:03:39 / cg"
+!
+
+findNext
+    "findNext menu action: select the next change.
+     Searches for what the last search was for; i.e. either same class or same selector"
+
+    lastSearchType == #selector ifTrue:[
+	^ self findNextForSelector
+    ].
+    lastSearchType == #snapshot ifTrue:[
+	^ self findNextSnapshot
+    ].
+    lastSearchType == #string ifTrue:[
+	^ self findNextForString
+    ].
+    lastSearchType == #difference ifTrue:[
+	^ self findNextDifference
+    ].
+
+    ^ self findNextForClass
+
+    "Created: / 18.6.1998 / 22:15:00 / cg"
+    "Modified: / 18.6.1998 / 22:15:25 / cg"
+!
+
+findNextDifference
+    lastSearchType := #difference.
+    changeNrShown isNil ifTrue:[^ self].
+
+    self findNextForWhich:[:changeNr |
+	    (self compareChange:changeNr showResult:false) == true ifTrue:[
+		"/ same
+		false
+	    ] ifFalse:[
+		"/ different
+		true
+	    ]
+	]
+!
+
+findNextForClass
+    "findNextForClass menu action: select the next change for the selected changes class"
+
+    self findNextForClassStartingAt: changeNrShown + 1
+
+    "Modified: / 20-11-2006 / 16:37:49 / cg"
+!
+
+findNextForClassStartingAt:startNr
+    "findNextForClass menu action: select the next change for the selected changes class"
+
+    |cls|
+
+    lastSearchType := #class.
+    changeNrShown isNil ifTrue:[^ self].
+
+    cls := self classNameOfChange:changeNrShown.
+    cls isNil ifTrue:[^ self].
+
+    self 
+        findNextForWhich:[:changeNr |
+                |thisClass|
+
+                thisClass := self classNameOfChange:changeNr.
+                (thisClass = cls
+                or:[cls includesMatchCharacters and:[cls match:thisClass]])]
+        startingAt:startNr
+
+    "Created: / 20-11-2006 / 16:37:37 / cg"
+!
+
+findNextForSelector
+    "findNextForSelector menu action: select the next change for the selected changes selector"
+
+    |sel|
+
+    lastSearchType := #selector.
+    changeNrShown isNil ifTrue:[^ self].
+
+    sel := self selectorOfMethodChange:changeNrShown.
+    sel isNil ifTrue:[^ self].
+
+    self findNextForWhich: [:changeNr |
+		|thisSelector|
+
+		thisSelector := self selectorOfMethodChange:changeNr.
+		(thisSelector = sel or:[sel includesMatchCharacters and:[sel match:thisSelector]])
+	]
+
+!
+
+findNextForString
+    lastSearchString isNil ifTrue:[
+	^ self findString
+    ].
+    self findNextWithString:lastSearchString
+!
+
+findNextForWhich:aBlock
+    "helper: select the next change for which aBlock evaluates to true"
+
+    ^ self findNextForWhich:aBlock startingAt:changeNrShown + 1
+
+    "Modified: / 20-11-2006 / 16:34:23 / cg"
+!
+
+findNextForWhich:aBlock startingAt:changeNrToStartSearch
+    "helper: select the next change for which aBlock evaluates to true"
+
+    ^ self     
+        findNextOrPrevious:#next 
+        forWhich:aBlock startingAt:changeNrToStartSearch
+
+    "Created: / 20-11-2006 / 16:34:06 / cg"
+!
+
+findNextOrPrevious:direction forWhich:aBlock startingAt:changeNrToStartSearch
+    "helper: find and select the next or previous change for which aBlock evaluates to true"
+
+    self withCursor:Cursor questionMark do:[
+        Object userInterruptSignal handle:[:ex |
+            self beep.
+            ^ 0
+        ] do:[
+            |increment nr lastNr|
+
+            increment := (direction == #previous) ifTrue:[-1] ifFalse:[1].
+            lastNr := self numberOfChanges.
+            nr := changeNrToStartSearch.
+            [ (direction == #previous and:[nr >= 1])
+              or:[ direction == #next and:[ nr <= lastNr]] 
+            ] whileTrue:[
+                (aBlock value:nr) ifTrue:[
+                    changeListView setSelection:nr.
+                    self changeSelection:nr.
+                    ^ nr
+                ].
+                nr := nr + increment.
+            ].
+        ]
+    ].
+    self showNotFound.
+    self windowGroup sensor flushKeyboard. "/ avoid multiple beeps, in case of type ahead
+    ^ 0
+
+    "Created: / 08-03-2012 / 11:57:26 / cg"
+!
+
+findNextSnapshot
+    "findNextSnapshot menu action: select the next change which is for a snapShot-image save action"
+
+    lastSearchType := #snapshot.
+    changeNrShown isNil ifTrue:[^ self].
+
+    self findNextForWhich: [:changeNr | self changeIsSnapShotInfo:changeNr ]
+!
+
+findNextWithString:searchString
+    lastSearchType := #string.
+
+    lastSearchString := searchString.
+
+    changeNrShown isNil ifTrue:[
+	changeNrShown := 0.
+    ].
+
+    self findNextForWhich:
+	[:changeNr |
+	    |s|
+
+	    s := self sourceOfMethodChange:changeNr.
+	    s notNil and:[
+		(searchString includesMatchCharacters not
+			    and:[(s findString:searchString) ~~ 0])
+		or:[ searchString includesMatchCharacters
+			    and:[('*' , searchString , '*') match:s ]]]
+	].
+
+    changeNrShown == 0 ifTrue:[changeNrShown := nil].
+
+    codeView setSearchPattern:searchString.
+    codeView
+	searchFwd:searchString
+	ignoreCase:false
+	startingAtLine:1 col:0
+	ifAbsent:nil.
+
+!
+
+findPrevious
+    "findPrevious menu action: select the previous change.
+     Searches for what the last search was for; i.e. either same class or same selector"
+
+    lastSearchType == #selector ifTrue:[
+	^ self findPreviousForSelector
+    ].
+    lastSearchType == #snapshot ifTrue:[
+	^ self findPreviousSnapshot
+    ].
+    lastSearchType == #string ifTrue:[
+	^ self findPreviousForString
+    ].
+    lastSearchType == #difference ifTrue:[
+	^ self findPreviousDifference
+    ].
+
+    ^ self findPreviousForClass
+
+    "Created: / 18.6.1998 / 22:15:15 / cg"
+!
+
+findPreviousDifference
+    lastSearchType := #difference.
+    changeNrShown isNil ifTrue:[^ self].
+
+    self findPreviousForWhich:[:changeNr |
+	    (self compareChange:changeNr showResult:false) == true ifTrue:[
+		"/ same
+		false
+	    ] ifFalse:[
+		"/ different
+		true
+	    ]
+	]
+!
+
+findPreviousForClass
+    "findPreviousForClass menu action: select the previous change for the selected changes class"
+
+    self findPreviousForClassStartingAt:(changeNrShown - 1)
+
+    "Modified: / 20-11-2006 / 16:39:04 / cg"
+!
+
+findPreviousForClassStartingAt:startNr
+    "findPreviousForClass menu action: select the previous change for the selected changes class"
+
+    |cls|
+
+    lastSearchType := #class.
+    changeNrShown isNil ifTrue:[^ self].
+
+    cls := self classNameOfChange:changeNrShown.
+    cls isNil ifTrue:[^ self].
+
+    self 
+        findPreviousForWhich:
+            [:changeNr |
+                    |thisClass|
+
+                    thisClass := self classNameOfChange:changeNr.
+                    (thisClass = cls
+                    or:[cls includesMatchCharacters and:[cls match:thisClass]])]
+        startingAt:startNr
+
+    "Created: / 20-11-2006 / 16:38:37 / cg"
+!
+
+findPreviousForSelector
+    "findPreviousForSelector menu action: select the previous change for the selected changes selector"
+
+    |sel|
+
+    lastSearchType := #selector.
+    changeNrShown isNil ifTrue:[^ self].
+
+    sel := self selectorOfMethodChange:changeNrShown.
+    sel isNil ifTrue:[^ self].
+
+    self findPreviousForWhich:
+	[:changeNr |
+		|thisSelector|
+
+		thisSelector := self selectorOfMethodChange:changeNr.
+		(thisSelector = sel
+		or:[sel includesMatchCharacters and:[sel match:thisSelector]])
+	]
+
+!
+
+findPreviousForString
+    lastSearchString isNil ifTrue:[
+	^ self findString
+    ].
+    self findPreviousWithString:lastSearchString
+!
+
+findPreviousForWhich:aBlock
+    "helper: select the previous change for which aBlock evaluates to true"
+
+    ^ self findPreviousForWhich:aBlock startingAt:(changeNrShown - 1)
+
+    "Modified: / 06-10-2006 / 11:01:38 / cg"
+!
+
+findPreviousForWhich:aBlock startingAt:changeNrToStartSearch
+    "helper: select the previous change for which aBlock evaluates to true"
+
+    ^ self     
+        findNextOrPrevious:#previous 
+        forWhich:aBlock startingAt:changeNrToStartSearch
+
+    "Created: / 06-10-2006 / 11:01:09 / cg"
+!
+
+findPreviousSnapshot
+    "findPreviousSnapshot menu action: select the previous change which is for a snapShot-image save action"
+
+    lastSearchType := #snapshot.
+    changeNrShown isNil ifTrue:[^ self].
+
+    self findPreviousForWhich: [:changeNr | self changeIsSnapShotInfo:changeNr ]
+!
+
+findPreviousWithString:searchString
+    lastSearchType := #string.
+
+    lastSearchString := searchString.
+
+    changeNrShown isNil ifTrue:[
+	changeNrShown := 0.
+    ].
+
+    self findPreviousForWhich:
+	[:changeNr |
+	    |s includesMatchCharacters|
+
+	    includesMatchCharacters := searchString includesMatchCharacters.
+	    s := self sourceOfMethodChange:changeNr.
+	    s notNil and:[
+		(includesMatchCharacters not and:[(s findString:searchString) ~~ 0])
+		or:[includesMatchCharacters and:[('*' , searchString , '*') match:s ]]]
+	].
+
+    changeNrShown == 0 ifTrue:[changeNrShown := nil].
+
+    codeView setSearchPattern:searchString.
+    codeView
+	searchFwd:searchString
+	ignoreCase:false
+	startingAtLine:1 col:0
+	ifAbsent:nil.
+
+!
+
+findSelector
+    "findSelector menu action: let user enter a selector, and select the next change for that selector"
+
+    |current|
+
+    changeNrShown notNil ifTrue:[
+	current := self selectorOfMethodChange:changeNrShown.
+    ].
+
+    self
+	askForSearch:'Selector to search for:'
+	initialAnswer:current
+	thenSearchUsing:[:searchString :changeNr |
+			    |thisSelector|
+
+			    thisSelector := self selectorOfMethodChange:changeNr.
+			    (thisSelector = searchString
+			    or:[searchString includesMatchCharacters and:[searchString match:thisSelector]])
+			]
+	onCancel:[^ self].
+
+    lastSearchType := #selector.
+    changeNrShown == 0 ifTrue:[changeNrShown := nil].
+!
+
+findString
+    |searchString directionHolder|
+
+    lastSearchType := #string.
+
+    searchString := codeView selection.
+    searchString size == 0 ifTrue:[searchString := lastSearchString].
+
+    searchString := self
+	askForSearchString:'String to search for:'
+	initialAnswer:(searchString ? '')
+	directionInto:(directionHolder := ValueHolder new).
+
+    searchString size == 0 ifTrue:[
+	^ self
+    ].
+
+    directionHolder value == #backward ifTrue:[
+	self findPreviousWithString:searchString.
+    ] ifFalse:[
+	self findNextWithString:searchString.
+    ]
+!
+
 ignorePublicPrivateCategories:aBoolean
     UserPreferences current ignorePublicPrivateCategories:aBoolean
 
@@ -1659,6 +2938,75 @@
     settingsApp openWindow.
 !
 
+setEnforcedNameSpace
+    |nsName listOfKnownNameSpaces keepAsDefaultHolder|
+
+    listOfKnownNameSpaces := Set new.
+    NameSpace
+        allNameSpaces
+            do:[:eachNameSpace |
+                listOfKnownNameSpaces add:eachNameSpace name
+            ].
+    listOfKnownNameSpaces := listOfKnownNameSpaces asOrderedCollection sort.
+
+    Dialog aboutToOpenBoxNotificationSignal handle:[:ex |
+        |box|
+
+        keepAsDefaultHolder := true asValue.
+        box := ex parameter.
+        box verticalPanel
+            add:((CheckBox 
+                    label:(resources string:'Use this as default in the future')) 
+                    model:keepAsDefaultHolder).
+        ex proceed.
+    ] do:[
+        nsName := Dialog
+                request:'When applying, new classes are created in nameSpace:'
+                initialAnswer:(enforcedNameSpace ? LastEnforcedNameSpace ? Class nameSpaceQuerySignal query name)
+                list:listOfKnownNameSpaces.
+    ].
+    nsName isNil ifTrue:[^ self].
+
+    (nsName isEmpty or:[nsName = 'Smalltalk']) ifTrue:[
+        applyInOriginalNameSpace value:true.
+        LastEnforcedNameSpace := enforcedNameSpace := nil.
+    ] ifFalse:[
+        applyInOriginalNameSpace value:false.
+        LastEnforcedNameSpace := enforcedNameSpace := NameSpace name:nsName.
+        autoCompare value ifTrue:[
+            self doUpdate
+        ].
+    ].
+    KeepEnforcedNameSpace := keepAsDefaultHolder value.
+    codeView namespaceForDoits:enforcedNameSpace.
+    diffView textViews do:[:each | each namespaceForDoits:enforcedNameSpace].
+
+    "Modified: / 08-05-2012 / 14:04:19 / cg"
+!
+
+setEnforcedPackage
+    |pkg listOfKnownPackages|
+
+    listOfKnownPackages := Set new.
+    Smalltalk allClassesDo:[:eachClass |
+				|package|
+
+				package := eachClass package.
+				package size > 0 ifTrue:[
+				    listOfKnownPackages add:package
+				]
+			   ].
+    listOfKnownPackages := listOfKnownPackages asOrderedCollection sort.
+
+    pkg := Dialog
+		request:'When applying, changes go into package:'
+		initialAnswer:(enforcedPackage ? Class packageQuerySignal query)
+		list:listOfKnownPackages.
+    pkg size ~~ 0 ifTrue:[
+	enforcedPackage := pkg
+    ]
+!
+
 showAboutSTX
     ToolApplicationModel openAboutSTX
 ! !
@@ -4375,838 +5723,6 @@
     ^ cls
 !
 
-doApply
-    "user wants a change to be applied"
-
-    self withSelectedChangesDo:[:changeNr |
-        (self applyChange:changeNr) ifFalse:[
-            ^ self "/ cancel
-        ].
-        self autoSelect:(changeNr + 1)
-    ]
-!
-
-doApplyAll
-    "user wants all changes to be applied"
-
-    self withExecuteCursorDo:[
-        |lastNr "{ Class: SmallInteger }" |
-
-        self clearCodeView.
-        lastNr := self numberOfChanges.
-
-        "if we apply multiple changes, and an error occurs,
-         ask the user if all operations should be aborted..."
-        multipleApply := lastNr > 1.
-
-        1 to:lastNr do:[:changeNr |
-            changeListView setSelection:changeNr.
-            self applyChange:changeNr
-        ].
-        self autoSelectLast
-    ]
-
-    "Modified: 21.1.1997 / 22:26:30 / cg"
-!
-
-doApplyClassFromBeginning
-    "user wants all changes for this class from 1 to changeNr to be applied"
-
-    self withSingleSelectedChangeDo:[:changeNr |
-        |thisClassName classNameToApply lastChange
-         lastNr "{ Class: SmallInteger }" |
-
-        classNameToApply := self classNameOfChange:changeNr.
-        classNameToApply notNil ifTrue:[
-            self clearCodeView.
-
-            "if we apply multiple changes, and an error occurs,
-             ask the user if all operations should be aborted..."
-            multipleApply := changeNr ~= 1.
-
-            1 to:changeNr do:[:changeNr |
-                thisClassName := self classNameOfChange:changeNr.
-                thisClassName = classNameToApply ifTrue:[
-                    changeListView setSelection:changeNr.
-                    self applyChange:changeNr.
-                    lastChange := changeNr
-                ].
-            ].
-            self autoSelect:changeNr+1.
-        ]
-    ]
-
-    "Modified: 21.1.1997 / 22:26:04 / cg"
-!
-
-doApplyClassRest
-    "user wants all changes for this class from changeNr to be applied"
-
-    self withSingleSelectedChangeDo:[:changeNr |
-        |thisClassName classNameToApply lastChange
-         lastNr "{ Class: SmallInteger }" |
-
-        classNameToApply := self classNameOfChange:changeNr.
-        classNameToApply notNil ifTrue:[
-            self clearCodeView.
-
-            lastNr := self numberOfChanges.
-
-            "if we apply multiple changes, and an error occurs,
-             ask the user if all operations should be aborted..."
-            multipleApply := (lastNr - changeNr) > 1.
-
-            changeNr to:lastNr do:[:changeNr |
-                thisClassName := self classNameOfChange:changeNr.
-                thisClassName = classNameToApply ifTrue:[
-                    changeListView setSelection:changeNr.
-                    self applyChange:changeNr.
-                    lastChange := changeNr
-                ].
-            ].
-            self autoSelect:lastChange.
-        ]
-    ]
-
-    "Modified: 21.1.1997 / 22:26:04 / cg"
-!
-
-doApplyFromBeginning
-    "user wants all changes from 1 to changeNr to be applied"
-
-    self withSingleSelectedChangeDo:[:changeNr |
-        |lastNr "{ Class: SmallInteger }" |
-
-        self clearCodeView.
-
-        "if we apply multiple changes, and an error occurs,
-         ask the user if all operations should be aborted..."
-        multipleApply := changeNr ~= 1.
-
-        1 to:changeNr do:[:changeNr |
-            changeListView setSelection:changeNr.
-            self applyChange:changeNr
-        ].
-        self autoSelect:changeNr+1.
-    ]
-!
-
-doApplyRest
-    "apply all changes from changeNr to the end"
-
-    self withSingleSelectedChangeDo:[:changeNr |
-        |lastNr "{ Class: SmallInteger }" |
-
-        self clearCodeView.
-
-        lastNr := self numberOfChanges.
-
-        "if we apply multiple changes, and an error occurs,
-         ask the user if all operations should be aborted..."
-        multipleApply := (lastNr - changeNr) > 1.
-
-        changeNr to:lastNr do:[:changeNr |
-            changeListView setSelection:changeNr.
-            self applyChange:changeNr
-        ].
-        self autoSelect:self numberOfChanges.
-    ]
-
-    "Modified: 21.1.1997 / 22:25:29 / cg"
-!
-
-doApplyToConflictOrEnd
-    "apply all changes from changeNr to either a conflict (i.e. method exists)
-     or the end."
-
-    self withSingleSelectedChangeDo:[:changeNr |
-        |lastNr "{ Class: SmallInteger }"|
-
-        self clearCodeView.
-
-        lastNr := self numberOfChanges.
-
-        "if we apply multiple changes, and an error occurs,
-         ask the user if all operations should be aborted..."
-        multipleApply := (lastNr - changeNr) > 1.
-
-        changeNr to:lastNr do:[:changeNr |
-            | cls sel |
-            changeListView setSelection:changeNr.
-
-            ((cls := self classOfChange:changeNr ifAbsent:[:className| nil]) notNil
-            and:[(sel := self selectorOfMethodChange:changeNr) notNil])
-            ifTrue:[
-                (cls includesSelector:sel) ifTrue:[
-                    self autoSelect:changeNr.
-                    ^ self
-                ].
-            ].
-            self applyChange:changeNr
-        ].
-        self autoSelect:self numberOfChanges.
-    ]
-!
-
-doBrowse
-    "user wants a browser on the class of a change"
-
-    self withSingleSelectedChangeDo:[:changeNr |
-	|cls|
-
-	cls := self classOfChange:changeNr.
-	cls notNil ifTrue:[
-	    UserPreferences systemBrowserClass
-		openInClass:cls
-		selector:(self selectorOfMethodChange:changeNr)
-	]
-    ]
-!
-
-doBrowseImplementors
-    "open an implementors-browser"
-
-    |changeNr initial selector|
-
-    (changeNr := self theSingleSelection) notNil ifTrue:[
-	initial := self selectorOfMethodChange:changeNr.
-    ].
-
-    selector := Dialog
-		    request:'Selector to browse implementors of:'
-		    initialAnswer:(initial ? '').
-    selector size ~~ 0 ifTrue:[
-	UserPreferences systemBrowserClass
-	    browseImplementorsMatching:selector.
-    ]
-!
-
-doBrowseSenders
-    "user wants a browser on the class of a change"
-
-    |changeNr initial selector|
-
-    (changeNr := self theSingleSelection) notNil ifTrue:[
-	initial := self selectorOfMethodChange:changeNr.
-    ].
-
-    selector := Dialog
-		    request:'Selector to browse senders of:'
-		    initialAnswer:(initial ? '').
-    selector size ~~ 0 ifTrue:[
-	UserPreferences systemBrowserClass
-	    browseAllCallsOn:selector asSymbol.
-    ]
-!
-
-doCheckinAndDeleteClassAll
-    "first checkin the selected changes class then delete all changes
-     for it."
-
-    |classes answer logTitle checkinInfo|
-
-"/    self theSingleSelection isNil ifTrue:[
-"/        ^ self information:'Only possible if a single change is selected.'.
-"/    ].
-
-    self withExecuteCursorDo:[
-        classes := IdentitySet new.
-
-        self withSelectedChangesDo:[:changeNr |
-            | className class |
-
-            className := self classNameOfChange:changeNr.
-            className notNil ifTrue:[
-                class := Smalltalk classNamed:className.
-                class isNil ifTrue:[
-                    self error:'oops - no class: ', className mayProceed:true.
-                ].
-                class notNil ifTrue:[
-                    class := class theNonMetaclass.
-                    (classes includes:class) ifFalse:[
-                        class isPrivate ifTrue:[
-                            (classes includes:class owningClass) ifFalse:[
-                                answer := self confirmWithCancel:('This is a private class.\\CheckIn the owner ''%1'' and all of its private classes ?'
-                                                                    bindWith:class owningClass name allBold) withCRs.
-                                answer isNil ifTrue:[^ self].
-                                answer ifTrue:[
-                                    classes add:class owningClass
-                                ]
-                            ]
-                        ] ifFalse:[
-                            classes add:class
-                        ].
-                    ]
-                ]
-            ]
-        ].
-
-        classes size == 1 ifTrue:[
-            logTitle := classes first name.
-        ] ifFalse:[
-            logTitle := '%1 classes' bindWith:classes size.
-        ].
-        checkinInfo := SourceCodeManagerUtilities default
-                        getCheckinInfoFor:logTitle
-                        initialAnswer:nil.
-        checkinInfo isNil ifTrue:[^ self ].
-
-        changeListView setSelection:nil.
-        classes do:[:eachClass |
-            (SourceCodeManagerUtilities default checkinClass:eachClass withInfo:checkinInfo)
-                ifTrue:[
-                    self silentDeleteChangesForClassAndPrivateClasses:eachClass name
-                           from:1 to:(self numberOfChanges).
-                ]
-        ].
-        self setChangeList.
-    ]
-
-    "Modified: / 6.9.1995 / 17:11:16 / claus"
-    "Modified: / 17.11.2001 / 14:21:13 / cg"
-!
-
-doCompare
-    "compare change with current system version"
-
-    classesNotToBeAutoloaded removeAll.
-
-    self withSingleSelectedChangeDo:[:changeNr |
-        self withExecuteCursorDo:[
-            self compareChange:changeNr
-        ].
-        self newLabel:''
-    ].
-
-    "Modified: 24.2.1996 / 19:37:19 / cg"
-!
-
-doCompareAndCompress
-    "remove all changes, which are equivalent to the current image version"
-
-    |toDelete|
-
-    classesNotToBeAutoloaded removeAll.
-    toDelete := OrderedCollection new.
-    self withExecuteCursorDo:[
-        1 to:self numberOfChanges do:[:changeNr |
-            (self compareChange:changeNr showResult:false) == true ifTrue:[
-                toDelete add:changeNr
-            ]
-        ].
-    ].
-
-    toDelete reverseDo:[:changeNr |
-        self silentDeleteChange:changeNr.
-    ].
-    self setChangeList.
-    "
-     scroll back a bit, if we are left way behind the list
-    "
-    changeListView firstLineShown > self numberOfChanges ifTrue:[
-        changeListView makeLineVisible:self numberOfChanges
-    ].
-    self clearCodeView.
-
-    self newLabel:''.
-    classesNotToBeAutoloaded removeAll.
-!
-
-doCompress
-    "compress the change-set; this replaces multiple method-changes by the last
-     (i.e. the most recent) change"
-
-    self compressForClass:nil
-
-    "Modified: / 29.10.1997 / 01:03:26 / cg"
-!
-
-doCompressClass
-    "compress changes for the selected class.
-     this replaces multiple method-changes by the last (i.e. the most recent) change."
-
-    self theSingleSelection isNil ifTrue:[
-	^ self information:'Only possible if a single change is selected.'.
-    ].
-
-    self selectedClassNames do:[:classNameToCompress |
-	self compressForClass:classNameToCompress.
-    ]
-
-    "Created: / 29.10.1997 / 01:05:16 / cg"
-    "Modified: / 19.11.2001 / 21:55:17 / cg"
-!
-
-doCompressSelector
-    "compress changes for the selected class & selector.
-     this replaces multiple method-changes by the last (i.e. the most recent) change."
-
-    |classSelectorPairs|
-
-    self theSingleSelection isNil ifTrue:[
-	^ self information:'Only possible if a single change is selected.'.
-    ].
-
-    classSelectorPairs := Set new.
-    self withSelectedChangesDo:[:changeNr |
-	| classNameToCompress selector |
-
-	classNameToCompress := self classNameOfChange:changeNr.
-	classNameToCompress notNil ifTrue:[
-	    selector := self selectorOfMethodChange:changeNr.
-	    selector notNil ifTrue:[
-		classSelectorPairs add:(classNameToCompress -> selector).
-	    ]
-	]
-    ].
-
-    classSelectorPairs do:[:pair |
-	self compressForClass:pair key selector:pair value.
-    ]
-
-    "Created: / 19.11.2001 / 21:50:59 / cg"
-    "Modified: / 19.11.2001 / 22:10:08 / cg"
-!
-
-doDelete
-    "delete currently selected change(s)"
-
-    |rangeEnd rangeStart firstDeleted|
-
-    changeListView selection size <= 5 ifTrue:[
-	self withSelectedChangesReverseDo:[:changeNr |
-	    self deleteChange:changeNr.
-	    self autoSelectOrEnd:changeNr
-	].
-	^ self
-    ].
-
-    self withSelectedChangesReverseDo:[:changeNr |
-	rangeEnd isNil ifTrue:[
-	    rangeEnd := rangeStart := changeNr
-	] ifFalse:[
-	    (changeNr = (rangeEnd + 1)) ifTrue:[
-		rangeEnd := changeNr
-	    ] ifFalse:[
-		(changeNr = (rangeStart - 1)) ifTrue:[
-		    rangeStart := changeNr
-		] ifFalse:[
-		    self deleteChangesFrom:rangeStart to:rangeEnd.
-		    firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
-		    rangeStart := rangeEnd := nil.
-		].
-	    ].
-	].
-    ].
-    rangeStart notNil ifTrue:[
-	self deleteChangesFrom:rangeStart to:rangeEnd.
-	firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
-    ].
-    self autoSelectOrEnd:firstDeleted
-!
-
-doDeleteAndSelectPrevious
-    "delete currently selected change(s)"
-
-    self withSelectedChangesReverseDo:[:changeNr |
-	self deleteChange:changeNr.
-	self autoSelectOrEnd:changeNr-1
-    ]
-!
-
-doDeleteClassAll
-    "delete all changes with same class as currently selected change"
-
-    |classNamesToDelete lastChangeNr overAllNumDeletedBefore|
-
-    lastChangeNr := -1.
-    classNamesToDelete := Set new.
-    self withSelectedChangesDo:[:changeNr |
-	|classNameToDelete|
-
-	classNameToDelete := self classNameOfChange:changeNr.
-	classNameToDelete notNil ifTrue:[
-	    classNamesToDelete add:classNameToDelete.
-	].
-	lastChangeNr := lastChangeNr max:changeNr.
-    ].
-
-    overAllNumDeletedBefore := 0.
-    changeListView setSelection:nil.
-
-    self withExecuteCursorDo:[
-	classNamesToDelete do:[:classNameToDelete |
-	    |numDeletedBefore|
-
-	    self silentDeleteChangesFor:classNameToDelete
-				   from:lastChangeNr
-				     to:(self numberOfChanges).
-	    numDeletedBefore := self
-				   silentDeleteChangesFor:classNameToDelete
-				   from:1
-				   to:(lastChangeNr-1).
-	    lastChangeNr := lastChangeNr - numDeletedBefore.
-	    overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
-	].
-    ].
-
-    self setChangeList.
-    self autoSelectOrEnd:lastChangeNr
-
-    "Created: / 13.12.1995 / 16:07:14 / cg"
-    "Modified: / 28.1.1998 / 20:42:14 / cg"
-!
-
-doDeleteClassAndPrivateClassesAll
-    "delete all changes with same class and private classes
-     as currently selected change"
-
-    |lastChangeNr classNamesToDelete overAllNumDeletedBefore|
-
-    lastChangeNr := -1.
-    classNamesToDelete := Set new.
-    self withSelectedChangesDo:[:changeNr |
-	|classNameToDelete|
-
-	classNameToDelete := self ownerClassNameOfChange:changeNr.
-	classNameToDelete notNil ifTrue:[
-	    classNamesToDelete add:classNameToDelete.
-	].
-	lastChangeNr := lastChangeNr max:changeNr.
-    ].
-
-    overAllNumDeletedBefore := 0.
-    changeListView setSelection:nil.
-
-    self withExecuteCursorDo:[
-	classNamesToDelete do:[:classNameToDelete |
-	    | changeNr numDeletedBefore|
-
-	    classNameToDelete notNil ifTrue:[
-		changeListView setSelection:nil.
-		self silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
-				       from:lastChangeNr
-					 to:(self numberOfChanges).
-		numDeletedBefore := self
-				       silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
-				       from:1
-				       to:(lastChangeNr-1).
-		lastChangeNr := lastChangeNr - numDeletedBefore.
-		overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
-	    ]
-	]
-    ].
-    self setChangeList.
-    self autoSelectOrEnd:lastChangeNr
-
-    "Created: / 13.12.1995 / 16:07:14 / cg"
-    "Modified: / 28.1.1998 / 20:42:14 / cg"
-!
-
-doDeleteClassFromBeginning
-    "delete changes with same class as currently selected change from the beginning
-     up to the selected change.
-     Useful to get rid of obsolete changes before a fileout or checkin entry."
-
-    self withSingleSelectedChangeDo:[:changeNr |
-	|classNameToDelete prevSelection numDeleted|
-
-	classNameToDelete := self classNameOfChange:changeNr.
-	classNameToDelete notNil ifTrue:[
-	    prevSelection := changeNr.
-	    changeListView setSelection:nil.
-	    numDeleted := self
-				silentDeleteChangesFor:classNameToDelete
-				from:1
-				to:changeNr.
-	    self setChangeList.
-	    self autoSelectOrEnd:(changeNr + 1 - numDeleted)
-	]
-    ].
-
-    "Created: 13.12.1995 / 15:41:58 / cg"
-    "Modified: 25.5.1996 / 12:26:34 / cg"
-!
-
-doDeleteClassRest
-    "delete rest of changes with same class as currently selected change"
-
-    self withSingleSelectedChangeDo:[:changeNr |
-	| classNameToDelete |
-
-	classNameToDelete := self classNameOfChange:changeNr.
-	classNameToDelete notNil ifTrue:[
-	    changeListView setSelection:nil.
-	    self silentDeleteChangesFor:classNameToDelete
-				   from:changeNr
-				     to:(self numberOfChanges).
-	    self setChangeList.
-	    self autoSelectOrEnd:changeNr
-	]
-    ]
-
-    "Modified: / 18.5.1998 / 14:25:07 / cg"
-!
-
-doDeleteClassSelectorAll
-    "delete all changes with same class and selector as currently selected change"
-
-    |classNameSelectorPairsToDelete lastChangeNr overAllNumDeletedBefore|
-
-    lastChangeNr := -1.
-    classNameSelectorPairsToDelete := Set new.
-    self withSelectedChangesDo:[:changeNr |
-	|className selector|
-
-	className := self classNameOfChange:changeNr.
-	selector := self selectorOfMethodChange:changeNr.
-	selector notNil ifTrue:[
-	    (className notNil and:[selector notNil]) ifTrue:[
-		classNameSelectorPairsToDelete add:(className -> selector).
-	    ]
-	].
-	lastChangeNr := lastChangeNr max:changeNr.
-    ].
-
-    overAllNumDeletedBefore := 0.
-    changeListView setSelection:nil.
-
-    self withExecuteCursorDo:[
-	classNameSelectorPairsToDelete do:[:pair |
-	    |numDeletedBefore className selector|
-
-	    className := pair key.
-	    selector  := pair value.
-	    self silentDeleteChangesFor:className selector:selector
-				   from:lastChangeNr
-				     to:(self numberOfChanges).
-	    numDeletedBefore := self
-				   silentDeleteChangesFor:className selector:selector
-				   from:1
-				   to:(lastChangeNr-1).
-	    lastChangeNr := lastChangeNr - numDeletedBefore.
-	    overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
-	].
-    ].
-
-    self setChangeList.
-    self autoSelectOrEnd:lastChangeNr
-
-    "Created: / 13.12.1995 / 16:07:14 / cg"
-    "Modified: / 28.1.1998 / 20:42:14 / cg"
-!
-
-doDeleteFromBeginning
-    "delete all changes from 1 to the current"
-
-    self withSingleSelectedChangeDo:[:changeNr |
-	self deleteChangesFrom:1 to:changeNr.
-	self clearCodeView.
-	self autoSelectOrEnd:changeNr
-    ]
-!
-
-doDeleteRest
-    "delete all changes from current to the end"
-
-    self withSingleSelectedChangeDo:[:changeNr |
-	self deleteChangesFrom:changeNr to:(self numberOfChanges).
-	self clearCodeView.
-	self autoSelectOrEnd:changeNr-1
-    ]
-!
-
-doFileoutAndDeleteClassAll
-    "first fileOut the selected changes class then delete all changes
-     for it."
-
-    self withSingleSelectedChangeDo:[:changeNr |
-	| className class |
-
-	className := self classNameOfChange:changeNr.
-	className notNil ifTrue:[
-	    class := Smalltalk classNamed:className.
-	    class notNil ifTrue:[
-		Class fileOutErrorSignal handle:[:ex |
-		    self warn:('fileout failed: ' , ex description).
-		] do:[
-		    class fileOut.
-		    self doDeleteClassAll
-		].
-	    ].
-
-	].
-    ]
-
-    "Modified: 6.9.1995 / 17:11:16 / claus"
-!
-
-doMakePatch
-    "user wants a change to be made a patch
-     - copy it over to the patches file"
-
-    self withSelectedChangesDo:[:changeNr |
-	self makeChangeAPatch:changeNr.
-	self autoSelect:(changeNr + 1)
-    ]
-!
-
-doMakePermanent
-    "user wants a change to be made permanent
-     - rewrite the source file where this change has to go"
-
-    |yesNoBox|
-
-    (self theSingleSelection) isNil ifTrue:[
-        ^ self information:'Only possible if a single change is selected.'.
-    ].
-
-    yesNoBox := YesNoBox new.
-    yesNoBox title:(resources string:'Warning: this operation cannot be undone').
-    yesNoBox okText:(resources string:'continue') noText:(resources string:'abort').
-    yesNoBox okAction:[   |changeNr|
-
-                          changeNr := self theSingleSelection.
-                          changeNr notNil ifTrue:[
-                              self makeChangePermanent:changeNr.
-                              self autoSelect:(changeNr + 1)
-                          ]
-                      ].
-    yesNoBox showAtPointer.
-    yesNoBox destroy
-
-    "Modified: 7.1.1997 / 23:03:33 / cg"
-!
-
-doSave
-    "user wants a change to be appended to a file"
-
-    |fileName|
-
-    self withSelectedChangesDo:[:changeNr |
-        fileName := Dialog
-                        requestFileNameForSave:(resources string:'Append change to:')
-                        default:(lastSaveFileName ? '')
-                        ok:(resources string:'Append')
-                        abort:(resources string:'Abort')
-                        pattern:'*.chg'.
-
-        fileName notNil ifTrue:[
-            lastSaveFileName := fileName.
-            self withCursor:(Cursor write) do:[
-                self appendChange:changeNr toFile:fileName.
-            ].
-            self autoSelect:(changeNr + 1)
-        ].
-    ]
-
-    "Modified: / 27-10-2010 / 11:30:07 / cg"
-!
-
-doSaveClass
-    "user wants changes for some class from current to end to be appended to a file"
-
-    (self theSingleSelection) isNil ifTrue:[
-	^ self information:'Only possible if a single change is selected.'.
-    ].
-    self doSaveClassFrom:1
-!
-
-doSaveClassAll
-    "user wants changes for some class from current to end to be appended to a file"
-
-    (self theSingleSelection) isNil ifTrue:[
-	^ self information:'Only possible if a single change is selected.'.
-    ].
-    self doSaveClassFrom:1
-!
-
-doSaveClassFrom:startNr
-    "user wants changes from current to end to be appended to a file"
-
-    |changeNr classNameToSave|
-
-    (changeNr := self theSingleSelection) isNil ifTrue:[
-	^ self information:'Only possible if a single change is selected.'.
-    ].
-    classNameToSave := self classNameOfChange:changeNr.
-    classNameToSave notNil ifTrue:[
-	self saveClass:classNameToSave from:startNr
-    ]
-!
-
-doSaveClassRest
-    "user wants changes for some class from current to end to be appended to a file"
-
-    |changeNr|
-
-    (changeNr := self theSingleSelection) isNil ifTrue:[
-        ^ self information:'Only possible if a single change is selected.'.
-    ].
-    self doSaveClassFrom:changeNr.
-
-    changeListView setSelection:changeNr.
-    "/ self changeSelection:changeNr.
-!
-
-doSaveRest
-    "user wants changes from current to end to be appended to a file"
-
-    |changeNr fileName|
-
-    (changeNr := self theSingleSelection) isNil ifTrue:[
-        ^ self information:(resources string:'Only possible if a single change is selected.').
-    ].
-
-    fileName := Dialog
-                    requestFileNameForSave:(resources string:'Append changes to:')
-                    default:(lastSaveFileName ? '')
-                    ok:(resources string:'Append')
-                    abort:(resources string:'Abort')
-                    pattern:'*.chg'.
-
-    fileName notNil ifTrue:[
-        lastSaveFileName := fileName.
-        self withCursor:(Cursor write) do:[
-            changeNr to:(self numberOfChanges) do:[:changeNr |
-                changeListView setSelection:changeNr.
-                (self appendChange:changeNr toFile:fileName) ifFalse:[
-                    ^ self
-                ]
-            ]
-        ]
-    ]
-
-    "Modified: / 27-10-2010 / 11:30:37 / cg"
-!
-
-doUpdate
-    "reread the changes-file"
-
-    self readChangesFileInBackground:true.
-    self newLabel:''.
-    realized ifTrue:[
-	self setChangeList.
-    ]
-!
-
-doWriteBack
-    "write back the list onto the changes file"
-
-    anyChanges ifTrue:[
-        (self writeBackChanges) ifTrue:[
-            realized ifTrue:[
-                self readChangesFile.
-                realized ifTrue:[
-                    self setChangeList
-                ]
-            ]
-        ]
-    ]
-
-    "Modified: 5.9.1996 / 17:19:46 / cg"
-!
-
 doubleClickOnChange:lineNr
     "action performed when a change-list entry is doubleClicked"
 
@@ -5215,453 +5731,6 @@
     "Created: / 6.2.1998 / 13:08:49 / cg"
 !
 
-findClass
-    "findClass menu action: let user enter a classes name, and select the next change for that class"
-
-    |current|
-
-    changeNrShown notNil ifTrue:[
-        current := self classNameOfChange:changeNrShown.
-    ].
-
-    self
-        askForSearch:'Class to search for:'
-        initialAnswer:current
-        thenSearchUsing:[:searchString :changeNr |
-                            |thisClassName|
-
-                            thisClassName := self classNameOfChange:changeNr.
-                            thisClassName notNil
-                            and:[
-                                (thisClassName sameAs: searchString)
-                                or:[searchString includesMatchCharacters and:[searchString match:thisClassName ignoreCase:true]]]
-                        ]
-        onCancel:[^ self].
-
-    lastSearchType := #class.
-    changeNrShown == 0 ifTrue:[changeNrShown := nil].
-!
-
-findFirstForClass
-    "findNextForClass menu action: select the next change for the selected changes class"
-
-    self findNextForClassStartingAt:1
-
-    "Created: / 20-11-2006 / 16:37:56 / cg"
-!
-
-findLastForClass
-    "findPreviousForClass menu action: select the previous change for the selected changes class"
-
-    self findPreviousForClassStartingAt:(self numberOfChanges)
-
-    "Created: / 20-11-2006 / 16:39:15 / cg"
-!
-
-findLastSnapshot
-    "findLastSnapshot menu action: select the last change which is for a snapShot-image save action"
-
-    "/ lastSearchType := #snapshot.
-
-    self 
-        findPreviousForWhich: [:changeNr | self changeIsSnapShotInfo:changeNr ]
-        startingAt:(self numberOfChanges)
-
-    "Created: / 06-10-2006 / 11:03:39 / cg"
-!
-
-findNext
-    "findNext menu action: select the next change.
-     Searches for what the last search was for; i.e. either same class or same selector"
-
-    lastSearchType == #selector ifTrue:[
-	^ self findNextForSelector
-    ].
-    lastSearchType == #snapshot ifTrue:[
-	^ self findNextSnapshot
-    ].
-    lastSearchType == #string ifTrue:[
-	^ self findNextForString
-    ].
-    lastSearchType == #difference ifTrue:[
-	^ self findNextDifference
-    ].
-
-    ^ self findNextForClass
-
-    "Created: / 18.6.1998 / 22:15:00 / cg"
-    "Modified: / 18.6.1998 / 22:15:25 / cg"
-!
-
-findNextDifference
-    lastSearchType := #difference.
-    changeNrShown isNil ifTrue:[^ self].
-
-    self findNextForWhich:[:changeNr |
-	    (self compareChange:changeNr showResult:false) == true ifTrue:[
-		"/ same
-		false
-	    ] ifFalse:[
-		"/ different
-		true
-	    ]
-	]
-!
-
-findNextForClass
-    "findNextForClass menu action: select the next change for the selected changes class"
-
-    self findNextForClassStartingAt: changeNrShown + 1
-
-    "Modified: / 20-11-2006 / 16:37:49 / cg"
-!
-
-findNextForClassStartingAt:startNr
-    "findNextForClass menu action: select the next change for the selected changes class"
-
-    |cls|
-
-    lastSearchType := #class.
-    changeNrShown isNil ifTrue:[^ self].
-
-    cls := self classNameOfChange:changeNrShown.
-    cls isNil ifTrue:[^ self].
-
-    self 
-        findNextForWhich:[:changeNr |
-                |thisClass|
-
-                thisClass := self classNameOfChange:changeNr.
-                (thisClass = cls
-                or:[cls includesMatchCharacters and:[cls match:thisClass]])]
-        startingAt:startNr
-
-    "Created: / 20-11-2006 / 16:37:37 / cg"
-!
-
-findNextForSelector
-    "findNextForSelector menu action: select the next change for the selected changes selector"
-
-    |sel|
-
-    lastSearchType := #selector.
-    changeNrShown isNil ifTrue:[^ self].
-
-    sel := self selectorOfMethodChange:changeNrShown.
-    sel isNil ifTrue:[^ self].
-
-    self findNextForWhich: [:changeNr |
-		|thisSelector|
-
-		thisSelector := self selectorOfMethodChange:changeNr.
-		(thisSelector = sel or:[sel includesMatchCharacters and:[sel match:thisSelector]])
-	]
-
-!
-
-findNextForString
-    lastSearchString isNil ifTrue:[
-	^ self findString
-    ].
-    self findNextWithString:lastSearchString
-!
-
-findNextForWhich:aBlock
-    "helper: select the next change for which aBlock evaluates to true"
-
-    ^ self findNextForWhich:aBlock startingAt:changeNrShown + 1
-
-    "Modified: / 20-11-2006 / 16:34:23 / cg"
-!
-
-findNextForWhich:aBlock startingAt:changeNrToStartSearch
-    "helper: select the next change for which aBlock evaluates to true"
-
-    ^ self     
-        findNextOrPrevious:#next 
-        forWhich:aBlock startingAt:changeNrToStartSearch
-
-    "Created: / 20-11-2006 / 16:34:06 / cg"
-!
-
-findNextOrPrevious:direction forWhich:aBlock startingAt:changeNrToStartSearch
-    "helper: find and select the next or previous change for which aBlock evaluates to true"
-
-    self withCursor:Cursor questionMark do:[
-        Object userInterruptSignal handle:[:ex |
-            self beep.
-            ^ 0
-        ] do:[
-            |increment nr lastNr|
-
-            increment := (direction == #previous) ifTrue:[-1] ifFalse:[1].
-            lastNr := self numberOfChanges.
-            nr := changeNrToStartSearch.
-            [ (direction == #previous and:[nr >= 1])
-              or:[ direction == #next and:[ nr <= lastNr]] 
-            ] whileTrue:[
-                (aBlock value:nr) ifTrue:[
-                    changeListView setSelection:nr.
-                    self changeSelection:nr.
-                    ^ nr
-                ].
-                nr := nr + increment.
-            ].
-        ]
-    ].
-    self showNotFound.
-    self windowGroup sensor flushKeyboard. "/ avoid multiple beeps, in case of type ahead
-    ^ 0
-
-    "Created: / 08-03-2012 / 11:57:26 / cg"
-!
-
-findNextSnapshot
-    "findNextSnapshot menu action: select the next change which is for a snapShot-image save action"
-
-    lastSearchType := #snapshot.
-    changeNrShown isNil ifTrue:[^ self].
-
-    self findNextForWhich: [:changeNr | self changeIsSnapShotInfo:changeNr ]
-!
-
-findNextWithString:searchString
-    lastSearchType := #string.
-
-    lastSearchString := searchString.
-
-    changeNrShown isNil ifTrue:[
-	changeNrShown := 0.
-    ].
-
-    self findNextForWhich:
-	[:changeNr |
-	    |s|
-
-	    s := self sourceOfMethodChange:changeNr.
-	    s notNil and:[
-		(searchString includesMatchCharacters not
-			    and:[(s findString:searchString) ~~ 0])
-		or:[ searchString includesMatchCharacters
-			    and:[('*' , searchString , '*') match:s ]]]
-	].
-
-    changeNrShown == 0 ifTrue:[changeNrShown := nil].
-
-    codeView setSearchPattern:searchString.
-    codeView
-	searchFwd:searchString
-	ignoreCase:false
-	startingAtLine:1 col:0
-	ifAbsent:nil.
-
-!
-
-findPrevious
-    "findPrevious menu action: select the previous change.
-     Searches for what the last search was for; i.e. either same class or same selector"
-
-    lastSearchType == #selector ifTrue:[
-	^ self findPreviousForSelector
-    ].
-    lastSearchType == #snapshot ifTrue:[
-	^ self findPreviousSnapshot
-    ].
-    lastSearchType == #string ifTrue:[
-	^ self findPreviousForString
-    ].
-    lastSearchType == #difference ifTrue:[
-	^ self findPreviousDifference
-    ].
-
-    ^ self findPreviousForClass
-
-    "Created: / 18.6.1998 / 22:15:15 / cg"
-!
-
-findPreviousDifference
-    lastSearchType := #difference.
-    changeNrShown isNil ifTrue:[^ self].
-
-    self findPreviousForWhich:[:changeNr |
-	    (self compareChange:changeNr showResult:false) == true ifTrue:[
-		"/ same
-		false
-	    ] ifFalse:[
-		"/ different
-		true
-	    ]
-	]
-!
-
-findPreviousForClass
-    "findPreviousForClass menu action: select the previous change for the selected changes class"
-
-    self findPreviousForClassStartingAt:(changeNrShown - 1)
-
-    "Modified: / 20-11-2006 / 16:39:04 / cg"
-!
-
-findPreviousForClassStartingAt:startNr
-    "findPreviousForClass menu action: select the previous change for the selected changes class"
-
-    |cls|
-
-    lastSearchType := #class.
-    changeNrShown isNil ifTrue:[^ self].
-
-    cls := self classNameOfChange:changeNrShown.
-    cls isNil ifTrue:[^ self].
-
-    self 
-        findPreviousForWhich:
-            [:changeNr |
-                    |thisClass|
-
-                    thisClass := self classNameOfChange:changeNr.
-                    (thisClass = cls
-                    or:[cls includesMatchCharacters and:[cls match:thisClass]])]
-        startingAt:startNr
-
-    "Created: / 20-11-2006 / 16:38:37 / cg"
-!
-
-findPreviousForSelector
-    "findPreviousForSelector menu action: select the previous change for the selected changes selector"
-
-    |sel|
-
-    lastSearchType := #selector.
-    changeNrShown isNil ifTrue:[^ self].
-
-    sel := self selectorOfMethodChange:changeNrShown.
-    sel isNil ifTrue:[^ self].
-
-    self findPreviousForWhich:
-	[:changeNr |
-		|thisSelector|
-
-		thisSelector := self selectorOfMethodChange:changeNr.
-		(thisSelector = sel
-		or:[sel includesMatchCharacters and:[sel match:thisSelector]])
-	]
-
-!
-
-findPreviousForString
-    lastSearchString isNil ifTrue:[
-	^ self findString
-    ].
-    self findPreviousWithString:lastSearchString
-!
-
-findPreviousForWhich:aBlock
-    "helper: select the previous change for which aBlock evaluates to true"
-
-    ^ self findPreviousForWhich:aBlock startingAt:(changeNrShown - 1)
-
-    "Modified: / 06-10-2006 / 11:01:38 / cg"
-!
-
-findPreviousForWhich:aBlock startingAt:changeNrToStartSearch
-    "helper: select the previous change for which aBlock evaluates to true"
-
-    ^ self     
-        findNextOrPrevious:#previous 
-        forWhich:aBlock startingAt:changeNrToStartSearch
-
-    "Created: / 06-10-2006 / 11:01:09 / cg"
-!
-
-findPreviousSnapshot
-    "findPreviousSnapshot menu action: select the previous change which is for a snapShot-image save action"
-
-    lastSearchType := #snapshot.
-    changeNrShown isNil ifTrue:[^ self].
-
-    self findPreviousForWhich: [:changeNr | self changeIsSnapShotInfo:changeNr ]
-!
-
-findPreviousWithString:searchString
-    lastSearchType := #string.
-
-    lastSearchString := searchString.
-
-    changeNrShown isNil ifTrue:[
-	changeNrShown := 0.
-    ].
-
-    self findPreviousForWhich:
-	[:changeNr |
-	    |s includesMatchCharacters|
-
-	    includesMatchCharacters := searchString includesMatchCharacters.
-	    s := self sourceOfMethodChange:changeNr.
-	    s notNil and:[
-		(includesMatchCharacters not and:[(s findString:searchString) ~~ 0])
-		or:[includesMatchCharacters and:[('*' , searchString , '*') match:s ]]]
-	].
-
-    changeNrShown == 0 ifTrue:[changeNrShown := nil].
-
-    codeView setSearchPattern:searchString.
-    codeView
-	searchFwd:searchString
-	ignoreCase:false
-	startingAtLine:1 col:0
-	ifAbsent:nil.
-
-!
-
-findSelector
-    "findSelector menu action: let user enter a selector, and select the next change for that selector"
-
-    |current|
-
-    changeNrShown notNil ifTrue:[
-	current := self selectorOfMethodChange:changeNrShown.
-    ].
-
-    self
-	askForSearch:'Selector to search for:'
-	initialAnswer:current
-	thenSearchUsing:[:searchString :changeNr |
-			    |thisSelector|
-
-			    thisSelector := self selectorOfMethodChange:changeNr.
-			    (thisSelector = searchString
-			    or:[searchString includesMatchCharacters and:[searchString match:thisSelector]])
-			]
-	onCancel:[^ self].
-
-    lastSearchType := #selector.
-    changeNrShown == 0 ifTrue:[changeNrShown := nil].
-!
-
-findString
-    |searchString directionHolder|
-
-    lastSearchType := #string.
-
-    searchString := codeView selection.
-    searchString size == 0 ifTrue:[searchString := lastSearchString].
-
-    searchString := self
-	askForSearchString:'String to search for:'
-	initialAnswer:(searchString ? '')
-	directionInto:(directionHolder := ValueHolder new).
-
-    searchString size == 0 ifTrue:[
-	^ self
-    ].
-
-    directionHolder value == #backward ifTrue:[
-	self findPreviousWithString:searchString.
-    ] ifFalse:[
-	self findNextWithString:searchString.
-    ]
-!
-
 noChangesAllowed
     "show a warning that changes cannot be changed"
 
@@ -5707,73 +5776,6 @@
 self halt
 
     "Created: / 03-01-2012 / 15:26:36 / cg"
-!
-
-setEnforcedNameSpace
-    |nsName listOfKnownNameSpaces keepAsDefaultHolder|
-
-    listOfKnownNameSpaces := Set new.
-    NameSpace
-        allNameSpaces
-            do:[:eachNameSpace |
-                listOfKnownNameSpaces add:eachNameSpace name
-            ].
-    listOfKnownNameSpaces := listOfKnownNameSpaces asOrderedCollection sort.
-
-    Dialog aboutToOpenBoxNotificationSignal handle:[:ex |
-        |box|
-
-        keepAsDefaultHolder := true asValue.
-        box := ex parameter.
-        box verticalPanel
-            add:((CheckBox 
-                    label:(resources string:'Use this as default in the future')) 
-                    model:keepAsDefaultHolder).
-        ex proceed.
-    ] do:[
-        nsName := Dialog
-                request:'When applying, new classes are created in nameSpace:'
-                initialAnswer:(enforcedNameSpace ? LastEnforcedNameSpace ? Class nameSpaceQuerySignal query name)
-                list:listOfKnownNameSpaces.
-    ].
-    nsName isNil ifTrue:[^ self].
-
-    (nsName isEmpty or:[nsName = 'Smalltalk']) ifTrue:[
-        applyInOriginalNameSpace value:true.
-        LastEnforcedNameSpace := enforcedNameSpace := nil.
-    ] ifFalse:[
-        applyInOriginalNameSpace value:false.
-        LastEnforcedNameSpace := enforcedNameSpace := NameSpace name:nsName.
-        autoCompare value ifTrue:[
-            self doUpdate
-        ].
-    ].
-    KeepEnforcedNameSpace := keepAsDefaultHolder value
-
-    "Modified: / 07-09-2006 / 15:10:25 / cg"
-!
-
-setEnforcedPackage
-    |pkg listOfKnownPackages|
-
-    listOfKnownPackages := Set new.
-    Smalltalk allClassesDo:[:eachClass |
-				|package|
-
-				package := eachClass package.
-				package size > 0 ifTrue:[
-				    listOfKnownPackages add:package
-				]
-			   ].
-    listOfKnownPackages := listOfKnownPackages asOrderedCollection sort.
-
-    pkg := Dialog
-		request:'When applying, changes go into package:'
-		initialAnswer:(enforcedPackage ? Class packageQuerySignal query)
-		list:listOfKnownPackages.
-    pkg size ~~ 0 ifTrue:[
-	enforcedPackage := pkg
-    ]
 ! !
 
 !ChangesBrowser::ChangeFileReader methodsFor:'accessing'!
@@ -6448,9 +6450,9 @@
 !ChangesBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.428 2012-04-05 11:12:53 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.429 2012-05-08 12:07:14 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.428 2012-04-05 11:12:53 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.429 2012-05-08 12:07:14 cg Exp $'
 ! !