334 lines
12 KiB
VB.net
334 lines
12 KiB
VB.net
Imports DevExpress.XtraBars
|
|
Imports DigitalData.Modules.Logging
|
|
Imports EnvelopeGenerator.Common
|
|
Imports EnvelopeGenerator.Common.My
|
|
Imports GdPicture14
|
|
Imports GdPicture14.Annotations
|
|
|
|
Partial Public Class frmFieldEditor
|
|
Private LogConfig As LogConfig
|
|
Private Logger As Logger
|
|
|
|
Private GDViewer As GdViewer
|
|
Private Manager As AnnotationManager
|
|
Private Controller As FieldEditorController
|
|
|
|
Public Property Document As EnvelopeDocument = Nothing
|
|
Public Property GDPictureKey As String = ""
|
|
Public Property Receivers As List(Of EnvelopeReceiver)
|
|
Public Property SelectedReceiver As EnvelopeReceiver = Nothing
|
|
Public Property State As State
|
|
|
|
Public Sub New()
|
|
InitializeComponent()
|
|
End Sub
|
|
|
|
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
|
|
LogConfig = New LogConfig(LogConfig.PathType.CustomPath, Application.StartupPath, CompanyName:="Digital Data", ProductName:="EnvelopeGenerator")
|
|
Logger = LogConfig.GetLogger()
|
|
|
|
Me.Text = State.DbConfig.ExternalProgramName + " - Signatur-Editor"
|
|
|
|
If Document Is Nothing Then
|
|
Throw New ArgumentNullException("Document")
|
|
End If
|
|
|
|
If State Is Nothing Then
|
|
Throw New ArgumentNullException("State")
|
|
End If
|
|
|
|
If GDPictureKey = "" Then
|
|
Throw New ArgumentNullException("GDPictureKey")
|
|
End If
|
|
|
|
DocumentViewer1.Init(LogConfig, GDPictureKey)
|
|
DocumentViewer1.LoadFile(Document.Filepath)
|
|
|
|
If DocumentViewer1.PdfViewer IsNot Nothing Then
|
|
GDViewer = DocumentViewer1.PdfViewer
|
|
Manager = GDViewer.GetAnnotationManager()
|
|
Manager.InitFromGdViewer(GDViewer)
|
|
End If
|
|
|
|
SetReceiver(Receivers.First())
|
|
Dim oItems = Receivers.Select(AddressOf CreateBarItem).ToArray()
|
|
PopupMenu1.AddItems(oItems)
|
|
|
|
Controller = New FieldEditorController(State, Document)
|
|
|
|
If Controller.LoadElements() = False Then
|
|
MsgBox(Resources.Envelope.Elements_could_not_be_loaded, MsgBoxStyle.Critical, Text)
|
|
Else
|
|
LoadAnnotations(SelectedReceiver.Id)
|
|
GDViewer.DisplayFirstPage()
|
|
End If
|
|
End Sub
|
|
|
|
Private Function CreateBarItem(pReceiver As EnvelopeReceiver) As BarItem
|
|
Dim oItem = New BarButtonItem(BarManager1, pReceiver.Name)
|
|
AddHandler oItem.ItemClick, AddressOf ReceiverItem_Click
|
|
oItem.Tag = pReceiver
|
|
Return oItem
|
|
End Function
|
|
|
|
Private Sub ReceiverItem_Click(sender As Object, e As ItemClickEventArgs)
|
|
Me.SuspendLayout()
|
|
|
|
Dim oReceiver As EnvelopeReceiver = e.Item.Tag
|
|
Dim oCurrentPage = GDViewer.CurrentPage
|
|
Dim oCurrentPosition = GDViewer.GetVScrollBarPosition()
|
|
|
|
If oReceiver.Id = SelectedReceiver.Id Then
|
|
Exit Sub
|
|
End If
|
|
|
|
AddElementsToController()
|
|
|
|
If Controller.SaveElements(SelectedReceiver.Id) Then
|
|
|
|
SetReceiver(oReceiver)
|
|
ClearAnnotations()
|
|
LoadAnnotations(oReceiver.Id)
|
|
DisplayPage(oCurrentPage)
|
|
GDViewer.SetVScrollBarPosition(oCurrentPosition)
|
|
GDViewer.Redraw()
|
|
TestViewerActionSuccessful("ReceiverItem_Click/Redraw")
|
|
Else
|
|
MsgBox(Resources.Envelope.Elements_could_not_be_saved, MsgBoxStyle.Critical, Text)
|
|
End If
|
|
|
|
Me.ResumeLayout()
|
|
End Sub
|
|
|
|
Private Sub SetReceiver(pReceiver As EnvelopeReceiver)
|
|
txtReceiver.Caption = pReceiver.Name
|
|
SelectedReceiver = pReceiver
|
|
End Sub
|
|
|
|
Private Sub DisplayPage(pPage As Integer)
|
|
GDViewer.LockViewer = True
|
|
GDViewer.DisplayPage(pPage)
|
|
GDViewer.LockViewer = False
|
|
End Sub
|
|
|
|
|
|
Private Sub BarButtonItem1_ItemClick(sender As Object, e As ItemClickEventArgs) Handles BarButtonItem1.ItemClick
|
|
If GDViewer IsNot Nothing Then
|
|
|
|
AddHandler GDViewer.BeforeAnnotationAddedByUser, AddressOf Viewer_BeforeAnnotationAddedByUser
|
|
AddHandler GDViewer.AnnotationAddedByUser, AddressOf Viewer_AnnotationAddedByUser
|
|
|
|
GDViewer.AddStickyNoteAnnotationInteractive("SIGNATUR", Color.Black, "Arial", FontStyle.Regular, 10, 1, 0)
|
|
|
|
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Viewer_AnnotationAddedByUser(pAnnotationIdx As Integer)
|
|
Dim oAnnotation = GDViewer.GetAnnotationFromIdx(pAnnotationIdx)
|
|
Dim oPage = GDViewer.CurrentPage
|
|
Dim oTag = GetAnnotationTag(SelectedReceiver.Id, oPage, -1)
|
|
|
|
If TypeOf oAnnotation Is AnnotationStickyNote Then
|
|
Dim oStickyNote As AnnotationStickyNote = oAnnotation
|
|
oStickyNote.Width = 1
|
|
oStickyNote.Height = 1
|
|
oStickyNote.Tag = oTag
|
|
|
|
ApplyAnnotationStyle(oAnnotation)
|
|
End If
|
|
|
|
oAnnotation.CanRotate = False
|
|
oAnnotation.CanEdit = False
|
|
oAnnotation.CanResize = False
|
|
End Sub
|
|
|
|
|
|
Private Sub Viewer_BeforeAnnotationAddedByUser(pAnnotationIdx As Integer)
|
|
'NOOP
|
|
End Sub
|
|
|
|
Private Sub btnSave_ItemClick(sender As Object, e As ItemClickEventArgs) Handles btnSave.ItemClick
|
|
Dim oCurrentPage = GDViewer.CurrentPage
|
|
|
|
AddElementsToController()
|
|
|
|
If Not Controller.SaveElements(SelectedReceiver.Id) Then
|
|
MsgBox(Resources.Envelope.Elements_could_not_be_saved, MsgBoxStyle.Critical, Text)
|
|
End If
|
|
|
|
UpdateAnnotationTag()
|
|
DisplayPage(oCurrentPage)
|
|
GDViewer.Redraw()
|
|
TestViewerActionSuccessful("btnSave_ItemClick/Redraw")
|
|
End Sub
|
|
|
|
Private Sub AddElementsToController()
|
|
Dim oPageCount = GDViewer.PageCount
|
|
|
|
For oPage = 1 To oPageCount
|
|
GDViewer.DisplayPage(oPage)
|
|
AddElementsToController(oPage)
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub AddElementsToController(pPage As Integer)
|
|
Dim oAnnotationCount = GDViewer.GetAnnotationCount()
|
|
|
|
For oAnnotationIndex = 0 To oAnnotationCount - 1
|
|
Dim oAnnotation As Annotation = GDViewer.GetAnnotationFromIdx(oAnnotationIndex)
|
|
If TypeOf oAnnotation Is AnnotationStickyNote Then
|
|
Dim oStickyNote As AnnotationStickyNote = oAnnotation
|
|
Controller.AddOrUpdateElement(oStickyNote)
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub UpdateAnnotationTag()
|
|
|
|
Dim oPageCount = GDViewer.PageCount
|
|
|
|
For oPage = 1 To oPageCount
|
|
GDViewer.DisplayPage(oPage)
|
|
|
|
Dim oAnnotationCount = GDViewer.GetAnnotationCount()
|
|
For oAnnotationIndex = 0 To oAnnotationCount - 1
|
|
Dim oAnnotation As Annotation = GDViewer.GetAnnotationFromIdx(oAnnotationIndex)
|
|
If TypeOf oAnnotation Is AnnotationStickyNote Then
|
|
Dim oStickyNote As AnnotationStickyNote = oAnnotation
|
|
Dim oTag = oStickyNote.Tag
|
|
Dim oInfo = Controller.GetElementInfo(oTag)
|
|
|
|
If oInfo.Guid = -1 Then
|
|
Dim oElement = Controller.GetElement(oStickyNote)
|
|
If oElement IsNot Nothing Then
|
|
oStickyNote.Tag = GetAnnotationTag(SelectedReceiver.Id, oPage, oElement.Id)
|
|
Else
|
|
MsgBox("No Element for Update found!")
|
|
Logger.Error("No Element for Update found!")
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Private Sub ApplyAnnotationStyle(ByRef pAnnotation As Annotation)
|
|
If TypeOf pAnnotation Is AnnotationStickyNote Then
|
|
Dim oStickyNote As AnnotationStickyNote = pAnnotation
|
|
oStickyNote.Fill = True
|
|
oStickyNote.FillColor = Color.LightGoldenrodYellow
|
|
oStickyNote.Text = "SIGNATUR"
|
|
oStickyNote.Alignment = StringAlignment.Center
|
|
oStickyNote.LineAlignment = StringAlignment.Center
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Private Sub btnDelete_ItemClick(sender As Object, e As ItemClickEventArgs) Handles btnDelete.ItemClick
|
|
Dim oSelected = GDViewer.GetSelectedAnnotationIdx()
|
|
|
|
If TestViewerActionSuccessful("btnDelete_ItemClick/GetSelectedAnnotationIdx") = False Then
|
|
Logger.Warn("Selected Annotation could not be fetched!")
|
|
Exit Sub
|
|
End If
|
|
|
|
If oSelected = -1 Then
|
|
Exit Sub
|
|
End If
|
|
|
|
If MsgBox("Wollen Sie die Annotation löschen?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question, Text) = DialogResult.Yes Then
|
|
Dim oAnnotation = GDViewer.GetAnnotationFromIdx(oSelected)
|
|
Dim oElement = Controller.GetElement(oAnnotation)
|
|
|
|
' Delete Element if it was already saved to db
|
|
If oElement IsNot Nothing Then
|
|
Controller.DeleteElement(oElement)
|
|
End If
|
|
|
|
GDViewer.DeleteAnnotation(oSelected)
|
|
If TestViewerActionSuccessful("btnDelete_ItemClick/DeleteAnnotation") = False Then
|
|
Logger.Warn("Annotation could not be deleted!")
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub LoadAnnotation(pElement As EnvelopeDocumentElement, pReceiverId As Integer)
|
|
Dim oAnnotation As AnnotationStickyNote = Manager.AddStickyNoteAnnot(0, 0, 0, 0, "SIGNATUR")
|
|
Dim oPage = pElement.Page
|
|
|
|
If Manager.GetStat() = GdPictureStatus.OK Then
|
|
oAnnotation.Width = CSng(pElement.Width)
|
|
oAnnotation.Height = CSng(pElement.Height)
|
|
oAnnotation.Left = CSng(pElement.X)
|
|
oAnnotation.Top = CSng(pElement.Y)
|
|
oAnnotation.Fill = True
|
|
oAnnotation.FillColor = Color.DarkRed
|
|
oAnnotation.Text = "SIGNATUR"
|
|
oAnnotation.Tag = GetAnnotationTag(pReceiverId, oPage, pElement.Id)
|
|
Else
|
|
Dim oStatus = Manager.GetStat()
|
|
MsgBox(String.Format("GDViewer returned error [{0}] on action [{1}]", oStatus.ToString, "LoadAnnotation"))
|
|
Logger.Error("GDViewer returned error [{0}] on action [{1}]", oStatus.ToString, "LoadAnnotation")
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub ClearAnnotations()
|
|
Dim oPageCount = GDViewer.PageCount
|
|
|
|
For oPage = 1 To oPageCount
|
|
DisplayPage(oPage)
|
|
Dim oAnnotationCount = GDViewer.GetAnnotationCount()
|
|
|
|
For oAnnotationIndex = 0 To oAnnotationCount - 1
|
|
' We always delete the first item in the list of annotations,
|
|
' because DeleteAnnotation expects and index, not an identifier
|
|
GDViewer.DeleteAnnotation(0)
|
|
If TestViewerActionSuccessful("ClearAnnotations") = False Then
|
|
Logger.Warn("Annotation could not be cleared!")
|
|
End If
|
|
Next
|
|
Next
|
|
End Sub
|
|
|
|
Private Function TestViewerActionSuccessful(pAction As String) As Boolean
|
|
Dim oStatus = GDViewer.GetStat()
|
|
If oStatus = GdPictureStatus.OK Then
|
|
Return True
|
|
Else
|
|
MsgBox(String.Format("GDViewer returned error [{0}] on action [{1}]", oStatus.ToString, pAction))
|
|
Logger.Error("GDViewer returned error [{0}] on action [{1}]", oStatus.ToString, pAction)
|
|
Return False
|
|
End If
|
|
End Function
|
|
|
|
|
|
Private Sub LoadAnnotations(pReceiverId As Integer)
|
|
Dim oPageCount = GDViewer.PageCount
|
|
|
|
For oPage = 1 To oPageCount
|
|
DisplayPage(oPage)
|
|
|
|
If TestViewerActionSuccessful("LoadAnnotations/DisplayPage") = False Then
|
|
Logger.Warn("Page could not be displayed!")
|
|
End If
|
|
|
|
Dim oCurrentPage = oPage
|
|
Dim oElements = Controller.Elements.
|
|
Where(Function(e) e.Page = oCurrentPage And e.ReceiverId = pReceiverId).
|
|
ToList()
|
|
|
|
For Each oElement In oElements
|
|
LoadAnnotation(oElement, pReceiverId)
|
|
Next
|
|
Next
|
|
End Sub
|
|
|
|
Private Function GetAnnotationTag(pReceiver As Integer, pPage As Integer, pGuid As Integer) As String
|
|
Return $"{pReceiver}|{pPage}|{pGuid}"
|
|
End Function
|
|
End Class
|
|
|
|
|