--- 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 $'
! !