Add list of open files, prevent loading of open files, close document in viewer when opened externally, reopen file in viewer when closed externally, first version of creating file hashes for modification checks
762 lines
30 KiB
VB.net
762 lines
30 KiB
VB.net
Imports System.ComponentModel
|
|
Imports System.IO
|
|
Imports System.Windows.Forms
|
|
Imports DevExpress.Utils
|
|
Imports DevExpress.XtraEditors
|
|
Imports DevExpress.XtraGrid
|
|
Imports DevExpress.XtraGrid.Columns
|
|
Imports DevExpress.XtraGrid.Views.BandedGrid
|
|
Imports DevExpress.XtraGrid.Views.Base
|
|
Imports DevExpress.XtraGrid.Views.Grid
|
|
Imports DevExpress.XtraGrid.Views.Grid.ViewInfo
|
|
Imports DevExpress.XtraPrinting
|
|
Imports DigitalData.Modules.Config
|
|
Imports DigitalData.Modules.EDMI.API
|
|
Imports DigitalData.Modules.EDMI.API.Client
|
|
Imports DigitalData.Modules.Language
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.ZooFlow
|
|
|
|
Public Class frmDocumentResultList
|
|
Implements IResultForm
|
|
|
|
' These are NOT constants, only defaults
|
|
' Can be changed when calling frmDocumentResultList
|
|
Private COLUMN_FILEPATH As String = "FULL_FILENAME"
|
|
Private COLUMN_FILENAME As String = "Filename"
|
|
Private COLUMN_DOCID As String = "DocID"
|
|
Private COLUMN_ICON As String = "ICON"
|
|
|
|
Private Const FILE_OPEN_TIMER_INTERVAL As Integer = 500
|
|
|
|
' Helper Classes
|
|
Private _IDBClient As Client
|
|
Private _LogConfig As LogConfig
|
|
Private _Logger As Logger
|
|
Private _Config As ConfigManager(Of DocumentResultConfig)
|
|
Private _Environment As Environment
|
|
Private _Params As DocumentResultParams
|
|
Private _ResultLists As List(Of DocumentResult)
|
|
Private _Helpers As DocumentResultList
|
|
Private _Filesystem As DigitalData.Modules.Filesystem.File
|
|
|
|
' Runtime variables
|
|
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 Property OperationMode As IResultForm.Mode Implements IResultForm.OperationMode
|
|
|
|
Public Property ShouldReturnToPreviousForm As Boolean = False Implements IResultForm.ShouldReturnToPreviousForm
|
|
|
|
Public Sub New(LogConfig As LogConfig, Environment As Environment, Params As DocumentResultParams)
|
|
' Dieser Aufruf ist für den Designer erforderlich.
|
|
InitializeComponent()
|
|
|
|
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
|
|
Dim oConfigPath As String = Path.Combine(Application.UserAppDataPath, "ResultList", Params.WindowGuid)
|
|
|
|
COLUMN_DOCID = Params.ColumnNames.ObjectIdColumn
|
|
COLUMN_FILENAME = Params.ColumnNames.FilenameColumn
|
|
COLUMN_FILEPATH = Params.ColumnNames.FullPathColumn
|
|
|
|
_LogConfig = LogConfig
|
|
_Logger = LogConfig.GetLogger()
|
|
_Config = New ConfigManager(Of DocumentResultConfig)(LogConfig, oConfigPath, oConfigPath)
|
|
_Helpers = New DocumentResultList(LogConfig)
|
|
_Filesystem = New Modules.Filesystem.File(_LogConfig)
|
|
|
|
_Environment = Environment
|
|
_Params = Params
|
|
_ResultLists = Params.Results
|
|
|
|
_FileOpenTimer.Interval = FILE_OPEN_TIMER_INTERVAL
|
|
_FileOpenTimer.Start()
|
|
End Sub
|
|
|
|
Private Sub frmDocumentResultList_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
Try
|
|
If _Environment.Service.IsActive AndAlso _Environment.Service.Address <> String.Empty Then
|
|
OperationMode = IResultForm.Mode.WithAppServer
|
|
Else
|
|
OperationMode = IResultForm.Mode.NoAppServer
|
|
End If
|
|
|
|
If OperationMode = IResultForm.Mode.WithAppServer Then
|
|
InitAppServer()
|
|
End If
|
|
|
|
' Initialize Viewer with GDPicture.NET License
|
|
If _Environment.Settings.GdPictureKey = String.Empty Then
|
|
Throw New ApplicationException("GDPicture Licensekey is missing!")
|
|
End If
|
|
DocumentViewer1.Init(_LogConfig, _Environment.Settings.GdPictureKey)
|
|
|
|
' Load config
|
|
SplitContainerControl1.SplitterPosition = _Config.Config.SplitContainer1Distance
|
|
SwitchMainContainerHorizontal.Checked = _Config.Config.SplitContainer1Horizontal
|
|
SplitContainerControl2.SplitterPosition = _Config.Config.SplitContainer2Distance
|
|
SwitchDetailContainerHorizontal.Checked = _Config.Config.SplitContainer2Horizontal
|
|
|
|
If OperationMode <> IResultForm.Mode.NoAppServer Then
|
|
' Location and size will be managed by the ZooFlow Search Window
|
|
If Utils.IsVisibleOnAnyScreen(_Config.Config.WindowLocation) Then
|
|
If Utils.LocationIsVisible(_Config.Config.WindowLocation) Then
|
|
Location = _Config.Config.WindowLocation
|
|
End If
|
|
If Utils.SizeIsVisible(_Config.Config.WindowSize) Then
|
|
Size = _Config.Config.WindowSize
|
|
End If
|
|
End If
|
|
|
|
SwitchMainContainerHorizontal.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
|
|
SwitchDetailContainerHorizontal.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
|
|
End If
|
|
|
|
AddHandler GridView1.FocusedRowChanged, AddressOf GridView_FocusedRowChanged
|
|
AddHandler GridView2.FocusedRowChanged, AddressOf GridView_FocusedRowChanged
|
|
AddHandler GridView3.FocusedRowChanged, AddressOf GridView_FocusedRowChanged
|
|
|
|
UpdateTotalResults()
|
|
UpdateGridData()
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
MessageBox.Show("Error while loading results:" & vbNewLine & vbNewLine & ex.Message, Text)
|
|
Finally
|
|
_IsLoading = False
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub GridView_FocusedRowChanged(sender As GridView, e As FocusedRowChangedEventArgs)
|
|
_Helpers.SetRowHandle(e)
|
|
|
|
Try
|
|
Reset_Errors()
|
|
Cursor = Cursors.WaitCursor
|
|
|
|
If e.FocusedRowHandle >= 0 Then
|
|
Dim oRow = sender.GetDataRow(e.FocusedRowHandle)
|
|
DocumentViewer1.CloseDocument()
|
|
|
|
If OperationMode = IResultForm.Mode.NoAppServer Then
|
|
LoadFile_Legacy(oRow)
|
|
ElseIf OperationMode = IResultForm.Mode.WithAppServer Then
|
|
LoadFile_IDB(oRow)
|
|
End If
|
|
|
|
If IsNothing(_DocumentInfo) Then
|
|
Show_Warning("File could not be loaded!")
|
|
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 _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
|
|
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
|
|
End If
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
Show_CriticalError(ex.Message)
|
|
Finally
|
|
Cursor = Cursors.Default
|
|
End Try
|
|
End Sub
|
|
|
|
Private Function InitAppServer() As Boolean
|
|
Dim oSplit As List(Of String) = _Environment.Service.Address.Split(":").ToList()
|
|
Dim oAddress As String = oSplit.Item(0)
|
|
Dim oPort As Integer = oSplit.Item(1)
|
|
|
|
_IDBClient = New Client(_LogConfig, oAddress, oPort)
|
|
|
|
If Not _IDBClient.Connect() Then
|
|
_Logger.Warn("Client could not connect to Service at [{0}]", _Environment.Service.Address)
|
|
Return False
|
|
End If
|
|
|
|
Return True
|
|
End Function
|
|
|
|
Private Sub LoadFile_Legacy(GridRow As DataRow)
|
|
Try
|
|
Dim oFullPath = GridRow.Item(COLUMN_FILEPATH)
|
|
|
|
_DocumentInfo = New DocumentInfo() With {
|
|
.AccessRight = Rights.AccessRight.FULL,
|
|
.FullPath = oFullPath
|
|
}
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
MsgBox("Error while loading file", MsgBoxStyle.Critical, Text)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub LoadFile_IDB(GridRow As DataRow)
|
|
Try
|
|
Dim oObjectId = GridRow.Item(COLUMN_DOCID)
|
|
_Logger.Debug($"Gettin' Infor 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)
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Function RefreshResults(pResults As IEnumerable(Of BaseResult)) As Boolean Implements IResultForm.RefreshResults
|
|
_IsLoading = True
|
|
Try
|
|
UpdateTotalResults()
|
|
UpdateGridData()
|
|
|
|
Return True
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
MessageBox.Show("Error while loading results:" & vbNewLine & vbNewLine & ex.Message, Text)
|
|
Return False
|
|
Finally
|
|
_IsLoading = False
|
|
End Try
|
|
End Function
|
|
|
|
Private Sub ClearGridData()
|
|
GridControl1.DataSource = Nothing
|
|
End Sub
|
|
|
|
Private Sub LoadGridData(Result As DocumentResult)
|
|
If Result.Datatable.Columns.Contains(COLUMN_DOCID) = False Then
|
|
Throw New ApplicationException($"Datatable is missing DocId Column [{COLUMN_DOCID}] for search {Result.Title}!")
|
|
End If
|
|
|
|
If OperationMode = IResultForm.Mode.NoAppServer And Result.Datatable.Columns.Contains(COLUMN_FILEPATH) = False Then
|
|
Throw New ApplicationException($"Datatable is missing Filepath Column [{COLUMN_FILEPATH}] for search {Result.Title}!")
|
|
End If
|
|
|
|
GridControl1.DataSource = Result.Datatable
|
|
GridControl1.ForceInitialize()
|
|
End Sub
|
|
|
|
Private Sub UpdateGridData()
|
|
' Load Grids
|
|
For oIndex = 0 To _ResultLists.Count - 1
|
|
Select Case oIndex
|
|
Case 0
|
|
Dim oResult As DocumentResult = _ResultLists.Item(0)
|
|
|
|
LoadGridData(oResult)
|
|
CreateDocumentGrid(GridView1, oResult)
|
|
RestoreLayout(GridView1)
|
|
UpdateGridHeader(_ResultLists, oIndex, oResult.Datatable.Rows.Count)
|
|
|
|
Case 1
|
|
Dim oResult As DocumentResult = _ResultLists.Item(1)
|
|
|
|
LoadGridData(oResult)
|
|
CreateDocumentGrid(GridView2, oResult)
|
|
RestoreLayout(GridView2)
|
|
UpdateGridHeader(_ResultLists, oIndex, oResult.Datatable.Rows.Count)
|
|
|
|
Case 2
|
|
Dim oResult As DocumentResult = _ResultLists.Item(2)
|
|
|
|
LoadGridData(oResult)
|
|
CreateDocumentGrid(GridView3, oResult)
|
|
RestoreLayout(GridView3)
|
|
UpdateGridHeader(_ResultLists, oIndex, oResult.Datatable.Rows.Count)
|
|
|
|
Case Else
|
|
MessageBox.Show(Constants.MESSAGE_TOO_MANY_SEARCHES, Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
|
|
Exit For
|
|
End Select
|
|
Next
|
|
|
|
' Hide Grids depending on Result count
|
|
Select Case _ResultLists.Count
|
|
Case 0
|
|
|
|
SplitContainerControl1.SetPanelCollapsed(True)
|
|
SplitContainerControl2.SetPanelCollapsed(True)
|
|
|
|
SwitchMainContainerHorizontal.Enabled = False
|
|
SwitchDetailContainerHorizontal.Enabled = False
|
|
|
|
MessageBox.Show(Constants.MESSAGE_ERROR_IN_SEARCHES, Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
|
|
Case 1
|
|
SplitContainerControl1.PanelVisibility = DevExpress.XtraEditors.SplitPanelVisibility.Panel1
|
|
SplitContainerControl2.PanelVisibility = DevExpress.XtraEditors.SplitPanelVisibility.Panel1
|
|
|
|
SplitContainerControl1.SetPanelCollapsed(True)
|
|
SplitContainerControl2.SetPanelCollapsed(True)
|
|
|
|
SwitchMainContainerHorizontal.Enabled = False
|
|
SwitchDetailContainerHorizontal.Enabled = False
|
|
Case 2
|
|
SplitContainerControl1.PanelVisibility = DevExpress.XtraEditors.SplitPanelVisibility.Both
|
|
SplitContainerControl2.PanelVisibility = DevExpress.XtraEditors.SplitPanelVisibility.Panel1
|
|
|
|
SplitContainerControl2.SetPanelCollapsed(True)
|
|
|
|
SwitchDetailContainerHorizontal.Enabled = False
|
|
End Select
|
|
End Sub
|
|
|
|
Private Sub UpdateTotalResults()
|
|
Dim oTotalResults = 0
|
|
|
|
For Each oList In _ResultLists
|
|
oTotalResults += oList.Datatable.Rows.Count
|
|
Next
|
|
|
|
labelResultCount.Caption = String.Format(labelResultCount.Caption, oTotalResults)
|
|
End Sub
|
|
Private Sub UpdateGridHeader(pResultList As List(Of DocumentResult), pIndex As Integer, pCount As Integer)
|
|
Select Case pIndex
|
|
Case 0
|
|
Dim oResult = pResultList.Item(0)
|
|
GridBand1.Caption = $"{oResult.Title} ({pCount})"
|
|
|
|
Case 1
|
|
Dim oResult = pResultList.Item(1)
|
|
GridBand2.Caption = $"{oResult.Title} ({pCount})"
|
|
|
|
Case 2
|
|
Dim oResult = pResultList.Item(2)
|
|
GridBand3.Caption = $"{oResult.Title} ({pCount})"
|
|
End Select
|
|
End Sub
|
|
|
|
Private Sub CreateDocumentGrid(GridView As BandedGridView, Result As DocumentResult)
|
|
Try
|
|
If IsNothing(GridView.Columns("ICON")) Then
|
|
Dim oIconColumn = GridView.Columns.AddVisible("ICON", "ICON")
|
|
With oIconColumn
|
|
.OptionsColumn.AllowSort = False
|
|
.OptionsColumn.AllowSize = False
|
|
.OptionsColumn.ShowCaption = False
|
|
.OptionsColumn.FixedWidth = True
|
|
.Width = 20
|
|
.MaxWidth = 20
|
|
.MinWidth = 20
|
|
.VisibleIndex = 0
|
|
End With
|
|
|
|
GridView.Bands.First().Columns.Add(oIconColumn)
|
|
End If
|
|
|
|
Dim oCreated, oChanged As String
|
|
If _Environment?.User?.Language <> "de-DE" Then
|
|
oChanged = "Changed"
|
|
oCreated = "Created"
|
|
Else
|
|
oChanged = "Geändert"
|
|
oCreated = "Erstellt"
|
|
End If
|
|
|
|
Try
|
|
Dim oDocIdColumn As GridColumn = GridView.Columns(COLUMN_DOCID)
|
|
If Not IsNothing(oDocIdColumn) Then
|
|
oDocIdColumn.Visible = False
|
|
End If
|
|
|
|
Dim oFilePathColumn As GridColumn = GridView.Columns(COLUMN_FILEPATH)
|
|
If Not IsNothing(oFilePathColumn) Then
|
|
oFilePathColumn.Visible = False
|
|
|
|
' Hide Fullpath column completely in AppServer-Mode
|
|
If OperationMode = IResultForm.Mode.WithAppServer Then
|
|
oFilePathColumn.OptionsColumn.ShowInCustomizationForm = False
|
|
End If
|
|
End If
|
|
|
|
Dim oCreatedColumn = GridView.Columns(oCreated)
|
|
If Not IsNothing(oCreatedColumn) Then
|
|
oCreatedColumn.DisplayFormat.FormatType = FormatType.DateTime
|
|
oCreatedColumn.DisplayFormat.FormatString = _Environment.User.DateFormat & " HH:MM:ss"
|
|
End If
|
|
|
|
Dim oChangedColumn = GridView.Columns(oChanged)
|
|
If Not IsNothing(oChangedColumn) Then
|
|
oChangedColumn.DisplayFormat.FormatType = FormatType.DateTime
|
|
oChangedColumn.DisplayFormat.FormatString = _Environment.User.DateFormat & " HH:MM:ss"
|
|
End If
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
End Try
|
|
|
|
GridView.OptionsView.BestFitMaxRowCount = 30
|
|
GridView.BestFitColumns()
|
|
Catch ex As ApplicationException
|
|
MsgBox($"Error while loading grid data for search {Result.Title}: {vbNewLine}{vbNewLine}{ex.Message}", MsgBoxStyle.Critical, Text)
|
|
_Logger.Error(ex)
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub GridView1_CustomDrawCell(sender As Object, e As RowCellCustomDrawEventArgs) Handles GridView1.CustomDrawCell
|
|
If e.RowHandle < 0 Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim oView As GridView = TryCast(sender, GridView)
|
|
Dim oCellInfo As GridCellInfo = TryCast(e.Cell, GridCellInfo)
|
|
Dim oRow As DataRow = oView.GetDataRow(e.RowHandle)
|
|
Dim oValue = oRow.Item(COLUMN_FILENAME)
|
|
|
|
e.DefaultDraw()
|
|
|
|
If e.Column.FieldName = COLUMN_ICON Then
|
|
Dim oIcon = _Helpers.GetIconByExtension(oValue)
|
|
Dim offsetX = 0
|
|
Dim offsetY = 0
|
|
|
|
e.Cache.DrawImage(oIcon, e.Bounds.X + offsetX, e.Bounds.Y + offsetY, 18, 18)
|
|
End If
|
|
End Sub
|
|
|
|
Private Function TryGetItem(DataRow As DataRow, ColumnName As String, Optional DefaultValue As String = "") As String
|
|
Try
|
|
Return DataRow.Item(ColumnName)
|
|
Catch ex As Exception
|
|
Return DefaultValue
|
|
End Try
|
|
End Function
|
|
|
|
Private Sub SwitchMainContainerHorizontal_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles SwitchMainContainerHorizontal.CheckedChanged
|
|
SplitContainerControl1.Horizontal = SwitchMainContainerHorizontal.Checked
|
|
|
|
If _Config IsNot Nothing And _IsLoading = False Then
|
|
_Config.Config.SplitContainer1Horizontal = SwitchMainContainerHorizontal.Checked
|
|
_Config.Save()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SwitchDetailContainerHorizontal2_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles SwitchDetailContainerHorizontal.CheckedChanged
|
|
SplitContainerControl2.Horizontal = SwitchDetailContainerHorizontal.Checked
|
|
|
|
If _Config IsNot Nothing And _IsLoading = False Then
|
|
_Config.Config.SplitContainer2Horizontal = SwitchDetailContainerHorizontal.Checked
|
|
_Config.Save()
|
|
End If
|
|
End Sub
|
|
|
|
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
|
|
|
|
XtraSaveFileDialog.FileName = Utils.ConvertTextToSlug(oGridBand.Caption) & ".xlsx"
|
|
XtraSaveFileDialog.DefaultExt = ".xlsx"
|
|
|
|
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 System.IO.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 oXml As String = GetDevexpressGrid_LayoutName(pGridView)
|
|
pGridView.RestoreLayoutFromXml(oXml, OptionsLayoutBase.FullLayout)
|
|
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 = oRow.Item(COLUMN_FILEPATH)
|
|
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 = oRow.Item(COLUMN_FILEPATH)
|
|
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
|
|
OpenFile()
|
|
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 = oRow.Item(COLUMN_FILEPATH)
|
|
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()
|
|
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 IO.File.Exists(oFile) Then
|
|
IO.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
|
|
End Class |