class: ChangesBrowser
authorClaus Gittinger <cg@exept.de>
Mon, 04 Mar 2013 13:32:40 +0100
changeset 12428 a8bd7df67b9a
parent 12427 74750a877f46
child 12435 1f1faf35be04
child 12436 e3157e0285f9
class: ChangesBrowser added: #doDeleteAllForNamespace #namespaceOfChange: #silentDeleteChangesForNamespace:from:to: changed: #menuSpec
ChangesBrowser.st
--- a/ChangesBrowser.st	Sat Mar 02 14:19:21 2013 +0100
+++ b/ChangesBrowser.st	Mon Mar 04 13:32:40 2013 +0100
@@ -407,6 +407,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
@@ -2041,6 +2047,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)"
 
@@ -3877,6 +3925,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
 
@@ -5278,6 +5339,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"
 
@@ -6459,9 +6539,10 @@
 !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 $'
 ! !
+