#BUGFIX by cg
authorClaus Gittinger <cg@exept.de>
Thu, 18 Jan 2018 17:02:55 +0100
changeset 17931 bb1f70ebf2c8
parent 17930 0a7cc90f341d
child 17932 dba0074ec647
#BUGFIX by cg class: VersionDiffBrowser fixed: '...' added: search feature #filterSelectorFromChange: #filterSelectorFromSet: #findNextChangeWithStringIn:selectionHolder: #findNextChangeWithStringInA #findNextChangeWithStringInB #findNextChangeWithStringInM #findNextChangeWithStringInPairs:selectionHolder: changed: #filterSelectorFromA #filterSelectorFromB #filterSelectorFromM #updateVersionList class: VersionDiffBrowser class comment/format in: #menuA changed: #menuB #menuM
VersionDiffBrowser.st
--- a/VersionDiffBrowser.st	Thu Jan 18 15:00:41 2018 +0100
+++ b/VersionDiffBrowser.st	Thu Jan 18 17:02:55 2018 +0100
@@ -30,7 +30,7 @@
 		filteredClasses filteredMethods filteredSelectors
 		classPatternFilters selectorPatternFilters
 		selectedVersionIndexHolder'
-	classVariableNames:'RememberedFilters'
+	classVariableNames:'RememberedFilters LastSearchString'
 	poolDictionaries:''
 	category:'Interface-Browsers'
 !
@@ -768,7 +768,7 @@
             #enabled: #hasChangeSelectedInA
           )
          #(#MenuItem
-            #label: 'Filter Selector '
+            #label: 'Filter Selector'
             #translateLabel: true
             #value: #filterSelectorFromA
             #enabled: #hasChangeSelectedInA
@@ -777,6 +777,15 @@
             #label: '-'
           )
          #(#MenuItem
+            #label: 'Find Next Change with String...'
+            #translateLabel: true
+            #value: #findNextChangeWithStringInA
+            #enabled: #hasChangeSelectedInA
+          )
+         #(#MenuItem
+            #label: '-'
+          )
+         #(#MenuItem
             #label: 'Inspect'
             #translateLabel: true
             #value: #inspectSelectedChangeInA
@@ -854,6 +863,15 @@
             #label: '-'
           )
          #(#MenuItem
+            #label: '-'
+          )
+         #(#MenuItem
+            #label: 'Find Next Change with String...'
+            #translateLabel: true
+            #value: #findNextChangeWithStringInB
+            #enabled: #hasChangeSelectedInB
+          )
+         #(#MenuItem
             #label: 'Inspect'
             #translateLabel: true
             #value: #inspectSelectedChangeInB
@@ -931,6 +949,15 @@
             #label: '-'
           )
          #(#MenuItem
+            #label: 'Find Next Change with String...'
+            #translateLabel: true
+            #value: #findNextChangeWithStringInM
+            #enabled: #hasChangeSelectedInM
+          )
+         #(#MenuItem
+            #label: '-'
+          )
+         #(#MenuItem
             #label: 'Inspect both'
             #translateLabel: true
             #value: #inspectSelectedChangeInM
@@ -2581,7 +2608,8 @@
     ].
 
     revisions size < numOverallRevisions ifTrue:[
-        revisions add:'...'
+        revisions add:'...'.
+        revisionEntries add:'...'.
     ].          
     symbolicToVersionMapping := symbolicNames.
     self symbolicVersionList contents:tagList.
@@ -2981,11 +3009,7 @@
 filterSelectorFromA
     "filter all changes for the selected change's selector(don't show it)."
 
-    filteredSelectors isNil ifTrue:[
-        filteredSelectors := Set new.
-    ].    
-    filteredSelectors add:(self selectedChangeInA changeSelector).
-    self filterChanged.
+    self filterSelectorFromSet:self selectedChangeInA
 
     "Created: / 05-02-2017 / 10:36:08 / cg"
     "Modified (comment): / 06-02-2017 / 09:13:48 / cg"
@@ -2994,23 +3018,45 @@
 filterSelectorFromB
     "filter all changes for the selected change's selector(don't show it)."
 
-    filteredSelectors isNil ifTrue:[
-        filteredSelectors := Set new.
-    ].    
-    filteredSelectors add:(self selectedChangeInB changeSelector).
-    self filterChanged.
+    self filterSelectorFromSet:self selectedChangeInB
 
     "Created: / 05-02-2017 / 10:36:14 / cg"
     "Modified (comment): / 06-02-2017 / 09:13:52 / cg"
 !
 
-filterSelectorFromM
-    "filter all changes for the selected change's selector(don't show it)."
+filterSelectorFromChange:aChange
+    "common to set a filter;
+     gets the change as argument,
+     takes its selector and adds it to the filters"
 
     filteredSelectors isNil ifTrue:[
         filteredSelectors := Set new.
     ].    
-    filteredSelectors add:(self selectedChangesInM first changeSelector).
+    filteredSelectors add:(aChange changeSelector).
+    self filterChanged.
+
+    "Created: / 05-02-2017 / 10:39:28 / cg"
+    "Modified (comment): / 06-02-2017 / 09:13:55 / cg"
+!
+
+filterSelectorFromM
+    "filter all changes for the selected change's selector(don't show it)."
+
+    self filterSelectorFromSet:(self selectedChangesInM first)
+
+    "Created: / 05-02-2017 / 10:39:28 / cg"
+    "Modified (comment): / 06-02-2017 / 09:13:55 / cg"
+!
+
+filterSelectorFromSet:setOfChanges
+    "common to set a filter;
+     get the sub-set (A,B,M as argument),
+     takes its first selection and adds it to the filters"
+
+    filteredSelectors isNil ifTrue:[
+        filteredSelectors := Set new.
+    ].    
+    filteredSelectors add:(setOfChanges first changeSelector).
     self filterChanged.
 
     "Created: / 05-02-2017 / 10:39:28 / cg"
@@ -3131,6 +3177,78 @@
     "Created: / 06-02-2017 / 09:51:37 / cg"
 ! !
 
+!VersionDiffBrowser methodsFor:'menu action - searching'!
+
+findNextChangeWithStringIn:listOfchanges selectionHolder:whichMethodSelectionHolder
+    "common code to select the next change which contains some string"
+
+    |string startIdx|
+
+    string := Dialog request:'Search for:' initialAnswer:LastSearchString.
+    string isEmptyOrNil ifTrue:[^ false].
+
+    LastSearchString := string.
+
+    startIdx := whichMethodSelectionHolder value.
+    listOfchanges from:startIdx+1 keysAndValuesDo:[:index :eachChange |
+        (eachChange source includesString:string caseSensitive:false) ifTrue:[
+            whichMethodSelectionHolder value:index.
+            ^ true.
+        ]
+    ].
+    ^ false
+!
+
+findNextChangeWithStringInA
+    "select the next change which contains some string"
+
+    (self findNextChangeWithStringIn:methodsOnlyInAFiltered selectionHolder:methodsOnlyInASelection) ifTrue:[
+        self methodsOnlyInASelectionChanged
+    ] ifFalse:[
+        self beepInEditor
+    ].
+!
+
+findNextChangeWithStringInB
+    "select the next change which contains some string"
+
+    (self findNextChangeWithStringIn:methodsOnlyInBFiltered selectionHolder:methodsOnlyInBSelection) ifTrue:[
+        self methodsOnlyInASelectionChanged
+    ]
+!
+
+findNextChangeWithStringInM
+    "select the next change which contains some string"
+
+    (self findNextChangeWithStringInPairs:methodsChangedFiltered selectionHolder:methodsChangedSelection) ifTrue:[
+        self methodsChangedSelectionChanged
+    ]
+!
+
+findNextChangeWithStringInPairs:listOfchangePairs selectionHolder:whichMethodSelectionHolder
+    "select the next change which contains some string"
+
+    |string startIdx|
+
+    string := Dialog request:'Search for:' initialAnswer:LastSearchString.
+    string isEmptyOrNil ifTrue:[^ false].
+
+    LastSearchString := string.
+
+    startIdx := whichMethodSelectionHolder value.
+    listOfchangePairs from:startIdx+1 keysAndValuesDo:[:index :eachChangePair |
+        (eachChangePair first source includesString:string caseSensitive:false) ifTrue:[
+            whichMethodSelectionHolder value:index.
+            ^ true.
+        ].
+        (eachChangePair second source includesString:string caseSensitive:false) ifTrue:[
+            whichMethodSelectionHolder value:index.
+            ^ true.
+        ]
+    ].
+    ^ false.
+! !
+
 !VersionDiffBrowser methodsFor:'private'!
 
 addAcceptToTextViewMenus