--- a/TextView.st Thu May 12 09:17:26 2016 +0200
+++ b/TextView.st Fri May 13 20:20:00 2016 +0200
@@ -2218,8 +2218,10 @@
!
openSearchBoxAndSearch
- "search for a string - show a box to enter searchpattern
- - currently no regular expressions are handled."
+ "search for a string - show a box to enter searchpattern.
+ TODO: this started as an ad-hoc box, which is manually constructed.
+ over time, it got more and more functions, so a separate appModel class
+ would no be appropriate..."
"
Q: is it a good idea to preserve the last searchstring between views?
@@ -2238,8 +2240,18 @@
^ self
].
- modal := (UserPreferences current searchDialogIsModal). "/ thats experimental
-
+ modal := (UserPreferences current searchDialogIsModal). "/ that's experimental
+
+ (searchBox := self objectAttributeAt:#currentModelessSearchBox) notNil ifTrue:[
+ (modal not
+ and:[ searchBox window realized ]) ifTrue:[
+ "/ reuse it.
+ searchBox raiseDeiconified.
+ ^ self.
+ ].
+ searchBox closeRequest.
+ ].
+
ign := lastSearchIgnoredCase "? LastSearchIgnoredCase " ? true.
caseHolder := ign not asValue.
@@ -2342,7 +2354,7 @@
].
].
- replaceAction := [ self replace:replacement ].
+ replaceAction := [ self replace:replacement ]. "/ not implemented here, but in subclasses
replacePreserveCaseBooleanHolder value ifTrue:[
replaceAction := [
self selectionAsString isUppercaseFirst ifTrue:[
@@ -2373,20 +2385,24 @@
bindings := IdentityDictionary new.
bindings at:#searchPattern put:patternHolder.
modal ifTrue:[
- bindings at:#nextAction put:[
- replaceAllBooleanHolder value ifTrue:[
- searchBox doAccept.
- ] ifFalse:[
- doSearch value:true
- ]
- ].
- bindings at:#prevAction put:[
- replaceAllBooleanHolder value ifTrue:[
- fwd := false. searchBox doAccept.
- ] ifFalse:[
- doSearch value:false
- ]
- ].
+ bindings
+ at:#nextAction
+ put:[
+ replaceAllBooleanHolder value ifTrue:[
+ searchBox doAccept.
+ ] ifFalse:[
+ doSearch value:true
+ ]
+ ].
+ bindings
+ at:#prevAction
+ put:[
+ replaceAllBooleanHolder value ifTrue:[
+ fwd := false. searchBox doAccept.
+ ] ifFalse:[
+ doSearch value:false
+ ]
+ ].
] ifFalse:[
bindings at:#nextAction put:[doSearch value:true.].
bindings at:#prevAction put:[doSearch value:false.].
@@ -2464,6 +2480,7 @@
] ifFalse:[
searchBox := ApplicationModel new.
searchBox createBuilder.
+ bindings at:#cancel put:[ searchBox closeRequest ].
].
searchBox resources:(self resources).
@@ -2489,10 +2506,14 @@
self topView beMaster.
searchBox window
beSlave;
- openInGroup:(self windowGroup).
-
- "/ searchBox window open.
- searchBox window assignKeyboardFocusToFirstKeyboardConsumer.
+ openInGroup:(self windowGroup);
+ waitUntilVisible;
+ assignKeyboardFocusToFirstKeyboardConsumer.
+ searchBox window keyboardProcessor
+ addAccelerator:#Return action:(bindings at:#nextAction);
+ addAccelerator:#Escape action:#closeRequest.
+ "/ remember this box for me.
+ self objectAttributeAt:#currentModelessSearchBox put:searchBox.
]
"Modified: / 11-07-2006 / 11:18:38 / fm"