ChangesBrowser.st
branchjv
changeset 12435 1f1faf35be04
parent 12431 9f0c59c742d5
parent 12428 a8bd7df67b9a
child 12626 7ae48abfedac
--- a/ChangesBrowser.st	Thu Feb 28 22:46:18 2013 +0000
+++ b/ChangesBrowser.st	Tue Mar 05 18:10:46 2013 +0000
@@ -104,6 +104,7 @@
 "
 ! !
 
+
 !ChangesBrowser class methodsFor:'instance creation'!
 
 new
@@ -137,6 +138,7 @@
     "Modified: / 18-07-2010 / 10:32:18 / cg"
 ! !
 
+
 !ChangesBrowser class methodsFor:'behavior'!
 
 autoSelectNext
@@ -146,6 +148,7 @@
     ^ true
 ! !
 
+
 !ChangesBrowser class methodsFor:'defaults'!
 
 defaultIcon
@@ -169,6 +172,7 @@
     "Created: / 27.9.1999 / 12:28:27 / cg"
 ! !
 
+
 !ChangesBrowser class methodsFor:'menu specs'!
 
 flyByHelpSpec
@@ -407,6 +411,12 @@
                 )
                (MenuItem
                   enabled: hasSelection
+                  label: 'Delete all for Namespace'
+                  itemValue: doDeleteAllForNamespace
+                  translateLabel: true
+                )
+               (MenuItem
+                  enabled: hasSelection
                   label: 'Delete all for Classes'
                   itemValue: doDeleteClassAll
                   translateLabel: true
@@ -751,6 +761,7 @@
       )
 ! !
 
+
 !ChangesBrowser class methodsFor:'private-changeFile access'!
 
 readXMLChangesFrom:aStream inBackground:inBackground
@@ -789,6 +800,7 @@
     ^ set.
 ! !
 
+
 !ChangesBrowser class methodsFor:'utilities'!
 
 isXMLFile:aFilename
@@ -822,6 +834,7 @@
         )
 ! !
 
+
 !ChangesBrowser methodsFor:'aspects'!
 
 applyInOriginalNameSpace
@@ -965,6 +978,7 @@
     ^ updateChangeSet
 ! !
 
+
 !ChangesBrowser methodsFor:'compiler interface'!
 
 wantChangeLog
@@ -974,6 +988,7 @@
     ^ false
 ! !
 
+
 !ChangesBrowser methodsFor:'compiler interface-error handling'!
 
 correctableError:aString position:relPos to:relEndPos from:aCompiler
@@ -1075,6 +1090,7 @@
     ^ self
 ! !
 
+
 !ChangesBrowser methodsFor:'event handling'!
 
 handlesKeyPress:key inView:view
@@ -1134,6 +1150,7 @@
     "Modified: / 18.6.1998 / 22:15:36 / cg"
 ! !
 
+
 !ChangesBrowser methodsFor:'help'!
 
 showActivity:someMessage
@@ -1150,6 +1167,7 @@
     "Modified: 23.4.1996 / 21:39:36 / cg"
 ! !
 
+
 !ChangesBrowser methodsFor:'initialization & release'!
 
 autoCompareChanged
@@ -1613,6 +1631,7 @@
     "Modified: / 03-01-2012 / 15:23:13 / cg"
 ! !
 
+
 !ChangesBrowser methodsFor:'menu actions'!
 
 doApply
@@ -2041,6 +2060,48 @@
     self autoSelectOrEnd:firstDeleted
 !
 
+doDeleteAllForNamespace
+    "delete all changes for classes with same namespace as currently selected change"
+
+    |namespacesToDelete lastChangeNr overAllNumDeletedBefore|
+
+    lastChangeNr := -1.
+    namespacesToDelete := Set new.
+    self withSelectedChangesDo:[:changeNr |
+        |namespaceToDelete|
+
+        namespaceToDelete := self namespaceOfChange:changeNr.
+        namespaceToDelete notNil ifTrue:[
+            namespacesToDelete add:namespaceToDelete
+        ].
+        lastChangeNr := lastChangeNr max:changeNr.
+    ].
+    namespacesToDelete isEmpty ifTrue:[^ self].
+
+    overAllNumDeletedBefore := 0.
+    changeListView setSelection:nil.
+
+    self withExecuteCursorDo:[
+        namespacesToDelete do:[:namespaceToDelete |
+            |numDeletedBefore|
+
+            self 
+                silentDeleteChangesForNamespace:namespaceToDelete
+                from:lastChangeNr
+                to:(self numberOfChanges).
+            numDeletedBefore := self
+                                   silentDeleteChangesForNamespace:namespaceToDelete
+                                   from:1
+                                   to:(lastChangeNr-1).
+            lastChangeNr := lastChangeNr - numDeletedBefore.
+            overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+        ].
+    ].
+
+    self setChangeList.
+    self autoSelectOrEnd:lastChangeNr
+!
+
 doDeleteAndSelectPrevious
     "delete currently selected change(s)"
 
@@ -2997,6 +3058,7 @@
     ToolApplicationModel openAboutSTX
 ! !
 
+
 !ChangesBrowser methodsFor:'private'!
 
 autoSelect:changeNr
@@ -3479,6 +3541,7 @@
     self withSelectedChangesInOrder:nil do:aBlock
 ! !
 
+
 !ChangesBrowser methodsFor:'private-change access'!
 
 changeIsFollowupMethodChange:changeNr
@@ -3877,6 +3940,19 @@
     "Modified: / 08-03-2012 / 11:42:32 / cg"
 !
 
+namespaceOfChange:changeNr
+    "return the namespace of a change or nil"
+
+    |className namespace|
+
+    className := self classNameOfChange:changeNr.
+    className isNil ifTrue:[ ^ nil ].
+
+    (className includesString:'::') ifFalse:[ ^ nil ].
+    namespace := className readStream upToAll:'::'.
+    ^  namespace
+!
+
 numberOfChanges
     ^ changePositions size
 
@@ -4030,6 +4106,7 @@
     ^ aStream
 ! !
 
+
 !ChangesBrowser methodsFor:'private-changeFile access'!
 
 changeFileName:aFileName
@@ -4293,6 +4370,7 @@
     "Modified: / 27-07-2012 / 09:46:00 / cg"
 ! !
 
+
 !ChangesBrowser methodsFor:'private-user interaction ops'!
 
 appendChange:changeNr toFile:aFileNameOrFileNameString
@@ -5278,6 +5356,25 @@
 
 !
 
+silentDeleteChangesForNamespace:aNamespace from:start to:stop
+    "delete changes for a given namespace in a range.
+     Return the number of deleted changes."
+
+    |thisNamespace index numDeleted|
+
+    numDeleted := 0.
+    index := stop.
+    [index >= start] whileTrue:[
+        thisNamespace := self namespaceOfChange:index.
+        thisNamespace = aNamespace ifTrue:[
+            self silentDeleteChange:index.
+            numDeleted := numDeleted + 1.
+        ].
+        index := index - 1
+    ].
+    ^ numDeleted
+!
+
 silentDeleteInternalChange:changeNr
     "delete a change do not update changeListView"
 
@@ -5470,6 +5567,7 @@
     "Modified: / 05-03-2012 / 14:33:16 / cg"
 ! !
 
+
 !ChangesBrowser methodsFor:'termination'!
 
 askIfChangesAreToBeWrittenBack
@@ -5516,6 +5614,7 @@
     "Modified: / 3.8.1998 / 19:54:00 / cg"
 ! !
 
+
 !ChangesBrowser methodsFor:'user interaction'!
 
 askForSearch:msg initialAnswer:initial thenSearchUsing:searchBlock2 onCancel:cancelBlock
@@ -5787,6 +5886,7 @@
     "Created: / 03-01-2012 / 15:26:36 / cg"
 ! !
 
+
 !ChangesBrowser::ChangeFileReader methodsFor:'accessing'!
 
 autoCompare:something
@@ -5859,6 +5959,7 @@
     "Modified: / 06-10-2006 / 11:18:49 / cg"
 ! !
 
+
 !ChangesBrowser::ChangeFileReader methodsFor:'private'!
 
 contractClass:className selector:selector to:maxLen
@@ -5928,6 +6029,7 @@
     ^ browser nameSpaceForApply
 ! !
 
+
 !ChangesBrowser::ChangeFileReader methodsFor:'reading'!
 
 addHeaderLineForChangeType:changeType changeString:changeString changeDelta:changeDelta timeStampInfo:timeStampInfo
@@ -6456,14 +6558,15 @@
     "Modified: / 10-07-2010 / 10:58:08 / cg"
 ! !
 
+
 !ChangesBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.433 2012-10-22 22:32:07 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.434 2013-03-04 12:32:40 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.433 2012-10-22 22:32:07 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.434 2013-03-04 12:32:40 cg Exp $'
 !
 
 version_HG