class: ChangesBrowser
added:
#doDeleteAllForNamespace
#namespaceOfChange:
#silentDeleteChangesForNamespace:from:to:
changed: #menuSpec
--- 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 $'
! !
+