Imports DigitalData.Modules.Base Imports DigitalData.Modules.Logging Imports GdPicture14 Public Class Search Inherits BaseClass Public Sub New(pLogConfig As LogConfig, pGDViewer As GdViewer) MyBase.New(pLogConfig) _Viewer = pGDViewer _Viewer.MouseMode = ViewerMouseMode.MouseModeDefault AddHandler _Viewer.PageDisplayed, AddressOf Viewer_PageDisplayed End Sub Public Property SearchQuery As String = "" Public Property CaseSensitive As Boolean = False Public Property WholeWords As Boolean = False Private _Viewer As GdViewer = Nothing Private _CurrentPage As Integer = 0 Private _CurrentQuery As String = "" Private _CurrentOccurrenceCount = 0 Private _CurrentSelectedOccurrence = 0 Public Sub SearchAll(pQuery As String) ' Exit, if query has not changed If _CurrentQuery = pQuery Then Exit Sub End If ' Save query _CurrentQuery = pQuery ' Reset previous highlights, then search for the new query _Viewer.RemoveAllRegions() _Viewer.SearchText(_CurrentQuery, 0, CaseSensitive, WholeWords) End Sub Public Sub NextHighlight() ' This also applies when the page has *NO* occurrences, so 0 = 0 If _CurrentOccurrenceCount = _CurrentSelectedOccurrence Then ' If there are no occurrences on the current page, got to the *next page* While _CurrentOccurrenceCount = _CurrentSelectedOccurrence And _CurrentPage < _Viewer.PageCount _Viewer.DisplayNextPage() End While ' Safeguard against selecting a non-existing occurrence on the last page If _CurrentOccurrenceCount > 0 Then SelectHighlight(1) Else ' Disable next button End If Else ' Otherwise just select the next occurrence SelectHighlight(_CurrentSelectedOccurrence + 1) End If End Sub Public Sub PrevHighlight() If _CurrentOccurrenceCount = 0 Or _CurrentSelectedOccurrence = 1 Then While (_CurrentOccurrenceCount = 0 Or _CurrentSelectedOccurrence = 1) And _CurrentPage > 1 _Viewer.DisplayPreviousPage() End While If _CurrentOccurrenceCount > 0 Then SelectHighlight(_CurrentOccurrenceCount) End If Else ' Otherwise just select the previous occurrence SelectHighlight(_CurrentSelectedOccurrence - 1) End If '' If no occurrence found on the current page, '' skip to the *previous* page to look there 'If _CurrentOccurrenceCount = 0 Then ' While _CurrentOccurrenceCount = 0 And _CurrentPage > 1 ' _Viewer.DisplayPreviousPage() ' End While 'ElseIf _CurrentSelectedOccurrence = 1 Then ' ' Need to switch to the previous *page* ' ' and highlight the last occurrence there ' If _CurrentPage > 1 Then ' _Viewer.DisplayPreviousPage() ' SelectHighlight(_CurrentOccurrenceCount) ' End If 'Else ' ' Otherwise just select the previous occurrence ' SelectHighlight(_CurrentSelectedOccurrence - 1) 'End If End Sub Private Sub SelectHighlight(pOccurrence As Integer) Dim oFound = _Viewer.SearchText(_CurrentQuery, pOccurrence, CaseSensitive, WholeWords) If _Viewer.GetStat() = GdPictureStatus.OK And _Viewer.IsRect() Then _Viewer.RectIsEditable = False _Viewer.CenterOnRect() _CurrentSelectedOccurrence = pOccurrence Else _CurrentSelectedOccurrence = 0 End If End Sub Private Sub Viewer_PageDisplayed() If _CurrentPage <> _Viewer.CurrentPage Then _CurrentPage = _Viewer.CurrentPage If _CurrentQuery.Length > 0 Then _Viewer.SearchText(_CurrentQuery, 0, CaseSensitive, WholeWords) _CurrentOccurrenceCount = _Viewer.GetTextOccurrenceCount(_CurrentPage, _CurrentQuery, CaseSensitive, WholeWords) _CurrentSelectedOccurrence = 0 End If End If End Sub End Class