Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 13 May 2016 20:20:00 +0200
branchjv
changeset 5740 430b7b15a684
parent 5739 edab5a6a8d4f (current diff)
parent 5736 38cdf9557610 (diff)
child 5744 c8aea6a50ce2
Merge
TextCollector.st
TextView.st
--- a/TextCollector.st	Thu May 12 09:17:26 2016 +0200
+++ b/TextCollector.st	Fri May 13 20:20:00 2016 +0200
@@ -972,7 +972,9 @@
     (self == Transcript) ifTrue:[
         DebugSendersOfMessagePattern notNil ifTrue:[
             (DebugSendersOfMessagePattern match:printString string) ifTrue:[
-                "disable all with: DebugSendersOfMessagePattern := nil"
+                "to disable this breakpoint in the future, evaluate:
+                     DebugSendersOfMessagePattern := nil
+                "
                 self halt:('Transcript: text matches: "', printString,'"').
             ].
         ].
--- 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"