Common/DocumentResultList: Cache opened files and load as stream

This commit is contained in:
Jonathan Jenne
2021-02-24 16:40:53 +01:00
parent d63d90f0d2
commit 1277c393ba
4 changed files with 602 additions and 342 deletions

View File

@@ -45,14 +45,14 @@ Public Class frmDocumentResultList
Private _IsLoading As Boolean = True
Private _ActiveGrid As GridControl = Nothing
Private _ActiveGridBand As GridBand = Nothing
Private _DocumentInfo As DocumentInfo = Nothing
' TODO: Hashes for checking if the opened file was modified externally
Private _HashOriginalFile As String = Nothing
Private _HashOpenedFile As String = Nothing
Private WithEvents _FileOpenTimer As New Timer
Private _FileOpenList As New Dictionary(Of Integer, String)
Private _OpenDocuments As New DocumentResultCache(50000000)
Private _CurrentDocument As DocumentResultInfo = Nothing
Private Property OperationMode As IResultForm.Mode Implements IResultForm.OperationMode
@@ -79,8 +79,8 @@ Public Class frmDocumentResultList
_Params = Params
_ResultLists = Params.Results
_FileOpenTimer.Interval = FILE_OPEN_TIMER_INTERVAL
_FileOpenTimer.Start()
'_FileOpenTimer.Interval = FILE_OPEN_TIMER_INTERVAL
'_FileOpenTimer.Start()
End Sub
Private Sub frmDocumentResultList_Load(sender As Object, e As EventArgs) Handles MyBase.Load
@@ -145,40 +145,45 @@ Public Class frmDocumentResultList
If e.FocusedRowHandle >= 0 Then
Dim oRow = sender.GetDataRow(e.FocusedRowHandle)
Dim oDocumentInfo As DocumentResultInfo = Nothing
DocumentViewer1.CloseDocument()
If OperationMode = IResultForm.Mode.NoAppServer Then
LoadFile_Legacy(oRow)
oDocumentInfo = LoadFile_Legacy(oRow)
ElseIf OperationMode = IResultForm.Mode.WithAppServer Then
LoadFile_IDB(oRow)
oDocumentInfo = LoadFile_IDB(oRow)
End If
If IsNothing(_DocumentInfo) Then
If IsNothing(oDocumentInfo) Then
Show_Warning("File could not be loaded!")
Exit Sub
End If
If Not IsNothing(_DocumentInfo) Then
If _FileOpenList.ContainsValue(_DocumentInfo.FullPath) Then
Show_Warning("Die ausgewählte Datei befindet sich im Zugriff!")
Else
DocumentViewer1.LoadFile(_DocumentInfo.FullPath)
If Not File.Exists(oDocumentInfo.FullPath) Then
Show_Warning("File does not exist!")
_HashOriginalFile = Nothing
Exit Sub
End If
If _DocumentInfo.AccessRight = Rights.AccessRight.VIEW_ONLY Then
DocumentViewer1.SetViewOnly(True)
RibbonPageGroup_Export.Visible = False
Else
DocumentViewer1.SetViewOnly(False)
RibbonPageGroup_Export.Visible = True
End If
End If
If oDocumentInfo.Contents IsNot Nothing Then
Dim oFileInfo As New FileInfo(oDocumentInfo.FullPath)
DocumentViewer1.LoadFile(oFileInfo.Name, New MemoryStream(oDocumentInfo.Contents))
Else
DocumentViewer1.LoadFile(oDocumentInfo.FullPath)
End If
If oDocumentInfo.AccessRight = Rights.AccessRight.VIEW_ONLY Then
DocumentViewer1.SetViewOnly(True)
RibbonPageGroup_Export.Visible = False
Else
DocumentViewer1.SetViewOnly(False)
RibbonPageGroup_Export.Visible = True
End If
' TODO: Create checksum after closing, compare and take action
If File.Exists(_DocumentInfo.FullPath) Then
_HashOriginalFile = _Filesystem.GetChecksum(_DocumentInfo.FullPath)
Else
_HashOriginalFile = Nothing
End If
_HashOriginalFile = _Filesystem.GetChecksum(oDocumentInfo.FullPath)
End If
Catch ex As Exception
_Logger.Error(ex)
@@ -203,31 +208,160 @@ Public Class frmDocumentResultList
Return True
End Function
Private Sub LoadFile_Legacy(GridRow As DataRow)
Private Function LoadFile_Legacy(GridRow As DataRow) As DocumentResultInfo
Try
Dim oFullPath = GridRow.Item(COLUMN_FILEPATH)
_DocumentInfo = New DocumentInfo() With {
Dim oDocumentInfo = New DocumentResultInfo() With {
.AccessRight = Rights.AccessRight.FULL,
.FullPath = oFullPath
}
If File.Exists(oDocumentInfo.FullPath) Then
oDocumentInfo = LoadFile_AsByteArray(oDocumentInfo)
_OpenDocuments.Add(oDocumentInfo)
_CurrentDocument = oDocumentInfo
End If
Return oDocumentInfo
Catch ex As Exception
_Logger.Error(ex)
MsgBox("Error while loading file", MsgBoxStyle.Critical, Text)
Return Nothing
End Try
End Sub
End Function
Private Sub LoadFile_IDB(GridRow As DataRow)
Private Function LoadFile_IDB(GridRow As DataRow) As DocumentResultInfo
Try
Dim oObjectId = GridRow.Item(COLUMN_DOCID)
_Logger.Debug($"Gettin' Infor for oObjectId: {oObjectId}")
_Logger.Debug($"Getting Information for oObjectId: {oObjectId}")
' This needs to be Sync bc otherwise the PopupMenuShowing event will fire before this method loaded the Document Info
_DocumentInfo = _IDBClient.GetDocumentInfo(_Environment.User.UserId, oObjectId)
Dim oDocumentInfo As DocumentInfo = _IDBClient.GetDocumentInfo(_Environment.User.UserId, oObjectId)
Dim oResultDocumentInfo As New DocumentResultInfo() With {
.AccessRight = oDocumentInfo.AccessRight,
.FullPath = oDocumentInfo.FullPath
}
If File.Exists(oResultDocumentInfo.FullPath) Then
oResultDocumentInfo = LoadFile_AsByteArray(oResultDocumentInfo)
_OpenDocuments.Add(oResultDocumentInfo)
_CurrentDocument = oResultDocumentInfo
End If
Return oResultDocumentInfo
Catch ex As Exception
_Logger.Error(ex)
Return Nothing
End Try
End Sub
End Function
Private Function LoadFile_AsByteArray(DocumentInfo As DocumentResultInfo) As DocumentResultInfo
Try
Dim oFullPath As String = DocumentInfo.FullPath
Dim oPathExists = From oFile In _OpenDocuments
Where oFile.FullPath = oFullPath And oFile.Contents IsNot Nothing
Select oFile
Dim oExistsInCache = oPathExists.Count() > 0
Dim oSizeChanged = False
Dim oWriteTimeChanged = False
' Get Information about the file on the filesystem
Dim oFileInfo As New FileInfo(oFullPath)
If oExistsInCache Then
Dim oCachedItem = oPathExists.First()
If oCachedItem.Contents Is Nothing Then
oSizeChanged = False
Else
oSizeChanged = Not (oFileInfo.Length = oCachedItem.Contents.Length)
End If
If oCachedItem.LastWriteTime = Nothing Then
oWriteTimeChanged = False
Else
oWriteTimeChanged = Not oFileInfo.LastWriteTime.Equals(oCachedItem.LastWriteTime)
End If
If oSizeChanged Or oWriteTimeChanged Then
Using oStream = File.OpenRead(DocumentInfo.FullPath)
Using oMemoryStream = New MemoryStream()
oStream.CopyTo(oMemoryStream)
DocumentInfo.Contents = oMemoryStream.ToArray()
DocumentInfo.LastWriteTime = oFileInfo.LastWriteTime
End Using
End Using
Return DocumentInfo
Else
Return oCachedItem
End If
Else
Using oStream = File.OpenRead(DocumentInfo.FullPath)
Using oMemoryStream = New MemoryStream()
oStream.CopyTo(oMemoryStream)
DocumentInfo.Contents = oMemoryStream.ToArray()
DocumentInfo.LastWriteTime = oFileInfo.LastWriteTime
End Using
End Using
Return DocumentInfo
End If
Catch ex As Exception
End Try
End Function
'Private Function LoadFile_AsByteArray(DocumentInfo As DocumentResultInfo)
' Try
' Dim oLoadedInfo As DocumentResultInfo = Nothing
' Dim oFileContents As Byte()
' Dim oFullPath As String = DocumentInfo.FullPath
' Dim oPathExists = From oFile In _OpenDocuments
' Where oFile.FullPath = oFullPath And oFile.Contents IsNot Nothing
' Select oFile
' If oPathExists.Count > 0 Then
' Dim oDocumentInfo = oPathExists.First()
' Dim oFileInfo As New FileInfo(DocumentInfo.FullPath)
' Dim oSizeChanged = False
' Dim oWriteTimeChanged = False
' If DocumentInfo.Contents Is Nothing Then
' oSizeChanged = False
' Else
' oSizeChanged = Not oFileInfo.Length.Equals(DocumentInfo.Contents?.Length)
' End If
' If DocumentInfo.LastWriteTime = Nothing Then
' oWriteTimeChanged = False
' Else
' oWriteTimeChanged = Not oFileInfo.LastWriteTime.Equals(DocumentInfo.LastWriteTime)
' End If
' If oSizeChanged Or oWriteTimeChanged Then
' Else
' Using oStream = File.OpenRead(oFullPath)
' Using oMemoryStream = New MemoryStream()
' oStream.CopyTo(oMemoryStream)
' oFileContents = oMemoryStream.ToArray()
' End Using
' End Using
' End If
' End If
' DocumentInfo.Contents = oFileContents
' DocumentInfo.LastWriteTime = oFileInfo.LastWriteTime
' Return DocumentInfo
' Catch ex As Exception
' _Logger.Error(ex)
' Return Nothing
' End Try
'End Function
Public Function RefreshResults(pResults As IEnumerable(Of BaseResult)) As Boolean Implements IResultForm.RefreshResults
_IsLoading = True
@@ -465,344 +599,343 @@ Public Class frmDocumentResultList
_Config.Config.SplitContainer2Horizontal = SwitchDetailContainerHorizontal.Checked
_Config.Save()
End If
End Sub
End Sub
Private Sub BarButtonItemExportGrid1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemExportGrid1.ItemClick
Dim oActiveGrid = GetActiveGridControl()
Private Sub BarButtonItemExportGrid1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemExportGrid1.ItemClick
Dim oActiveGrid = GetActiveGridControl()
If oActiveGrid IsNot Nothing Then
Dim oGridBand = _ActiveGridBand
If oActiveGrid IsNot Nothing Then
Dim oGridBand = _ActiveGridBand
XtraSaveFileDialog.FileName = Utils.ConvertTextToSlug(oGridBand.Caption) & ".xlsx"
XtraSaveFileDialog.DefaultExt = ".xlsx"
XtraSaveFileDialog.FileName = Utils.ConvertTextToSlug(oGridBand.Caption) & ".xlsx"
XtraSaveFileDialog.DefaultExt = ".xlsx"
If XtraSaveFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim oOptions As New XlsxExportOptions() With {
If XtraSaveFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim oOptions As New XlsxExportOptions() With {
.ExportMode = XlsxExportMode.SingleFile
}
oActiveGrid.ExportToXlsx(XtraSaveFileDialog.FileName, oOptions)
End If
Else
MessageBox.Show("Bitte wählen Sie eine Tabelle aus, die Sie exportieren möchten", Text, MessageBoxButtons.OK)
End If
End Sub
Private Sub SplitContainerControl1_SplitterPositionChanged(sender As Object, e As EventArgs) Handles SplitContainerControl1.SplitterPositionChanged
If _IsLoading = False Then
_Config.Config.SplitContainer1Distance = SplitContainerControl1.SplitterPosition
_Config.Save()
End If
End Sub
Private Sub SplitContainerControl2_SplitterPositionChanged(sender As Object, e As EventArgs) Handles SplitContainerControl2.SplitterPositionChanged
If _IsLoading = False Then
_Config.Config.SplitContainer2Distance = SplitContainerControl2.SplitterPosition
_Config.Save()
End If
End Sub
Private Function GetActiveRow() As DataRow
Dim oActiveGrid = GetActiveGridControl()
Dim oActiveRowhandle = _Helpers.ActiveRowHandle
If oActiveGrid IsNot Nothing And oActiveRowhandle <> Constants.NO_ROW_HANDLE Then
Dim oView = DirectCast(oActiveGrid.DefaultView, GridView)
Dim oRow = oView.GetDataRow(oActiveRowhandle)
Return oRow
Else
Return Nothing
End If
End Function
Private Function GetDevexpressGrid_LayoutName(pGridView As GridView)
Dim Filename As String = $"DevExpressGridViewDocResult_{pGridView.Name}UserLayout.xml"
Return Path.Combine(_Config.UserConfigPath.Replace("UserConfig.xml", ""), Filename)
End Function
Private Function GetActiveGridControl() As GridControl
If _ActiveGrid Is Nothing Then
Return Nothing
End If
Return _ActiveGrid
End Function
Private Sub GridViewSave_Layout(pGridView As GridView)
Try
Dim oXml As String = GetDevexpressGrid_LayoutName(pGridView)
pGridView.SaveLayoutToXml(oXml, OptionsLayoutBase.FullLayout)
Catch ex As Exception
_Logger.Error(ex)
_Logger.Info("Error while saving GridLayout: " & ex.Message)
End Try
End Sub
Private Sub RestoreLayout(pGridView As GridView)
Try
Dim oLayoutFile As String = GetDevexpressGrid_LayoutName(pGridView)
If File.Exists(oLayoutFile) Then
pGridView.RestoreLayoutFromXml(oLayoutFile, OptionsLayoutBase.FullLayout)
End If
Catch ex As Exception
_Logger.Error(ex)
_Logger.Info("Error while restoring layout: " & ex.Message)
End Try
End Sub
Private Sub GridControl_Enter(sender As GridControl, e As EventArgs) Handles GridControl1.Enter, GridControl2.Enter, GridControl3.Enter
_ActiveGrid = sender
BarButtonItem5.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
BarButtonItemExportGrid1.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
SetActiveGridBand()
End Sub
Private Sub GridView1_FocusedRowChanged(sender As GridView, e As FocusedRowChangedEventArgs) Handles GridView1.FocusedRowChanged, GridView2.FocusedRowChanged, GridView3.FocusedRowChanged
Dim oGrid As GridControl = sender.GridControl
_ActiveGrid = oGrid
End Sub
Private Sub SetActiveGridBand()
If _ActiveGrid.Equals(GridControl1) Then
_ActiveGridBand = GridBand1
ElseIf _ActiveGrid.Equals(GridControl2) Then
_ActiveGridBand = GridBand2
ElseIf _ActiveGrid.Equals(GridControl3) Then
_ActiveGridBand = GridBand3
Else
_ActiveGridBand = Nothing
End If
End Sub
Private Sub OpenFolderPath()
Try
Dim oRow = GetActiveRow()
If oRow IsNot Nothing Then
Dim oFilename = _DocumentInfo.FullPath
Dim oDirectory = IO.Path.GetDirectoryName(oFilename)
Process.Start(oDirectory)
End If
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Private Sub OpenFile()
Try
If _DocumentInfo IsNot Nothing Then
Dim oFilename = _DocumentInfo.FullPath
DocumentPropertyMenu_FileOpened(Me, oFilename)
End If
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Private Sub CopyFileName()
Try
Dim oRow = GetActiveRow()
If oRow IsNot Nothing Then
Dim oFilename = _DocumentInfo.FullPath
Clipboard.SetText(oFilename)
End If
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Private Sub OpenProperties()
Try
Dim oRow = GetActiveRow()
If oRow IsNot Nothing Then
Dim oObjectId = oRow.Item(COLUMN_DOCID)
Dim oPropertyDialog As New frmObjectPropertyDialog(_LogConfig, _Environment, _IDBClient, oObjectId)
oPropertyDialog.Show()
End If
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Private Sub GridView1_ColumnFilterChanged(sender As GridView, e As EventArgs) Handles GridView1.ColumnFilterChanged
Dim oRowCount = sender.RowCount
UpdateGridHeader(_ResultLists, 0, oRowCount)
End Sub
Private Sub GridView2_ColumnFilterChanged(sender As GridView, e As EventArgs) Handles GridView2.ColumnFilterChanged
Dim oRowCount = sender.RowCount
UpdateGridHeader(_ResultLists, 1, oRowCount)
End Sub
Private Sub GridView3_ColumnFilterChanged(sender As GridView, e As EventArgs) Handles GridView3.ColumnFilterChanged
Dim oRowCount = sender.RowCount
UpdateGridHeader(_ResultLists, 2, oRowCount)
End Sub
Private Sub BarButtonItem4_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonBack.ItemClick
ShouldReturnToPreviousForm = True
Close()
End Sub
Private Sub frmDocumentResultList_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
Try
_Config.Config.WindowLocation = Location
_Config.Config.WindowSize = Size
_Config.Save()
DocumentViewer1.Done()
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Private Sub GridControl_DoubleClick(sender As Object, e As EventArgs) Handles GridControl1.DoubleClick, GridControl2.DoubleClick, GridControl3.DoubleClick
If _DocumentInfo IsNot Nothing And _DocumentInfo.AccessRight > Rights.AccessRight.VIEW_ONLY Then
OpenFile()
End If
End Sub
Private Sub GridView_PopupMenuShowing(sender As Object, e As PopupMenuShowingEventArgs) _
Handles GridView2.PopupMenuShowing, GridView3.PopupMenuShowing, GridView1.PopupMenuShowing
Try
Dim oView As GridView = sender
If e.MenuType = GridMenuType.Row Then
Dim oRowHandle = e.HitInfo.RowHandle
Dim oRow As DataRow = oView.GetDataRow(oRowHandle)
Dim oFilepath As String = _DocumentInfo.FullPath
Dim oObjectId As Long = oRow.Item(COLUMN_DOCID)
Dim oMenu As New DocumentPropertyMenu(_LogConfig, _Environment, _IDBClient, oFilepath, oObjectId)
e.Menu.Items.Clear()
For Each oItem In oMenu.GetMenuItems(OperationMode, _DocumentInfo.AccessRight)
e.Menu.Items.Add(oItem)
Next
AddHandler oMenu.FileOpened, AddressOf DocumentPropertyMenu_FileOpened
' AddHandler oMenu.FileClosed, AddressOf DocumentPropertyMenu_FileClosed
End If
Catch ex As Exception
_Logger.Error(ex)
MsgBox("Unexpected Error while preparing context menu", MsgBoxStyle.Critical, Text)
End Try
End Sub
Public Sub DocumentPropertyMenu_FileOpened(sender As Object, FilePath As String)
DocumentViewer1.CloseDocument()
Dim oProcess = Process.Start(New ProcessStartInfo With {
.FileName = FilePath
})
_FileOpenList.Add(oProcess.Id, FilePath)
End Sub
Public Sub FileOpenTimer_Elapsed() Handles _FileOpenTimer.Tick
Try
Dim oProcesses = Process.GetProcesses()
Dim oIds = (From oProc In oProcesses
Select oProc.Id).
ToList()
Dim oNewFileOpenList As New Dictionary(Of Integer, String)
For Each oOpenFile In _FileOpenList
If oIds.Contains(oOpenFile.Key) Then
oNewFileOpenList.Add(oOpenFile.Key, oOpenFile.Value)
End If
Next
If oNewFileOpenList.Count < _FileOpenList.Count Then
Dim oClosedFiles = _FileOpenList.
Except(oNewFileOpenList).
ToList()
If oClosedFiles.Count = 1 Then
Dim oOpenFile = oClosedFiles.First()
DocumentViewer1.LoadFile(oOpenFile.Value)
Else
ClearGridData()
UpdateGridData()
oActiveGrid.ExportToXlsx(XtraSaveFileDialog.FileName, oOptions)
End If
_FileOpenList = oNewFileOpenList
Else
MessageBox.Show("Bitte wählen Sie eine Tabelle aus, die Sie exportieren möchten", Text, MessageBoxButtons.OK)
End If
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
End Sub
Public Sub Show_CriticalError(Message As String)
labelCriticalError.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
labelCriticalError.Caption = Message
End Sub
Private Sub SplitContainerControl1_SplitterPositionChanged(sender As Object, e As EventArgs) Handles SplitContainerControl1.SplitterPositionChanged
If _IsLoading = False Then
_Config.Config.SplitContainer1Distance = SplitContainerControl1.SplitterPosition
_Config.Save()
End If
End Sub
Public Sub Show_Warning(Message As String)
labelWarning.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
labelWarning.Caption = Message
End Sub
Private Sub SplitContainerControl2_SplitterPositionChanged(sender As Object, e As EventArgs) Handles SplitContainerControl2.SplitterPositionChanged
If _IsLoading = False Then
_Config.Config.SplitContainer2Distance = SplitContainerControl2.SplitterPosition
_Config.Save()
End If
End Sub
Public Sub Reset_Errors()
labelCriticalError.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
labelWarning.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
End Sub
Private Function GetActiveRow() As DataRow
Dim oActiveGrid = GetActiveGridControl()
Dim oActiveRowhandle = _Helpers.ActiveRowHandle
Private Sub BarButtonItem5_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem5.ItemClick
If Not IsNothing(_ActiveGrid) Then
If oActiveGrid IsNot Nothing And oActiveRowhandle <> Constants.NO_ROW_HANDLE Then
Dim oView = DirectCast(oActiveGrid.DefaultView, GridView)
Dim oRow = oView.GetDataRow(oActiveRowhandle)
Return oRow
Else
Return Nothing
End If
End Function
Private Function GetDevexpressGrid_LayoutName(pGridView As GridView)
Dim Filename As String = $"DevExpressGridViewDocResult_{pGridView.Name}UserLayout.xml"
Return Path.Combine(_Config.UserConfigPath.Replace("UserConfig.xml", ""), Filename)
End Function
Private Function GetActiveGridControl() As GridControl
If _ActiveGrid Is Nothing Then
Return Nothing
End If
Return _ActiveGrid
End Function
Private Sub GridViewSave_Layout(pGridView As GridView)
Try
Dim oFile = GetDevexpressGrid_LayoutName(_ActiveGrid.MainView)
If File.Exists(oFile) Then
File.Delete(oFile)
Dim oXml As String = GetDevexpressGrid_LayoutName(pGridView)
pGridView.SaveLayoutToXml(oXml, OptionsLayoutBase.FullLayout)
Catch ex As Exception
_Logger.Error(ex)
_Logger.Info("Error while saving GridLayout: " & ex.Message)
End Try
End Sub
Private Sub RestoreLayout(pGridView As GridView)
Try
Dim oLayoutFile As String = GetDevexpressGrid_LayoutName(pGridView)
If File.Exists(oLayoutFile) Then
pGridView.RestoreLayoutFromXml(oLayoutFile, OptionsLayoutBase.FullLayout)
End If
Catch ex As Exception
_Logger.Error(ex)
_Logger.Info("Error while restoring layout: " & ex.Message)
End Try
End Sub
Private Sub GridControl_Enter(sender As GridControl, e As EventArgs) Handles GridControl1.Enter, GridControl2.Enter, GridControl3.Enter
_ActiveGrid = sender
BarButtonItem5.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
BarButtonItemExportGrid1.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
SetActiveGridBand()
End Sub
Private Sub GridView1_FocusedRowChanged(sender As GridView, e As FocusedRowChangedEventArgs) Handles GridView1.FocusedRowChanged, GridView2.FocusedRowChanged, GridView3.FocusedRowChanged
Dim oGrid As GridControl = sender.GridControl
_ActiveGrid = oGrid
End Sub
Private Sub SetActiveGridBand()
If _ActiveGrid.Equals(GridControl1) Then
_ActiveGridBand = GridBand1
ElseIf _ActiveGrid.Equals(GridControl2) Then
_ActiveGridBand = GridBand2
ElseIf _ActiveGrid.Equals(GridControl3) Then
_ActiveGridBand = GridBand3
Else
_ActiveGridBand = Nothing
End If
End Sub
Private Sub OpenFolderPath()
Try
Dim oRow = GetActiveRow()
If oRow IsNot Nothing Then
Dim oFilename = _CurrentDocument.FullPath
Dim oDirectory = IO.Path.GetDirectoryName(oFilename)
Process.Start(oDirectory)
End If
UpdateGridData()
Catch ex As Exception
_Logger.Error(ex)
End Try
End If
End Sub
End Sub
Private Sub frmDocumentResultList_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
GridViewSave_Layout(_ActiveGrid.MainView)
End Sub
Private Sub OpenFile()
Try
If _CurrentDocument IsNot Nothing Then
Dim oFilename = _CurrentDocument.FullPath
DocumentPropertyMenu_FileOpened(Me, oFilename)
End If
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Private _DragBoxFromMouseDown As Rectangle
Private _ScreenOffset As Point
Private Sub GridView1_MouseDown(sender As GridView, e As MouseEventArgs) Handles GridView1.MouseDown
If sender.FocusedRowHandle >= 0 Then
Dim oDragSize As Size = SystemInformation.DragSize
_DragBoxFromMouseDown = New Rectangle(New Point(e.X - (oDragSize.Width / 2),
Private Sub CopyFileName()
Try
Dim oRow = GetActiveRow()
If oRow IsNot Nothing Then
Dim oFilename = _CurrentDocument.FullPath
Clipboard.SetText(oFilename)
End If
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Private Sub OpenProperties()
Try
Dim oRow = GetActiveRow()
If oRow IsNot Nothing Then
Dim oObjectId = oRow.Item(COLUMN_DOCID)
Dim oPropertyDialog As New frmObjectPropertyDialog(_LogConfig, _Environment, _IDBClient, oObjectId)
oPropertyDialog.Show()
End If
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Private Sub GridView1_ColumnFilterChanged(sender As GridView, e As EventArgs) Handles GridView1.ColumnFilterChanged
Dim oRowCount = sender.RowCount
UpdateGridHeader(_ResultLists, 0, oRowCount)
End Sub
Private Sub GridView2_ColumnFilterChanged(sender As GridView, e As EventArgs) Handles GridView2.ColumnFilterChanged
Dim oRowCount = sender.RowCount
UpdateGridHeader(_ResultLists, 1, oRowCount)
End Sub
Private Sub GridView3_ColumnFilterChanged(sender As GridView, e As EventArgs) Handles GridView3.ColumnFilterChanged
Dim oRowCount = sender.RowCount
UpdateGridHeader(_ResultLists, 2, oRowCount)
End Sub
Private Sub BarButtonItem4_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonBack.ItemClick
ShouldReturnToPreviousForm = True
Close()
End Sub
Private Sub frmDocumentResultList_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
Try
_Config.Config.WindowLocation = Location
_Config.Config.WindowSize = Size
_Config.Save()
DocumentViewer1.Done()
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Private Sub GridControl_DoubleClick(sender As Object, e As EventArgs) Handles GridControl1.DoubleClick, GridControl2.DoubleClick, GridControl3.DoubleClick
If _CurrentDocument IsNot Nothing AndAlso _CurrentDocument.AccessRight > Rights.AccessRight.VIEW_ONLY Then
OpenFile()
End If
End Sub
Private Sub GridView_PopupMenuShowing(sender As Object, e As PopupMenuShowingEventArgs) _
Handles GridView2.PopupMenuShowing, GridView3.PopupMenuShowing, GridView1.PopupMenuShowing
Try
Dim oView As GridView = sender
If e.MenuType = GridMenuType.Row Then
Dim oRowHandle = e.HitInfo.RowHandle
Dim oRow As DataRow = oView.GetDataRow(oRowHandle)
Dim oFilepath As String = _CurrentDocument.FullPath
Dim oObjectId As Long = oRow.Item(COLUMN_DOCID)
Dim oMenu As New DocumentPropertyMenu(_LogConfig, _Environment, _IDBClient, oFilepath, oObjectId)
e.Menu.Items.Clear()
For Each oItem In oMenu.GetMenuItems(OperationMode, _CurrentDocument.AccessRight)
e.Menu.Items.Add(oItem)
Next
AddHandler oMenu.FileOpened, AddressOf DocumentPropertyMenu_FileOpened
' AddHandler oMenu.FileClosed, AddressOf DocumentPropertyMenu_FileClosed
End If
Catch ex As Exception
_Logger.Error(ex)
MsgBox("Unexpected Error while preparing context menu", MsgBoxStyle.Critical, Text)
End Try
End Sub
Public Sub DocumentPropertyMenu_FileOpened(sender As Object, FilePath As String)
'DocumentViewer1.CloseDocument()
Dim oProcess = Process.Start(New ProcessStartInfo With {
.FileName = FilePath
})
End Sub
Public Sub FileOpenTimer_Elapsed() Handles _FileOpenTimer.Tick
'Try
' Dim oProcesses = Process.GetProcesses()
' Dim oIds = (From oProc In oProcesses
' Select oProc.Id).
' ToList()
' Dim oNewFileOpenList As New Dictionary(Of Integer, String)
' For Each oOpenFile In _FileOpenList
' If oIds.Contains(oOpenFile.Key) Then
' oNewFileOpenList.Add(oOpenFile.Key, oOpenFile.Value)
' End If
' Next
' If oNewFileOpenList.Count < _FileOpenList.Count Then
' Dim oClosedFiles = _FileOpenList.
' Except(oNewFileOpenList).
' ToList()
' If oClosedFiles.Count = 1 Then
' Dim oOpenFile = oClosedFiles.First()
' DocumentViewer1.LoadFile(oOpenFile.Value)
' Else
' ClearGridData()
' UpdateGridData()
' End If
' _FileOpenList = oNewFileOpenList
' End If
'Catch ex As Exception
' _Logger.Error(ex)
'End Try
End Sub
Public Sub Show_CriticalError(Message As String)
labelCriticalError.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
labelCriticalError.Caption = Message
End Sub
Public Sub Show_Warning(Message As String)
labelWarning.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
labelWarning.Caption = Message
End Sub
Public Sub Reset_Errors()
labelCriticalError.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
labelWarning.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
End Sub
Private Sub BarButtonItem5_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem5.ItemClick
If Not IsNothing(_ActiveGrid) Then
Try
Dim oFile = GetDevexpressGrid_LayoutName(_ActiveGrid.MainView)
If File.Exists(oFile) Then
File.Delete(oFile)
End If
UpdateGridData()
Catch ex As Exception
_Logger.Error(ex)
End Try
End If
End Sub
Private Sub frmDocumentResultList_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
GridViewSave_Layout(_ActiveGrid.MainView)
End Sub
Private _DragBoxFromMouseDown As Rectangle
Private _ScreenOffset As Point
Private Sub GridView1_MouseDown(sender As GridView, e As MouseEventArgs) Handles GridView1.MouseDown
If sender.FocusedRowHandle >= 0 Then
Dim oDragSize As Size = SystemInformation.DragSize
_DragBoxFromMouseDown = New Rectangle(New Point(e.X - (oDragSize.Width / 2),
e.Y - (oDragSize.Height / 2)), oDragSize)
Else
Else
_DragBoxFromMouseDown = Rectangle.Empty
End If
End Sub
Private Sub GridView1_MouseUp(sender As GridView, e As MouseEventArgs) Handles GridView1.MouseUp
_DragBoxFromMouseDown = Rectangle.Empty
End If
End Sub
End Sub
Private Sub GridView1_MouseUp(sender As GridView, e As MouseEventArgs) Handles GridView1.MouseUp
_DragBoxFromMouseDown = Rectangle.Empty
End Sub
Private Sub GridView1_MouseMove(sender As GridView, e As MouseEventArgs) Handles GridView1.MouseMove
If e.Button AndAlso e.Button = MouseButtons.Left Then
If _DragBoxFromMouseDown <> Rectangle.Empty And Not _DragBoxFromMouseDown.Contains(e.X, e.Y) Then
Private Sub GridView1_MouseMove(sender As GridView, e As MouseEventArgs) Handles GridView1.MouseMove
If e.Button AndAlso e.Button = MouseButtons.Left Then
If _DragBoxFromMouseDown <> Rectangle.Empty And Not _DragBoxFromMouseDown.Contains(e.X, e.Y) Then
Dim oHitInfo = sender.CalcHitInfo(e.Location)
Dim oHitInfo = sender.CalcHitInfo(e.Location)
If oHitInfo.InRow Then
If _CurrentDocument IsNot Nothing AndAlso _CurrentDocument.AccessRight >= Rights.AccessRight.VIEW_EXPORT Then
_ScreenOffset = SystemInformation.WorkingArea.Location
If oHitInfo.InRow Then
If _DocumentInfo IsNot Nothing AndAlso _DocumentInfo.AccessRight >= Rights.AccessRight.VIEW_EXPORT Then
_ScreenOffset = SystemInformation.WorkingArea.Location
Dim oFullPath As String = _CurrentDocument.FullPath
Dim oFiles As String() = {oFullPath}
Dim oData As New DataObject(DataFormats.FileDrop, oFiles)
Dim oFullPath As String = _DocumentInfo.FullPath
Dim oFiles As String() = {oFullPath}
Dim oData As New DataObject(DataFormats.FileDrop, oFiles)
sender.GridControl.DoDragDrop(oData, DragDropEffects.All)
sender.GridControl.DoDragDrop(oData, DragDropEffects.All)
End If
End If
End If
End If
End If
End Sub
End Class
End Sub
End Class