#FEATURE by cg
authorClaus Gittinger <cg@exept.de>
Mon, 06 Feb 2017 02:01:51 +0100
changeset 17344 7902ad271c76
parent 17343 715f12ddf58a
child 17345 3d6f4a695823
#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
VersionDiffBrowser.st
--- 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'!