Tools__StringSearchToolForTextView.st
author fm
Wed, 23 Apr 2008 12:30:55 +0200
changeset 8078 5339ee7d9b22
parent 8070 2acefb7023d2
child 8079 4aec56e898ce
permissions -rw-r--r--
restartSearch

"{ Package: 'stx:libtool' }"

"{ NameSpace: Tools }"

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


!StringSearchToolForTextView class methodsFor:'interface specs'!

windowSpec_old
    "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 883 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: searchNextTextButtonPressed
                  )
                 (ActionButtonSpec
                    label: 'searchPreviousIcon'
                    name: 'searchPreviousButton'
                    layout: (LayoutFrame 286 0 2 0 307 0 23 0)
                    hasCharacterOrientedLabel: false
                    translateLabel: true
                    model: searchPreviousTextButtonPressed
                  )
                 (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
                  )
                 (CheckBoxSpec
                    label: 'Restart'
                    name: 'RestartCheckBox'
                    layout: (LayoutFrame 509 0 1 0 593 0 23 0)
                    model: restartHolder
                    translateLabel: true
                  )
                 (LabelSpec
                    label: 'SearchBarImageInfoLabel'
                    name: 'SearchBarImageInfoLabel'
                    layout: (LayoutFrame 598 0 1 0 622 0 23 0)
                    hasCharacterOrientedLabel: false
                    translateLabel: true
                    labelChannel: searchBarImageInfoLabelHolder
                  )
                 (LabelSpec
                    label: 'SearchBarInfoLabel'
                    name: 'SearchBarInfoLabel'
                    layout: (LayoutFrame 633 0 1 0 882 0 23 0)
                    translateLabel: true
                    labelChannel: searchBarInfoLabelHolder
                    adjust: left
                  )
                 )
               
              )
            )
           )
         
        )
      )
! !

!StringSearchToolForTextView methodsFor:'accessing'!

textView
    ^ textView
!

textView:something
    textView := something.
! !

!StringSearchToolForTextView methodsFor:'aspects'!

matchCheckboxVisible
    ^ true
!

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.
    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.6 2008-04-23 10:30:55 fm Exp $'
! !