#FEATURE
class: TextView
class definition
comment/format in: #searchFwdUsingSpec:startingAtLine:col:ifAbsent:
changed:
#openSearchBoxAndSearch
#searchDialogSpec
wrap and regex search added.
--- a/TextView.st Fri Jan 15 22:53:02 2016 +0100
+++ b/TextView.st Fri Jan 15 22:53:54 2016 +0100
@@ -30,7 +30,7 @@
WordSelectCatchesBlanks LastSearchPatterns
NumRememberedSearchPatterns LastSearchIgnoredCase
LastSearchWasMatch DefaultParenthesisSpecification
- LastSearchWasMatchWithRegex LastSearchWasWithWrapAtEnd'
+ LastSearchWasMatchWithRegex LastSearchWasWrapAtEndOfText'
poolDictionaries:''
category:'Views-Text'
!
@@ -382,7 +382,7 @@
name: 'String search'
min: (Point 10 10)
max: (Point 1280 1024)
- bounds: (Rectangle 0 0 411 272)
+ bounds: (Rectangle 0 0 420 323)
)
component:
(SpecCollection
@@ -426,7 +426,7 @@
tabable: true
model: caseSensitive
translateLabel: true
- extent: (Point 411 24)
+ extent: (Point 420 24)
)
(ViewSpec
name: 'MatchBox'
@@ -447,7 +447,7 @@
label: 'Regex Match'
name: 'CheckBox6'
layout: (LayoutFrame -151 1 0 0 0 1 22 0)
- visibilityChannel: match
+ visibilityChannel: matchWithRegexVisible
enableChannel: match
model: matchWithRegex
translateLabel: true
@@ -455,7 +455,7 @@
)
)
- extent: (Point 411 24)
+ extent: (Point 420 24)
)
(CheckBoxSpec
label: 'Search Full Words'
@@ -466,7 +466,7 @@
tabable: true
model: searchFullWord
translateLabel: true
- extent: (Point 411 24)
+ extent: (Point 420 24)
)
(CheckBoxSpec
label: 'At Begin of Line Only'
@@ -476,7 +476,7 @@
tabable: true
model: searchAtBeginOfLineOnly
translateLabel: true
- extent: (Point 411 24)
+ extent: (Point 420 24)
)
(CheckBoxSpec
label: 'Variable Only'
@@ -489,7 +489,7 @@
model: searchVariable
translateLabel: true
labelChannel: stringWithVariableUnderCursorHolder
- extent: (Point 411 24)
+ extent: (Point 420 24)
)
(CheckBoxSpec
label: 'Select Lines'
@@ -502,6 +502,16 @@
translateLabel: true
extent: (Point 302 24)
)
+ (CheckBoxSpec
+ label: 'Wrap at End of Text (forward only)'
+ name: 'CheckBox7'
+ activeHelpKey: searchAtBeginOfLineOnly
+ level: 0
+ tabable: true
+ model: wrapAtEndOfTextHolder
+ translateLabel: true
+ extent: (Point 420 24)
+ )
(ViewSpec
name: 'ReplaceBox'
component:
@@ -532,7 +542,7 @@
)
)
- extent: (Point 411 24)
+ extent: (Point 420 24)
)
)
@@ -2197,8 +2207,8 @@
Q: is it a good idea to preserve the last searchstring between views?
cg: yes - turns out to be useful and less confusing than keeping last per view
"
- |searchBox patternHolder caseHolder matchHolder matchWithRegexHolder
- wrapAtEndHolder fwd ign match initialString
+ |searchBox patternHolder caseHolder matchHolder matchWithRegexHolder wrapAtEndHolder
+ fwd ign match initialString
bindings bldr doSearch modal searchVariableHolder selectedVariable searchFullWordHolder
replaceBooleanEnabledHolder replaceBooleanHolder replaceTextHolder
searchAtBeginOfLineOnlyHolder|
@@ -2217,7 +2227,7 @@
match := lastSearchWasMatch ? LastSearchWasMatch ? false.
matchHolder := match asValue.
matchWithRegexHolder := (LastSearchWasMatchWithRegex ? false) asValue.
- wrapAtEndHolder := (LastSearchWasWithWrapAtEnd ? false) asValue.
+ wrapAtEndHolder := (LastSearchWasWrapAtEndOfText ? false) asValue.
searchVariableHolder := (lastSearchWasVariableSearch ? false) asValue.
searchFullWordHolder := false asValue.
searchAtBeginOfLineOnlyHolder := false asValue.
@@ -2264,6 +2274,7 @@
LastSearchIgnoredCase := lastSearchIgnoredCase := (caseHolder value not).
LastSearchWasMatch := lastSearchWasMatch := matchHolder value.
LastSearchWasMatchWithRegex := matchWithRegexHolder value.
+ LastSearchWasWrapAtEndOfText := wrapAtEndHolder value.
pattern := patternHolder value.
pattern notEmptyOrNil ifTrue:[
searchAction := [
@@ -2277,7 +2288,7 @@
fullWord: searchFullWordHolder value
forward:fwd
atBeginOfLineOnly:searchAtBeginOfLineOnlyHolder value
- wrapAroundEndOfText:wrapAtEndHolder value).
+ wrapAtEnd:wrapAtEndHolder value).
]
]
].
@@ -2326,6 +2337,11 @@
bindings at:#caseSensitive put:caseHolder.
bindings at:#match put:matchHolder.
bindings at:#matchWithRegex put:matchWithRegexHolder.
+ Regex::RxMatcher isNil ifTrue:[
+ bindings at:#matchWithRegexVisible put:false.
+ ] ifFalse:[
+ bindings at:#matchWithRegexVisible put:matchHolder
+ ].
bindings at:#patternList put:LastSearchPatterns.
self supportsSyntaxElements ifFalse:[
@@ -2338,7 +2354,7 @@
bindings
at:#stringWithVariableUnderCursorHolder
put:(resources string:'Variable ("%1")' with:selectedVariable name).
- searchVariableHolder value:true.
+ "/ searchVariableHolder value:true.
] ifFalse:[
bindings
at:#stringWithVariableUnderCursorHolder
@@ -2350,7 +2366,8 @@
bindings at:#searchFullWord put:searchFullWordHolder.
bindings at:#searchFullWordEnabled put:true.
bindings at:#searchAtBeginOfLineOnly put:searchAtBeginOfLineOnlyHolder.
-
+ bindings at:#wrapAtEndOfTextHolder put:wrapAtEndHolder.
+
bindings at:#replaceEnabled put:replaceBooleanEnabledHolder.
bindings at:#replaceBoolean put:replaceBooleanHolder.
bindings at:#replaceTextHolder put:replaceTextHolder.
@@ -4288,10 +4305,12 @@
"do a forward search"
self
- searchForwardUsingSpec:searchSpec
- startingAtLine:startLine col:startCol
- ifFound:[:line :col | self showMatch:searchSpec pattern isMatch:searchSpec match atLine:line col:col]
- ifAbsent:aBlock
+ searchForwardUsingSpec:searchSpec
+ startingAtLine:startLine col:startCol
+ ifFound:[:line :col |
+ self showMatch:searchSpec pattern isMatch:searchSpec match atLine:line col:col
+ ]
+ ifAbsent:aBlock
!
searchPattern