Tools__StringSearchTool.st
changeset 8076 6c23c777d44d
parent 8069 3c4426cb3174
child 8077 d8ae29860f78
--- a/Tools__StringSearchTool.st	Wed Apr 23 12:27:32 2008 +0200
+++ b/Tools__StringSearchTool.st	Wed Apr 23 12:29:09 2008 +0200
@@ -3,12 +3,13 @@
 "{ NameSpace: Tools }"
 
 ApplicationModel subclass:#StringSearchTool
-	instanceVariableNames:'searchTextHolder searchTextView searchBarImageInfoLabelHolder
-		searchBarInfoLabelHolder searchTextModifiedHolder
-		ignoreCaseHolder closeBlock searchNextBlock searchPreviousBlock'
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Interface-Tools'
+        instanceVariableNames:'searchTextHolder searchTextView searchBarImageInfoLabelHolder
+                searchBarInfoLabelHolder searchTextModifiedHolder
+                ignoreCaseHolder closeBlock searchNextBlock searchPreviousBlock
+                restartHolder'
+        classVariableNames:''
+        poolDictionaries:''
+        category:'Interface-Tools'
 !
 
 !StringSearchTool class methodsFor:'documentation'!
@@ -305,16 +306,14 @@
                     name: 'SearchNextButton'
                     hasCharacterOrientedLabel: false
                     translateLabel: true
-                    model: searchNextText
-                    extent: (Point 21 21)
+                    model: searchNextTextButtonPressed
                   )
                  (ActionButtonSpec
                     label: 'searchPreviousIcon'
                     name: 'searchPreviousButton'
                     hasCharacterOrientedLabel: false
                     translateLabel: true
-                    model: searchPreviousText
-                    extent: (Point 21 21)
+                    model: searchPreviousTextButtonPressed
                   )
                  (CheckBoxSpec
                     label: 'Ignore case'
@@ -370,7 +369,11 @@
 initialSearchString: aString  
 
     self searchTextHolder value: aString.
-    self searchNextTextIncludingCurrentSelection: true.
+!
+
+restartSearch
+
+    ^ self restartHolder value
 !
 
 searchNextBlock
@@ -406,8 +409,15 @@
     "Modified: / 16-06-2007 / 19:32:15 / Administrador"
 !
 
-matchCheckboxVisible
-    ^ false
+restartHolder
+
+    restartHolder isNil ifTrue:[
+        restartHolder := false asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       restartHolder addDependent:self.
+        restartHolder onChangeSend:#restartHolderChanged to:self.
+    ].
+    ^ restartHolder.
 !
 
 searchBarImageInfoLabelHolder
@@ -459,10 +469,16 @@
 !
 
 processEvent:anEvent
-
     searchTextView hasFocus ifFalse:[^ false].
 
     anEvent isKeyPressEvent ifTrue:[
+
+        Transcript showCR: anEvent key printString.
+"/        anEvent key == #Find ifTrue:[
+"/            self halt.
+"/            self searchNextText.
+"/            ^ true
+"/        ].
         anEvent key == #FindNext ifTrue:[
             self searchNextText.
             ^ true
@@ -475,10 +491,23 @@
     ^ false
 !
 
+restartHolderChanged
+
+    self setFocusToSearchTextView.
+!
+
 searchTextModifiedHolderChanged
 
+    |previousRestart|
+
+    "Always restart when looking for a typed string"
+    previousRestart := self restartSearch.
+    self restartHolder setValue: true.
+
     self searchNextTextIncludingCurrentSelection: true.
     self searchTextModifiedHolder setValue: false.
+    self restartHolder setValue: previousRestart.
+
 
 "/Transcript showCR: 'searchTextModifiedHolderChanged: ',(self searchTextHolder value ? '').
 "/Transcript showCR: 'searchTextView contents: ',(searchTextView contents ? '').
@@ -515,9 +544,16 @@
 
 !StringSearchTool methodsFor:'private'!
 
+searchReachEndOrBeginningIcon
+
+    ^ self restartSearch 
+        ifTrue:[self restartSearchBarIcon.]
+        ifFalse:[self warningSearchBarIcon.].
+!
+
 searchTextRestarted: message
 
-    self searchBarImageInfoLabelHolder value: self restartSearchBarIcon.
+    self searchBarImageInfoLabelHolder value: self searchReachEndOrBeginningIcon.
     self searchBarInfoLabelHolder value: message.
 !
 
@@ -546,18 +582,29 @@
 
 searchNextTextReachEnd
     |message|
-    message := 'End of list reached, starting from the beginning'.
+    message := 'End of list reached'.
     self searchTextRestarted: message.
-    self searchNextTextFromBeginning.
+    Smalltalk beep.
 
-    "Created: / 16-06-2007 / 11:00:59 / Administrador"
+    self restartSearch ifTrue:[
+        message := message, ', starting from the beginning'.
+        self searchTextRestarted: message.
+        self searchNextTextFromBeginning.
+    ].
 !
 
 searchPreviousTextReachBeginning
     |message|
-    message := 'Beginning of list reached, starting from the end'.
+
+    message := 'Beginning of list reached'.
     self searchTextRestarted: message.
-    self searchPreviousTextFromEnd.
+    Smalltalk beep.
+
+    self restartSearch ifTrue:[
+        message := message, ', starting from the end'.
+        self searchTextRestarted: message.
+        self searchPreviousTextFromEnd
+    ].
 !
 
 searchTextNotFound
@@ -596,6 +643,12 @@
 searchNextText
 
     self searchNextTextIncludingCurrentSelection: false.
+"/    self setFocusToSearchTextView.
+!
+
+searchNextTextButtonPressed
+
+    self searchNextText.
     self setFocusToSearchTextView.
 !
 
@@ -636,7 +689,7 @@
 
     self searchTextStarted.
     searchText := searchTextView contents.      
-    self setFocusToSearchTextView.
+"/    self setFocusToSearchTextView.
     searchText isEmptyOrNil ifTrue:[^self].
     ignoreCase := self ignoreCaseHolder value.
     searchPreviousBlock isNil ifTrue:[^ self].
@@ -647,6 +700,12 @@
 "/            ignoreCase: ignoreCase 
 !
 
+searchPreviousTextButtonPressed
+
+    self searchPreviousText.
+    self setFocusToSearchTextView.
+!
+
 searchPreviousTextFromEnd
 
     |searchText ignoreCase|
@@ -665,5 +724,5 @@
 !StringSearchTool class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__StringSearchTool.st,v 1.4 2008-04-21 16:04:57 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__StringSearchTool.st,v 1.5 2008-04-23 10:29:09 fm Exp $'
 ! !