--- a/ChangesBrowser.st Fri May 06 06:55:08 2016 +0200
+++ b/ChangesBrowser.st Mon May 09 21:47:57 2016 +0200
@@ -23,7 +23,7 @@
showingDiffs diffViewBox autoloadAsRequired
classesNotToBeAutoloaded encodingIfKnown
ignorePublicPrivateCategories changeListSelectionHolder
- defaultApplicationForVAGEClasses'
+ defaultApplicationForVAGEClasses infoHolder'
classVariableNames:'CompressSnapshotInfo NoColoring ShowWarningDialogs
DefaultAutoCompare DefaultShowingDiffs LastEnforcedNameSpace
KeepEnforcedNameSpace'
@@ -211,34 +211,29 @@
(
(MenuItem
label: 'File'
- translateLabel: true
submenu:
(Menu
(
(MenuItem
label: 'Compress'
itemValue: doCompress
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
enabled: hasSingleSelection
label: 'Compress for Class'
itemValue: doCompressClass
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
enabled: hasSingleSelection
label: 'Compress for Class && Selector'
itemValue: doCompressSelector
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
label: 'Compare and Compress'
itemValue: doCompareAndCompress
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
@@ -249,14 +244,12 @@
enabled: hasSingleSelection
label: 'Fileout && Delete all Changes for Class'
itemValue: doFileoutAndDeleteClassAll
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
enabled: hasSelection
label: 'CheckIn && Delete all Changes for Class'
itemValue: doCheckinAndDeleteClassAll
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
@@ -267,25 +260,21 @@
enabled: hasSelection
label: 'Save In...'
itemValue: doSave
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Save to End In...'
itemValue: doSaveRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Save for Class to End In...'
itemValue: doSaveClassRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Save all for Class In...'
itemValue: doSaveClassAll
- translateLabel: true
)
(MenuItem
label: '-'
@@ -293,13 +282,11 @@
(MenuItem
label: 'Writeback ClassFile'
itemValue: doWriteBack
- translateLabel: true
isVisible: editingClassSource
)
(MenuItem
label: 'Writeback ChangeFile'
itemValue: doWriteBack
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
@@ -308,7 +295,6 @@
(MenuItem
label: 'Update'
itemValue: doUpdate
- translateLabel: true
)
(MenuItem
label: '-'
@@ -316,7 +302,6 @@
(MenuItem
label: 'Exit'
itemValue: menuExit
- translateLabel: true
)
)
nil
@@ -325,7 +310,6 @@
)
(MenuItem
label: 'CHANGE'
- translateLabel: true
submenu:
(Menu
(
@@ -333,43 +317,36 @@
enabled: hasSelection
label: 'Apply'
itemValue: doApply
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply to End'
itemValue: doApplyRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply from Begin'
itemValue: doApplyFromBeginning
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply for Class to End'
itemValue: doApplyClassRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply for Class from Begin'
itemValue: doApplyClassFromBeginning
- translateLabel: true
)
(MenuItem
enabled: hasNoSelection
label: 'Apply All'
itemValue: doApplyAll
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply to Conflict or End'
itemValue: doApplyToConflictOrEnd
- translateLabel: true
)
(MenuItem
label: '-'
@@ -378,64 +355,54 @@
enabled: hasSelection
label: 'Delete'
itemValue: doDelete
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Delete to End'
itemValue: doDeleteRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Delete from Begin'
itemValue: doDeleteFromBeginning
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Delete for Class to End'
itemValue: doDeleteClassRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Delete for Class from Begin'
itemValue: doDeleteClassFromBeginning
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Class'
itemValue: doDeleteClassAll
- translateLabel: true
isVisible: hasNoMultiSelection
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Class && its Private Classes'
itemValue: doDeleteClassAndPrivateClassesAll
- translateLabel: true
isVisible: hasNoMultiSelection
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Namespace'
itemValue: doDeleteAllForNamespace
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Classes'
itemValue: doDeleteClassAll
- translateLabel: true
isVisible: hasMultiSelection
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Classes && their Private Classes'
itemValue: doDeleteClassAndPrivateClassesAll
- translateLabel: true
isVisible: hasMultiSelection
)
(MenuItem
@@ -443,16 +410,26 @@
)
(MenuItem
enabled: hasSelection
+ label: 'Delete older Versions of Selected Method'
+ itemValue: doDeleteClassSelectorOlder
+ isVisible: hasNoMultiSelectionHolder
+ )
+ (MenuItem
+ enabled: hasSelection
+ label: 'Delete older Versions of all Selected Methods'
+ itemValue: doDeleteClassSelectorOlder
+ isVisible: hasMultiSelectionHolder
+ )
+ (MenuItem
+ enabled: hasSelection
label: 'Delete all Versions of Selected Method'
itemValue: doDeleteClassSelectorAll
- translateLabel: true
isVisible: hasNoMultiSelectionHolder
)
(MenuItem
enabled: hasSelection
label: 'Delete all Versions of all Selected Methods'
itemValue: doDeleteClassSelectorAll
- translateLabel: true
isVisible: hasMultiSelectionHolder
)
(MenuItem
@@ -462,7 +439,6 @@
enabled: hasSingleSelection
label: 'Compare with Current'
itemValue: doCompare
- translateLabel: true
)
(MenuItem
label: '-'
@@ -471,7 +447,6 @@
enabled: hasSelection
label: 'Make Change a Patch'
itemValue: doMakePatch
- translateLabel: true
)
)
nil
@@ -480,38 +455,32 @@
)
(MenuItem
label: 'Search'
- translateLabel: true
submenu:
(Menu
(
(MenuItem
label: 'Class...'
itemValue: findClass
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'First for Class'
itemValue: findFirstForClass
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Previous for Class'
itemValue: findPreviousForClass
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next for Class'
itemValue: findNextForClass
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Last for Class'
itemValue: findLastForClass
- translateLabel: true
)
(MenuItem
label: '-'
@@ -519,19 +488,16 @@
(MenuItem
label: 'Selector...'
itemValue: findSelector
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Previous for Selector'
itemValue: findPreviousForSelector
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next for Selector'
itemValue: findNextForSelector
- translateLabel: true
)
(MenuItem
label: '-'
@@ -539,19 +505,16 @@
(MenuItem
label: 'String...'
itemValue: findString
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Previous with String'
itemValue: findPreviousForString
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next with String'
itemValue: findNextForString
- translateLabel: true
)
(MenuItem
label: '-'
@@ -560,13 +523,11 @@
enabled: hasSelection
label: 'Previous Difference'
itemValue: findPreviousDifference
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next Difference'
itemValue: findNextDifference
- translateLabel: true
)
(MenuItem
label: '-'
@@ -575,18 +536,15 @@
enabled: hasSelection
label: 'Previous Snapshot'
itemValue: findPreviousSnapshot
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next Snapshot'
itemValue: findNextSnapshot
- translateLabel: true
)
(MenuItem
label: 'Last Snapshot'
itemValue: findLastSnapshot
- translateLabel: true
)
)
nil
@@ -595,7 +553,6 @@
)
(MenuItem
label: 'Browse'
- translateLabel: true
submenu:
(Menu
(
@@ -603,7 +560,6 @@
enabled: hasSingleSelection
label: 'Class'
itemValue: doBrowse
- translateLabel: true
)
(MenuItem
label: '-'
@@ -611,12 +567,10 @@
(MenuItem
label: 'Senders...'
itemValue: doBrowseSenders
- translateLabel: true
)
(MenuItem
label: 'Implementors...'
itemValue: doBrowseImplementors
- translateLabel: true
)
)
nil
@@ -625,28 +579,23 @@
)
(MenuItem
label: 'Settings'
- translateLabel: true
submenu:
(Menu
(
(MenuItem
label: 'Auto Compare'
- translateLabel: true
indication: autoCompare
)
(MenuItem
label: 'Autoload As Required'
- translateLabel: true
indication: autoloadAsRequired
)
(MenuItem
label: 'Show Diffs'
- translateLabel: true
indication: showingDiffs
)
(MenuItem
label: 'Auto Update'
- translateLabel: true
indication: autoUpdate
)
(MenuItem
@@ -654,14 +603,13 @@
)
(MenuItem
label: 'Add to ChangeSet when Applying'
- translateLabel: true
indication: updateChangeSet
)
(MenuItem
- label: 'Ignore public/private categories (Dolphin code)'
+ label: 'Ignore Public/Private in Categories (Dolphin code)'
itemValue: ignorePublicPrivateCategories:
- translateLabel: true
indication: ignorePublicPrivateCategories
+ isVisible: false
)
(MenuItem
label: '-'
@@ -669,12 +617,10 @@
(MenuItem
label: 'Apply into Package...'
itemValue: setEnforcedPackage
- translateLabel: true
)
(MenuItem
label: 'Apply into NameSpace...'
itemValue: setEnforcedNameSpace
- translateLabel: true
)
(MenuItem
label: '-'
@@ -682,7 +628,6 @@
(MenuItem
label: 'Settings...'
itemValue: openSettingsDialog
- translateLabel: true
)
)
nil
@@ -691,7 +636,6 @@
)
(MenuItem
label: 'MENU_Help'
- translateLabel: true
startGroup: conditionalRight
submenu:
(Menu
@@ -699,7 +643,6 @@
(MenuItem
label: 'ChangesBrowser Documentation'
itemValue: openHTMLDocument:
- translateLabel: true
argument: 'tools/cbrowser/TOP.html'
)
(MenuItem
@@ -708,7 +651,6 @@
(MenuItem
label: 'About ChangesBrowser...'
itemValue: openAboutThisApplication
- translateLabel: true
)
)
nil
@@ -719,8 +661,6 @@
nil
nil
)
-
- "Modified: / 25-12-2011 / 11:21:56 / cg"
!
toolbarMenuSpec
@@ -1415,7 +1355,7 @@
!
initialize
- |panel v upperFrame buttonPanel menuPanel mH toolbarMenu tmH
+ |panel infoLabel v upperFrame buttonPanel menuPanel mH toolbarMenu tmH
checkBox oldStyle codeViewBox lbl applyInOriginal|
"/ oldStyle := true.
@@ -1479,11 +1419,27 @@
mH := 0.0
].
- panel := VariableVerticalPanel origin:(0.0 @ mH)
- corner:(1.0 @ 1.0)
- borderWidth:0
- in:self.
-
+ panel := VariableVerticalPanel in:self.
+ "/ panel origin:(0.0 @ mH) corner:(1.0 @ 1.0)
+ panel layout:(LayoutFrame
+ leftFraction:0.0 offset:0
+ rightFraction:1.0 offset:0
+ topFraction:0.0 offset:mH
+ bottomFraction:1.0 offset:-30).
+ panel borderWidth:0.
+
+ infoLabel := Label in:self.
+ infoLabel layout:(LayoutFrame
+ leftFraction:0.0 offset:0
+ rightFraction:1.0 offset:0
+ topFraction:1.0 offset:-28
+ bottomFraction:1.0 offset:-2).
+ infoLabel borderWidth:0.
+ infoLabel sizeFixed:true.
+ infoLabel level:-1.
+ infoLabel adjust:#left.
+ infoLabel labelChannel:(infoHolder := '' asValue).
+
upperFrame := panel.
oldStyle ifTrue:[
upperFrame := VariableHorizontalPanel origin:(0.0 @ 0.0) corner:(1.0 @ 0.3) in:panel.
@@ -1590,7 +1546,7 @@
self setupTabSpec.
self readChangesFileInBackground:true.
self setChangeList.
- changeListView action:[:lineNr | self changeSelection:lineNr].
+ changeListView action:[:lineNrOrCollection | self changeSelection:lineNrOrCollection].
Processor addTimedBlock:checkBlock afterSeconds:5.
"Created: 24.7.1997 / 18:06:12 / cg"
@@ -2064,35 +2020,37 @@
|rangeEnd rangeStart firstDeleted|
changeListView selection size <= 5 ifTrue:[
- self withSelectedChangesReverseDo:[:changeNr |
- self deleteChange:changeNr.
- self autoSelectOrEnd:changeNr
- ].
- ^ self
+ self withSelectedChangesReverseDo:[:changeNr |
+ self deleteChange:changeNr.
+ self autoSelectOrEnd:changeNr
+ ].
+ self showNumberOfChanges.
+ ^ 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.
- ].
- ].
- ].
+ 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
+ self deleteChangesFrom:rangeStart to:rangeEnd.
+ firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
+ ].
+ self autoSelectOrEnd:firstDeleted.
+ self showNumberOfChanges
!
doDeleteAllForNamespace
@@ -2134,16 +2092,21 @@
].
self setChangeList.
- self autoSelectOrEnd:lastChangeNr
+ self autoSelectOrEnd:lastChangeNr.
!
doDeleteAndSelectPrevious
"delete currently selected change(s)"
self withSelectedChangesReverseDo:[:changeNr |
- self deleteChange:changeNr.
- self autoSelectOrEnd:changeNr-1
- ]
+ self deleteChange:changeNr.
+ self autoSelectOrEnd:changeNr-1
+ ].
+
+ "/mh - don't we need a
+ "/ self setChangeList
+ "/ here?
+ self showNumberOfChanges
!
doDeleteClassAll
@@ -2154,36 +2117,36 @@
lastChangeNr := -1.
classNamesToDelete := Set new.
self withSelectedChangesDo:[:changeNr |
- |classNameToDelete|
-
- classNameToDelete := self classNameOfChange:changeNr.
- classNameToDelete notNil ifTrue:[
- classNamesToDelete add:classNameToDelete.
- ].
- lastChangeNr := lastChangeNr max: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.
- ].
+ 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
+ self autoSelectOrEnd:lastChangeNr.
"Created: / 13.12.1995 / 16:07:14 / cg"
"Modified: / 28.1.1998 / 20:42:14 / cg"
@@ -2198,38 +2161,38 @@
lastChangeNr := -1.
classNamesToDelete := Set new.
self withSelectedChangesDo:[:changeNr |
- |classNameToDelete|
-
- classNameToDelete := self ownerClassNameOfChange:changeNr.
- classNameToDelete notNil ifTrue:[
- classNamesToDelete add:classNameToDelete.
- ].
- lastChangeNr := lastChangeNr max: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.
- ]
- ]
+ 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
+ self autoSelectOrEnd:lastChangeNr.
"Created: / 13.12.1995 / 16:07:14 / cg"
"Modified: / 28.1.1998 / 20:42:14 / cg"
@@ -2328,6 +2291,54 @@
"Modified: / 28.1.1998 / 20:42:14 / cg"
!
+doDeleteClassSelectorOlder
+ "delete older changes with same class and selector as currently selected change(s)"
+
+ |classNameSelectorPairsToDelete upToPerClassAndSelector lastChangeNr overAllNumDeletedBefore|
+
+ lastChangeNr := -1.
+ classNameSelectorPairsToDelete := Set new.
+ upToPerClassAndSelector := Dictionary new.
+
+ "/ collect what is to be deleted
+ 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).
+ upToPerClassAndSelector at:(className -> selector) put:changeNr.
+ ]
+ ].
+ lastChangeNr := lastChangeNr max:changeNr.
+ ].
+
+ overAllNumDeletedBefore := 0.
+ changeListView setSelection:nil.
+
+ self withExecuteCursorDo:[
+ classNameSelectorPairsToDelete do:[:pair |
+ |numDeletedBefore className selector lastToDelete|
+
+ className := pair key.
+ selector := pair value.
+ lastToDelete := (upToPerClassAndSelector at:pair) - 1.
+
+ numDeletedBefore := self
+ silentDeleteChangesFor:className selector:selector
+ from:1
+ to:lastToDelete.
+ lastChangeNr := lastChangeNr - numDeletedBefore.
+ overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+ ].
+ ].
+
+ self setChangeList.
+ self autoSelectOrEnd:lastChangeNr
+!
+
doDeleteFromBeginning
"delete all changes from 1 to the current"
@@ -3503,15 +3514,16 @@
!
setChangeList
- "extract type-information from changes and stuff into top selection
- view"
+ "update the selection-list;
+ called after the changeList has been modified"
|headerList|
headerList := changeInfoList collect:[:info | info headerLine].
changeListView setList:headerList expandTabs:false redraw:false.
changeListView invalidate.
-
+ self showNumberOfChanges.
+
"/ changeListView deselect.
"Modified: / 01-05-2016 / 19:27:35 / cg"
@@ -3534,6 +3546,10 @@
"Modified: / 29.4.1999 / 22:36:54 / cg"
!
+showNumberOfChanges
+ infoHolder value:(resources string:'%1 changes.' with:changeInfoList size).
+!
+
sourceOfChange:changeNr
|aStream sawExcla chunk|
@@ -4100,7 +4116,8 @@
!
selectorOfMethodChange:changeNr
- "return a method-changes selector, or nil if it's not a methodChange"
+ "return a method-changes selector,
+ or nil if it's not a methodChange"
|sel |
@@ -4298,17 +4315,13 @@
reader tabSpec:tabSpec.
reader inStream:inStream.
reader noColoring:(NoColoring == true).
+
reader readChangesFile.
editingClassSource := reader thisIsAClassSource.
changeInfoList := reader changeInfo.
-"/ changeChunks := reader changeChunks.
-"/ changeClassNames := reader changeClassNames.
-"/ changeHeaderLines := reader changeHeaderLines.
-"/ changePositions := reader changePositions.
-"/ changeTimeStamps := reader changeTimeStamps.
-"/ changeIsFollowupMethodChange := reader changeIsFollowupMethodChange.
-
+
+ self showNumberOfChanges.
anyChanges := false.
] ensure:[
inStream close.
@@ -5826,14 +5839,21 @@
].
self changeListSelectionHolder value:lineNumbers.
-
+
lineNr isNil ifTrue:[
codeView contents:nil.
codeView initializeDoITAction.
changeNrShown := nil.
+ infoHolder value:nil.
^ self
].
+ changeNrShown := lineNr.
+ self sensor
+ enqueueMessage:#updateSourceCodeAfterChangedSelection for:self arguments:nil;
+ enqueueMessage:#updateInfoAfterChangedSelection for:self arguments:nil.
+^ self.
+
"/ display the changes code
chunk := self sourceOfChange:lineNr.
chunk isNil ifTrue:[
@@ -6000,6 +6020,151 @@
self halt:'should not be here'
"Created: / 03-01-2012 / 15:26:36 / cg"
+!
+
+updateInfoAfterChangedSelection
+ "update the info label"
+
+ |selection lineNr className nonMetaClassName metaClassName
+ nClassChanges nMethodChanges uniqueSelectors
+ lastLineNr firstLineNr countBeforeCurrent countAfterLast moreInfo|
+
+ selection := lineNr := changeListView selection.
+ selection isNumber ifFalse:[
+ lineNr := nil.
+ selection notEmptyOrNil ifTrue:[
+ lineNr := selection first
+ ].
+ ].
+
+ lineNr isNil ifTrue:[
+ infoHolder value:nil.
+ ^ self
+ ].
+
+ "/
+ "/ now, this info is computed so fast,
+ "/ we can do it each time the selection changes
+ "/ (can we?)
+ className := self realClassNameOfChange:lineNr.
+ className isNil ifTrue:[
+ infoHolder value:nil.
+ ^ self
+ ].
+
+ nonMetaClassName := (className endsWith:' class')
+ ifTrue:[ className copyButLast:' class' size ]
+ ifFalse:[ className ].
+ metaClassName := nonMetaClassName,' class'.
+
+ nClassChanges := nMethodChanges := 0.
+ uniqueSelectors := Set new.
+ lastLineNr := firstLineNr := nil.
+ countAfterLast := 0.
+ countBeforeCurrent := 0.
+
+ "/ count them all
+ 1 to:changeInfoList size do:[:i |
+ |sel nameOfChange|
+
+ nameOfChange := self realClassNameOfChange:i.
+ ((nameOfChange = nonMetaClassName) or:[nameOfChange = metaClassName]) ifTrue:[
+ lastLineNr := i.
+ firstLineNr := firstLineNr ? i.
+ i > lineNr
+ ifTrue:[ countAfterLast := countAfterLast + 1 ]
+ ifFalse:[
+ i < lineNr ifTrue:[
+ countBeforeCurrent := countBeforeCurrent + 1
+ ]
+ ].
+ nClassChanges := nClassChanges + 1.
+ (sel := self selectorOfMethodChange:i) notNil ifTrue:[
+ uniqueSelectors add:sel.
+ nMethodChanges := nMethodChanges + 1.
+ ].
+ ].
+ ].
+ lastLineNr == lineNr ifTrue:[
+ firstLineNr == lineNr ifTrue:[
+ moreInfo := resources string:'. This is the only one for this class '.
+ ] ifFalse:[
+ moreInfo := resources string:'. This is the last for this class '.
+ ]
+ ] ifFalse:[
+ firstLineNr == lineNr ifTrue:[
+ moreInfo := resources string:'. This is the first for this class'.
+ ].
+ countAfterLast > 0 ifTrue:[
+ moreInfo := (moreInfo ? ''),(resources string:'. %1 more for this class ' with:countAfterLast).
+ ].
+ ].
+
+ infoHolder value:(resources
+ string:'%1 changes. %2 for %3 (%4 methods / %5 selectors)%6'
+ with:(changeInfoList size)
+ with:nClassChanges
+ with:className
+ with:nMethodChanges
+ with:uniqueSelectors size
+ with:moreInfo).
+!
+
+updateSourceCodeAfterChangedSelection
+ "show a change in the codeView"
+
+ |selection lineNr chunk|
+
+ selection := lineNr := changeListView selection.
+ selection isNumber ifFalse:[
+ lineNr := nil.
+ selection notEmptyOrNil ifTrue:[
+ lineNr := selection first
+ ].
+ ].
+
+ lineNr isNil ifTrue:[
+ ^ self
+ ].
+
+ "/ display the changes code
+ chunk := self sourceOfChange:lineNr.
+ chunk isNil ifTrue:[
+ codeView initializeDoITAction.
+ ^ self
+ ].
+
+ codeView contents:chunk.
+ codeView acceptAction:[:theCode | self doApply "noChangesAllowed"].
+ codeView doItAction:[:theCode |
+ |clsName cls|
+
+ clsName := self classNameOfChange:lineNr.
+ clsName notNil ifTrue:[
+ clsName := clsName asSymbolIfInterned.
+ clsName notNil ifTrue:[
+ cls := Smalltalk at:clsName ifAbsent:nil.
+ ]
+ ].
+ Compiler
+ evaluate:theCode
+ in:nil
+ receiver:cls
+ notifying:self
+ logged:true
+ ifFail:nil
+ ].
+
+
+ changeNrShown := lineNr.
+
+ self showingDiffs value ifTrue:[
+ self withWaitCursorDo:[
+ AbortOperationRequest catch:[
+ self updateDiffViewFor:changeNrShown.
+ ]
+ ]
+ ].
! !
!ChangesBrowser::ChangeFileReader methodsFor:'accessing'!