Tools__StringSearchToolForTextView.st
author fm
Tue, 08 Apr 2008 12:08:27 +0200
changeset 8064 9d91d0d69b09
parent 8062 3b38e4e4d786
child 8070 2acefb7023d2
permissions -rw-r--r--
changed #searchNextTextIncludingCurrentSelection:

"{ Package: 'stx:libtool' }"

"{ NameSpace: Tools }"

StringSearchTool subclass:#StringSearchToolForTextView
	instanceVariableNames:'textView matchHolder'
	classVariableNames:''
	poolDictionaries:''
	category:'Interface-Tools'
!


!StringSearchToolForTextView class methodsFor:'interface specs'!

windowSpec
    "This resource specification was automatically generated
     by the UIPainter of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the UIPainter may not be able to read the specification."

    "
     UIPainter new openOnClass:Tools::StringSearchToolForTextView andSelector:#windowSpec
     Tools::StringSearchToolForTextView new openInterface:#windowSpec
     Tools::StringSearchToolForTextView open
    "

    <resource: #canvas>

    ^ 
     #(FullSpec
        name: windowSpec
        window: 
       (WindowSpec
          label: 'Tools::StringSearchTool'
          name: 'Tools::StringSearchTool'
          min: (Point 10 10)
          max: (Point 1024 768)
          bounds: (Rectangle 0 0 801 27)
        )
        component: 
       (SpecCollection
          collection: (
           (ViewSpec
              name: 'SearchBox'
              layout: (LayoutFrame 0 0 0 0 0 1 0 1)
              level: -1
              component: 
             (SpecCollection
                collection: (
                 (ActionButtonSpec
                    label: 'closeSearchBarIcon'
                    name: 'hideSearchBarButton'
                    layout: (LayoutFrame 1 0 2 0 22 0 23 0)
                    hasCharacterOrientedLabel: false
                    translateLabel: true
                    model: hideSearchBar
                  )
                 (LabelSpec
                    label: 'Search:'
                    name: 'SearchLabel'
                    layout: (LayoutFrame 23 0 1 0 71 0 23 0)
                    translateLabel: true
                    adjust: right
                  )
                 (InputFieldSpec
                    name: 'SearchEntryField'
                    layout: (LayoutFrame 72 0 1 0 253 0 23 0)
                    model: searchTextHolder
                    immediateAccept: true
                    acceptOnReturn: true
                    acceptOnTab: true
                    acceptOnLostFocus: true
                    modifiedChannel: searchTextModifiedHolder
                    acceptOnPointerLeave: false
                    postBuildCallback: postBuildSearchTextView:
                  )
                 (ActionButtonSpec
                    label: 'searchNextIcon'
                    name: 'SearchNextButton'
                    layout: (LayoutFrame 258 0 2 0 279 0 23 0)
                    hasCharacterOrientedLabel: false
                    translateLabel: true
                    model: searchNextText
                  )
                 (ActionButtonSpec
                    label: 'searchPreviousIcon'
                    name: 'searchPreviousButton'
                    layout: (LayoutFrame 286 0 2 0 307 0 23 0)
                    hasCharacterOrientedLabel: false
                    translateLabel: true
                    model: searchPreviousText
                  )
                 (CheckBoxSpec
                    label: 'Ignore case'
                    name: 'IgnoreCaseCheckBox'
                    layout: (LayoutFrame 312 0 1 0 424 0 23 0)
                    model: ignoreCaseHolder
                    translateLabel: true
                  )
                 (CheckBoxSpec
                    label: 'Match'
                    name: 'MatchCheckBox'
                    layout: (LayoutFrame 424 0 1 0 508 0 23 0)
                    model: matchHolder
                    translateLabel: true
                  )
                 (LabelSpec
                    label: 'SearchBarImageInfoLabel'
                    name: 'SearchBarImageInfoLabel'
                    layout: (LayoutFrame 510 0 1 0 534 0 23 0)
                    hasCharacterOrientedLabel: false
                    translateLabel: true
                    labelChannel: searchBarImageInfoLabelHolder
                  )
                 (LabelSpec
                    label: 'SearchBarInfoLabel'
                    name: 'SearchBarInfoLabel'
                    layout: (LayoutFrame 545 0 1 0 794 0 23 0)
                    translateLabel: true
                    labelChannel: searchBarInfoLabelHolder
                    adjust: left
                  )
                 )
               
              )
            )
           )
         
        )
      )
! !

!StringSearchToolForTextView methodsFor:'accessing'!

textView
    ^ textView
!

textView:something
    textView := something.
! !

!StringSearchToolForTextView methodsFor:'aspects'!

matchHolder

    matchHolder isNil ifTrue:[
        matchHolder := false asValue.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       matchHolder addDependent:self.
        matchHolder onChangeSend:#matchHolderChanged to:self.

    ].
    ^ matchHolder.

    "Created: / 16-06-2007 / 06:45:04 / Administrador"
    "Modified: / 16-06-2007 / 19:32:15 / Administrador"
! !

!StringSearchToolForTextView methodsFor:'change & update'!

matchHolderChanged

    self searchNextTextIncludingCurrentSelection: true.
    self setFocusToSearchTextView.
! !

!StringSearchToolForTextView methodsFor:'initialization & release'!

postBuildSearchTextView: anEditFieldView

    super postBuildSearchTextView: anEditFieldView.
    anEditFieldView crAction: self crAction.
! !

!StringSearchToolForTextView methodsFor:'public'!

crAction

    ^ [self returnFocusToTextView]
!

returnFocusToTextView

    textView takeFocus
! !

!StringSearchToolForTextView methodsFor:'searching'!

hideSearchBar

    masterApplication isNil ifTrue:[^ self].
    masterApplication hideSearchBar.
    self returnFocusToTextView.
!

searchNextTextFromBeginning
    |searchText ignoreCase match absentBlock|

    searchText := searchTextView contents.
    searchText isEmptyOrNil ifTrue:[^self].
    self textView isNil ifTrue:[^ self].
    ignoreCase := self ignoreCaseHolder value.
    match := self matchHolder value.
    absentBlock := [self searchTextNotFound.].
    self textView 
        searchFwd:searchText 
        ignoreCase:ignoreCase 
        match: match
        startingAtLine:1 
        col:0
        ifAbsent:absentBlock
!

searchNextTextIncludingCurrentSelection: includeCurrentSelection
    |searchText ignoreCase  match absentBlock startCol startLine|

    self searchTextStarted.
    searchText := searchTextView contents.
    searchText isEmptyOrNil ifTrue:[^self].
    self textView isNil ifTrue:[^ self].
    ignoreCase := self ignoreCaseHolder value.
    match := self matchHolder value.
    absentBlock := [self searchNextTextReachEnd].
    (self textView hasSelection and:[includeCurrentSelection]) 
        ifTrue:[
            startCol := ((self textView selectionStartCol ? 1) - 2) max: 0.
            startLine := (self textView selectionStartLine ? 1).
            self textView searchFwd:searchText ignoreCase:ignoreCase match: match startingAtLine:startLine col:startCol ifAbsent:absentBlock.
        ] ifFalse:[
            self textView searchFwd:searchText ignoreCase:ignoreCase match: match ifAbsent:absentBlock
    ].
!

searchPreviousText

    |searchText ignoreCase absentBlock|

    self searchTextStarted.
    searchText := searchTextView contents.
    self setFocusToSearchTextView.
    searchText isEmptyOrNil ifTrue:[^self].
    ignoreCase := self ignoreCaseHolder value.
    self textView isNil ifTrue:[^ self].
    absentBlock := [self searchPreviousTextReachBeginning].
    self textView searchBwd:searchText ignoreCase:ignoreCase ifAbsent:absentBlock.
!

searchPreviousTextFromEnd

    |searchText ignoreCase absentBlock startLine startCol|

    searchText := searchTextView contents.
    searchText isEmptyOrNil ifTrue:[^self].
    ignoreCase := self ignoreCaseHolder value.
    self textView isNil ifTrue:[^ self].
    absentBlock := [self searchTextNotFound.].
    startLine := self textView numberOfLines + 1.
    startCol := 1.
    self textView 
        searchBwd:searchText 
        ignoreCase:ignoreCase
        startingAtLine:startLine 
        col:startCol 
        ifAbsent:absentBlock
! !

!StringSearchToolForTextView class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libtool/Tools__StringSearchToolForTextView.st,v 1.4 2008-04-08 10:08:27 fm Exp $'
! !