Tools__StringSearchToolForTextView.st
author Claus Gittinger <cg@exept.de>
Mon, 21 Sep 2009 22:48:23 +0200
changeset 8745 8ce9f5d5bd52
parent 8276 43b76fabaa23
child 8910 7c30cd06ddf4
permissions -rw-r--r--
dialog setup

"
 COPYRIGHT (c) 2008 by eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
"{ Package: 'stx:libtool' }"

"{ NameSpace: Tools }"

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

!StringSearchToolForTextView class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 2008 by eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
! !

!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 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
                  )
                 )
               
              )
            )
           )
         
        )
      )
!

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]
!

escapePressed

    self returnFocusToTextView. 
    super escapePressed.
!

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.9 2008-09-22 23:29:40 cg Exp $'
! !