Projektdateien hinzufügen.
This commit is contained in:
137
Classes/Search.vb
Normal file
137
Classes/Search.vb
Normal file
@@ -0,0 +1,137 @@
|
||||
Imports DigitalData.Modules.Base
|
||||
Imports DigitalData.Modules.Logging
|
||||
Imports GdPicture14
|
||||
|
||||
Public Class Search
|
||||
Inherits BaseClass
|
||||
|
||||
Public Property SearchQuery As String = ""
|
||||
Public Property CaseSensitive As Boolean = False
|
||||
Public Property WholeWords As Boolean = False
|
||||
|
||||
Private _Viewer As GdViewer = Nothing
|
||||
Private _AnnotationManager As New AnnotationManager()
|
||||
|
||||
Private _CurrentPage As Integer = 0
|
||||
Private _CurrentQuery As String = ""
|
||||
Private _CurrentOccurrenceCount = 0
|
||||
Private _CurrentSelectedOccurrence = 0
|
||||
|
||||
Public Sub New(pLogConfig As LogConfig, pGDViewer As GdViewer)
|
||||
MyBase.New(pLogConfig)
|
||||
_Viewer = pGDViewer
|
||||
_AnnotationManager.InitFromGdViewer(pGDViewer)
|
||||
|
||||
AddHandler _Viewer.PageDisplayed, AddressOf Viewer_PageDisplayed
|
||||
End Sub
|
||||
|
||||
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()
|
||||
DoSearchText()
|
||||
|
||||
' Select the next occurrence
|
||||
NextHighlight()
|
||||
End Sub
|
||||
|
||||
Public Sub NextHighlight()
|
||||
' This also applies when the page has *NO* occurrences, so 0 = 0
|
||||
If _CurrentOccurrenceCount = _CurrentSelectedOccurrence Then
|
||||
Dim oCount = 0
|
||||
' If there are no occurrences on the current page, got to the *next page*
|
||||
While _CurrentOccurrenceCount = _CurrentSelectedOccurrence And _CurrentPage <= _Viewer.PageCount
|
||||
oCount += 1
|
||||
If _CurrentPage = _Viewer.PageCount Then
|
||||
_Viewer.DisplayFirstPage()
|
||||
Else
|
||||
_Viewer.DisplayNextPage()
|
||||
End If
|
||||
If oCount > 333 Then
|
||||
Exit While
|
||||
End If
|
||||
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
|
||||
Dim oCount = 0
|
||||
While (_CurrentOccurrenceCount = 0 Or _CurrentSelectedOccurrence = 1) And _CurrentPage >= 1
|
||||
oCount += 1
|
||||
If _CurrentPage = 1 Then
|
||||
_Viewer.DisplayLastPage()
|
||||
Else
|
||||
_Viewer.DisplayPreviousPage()
|
||||
End If
|
||||
If oCount > 333 Then
|
||||
Exit While
|
||||
End If
|
||||
End While
|
||||
|
||||
If _CurrentOccurrenceCount > 0 Then
|
||||
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
|
||||
DoSearchText()
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub DoSearchText()
|
||||
|
||||
|
||||
_Viewer.SearchText(_CurrentQuery, 0, CaseSensitive, WholeWords)
|
||||
|
||||
Dim oRegionCount = _Viewer.RegionCount()
|
||||
For index = 1 To oRegionCount
|
||||
Dim oId = _Viewer.GetRegionID(index)
|
||||
_Viewer.SetRegionEditable(oId, False)
|
||||
Next
|
||||
|
||||
|
||||
_CurrentOccurrenceCount = _Viewer.GetTextOccurrenceCount(_CurrentPage, _CurrentQuery, CaseSensitive, WholeWords)
|
||||
_CurrentSelectedOccurrence = 0
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
Reference in New Issue
Block a user