DocumentViewer: Support most toolbar actions for word-like documents #CW-1

This commit is contained in:
Jonathan Jenne 2021-04-26 11:22:13 +02:00
parent 71e3769cdd
commit 1283cfae61
3 changed files with 150 additions and 44 deletions

View File

@ -42,6 +42,7 @@ Partial Class DocumentViewer
Me.buttonPrevPage = New DevExpress.XtraBars.BarButtonItem()
Me.txtCurrentPage = New DevExpress.XtraBars.BarEditItem()
Me.RepositoryItemTextEdit2 = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit()
Me.labelPageCount = New DevExpress.XtraBars.BarStaticItem()
Me.buttonNextPage = New DevExpress.XtraBars.BarButtonItem()
Me.buttonLastPage = New DevExpress.XtraBars.BarButtonItem()
Me.buttonSettings = New DevExpress.XtraBars.BarButtonItem()
@ -55,7 +56,6 @@ Partial Class DocumentViewer
Me.RepositoryItemComboBox1 = New DevExpress.XtraEditors.Repository.RepositoryItemComboBox()
Me.SpreadsheetControl1 = New DevExpress.XtraSpreadsheet.SpreadsheetControl()
Me.PrintDocument1 = New System.Drawing.Printing.PrintDocument()
Me.labelPageCount = New DevExpress.XtraBars.BarStaticItem()
CType(Me.BarManager1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemTextEdit2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RepositoryItemTextEdit1, System.ComponentModel.ISupportInitialize).BeginInit()
@ -282,6 +282,12 @@ Partial Class DocumentViewer
Me.RepositoryItemTextEdit2.EditFormat.FormatType = DevExpress.Utils.FormatType.Numeric
Me.RepositoryItemTextEdit2.Name = "RepositoryItemTextEdit2"
'
'labelPageCount
'
Me.labelPageCount.Caption = "/ 0"
Me.labelPageCount.Id = 24
Me.labelPageCount.Name = "labelPageCount"
'
'buttonNextPage
'
Me.buttonNextPage.Caption = "Vor"
@ -376,12 +382,6 @@ Partial Class DocumentViewer
Me.SpreadsheetControl1.Text = "SpreadsheetControl1"
Me.SpreadsheetControl1.Visible = False
'
'labelPageCount
'
Me.labelPageCount.Caption = "BarStaticItem2"
Me.labelPageCount.Id = 24
Me.labelPageCount.Name = "labelPageCount"
'
'DocumentViewer
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)

View File

@ -8,6 +8,7 @@ Imports GdPicture14
Imports DevExpress
Imports DevExpress.Office.Utils
Imports System.IO
Imports DevExpress.XtraRichEdit.Commands
Public Class DocumentViewer
Private Enum ZoomMode
@ -21,6 +22,13 @@ Public Class DocumentViewer
ZoomFitHeight
End Enum
Private Enum ViewerMode
GDPicture
RichText
Excel
End Enum
Private _ViewerMode As ViewerMode
Private _currentSearchOccurence As Integer = 0
Private _toggleGamma As Boolean = True
Private _licenseKey As String = String.Empty
@ -41,6 +49,7 @@ Public Class DocumentViewer
UpdateMainUi()
End Sub
Public Property FileLoaded As Boolean = False
''' <summary>
@ -76,16 +85,18 @@ Public Class DocumentViewer
Exit Sub
End If
If FilePath Is Nothing OrElse FilePath.Trim().Length = 0 Then
_logger.Warn("FilePath was not provided. File not loaded.")
Exit Sub
End If
_logger.Info("Loading File {0}", FilePath)
Dim oFileLoaded = DoLoadFile(FilePath)
FileLoaded = DoLoadFile(FilePath)
_FilePath = FilePath
_Fileinfo = New FileInfo(FilePath)
If oFileLoaded = True Then
FileLoaded = True
End If
SetViewerMode(_Fileinfo.Extension)
UpdateMainUi()
End Sub
@ -101,12 +112,9 @@ Public Class DocumentViewer
_logger.Info("Loading File [{0}]", FileName)
Dim ofileloaded = DoLoadFile(Stream, oExtension)
If oFileLoaded = True Then
FileLoaded = True
End If
FileLoaded = DoLoadFile(Stream, oExtension)
SetViewerMode(oExtension)
UpdateMainUi()
End Sub
@ -125,20 +133,32 @@ Public Class DocumentViewer
Next
_TempFiles.Clear()
End Sub
Private Sub SetViewerMode(Extension As String)
Select Case Extension.ToUpper
Case ".MSG"
_ViewerMode = ViewerMode.RichText
Case ".EML", ".DOC", ".DOCX", ".ODT", ".RTF", ".TXT"
_ViewerMode = ViewerMode.RichText
Case ".XLSX", ".XLS", "CSV"
_ViewerMode = ViewerMode.Excel
Case Else
_ViewerMode = ViewerMode.GDPicture
End Select
End Sub
Private Sub FreeFile()
Try
If Len(_FilePath) OrElse _Fileinfo Is Nothing Then
Exit Sub
End If
Dim oExtension As String = _Fileinfo.Extension.ToUpper
Select Case oExtension.ToUpper
Case ".MSG"
Select Case _ViewerMode
Case ViewerMode.RichText
RichEditControl1.CreateNewDocument()
Case ".EML", ".DOC", ".DOCX", ".ODT", ".RTF", ".TXT"
RichEditControl1.CreateNewDocument()
Case ".XLSX", ".XLS", "CSV"
Case ViewerMode.Excel
SpreadsheetControl1.CreateNewDocument()
Case Else
@ -151,7 +171,7 @@ Public Class DocumentViewer
End Sub
Private Function DoLoadFile(FilePath As String) As Boolean
Try
Dim oFileInfo = New IO.FileInfo(FilePath)
Dim oFileInfo = New FileInfo(FilePath)
Dim oExtension As String = oFileInfo.Extension.ToUpper
RichEditControl1.Visible = False
@ -160,7 +180,7 @@ Public Class DocumentViewer
SpreadsheetControl1.Visible = False
SpreadsheetControl1.Dock = DockStyle.None
ToolbarDocumentViewer.Visible = False
'ToolbarDocumentViewer.Visible = False
Select Case oExtension.ToUpper
Case ".MSG"
@ -194,7 +214,7 @@ Public Class DocumentViewer
SpreadsheetControl1.Dock = DockStyle.Fill
Case Else
ToolbarDocumentViewer.Visible = True
'ToolbarDocumentViewer.Visible = True
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeWidthViewer
GdViewer.DocumentAlignment = ViewerDocumentAlignment.DocumentAlignmentTopCenter
@ -219,7 +239,7 @@ Public Class DocumentViewer
SpreadsheetControl1.Visible = False
SpreadsheetControl1.Dock = DockStyle.None
ToolbarDocumentViewer.Visible = False
' ToolbarDocumentViewer.Visible = False
Select Case Extension.ToUpper
Case ".MSG"
@ -241,6 +261,7 @@ Public Class DocumentViewer
Case ".EML", ".DOC", ".DOCX", ".ODT", ".RTF", ".TXT"
RichEditControl1.LoadDocument(Stream, GetDocumentFormat(Extension))
RichEditControl1.ActiveViewType = XtraRichEdit.RichEditViewType.PrintLayout
RichEditControl1.Visible = True
RichEditControl1.Dock = DockStyle.Fill
@ -254,7 +275,7 @@ Public Class DocumentViewer
SpreadsheetControl1.Dock = DockStyle.Fill
Case Else
ToolbarDocumentViewer.Visible = True
'ToolbarDocumentViewer.Visible = True
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeWidthViewer
GdViewer.DocumentAlignment = ViewerDocumentAlignment.DocumentAlignmentTopCenter
@ -348,6 +369,61 @@ Public Class DocumentViewer
Private Sub UpdateMainUi()
Select Case _ViewerMode
Case ViewerMode.GDPicture
buttonPrint.Enabled = True
buttonFitWidth.Enabled = True
buttonFitPage.Enabled = True
buttonZoomIn.Enabled = True
buttonZoomOut.Enabled = True
buttonRotateLeft.Enabled = True
buttonRotateRight.Enabled = True
buttonFlipX.Enabled = True
buttonFlipY.Enabled = True
buttonFirstPage.Enabled = True
buttonPrevPage.Enabled = True
buttonNextPage.Enabled = True
buttonLastPage.Enabled = True
buttonSettings.Enabled = True
txtCurrentPage.Enabled = True
Case ViewerMode.RichText
buttonFitPage.Enabled = True
buttonZoomIn.Enabled = True
buttonZoomOut.Enabled = True
buttonFitWidth.Enabled = True
buttonNextPage.Enabled = True
buttonPrevPage.Enabled = True
buttonPrint.Enabled = False
buttonRotateLeft.Enabled = False
buttonRotateRight.Enabled = False
buttonFlipX.Enabled = False
buttonFlipY.Enabled = False
buttonFirstPage.Enabled = False
buttonLastPage.Enabled = False
buttonSettings.Enabled = False
txtCurrentPage.Enabled = False
Case ViewerMode.Excel
buttonPrint.Enabled = False
buttonFitWidth.Enabled = False
buttonFitPage.Enabled = False
buttonZoomIn.Enabled = False
buttonZoomOut.Enabled = False
buttonRotateLeft.Enabled = False
buttonRotateRight.Enabled = False
buttonFlipX.Enabled = False
buttonFlipY.Enabled = False
buttonFirstPage.Enabled = False
buttonPrevPage.Enabled = False
buttonNextPage.Enabled = False
buttonLastPage.Enabled = False
buttonSettings.Enabled = False
txtCurrentPage.Enabled = False
End Select
End Sub
Private Sub btnFirstPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonFirstPage.ItemClick
@ -355,11 +431,21 @@ Public Class DocumentViewer
End Sub
Private Sub btnPreviousPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonPrevPage.ItemClick
GdViewer.DisplayPreviousPage()
If _ViewerMode = ViewerMode.GDPicture Then
GdViewer.DisplayPreviousPage()
ElseIf _ViewerMode = ViewerMode.RichText Then
Dim oCmd As New PreviousPageCommand(RichEditControl1)
oCmd.Execute()
End If
End Sub
Private Sub btnNextPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonNextPage.ItemClick
GdViewer.DisplayNextPage()
If _ViewerMode = ViewerMode.GDPicture Then
GdViewer.DisplayNextPage()
ElseIf _ViewerMode = ViewerMode.RichText Then
Dim oCmd As New NextPageCommand(RichEditControl1)
oCmd.Execute()
End If
End Sub
Private Sub btnLastPage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonLastPage.ItemClick
@ -387,15 +473,25 @@ Public Class DocumentViewer
End If
End Sub
Private Sub btnZoomOut_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonZoomOut.ItemClick
GdViewer.ZoomOUT()
Private Sub btnZoomOut_Click(sender As Object, e As EventArgs) Handles buttonZoomOut.ItemClick
If _ViewerMode = ViewerMode.GDPicture Then
GdViewer.ZoomOUT()
ElseIf _ViewerMode = ViewerMode.RichText Then
Dim oCmd As New ZoomOutCommand(RichEditControl1)
oCmd.Execute()
End If
End Sub
Private Sub btnZoomIn_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonZoomIn.ItemClick
GdViewer.ZoomIN()
Private Sub btnZoomIn_Click(sender As Object, e As EventArgs) Handles buttonZoomIn.ItemClick
If _ViewerMode = ViewerMode.GDPicture Then
GdViewer.ZoomIN()
ElseIf _ViewerMode = ViewerMode.RichText Then
Dim oCmd As New ZoomInCommand(RichEditControl1)
oCmd.Execute()
End If
End Sub
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonPrint.ItemClick
Private Sub btnPrint_Click(sender As Object, e As EventArgs) Handles buttonPrint.ItemClick
If GdViewer.PageCount = 0 Then
Return
End If
@ -403,19 +499,19 @@ Public Class DocumentViewer
GdViewer.PrintDialog()
End Sub
Private Sub btnRotateLeft_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonRotateLeft.ItemClick
Private Sub btnRotateLeft_Click(sender As Object, e As EventArgs) Handles buttonRotateLeft.ItemClick
GdViewer.Rotate(RotateFlipType.Rotate270FlipNone)
End Sub
Private Sub btnRotateRight_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonRotateRight.ItemClick
Private Sub btnRotateRight_Click(sender As Object, e As EventArgs) Handles buttonRotateRight.ItemClick
GdViewer.Rotate(RotateFlipType.Rotate90FlipNone)
End Sub
Private Sub btnFlipX_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonFlipX.ItemClick
Private Sub btnFlipX_Click(sender As Object, e As EventArgs) Handles buttonFlipX.ItemClick
GdViewer.Rotate(RotateFlipType.RotateNoneFlipX)
End Sub
Private Sub btnFlipY_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles buttonFlipY.ItemClick
Private Sub btnFlipY_Click(sender As Object, e As EventArgs) Handles buttonFlipY.ItemClick
GdViewer.Rotate(RotateFlipType.RotateNoneFlipY)
End Sub
@ -469,11 +565,21 @@ Public Class DocumentViewer
End Sub
Private Sub btnFitWidth_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonFitWidth.ItemClick
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeWidthViewer
If _ViewerMode = ViewerMode.GDPicture Then
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeWidthViewer
ElseIf _ViewerMode = ViewerMode.RichText Then
Dim oCmd As New FitWidthCommand(RichEditControl1)
oCmd.Execute()
End If
End Sub
Private Sub btnFitPage_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonFitPage.ItemClick
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeFitToViewer
If _ViewerMode = ViewerMode.GDPicture Then
GdViewer.ZoomMode = ViewerZoomMode.ZoomModeFitToViewer
ElseIf _ViewerMode = ViewerMode.RichText Then
Dim oCmd As New FitToPageCommand(RichEditControl1)
oCmd.Execute()
End If
End Sub
Private Sub RichEditControl1_SizeChanged(sender As Object, e As EventArgs) Handles RichEditControl1.SizeChanged

View File

@ -52,7 +52,7 @@ Partial Class Form1
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(12, 38)
Me.Button2.Location = New System.Drawing.Point(12, 67)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(637, 23)
Me.Button2.TabIndex = 2
@ -61,7 +61,7 @@ Partial Class Form1
'
'Button3
'
Me.Button3.Location = New System.Drawing.Point(12, 67)
Me.Button3.Location = New System.Drawing.Point(12, 96)
Me.Button3.Name = "Button3"
Me.Button3.Size = New System.Drawing.Size(637, 23)
Me.Button3.TabIndex = 2
@ -70,7 +70,7 @@ Partial Class Form1
'
'Button4
'
Me.Button4.Location = New System.Drawing.Point(12, 96)
Me.Button4.Location = New System.Drawing.Point(12, 125)
Me.Button4.Name = "Button4"
Me.Button4.Size = New System.Drawing.Size(637, 23)
Me.Button4.TabIndex = 3