#FEATURE by cg
class: VersionDiffBrowser
class definition
added:
#inspectFilterParameters
#loadFilterNamed
changed:
#filterClassesMatching
#filterMenu
#forgetFilterNamed
#rememberFilterAs
#updateLists
category of:
#filterClassInA
#filterClassInB
#filterClassInM
#filterClassesMatching
#filterMethodInA
#filterMethodInB
#filterMethodInM
#filterSelectorFromA
#filterSelectorFromB
#filterSelectorFromM
#forgetFilterNamed
#rememberFilterAs
--- a/VersionDiffBrowser.st Mon Feb 06 01:19:31 2017 +0100
+++ b/VersionDiffBrowser.st Mon Feb 06 02:01:51 2017 +0100
@@ -27,7 +27,7 @@
isMultipleVersionBrowser versionInfoList versionList
selectedVersionHolder symbolicVersionList
selectedSymbolicVersionHolder symbolicToVersionMapping
- filteredClasses filteredMethods filteredSelectors'
+ filteredClasses filteredMethods filteredSelectors patternFilters'
classVariableNames:'RememberedFilters'
poolDictionaries:''
category:'Interface-Browsers'
@@ -568,15 +568,31 @@
itemValue: rememberFilterAs
)
(MenuItem
+ label: 'Load Filter Named...'
+ itemValue: loadFilterNamed
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
label: 'Forget Filter Named...'
itemValue: forgetFilterNamed
)
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ label: 'Inspect Current Filter Settings'
+ itemValue: inspectFilterParameters
+ )
+
)
nil
nil
)
"Created: / 05-02-2017 / 11:11:30 / cg"
+ "Modified: / 06-02-2017 / 02:01:23 / cg"
!
mainMenu
@@ -2149,7 +2165,7 @@
printStringGenerator sortBlockForChangeLists filteredList
numIgnoredExtensions numIgnoredVersionMethods
info needFilter entryIsForCommentOrFormatOnly
- isIgnoredChange isIgnored1 isIgnored2 isIgnored3|
+ isIgnoredChange isIgnored1 isIgnored2 isIgnored3 isIgnored4|
printStringGenerator := [:aChange | self printStringForChange:aChange].
sortBlockForChangeLists := [:a :b | (printStringGenerator value:a) < (printStringGenerator value:b)].
@@ -2233,6 +2249,15 @@
].
].
+ patternFilters notEmptyOrNil ifTrue:[
+ isIgnored4 := isIgnoredChange.
+ isIgnoredChange :=
+ [:change |
+ (isIgnored4 value:change)
+ or:[ patternFilters contains:[:pattern | pattern match:change nonMetaClassName]]
+ ].
+ ].
+
listOnlyInA := filteredList := self methodsOnlyInA.
listOnlyInA removeAll.
classChangeSet notNil ifTrue:[
@@ -2331,7 +2356,7 @@
].
self information:info
- "Modified: / 05-02-2017 / 11:47:10 / cg"
+ "Modified: / 06-02-2017 / 01:44:09 / cg"
!
updateVersionList
@@ -2553,6 +2578,105 @@
"Modified: / 27-10-2010 / 11:34:58 / cg"
!
+hideDiffsWithCommentOrFormattingChangeOnlyHolder:newValue
+ "state of hide changes which have no semantic effect has changed"
+
+ self updateLists.
+
+ "Created: / 04-02-2017 / 19:50:51 / cg"
+ "Modified: / 04-02-2017 / 23:14:45 / cg"
+!
+
+inspectSelectedChangeInA
+ "inspect the selected method change for the 'method only in version A'."
+
+ self selectedChangeInA inspect.
+
+ "Modified: / 25-07-2006 / 11:13:30 / cg"
+!
+
+inspectSelectedChangeInB
+ "inspect the selected method change for the 'method only in version B'."
+
+ self selectedChangeInB inspect.
+
+ "Modified: / 25-07-2006 / 11:13:22 / cg"
+!
+
+inspectSelectedChangeInM
+ "inspect the two method changes for the selected 'changed method'."
+
+ |changes|
+
+ changes := self selectedChangesInM.
+ changes do:[:change |
+ change inspect
+ ].
+
+ "Modified: / 25-07-2006 / 11:13:13 / cg"
+!
+
+mainMenu
+ "if this application runs as an subapplication,
+ the menu bar should not be used."
+
+ self masterApplication isNil ifTrue:[
+ ^ self class mainMenu
+ ].
+ ^ nil
+
+ "Modified: / 25-07-2006 / 11:13:44 / cg"
+!
+
+menuAHolder
+ ^ [ self class menuA ]
+
+ "Created: / 05-02-2017 / 10:07:15 / cg"
+!
+
+menuBHolder
+ ^ [ self class menuB ]
+
+ "Created: / 05-02-2017 / 10:07:22 / cg"
+!
+
+menuMHolder
+ ^ [ self class menuM ]
+
+ "Created: / 05-02-2017 / 10:07:36 / cg"
+!
+
+openDocumentation
+ HTMLDocumentView openFullOnDocumentationFile:'tools/misc/TOP.html#VERSIONDIFF'
+!
+
+removeClassFromChangeSet
+ |cls ok changedClasses|
+
+ classChangeSet notNil ifTrue:[
+ "/ only do if we compare a single class
+ (cls := classChangeSet classBeingCompared) notNil ifTrue:[
+ ok := classChangeSet diffSet isEmptyOrNil.
+ ok ifFalse:[
+ changedClasses := classChangeSet diffSet changedClasses.
+ (changedClasses size == 1
+ and:[ changedClasses anElement theNonMetaclass == cls theNonMetaclass]) ifTrue:[
+ (methodsChangedFiltered isEmptyOrNil
+ and:[ methodsOnlyInAFiltered isEmptyOrNil
+ and:[ methodsOnlyInBFiltered isEmptyOrNil ]]) ifTrue:[
+ ok := true.
+ ]
+ ]
+ ].
+ ok ifTrue:[
+ ChangeSet current condenseChangesForClass:cls
+ ].
+ ].
+ ].
+! !
+
+!VersionDiffBrowser methodsFor:'menu action - filters'!
+
filterClassInA
"filter this class (don't show it)."
@@ -2592,9 +2716,18 @@
!
filterClassesMatching
- self halt.
+ |pattern|
+
+ pattern := Dialog request:'Pattern for Filter (will hide matching classes):'.
+ pattern isEmptyOrNil ifTrue:[^ self].
+ patternFilters isNil ifTrue:[
+ patternFilters := OrderedCollection new.
+ ].
+ patternFilters add:pattern.
+ self filterChanged
"Created: / 05-02-2017 / 11:11:42 / cg"
+ "Modified: / 06-02-2017 / 01:33:27 / cg"
!
filterMethodInA
@@ -2671,112 +2804,77 @@
!
forgetFilterNamed
- self halt.
+ "forget a remembered named filter"
+
+ |filterName|
+
+ filterName := Dialog request:'Forget Filter Named:' list:(RememberedFilters keys copy sort).
+ filterName isEmptyOrNil ifTrue:[^ self].
+
+ (Dialog confirm:'Shure to Forget the Filter Named: ',filterName) ifFalse:[^ self].
+
+ RememberedFilters removeKey:filterName.
"Created: / 05-02-2017 / 11:12:08 / cg"
-!
-
-hideDiffsWithCommentOrFormattingChangeOnlyHolder:newValue
- "state of hide changes which have no semantic effect has changed"
-
- self updateLists.
-
- "Created: / 04-02-2017 / 19:50:51 / cg"
- "Modified: / 04-02-2017 / 23:14:45 / cg"
+ "Modified: / 06-02-2017 / 01:59:41 / cg"
!
-inspectSelectedChangeInA
- "inspect the selected method change for the 'method only in version A'."
-
- self selectedChangeInA inspect.
-
- "Modified: / 25-07-2006 / 11:13:30 / cg"
-!
-
-inspectSelectedChangeInB
- "inspect the selected method change for the 'method only in version B'."
-
- self selectedChangeInB inspect.
-
- "Modified: / 25-07-2006 / 11:13:22 / cg"
+inspectFilterParameters
+ "inspect the current settings"
+
+ |filterParameters|
+
+ filterParameters := FilterParameters new.
+ filterParameters filteredClassNameMatchPattern:patternFilters.
+ filterParameters filteredClassNames:filteredClasses.
+ filterParameters filteredMethodNames:filteredMethods.
+ filterParameters filteredSelectors:filteredSelectors.
+
+ filterParameters inspect.
+
+ "Created: / 06-02-2017 / 02:00:55 / cg"
!
-inspectSelectedChangeInM
- "inspect the two method changes for the selected 'changed method'."
-
- |changes|
-
- changes := self selectedChangesInM.
- changes do:[:change |
- change inspect
- ].
-
- "Modified: / 25-07-2006 / 11:13:13 / cg"
-!
-
-mainMenu
- "if this application runs as an subapplication,
- the menu bar should not be used."
-
- self masterApplication isNil ifTrue:[
- ^ self class mainMenu
- ].
- ^ nil
-
- "Modified: / 25-07-2006 / 11:13:44 / cg"
-!
-
-menuAHolder
- ^ [ self class menuA ]
-
- "Created: / 05-02-2017 / 10:07:15 / cg"
-!
-
-menuBHolder
- ^ [ self class menuB ]
-
- "Created: / 05-02-2017 / 10:07:22 / cg"
-!
-
-menuMHolder
- ^ [ self class menuM ]
-
- "Created: / 05-02-2017 / 10:07:36 / cg"
-!
-
-openDocumentation
- HTMLDocumentView openFullOnDocumentationFile:'tools/misc/TOP.html#VERSIONDIFF'
+loadFilterNamed
+ "load a remembered named filter"
+
+ |filterName filterParameters|
+
+ filterName := Dialog request:'Load Filter Named:' list:(RememberedFilters keys copy sort).
+ filterName isEmptyOrNil ifTrue:[^ self].
+
+ filterParameters := RememberedFilters at:filterName.
+
+ patternFilters := filterParameters filteredClassNameMatchPattern.
+ filteredClasses := filterParameters filteredClassNames.
+ filteredMethods := filterParameters filteredMethodNames.
+ filteredSelectors := filterParameters filteredSelectors.
+
+ self filterChanged.
+
+ "Created: / 06-02-2017 / 01:57:48 / cg"
!
rememberFilterAs
- self halt.
-
- "Created: / 05-02-2017 / 11:12:03 / cg"
-!
-
-removeClassFromChangeSet
- |cls ok changedClasses|
-
- classChangeSet notNil ifTrue:[
- "/ only do if we compare a single class
- (cls := classChangeSet classBeingCompared) notNil ifTrue:[
- ok := classChangeSet diffSet isEmptyOrNil.
- ok ifFalse:[
- changedClasses := classChangeSet diffSet changedClasses.
- (changedClasses size == 1
- and:[ changedClasses anElement theNonMetaclass == cls theNonMetaclass]) ifTrue:[
- (methodsChangedFiltered isEmptyOrNil
- and:[ methodsOnlyInAFiltered isEmptyOrNil
- and:[ methodsOnlyInBFiltered isEmptyOrNil ]]) ifTrue:[
- ok := true.
- ]
- ]
- ].
- ok ifTrue:[
- ChangeSet current condenseChangesForClass:cls
- ].
- ].
+ "remember the current settings under a named filter"
+
+ |filterName filterParameters|
+
+ filterName := Dialog request:'Name of Filter:'.
+ filterName isEmptyOrNil ifTrue:[^ self].
+
+ filterParameters := FilterParameters new.
+ filterParameters filteredClassNameMatchPattern:patternFilters.
+ filterParameters filteredClassNames:filteredClasses.
+ filterParameters filteredMethodNames:filteredMethods.
+ filterParameters filteredSelectors:filteredSelectors.
+
+ RememberedFilters isNil ifTrue:[
+ RememberedFilters := Dictionary new.
].
+ RememberedFilters at:filterName put:filterParameters.
+
+ "Modified (comment): / 06-02-2017 / 01:54:58 / cg"
! !
!VersionDiffBrowser methodsFor:'private'!