932 lines
38 KiB
VB.net
932 lines
38 KiB
VB.net
Imports System.ComponentModel
|
|
Imports System.Drawing
|
|
Imports System.IO
|
|
Imports System.Windows.Forms
|
|
Imports DevExpress.Utils
|
|
Imports DevExpress.XtraBars
|
|
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.XtraPrinting
|
|
Imports DigitalData.Modules.Config
|
|
Imports DigitalData.Modules.EDMI.API
|
|
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
|
|
Imports DigitalData.Modules.Language
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.ZooFlow
|
|
Imports DigitalData.Modules.ZooFlow.Constants
|
|
Imports DigitalData.Modules.Base.IDB.FileStore
|
|
Imports DigitalData.Controls.MessageBoxEx
|
|
Imports DigitalData.GUIs.Common.Base
|
|
|
|
Public Class frmDocumentResultList
|
|
Implements IResultForm, IBaseForm
|
|
|
|
' These are NOT constants, only defaults
|
|
' Can be changed when calling frmDocumentResultList
|
|
Private ReadOnly COLUMN_FILEPATH As String = "FULL_FILENAME"
|
|
Private ReadOnly COLUMN_FILENAME As String = "Filename"
|
|
Private ReadOnly COLUMN_DOCID As String = "DocID"
|
|
Private ReadOnly COLUMN_ICON As String = "ICON"
|
|
|
|
' Constants
|
|
Private Const OPEN_FILE As String = "Datei öffnen"
|
|
Private Const OPEN_DIRECTORY As String = "Ordner öffnen"
|
|
Private Const COPY_FILE_PATH As String = "Dateipfad kopieren"
|
|
Private Const COPY_FOLDER_PATH As String = "Ordnerpfad kopieren"
|
|
Private Const OPEN_PROPERTIES As String = "Eigenschaften"
|
|
|
|
Private Const FILE_OPEN_TIMER_INTERVAL As Integer = 500
|
|
|
|
Private ReadOnly Property LogConfig As LogConfig Implements IBaseForm.LogConfig
|
|
Private ReadOnly Property Logger As Logger Implements IBaseForm.Logger
|
|
Public ReadOnly Property ErrorHandler As BaseErrorHandler Implements IBaseForm.ErrorHandler
|
|
|
|
' Helper Classes
|
|
Private _IDBClient As Client
|
|
Private ReadOnly Config As ConfigManager(Of DocumentResultList.Config)
|
|
Private ReadOnly Environment As Environment
|
|
Private ReadOnly Filesystem As Modules.Filesystem.File
|
|
Private ReadOnly GridBuilder As GridBuilder
|
|
Private ReadOnly FileEx As Modules.Windows.File
|
|
|
|
Private ReadOnly Helpers As DocumentResultList.Helpers
|
|
Private ReadOnly Params As DocumentResultList.Params
|
|
Private ReadOnly LayoutManager As DocumentResultList.Layout
|
|
Private WithEvents Watcher As DocumentResultList.Watcher
|
|
Private ControlManager As AttributeControls
|
|
|
|
Private Documentloader As DocumentResultList.Loader
|
|
|
|
' Runtime variables
|
|
Private Property ResultLists As List(Of DocumentResultList.DocumentResult)
|
|
|
|
Private _IsLoading As Boolean = True
|
|
Private _ActiveGrid As GridControl = Nothing
|
|
Private _ActiveGridBand As GridBand = Nothing
|
|
Private _DragBoxFromMouseDown As Rectangle
|
|
Private _ScreenOffset As Point
|
|
Private _CurrentDocument As DocumentResultList.Document = Nothing
|
|
Private ReadOnly _FileOpenList As New Dictionary(Of Integer, String)
|
|
Private ReadOnly _Language As String
|
|
|
|
Private Property OperationMode As OperationMode Implements IResultForm.OperationMode
|
|
|
|
Public Property ShouldReturnToPreviousForm As Boolean = False Implements IResultForm.ShouldReturnToPreviousForm
|
|
|
|
|
|
|
|
Public Event NeedsRefresh As EventHandler(Of Integer) Implements IResultForm.NeedsRefresh
|
|
Public Event ResultsRefreshed As EventHandler(Of List(Of DocumentResultList.DocumentResult))
|
|
|
|
Private Delegate Sub DatasourceDelegate(View As GridView, Datasource As Object)
|
|
Private Delegate Function RefreshResultsDelegate(Results As IEnumerable(Of BaseResult)) As Boolean
|
|
|
|
Public Sub New(pLogConfig As LogConfig, pEnvironment As Environment, pParams As DocumentResultList.Params)
|
|
' 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", pParams.WindowGuid)
|
|
|
|
COLUMN_DOCID = pParams.ColumnNames.ObjectIdColumn
|
|
COLUMN_FILENAME = pParams.ColumnNames.FilenameColumn
|
|
COLUMN_FILEPATH = pParams.ColumnNames.FullPathColumn
|
|
COLUMN_ICON = pParams.ColumnNames.IconColumn
|
|
|
|
LogConfig = pLogConfig
|
|
Logger = pLogConfig.GetLogger()
|
|
ErrorHandler = New BaseErrorHandler(pLogConfig, Me)
|
|
|
|
Environment = pEnvironment
|
|
Params = pParams
|
|
ResultLists = pParams.Results
|
|
|
|
Config = New ConfigManager(Of DocumentResultList.Config)(pLogConfig, oConfigPath, oConfigPath)
|
|
Helpers = New DocumentResultList.Helpers(pLogConfig)
|
|
Filesystem = New Modules.Filesystem.File(pLogConfig)
|
|
GridBuilder = New GridBuilder(New List(Of GridView) From {GridView1, GridView2, GridView3})
|
|
FileEx = New Modules.Windows.File(pLogConfig)
|
|
Watcher = New DocumentResultList.Watcher(pLogConfig)
|
|
LayoutManager = New DocumentResultList.Layout(pLogConfig, Config)
|
|
|
|
_Language = Utils.NotNull(Me.Environment.User.Language, State.UserState.LANG_EN_US)
|
|
End Sub
|
|
|
|
Private Function GetOperationMode() As OperationMode
|
|
Dim oOperationMode As OperationMode
|
|
|
|
If Environment.Service.IsActive AndAlso Environment.Service.Address <> String.Empty Then
|
|
oOperationMode = OperationMode.WithAppServer
|
|
Else
|
|
oOperationMode = OperationMode.NoAppServer
|
|
End If
|
|
|
|
If Params.OperationModeOverride <> OperationMode.None Then
|
|
oOperationMode = Params.OperationModeOverride
|
|
End If
|
|
|
|
Return oOperationMode
|
|
End Function
|
|
|
|
Private Sub frmDocumentResultList_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
Try
|
|
' Operation mode is either guessed from service settings
|
|
' or explictly set from OperationModeOverride in Params
|
|
OperationMode = GetOperationMode()
|
|
If OperationMode = OperationMode.WithAppServer Or OperationMode = OperationMode.ZooFlow Then
|
|
InitAppServer()
|
|
|
|
End If
|
|
|
|
Documentloader = New DocumentResultList.Loader(LogConfig, OperationMode, _IDBClient, Environment.User)
|
|
|
|
If Params.WindowTitle <> "" Then
|
|
Text = $"{Text} - {Params.WindowTitle}"
|
|
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
|
|
|
|
' Hide options relating to a filepath for zooflow
|
|
If OperationMode = OperationMode.ZooFlow Then
|
|
RibbonPageGroupFilesystem.Visible = False
|
|
Else
|
|
RibbonPageGroupFilesystem.Visible = False
|
|
End If
|
|
|
|
If OperationMode = OperationMode.NoAppServer Then
|
|
DockPanelMetadata.Visibility = Docking.DockVisibility.Hidden
|
|
End If
|
|
|
|
If OperationMode <> OperationMode.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
|
|
|
|
CtrlObjectPropertyDialog.Initialize(LogConfig, Me, _IDBClient, Environment)
|
|
|
|
SwitchMainContainerHorizontal.Visibility = BarItemVisibility.Never
|
|
SwitchDetailContainerHorizontal.Visibility = BarItemVisibility.Never
|
|
End If
|
|
|
|
GridBuilder.
|
|
WithDefaults().
|
|
WithReadOnlyOptions()
|
|
|
|
AddHandler GridView1.FocusedRowChanged, AddressOf GridView_FocusedRowChanged
|
|
AddHandler GridView2.FocusedRowChanged, AddressOf GridView_FocusedRowChanged
|
|
AddHandler GridView3.FocusedRowChanged, AddressOf GridView_FocusedRowChanged
|
|
|
|
UpdateTotalResults()
|
|
UpdateGridData()
|
|
|
|
LayoutManager.DockManager_RestoreLayout(DockManager1)
|
|
|
|
Catch ex As Exception
|
|
ErrorHandler.ShowErrorMessage(ex, "Error while loading results", "Form Load")
|
|
|
|
Finally
|
|
_IsLoading = False
|
|
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub frmDocumentResultList_Closing(sender As Object, e As CancelEventArgs) Handles Me.FormClosing
|
|
Try
|
|
LayoutManager.GridView_SaveLayout(_ActiveGrid.MainView)
|
|
LayoutManager.DockManager_SaveLayout(DockManager1)
|
|
|
|
Config.Config.WindowLocation = Location
|
|
Config.Config.WindowSize = Size
|
|
Config.Save()
|
|
|
|
DocumentViewer1.Done()
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Async Sub GridView_FocusedRowChanged(sender As GridView, e As FocusedRowChangedEventArgs)
|
|
Helpers.SetRowHandle(e)
|
|
|
|
Try
|
|
Cursor = Cursors.WaitCursor
|
|
|
|
If e.FocusedRowHandle >= 0 Then
|
|
Dim oRow = sender.GetDataRow(Helpers.ActiveRowHandle)
|
|
Dim oObjectId = oRow.ItemEx(Of Long)(COLUMN_DOCID, 0)
|
|
Dim oFullPath = oRow.ItemEx(Of String)(COLUMN_FILEPATH, "")
|
|
Dim oDocumentInfo As DocumentResultList.Document = Nothing
|
|
|
|
DocumentViewer1.CloseDocument()
|
|
|
|
oDocumentInfo = Documentloader.Load(oObjectId, oFullPath)
|
|
|
|
' Check DocumentInfo
|
|
If IsNothing(oDocumentInfo) Then
|
|
ErrorHandler.ShowErrorMessage("File could not be loaded!")
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim oFileName = $"{oObjectId}.{oDocumentInfo.Extension}"
|
|
|
|
DocumentViewer1.LoadFile(oFileName, New MemoryStream(oDocumentInfo.Contents))
|
|
|
|
' Save reference to current
|
|
_CurrentDocument = oDocumentInfo
|
|
|
|
' Hide Export and filesystem options for view only right
|
|
If oDocumentInfo.AccessRight = Rights.AccessRight.VIEW_ONLY Then
|
|
DocumentViewer1.SetViewOnly(True)
|
|
RibbonPageExport.Visible = False
|
|
RibbonPageGroupFilesystem.Visible = False
|
|
Else
|
|
DocumentViewer1.SetViewOnly(False)
|
|
RibbonPageExport.Visible = True
|
|
RibbonPageGroupFilesystem.Visible = True
|
|
End If
|
|
|
|
If OperationMode = OperationMode.ZooFlow Or OperationMode = OperationMode.WithAppServer Then
|
|
Dim oEntityId = 1
|
|
Dim oAttributes = Await ControlManager.GetAttributesForBusinessEntity(oEntityId)
|
|
|
|
If oAttributes.Count = 0 Then
|
|
MsgBox($"Es konnten keine Attribute für das Objekt '{oObjectId}' geladen werden!", MsgBoxStyle.Critical, Text)
|
|
End If
|
|
|
|
Await CtrlObjectPropertyDialog.LoadObject(oObjectId)
|
|
|
|
'Await ControlManager.LoadControlsForAttributes(oObjectId, oAttributes, RootMetadata)
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
ErrorHandler.ShowErrorMessage(ex, "GridView_FocusedRowChanged")
|
|
Finally
|
|
Cursor = Cursors.Default
|
|
End Try
|
|
End Sub
|
|
|
|
Public Async Sub Watcher_FileOpened(sender As Object, e As DocumentResultList.Watcher.FileOpenedArgs) Handles Watcher.FileOpened
|
|
Await _IDBClient.SetObjectStateAsync(e.File.Document.Id, OBJECT_STATE_FILE_OPENED, New Options.SetObjectStateOptions With {
|
|
.Language = Environment.User.Language,
|
|
.Username = Environment.User.UserName
|
|
})
|
|
End Sub
|
|
|
|
Public Async Sub Watcher_FileChanged(sender As Object, e As DocumentResultList.Watcher.FileChangedArgs) Handles Watcher.FileChanged
|
|
Try
|
|
|
|
Dim oDoctype As GlobalStateDoctype = Nothing
|
|
|
|
If e.File.Document.DocumentType IsNot Nothing Then
|
|
oDoctype = _IDBClient.ClientConfig.DocumentTypes.
|
|
Where(Function(doctype) doctype.Name = e.File.Document.DocumentType).
|
|
FirstOrDefault()
|
|
End If
|
|
|
|
If oDoctype IsNot Nothing Then
|
|
Select Case oDoctype.FileChangedAction
|
|
Case FILE_CHANGED_OVERWRITE
|
|
Await Watcher_OverwriteFile(e.File)
|
|
|
|
Case FILE_CHANGED_VERSION
|
|
Await Watcher_VersionFile(e.File)
|
|
|
|
Case FILE_CHANGED_QUESTION
|
|
Await Watcher_Ask(e.File)
|
|
|
|
Case Else
|
|
Await Watcher_Ask(e.File)
|
|
|
|
End Select
|
|
|
|
Else
|
|
Await Watcher_Ask(e.File)
|
|
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
ErrorHandler.ShowErrorMessage(ex, "Watcher_FileChanged")
|
|
|
|
Finally
|
|
' Signal to the watcher that the file is no longer in use
|
|
Watcher.FileSaved(e.File)
|
|
|
|
End Try
|
|
End Sub
|
|
|
|
Private Async Function Watcher_OverwriteFile(pFile As DocumentResultList.Watcher.OpenFile) As Task
|
|
Await Watcher_UpdateFile(pFile, pCreateNewVersion:=False)
|
|
Await _IDBClient.SetObjectStateAsync(pFile.Document.Id, OBJECT_STATE_FILE_CHANGED, New Options.SetObjectStateOptions With {
|
|
.Language = Environment.User.Language,
|
|
.Username = Environment.User.UserName
|
|
})
|
|
End Function
|
|
|
|
Private Async Function Watcher_VersionFile(pFile As DocumentResultList.Watcher.OpenFile) As Task
|
|
Await Watcher_UpdateFile(pFile, pCreateNewVersion:=True)
|
|
Await _IDBClient.SetObjectStateAsync(pFile.Document.Id, OBJECT_STATE_FILE_VERSIONED, New Options.SetObjectStateOptions With {
|
|
.Language = Environment.User.Language,
|
|
.Username = Environment.User.UserName
|
|
})
|
|
End Function
|
|
|
|
Private Async Function Watcher_UpdateFile(pFile As DocumentResultList.Watcher.OpenFile, pCreateNewVersion As Boolean) As Task
|
|
Dim oFileInfo As New FileInfo(pFile.FilePath)
|
|
Dim oDisplayName As String = pFile.Document.DisplayFileName
|
|
Dim oObjectId = Await _IDBClient.UpdateFileAsync(pFile.Document.Id, pFile.FilePath, New Options.UpdateFileOptions With {
|
|
.CreateNewFileVersion = pCreateNewVersion,
|
|
.Language = Environment.User.Language,
|
|
.Username = Environment.User.UserName
|
|
})
|
|
Documentloader.Invalidate(pFile.Document)
|
|
|
|
If IsNothing(oObjectId) Then
|
|
MsgBox($"Beim Speichern der Datei '{oDisplayName}' Fehler ist ein Fehler aufgetreten!", MsgBoxStyle.Critical, Text)
|
|
Else
|
|
'MsgBox($"Die Datei '{oDisplayName}' wurde erfolgreich gespeichert!", MsgBoxStyle.Information, Text)
|
|
RaiseEvent NeedsRefresh(Me, Params.ProfileGuid)
|
|
End If
|
|
End Function
|
|
|
|
Private Async Function Watcher_Ask(pFile As DocumentResultList.Watcher.OpenFile) As Task
|
|
Dim oFileInfo = New FileInfo(pFile.FilePath)
|
|
Dim oDisplayName = pFile.Document.DisplayFileName
|
|
Dim oMessage = $"Die Datei '{oDisplayName}' wurde außerhalb des Systems verändert. Wollen Sie diese Änderung als neue Version in das System übernehmen oder überschreiben?"
|
|
|
|
Dim oMessageBox As New MsgBoxEx(oMessage, "Datei verändert", MessageBoxIcon.Question)
|
|
oMessageBox.SetButtons("Überschreiben", "Neue Version", "Abbrechen")
|
|
oMessageBox.ShowDialog()
|
|
|
|
Select Case oMessageBox.Result
|
|
Case MsgBoxEx.DialogBoxResult.Button1
|
|
Await Watcher_OverwriteFile(pFile)
|
|
|
|
Case MsgBoxEx.DialogBoxResult.Button2
|
|
Await Watcher_VersionFile(pFile)
|
|
|
|
Case Else
|
|
' Cancel, do nothing
|
|
|
|
End Select
|
|
End Function
|
|
|
|
|
|
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)
|
|
ControlManager = New AttributeControls(LogConfig, Environment, _IDBClient)
|
|
|
|
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
|
|
|
|
|
|
Public Function RefreshResults(pResults As IEnumerable(Of BaseResult)) As Boolean Implements IResultForm.RefreshResults
|
|
' This is needed to update the grid from another form like frmMatch
|
|
' Another form means another thread, so we need a delegate here
|
|
If InvokeRequired Then
|
|
Dim oDelegate As New RefreshResultsDelegate(AddressOf RefreshResults)
|
|
Return GridControl1.Invoke(oDelegate, pResults)
|
|
Else
|
|
_IsLoading = True
|
|
Try
|
|
' Save the new results
|
|
ResultLists = pResults
|
|
|
|
' Remove the current document from
|
|
Documentloader.ClearCache()
|
|
|
|
' Update the grid
|
|
UpdateTotalResults()
|
|
UpdateGridData()
|
|
|
|
Return True
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
|
|
MessageBox.Show("Error while refreshing results:" & vbNewLine & vbNewLine & ex.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
|
|
Return False
|
|
Finally
|
|
_IsLoading = False
|
|
End Try
|
|
End If
|
|
End Function
|
|
|
|
Private Sub LoadGridData(View As GridView, Result As DocumentResultList.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 = OperationMode.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
|
|
|
|
SetGridDataSource(View, Result.Datatable)
|
|
End Sub
|
|
|
|
|
|
Private Sub SetGridDataSource(pView As GridView, pTable As DataTable)
|
|
Dim oSavedRowHandle As Integer = pView.FocusedRowHandle
|
|
pView.BeginDataUpdate()
|
|
|
|
Try
|
|
pView.FocusedRowHandle = GridControl.AutoFilterRowHandle
|
|
pView.GridControl.DataSource = Nothing
|
|
pView.GridControl.DataSource = pTable
|
|
pView.FocusedRowHandle = oSavedRowHandle
|
|
Finally
|
|
pView.EndDataUpdate()
|
|
End Try
|
|
End Sub
|
|
|
|
|
|
|
|
Private Sub UpdateGridData()
|
|
' Load Grids
|
|
For oIndex = 0 To ResultLists.Count - 1
|
|
Select Case oIndex
|
|
Case 0
|
|
Dim oResult As DocumentResultList.DocumentResult = ResultLists.Item(0)
|
|
|
|
LoadGridData(GridView1, oResult)
|
|
CreateDocumentGrid(GridView1, oResult)
|
|
LayoutManager.GridView_RestoreLayout(GridView1)
|
|
UpdateGridHeader(ResultLists, oIndex, oResult.Datatable.Rows.Count)
|
|
|
|
Case 1
|
|
Dim oResult As DocumentResultList.DocumentResult = ResultLists.Item(1)
|
|
|
|
LoadGridData(GridView2, oResult)
|
|
CreateDocumentGrid(GridView2, oResult)
|
|
LayoutManager.GridView_RestoreLayout(GridView2)
|
|
UpdateGridHeader(ResultLists, oIndex, oResult.Datatable.Rows.Count)
|
|
|
|
Case 2
|
|
Dim oResult As DocumentResultList.DocumentResult = ResultLists.Item(2)
|
|
|
|
LoadGridData(GridView3, oResult)
|
|
CreateDocumentGrid(GridView3, oResult)
|
|
LayoutManager.GridView_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 DocumentResultList.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 DocumentResultList.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
|
|
End With
|
|
|
|
Dim oFirstBand As GridBand = GridView.Bands.First()
|
|
oFirstBand.Columns.Add(oIconColumn)
|
|
oFirstBand.Columns.MoveTo(0, oIconColumn)
|
|
End If
|
|
|
|
Dim oCreated, oChanged As String
|
|
If _Language = State.UserState.LANG_DE_DE Then
|
|
oChanged = "Geändert"
|
|
oCreated = "Erstellt"
|
|
Else
|
|
oCreated = "Created"
|
|
oChanged = "Changed"
|
|
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 = OperationMode.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
|
|
' Try
|
|
' If e.RowHandle < 0 Then
|
|
' Exit Sub
|
|
' End If
|
|
|
|
' e.DefaultDraw()
|
|
|
|
' 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)
|
|
|
|
' 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
|
|
' Catch ex As Exception
|
|
' Logger.Error(ex)
|
|
' End Try
|
|
'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
|
|
If _Language = State.UserState.LANG_DE_DE Then
|
|
MessageBox.Show("Bitte wählen Sie eine Tabelle aus, die Sie exportieren möchten", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
|
|
Else
|
|
MessageBox.Show("Please select a table that you want to export", Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
|
|
End If
|
|
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 GetActiveGridControl() As GridControl
|
|
If _ActiveGrid Is Nothing Then
|
|
Return Nothing
|
|
End If
|
|
|
|
Return _ActiveGrid
|
|
End Function
|
|
Private Sub GridControl_Enter(sender As GridControl, e As EventArgs) Handles GridControl1.Enter, GridControl2.Enter, GridControl3.Enter
|
|
_ActiveGrid = sender
|
|
BarButtonResetLayout.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 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 Async 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
|
|
Await Watcher.OpenDocument(_CurrentDocument)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub BarButtonResetLayout_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonResetLayout.ItemClick
|
|
If Not IsNothing(_ActiveGrid) Then
|
|
Try
|
|
Dim oFile = LayoutManager.GetGrid_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 Function TestFileExists(pTitle As String) As Boolean
|
|
If _CurrentDocument Is Nothing Then
|
|
Return False
|
|
End If
|
|
|
|
If File.Exists(_CurrentDocument.FullPath) = False Then
|
|
MessageBox.Show($"Datei {_CurrentDocument.FullPath} existiert nicht oder wurde verschoben!", pTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
|
|
Return False
|
|
Else
|
|
Return True
|
|
End If
|
|
End Function
|
|
|
|
Private Function TestDirectoryExists(pDirectory As String, pTitle As String) As Boolean
|
|
If _CurrentDocument Is Nothing Then
|
|
Return False
|
|
End If
|
|
|
|
If Directory.Exists(pDirectory) = False Then
|
|
MessageBox.Show($"Ordner {pDirectory} existiert nicht oder wurde verschoben!", pTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
|
|
Return False
|
|
Else
|
|
Return True
|
|
End If
|
|
End Function
|
|
|
|
Private Function TestObjectIdExists(pObjectId As Long, pTitle As String) As Boolean
|
|
If pObjectId = 0 Then
|
|
MessageBox.Show($"Objekt {pObjectId} existiert nicht oder wurde verschoben!", pTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
|
|
Return False
|
|
Else
|
|
Return True
|
|
End If
|
|
End Function
|
|
|
|
|
|
|
|
|
|
#Region "File Actions"
|
|
Private Sub MenuItem_OpenProperties_ItemClick(sender As Object, e As ItemClickEventArgs) Handles MenuItemPropertiesECM.ItemClick
|
|
If _CurrentDocument Is Nothing Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Select Case OperationMode
|
|
Case OperationMode.NoAppServer
|
|
FileEx.OpenFileProperties(_CurrentDocument.FullPath)
|
|
|
|
Case Else
|
|
Dim oPropertyDialog As New frmObjectPropertyDialog(LogConfig, Environment, _IDBClient, _CurrentDocument.Id)
|
|
oPropertyDialog.Show()
|
|
End Select
|
|
End Sub
|
|
|
|
Private Sub MenuItem_CopyFolderpath_ItemClick(sender As Object, e As ItemClickEventArgs) Handles MenuItemFolderpathCopy.ItemClick
|
|
Dim oFolderPath = Path.GetDirectoryName(_CurrentDocument.FullPath)
|
|
Clipboard.SetText(oFolderPath)
|
|
End Sub
|
|
|
|
Private Sub MenuItem_CopyFilepath_ItemClick(sender As Object, e As ItemClickEventArgs) Handles MenuItemFilepathCopy.ItemClick
|
|
Clipboard.SetText(_CurrentDocument.FullPath)
|
|
End Sub
|
|
|
|
Private Async Sub MenuItem_OpenFile_ItemClick(sender As Object, e As ItemClickEventArgs) Handles MenuItemFileOpen.ItemClick
|
|
Try
|
|
Await Watcher.OpenDocument(_CurrentDocument)
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub MenuItem_FolderOpen_ItemClick(sender As Object, e As ItemClickEventArgs) Handles MenuItemFolderOpen.ItemClick
|
|
Dim oFolderPath = Path.GetDirectoryName(_CurrentDocument.FullPath)
|
|
|
|
If TestDirectoryExists(oFolderPath, OPEN_DIRECTORY) = False Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim oArgs As String = $"/e, /select, ""{oFolderPath}"""
|
|
Dim oInfo As New ProcessStartInfo() With {
|
|
.Arguments = oArgs,
|
|
.FileName = "explorer"
|
|
}
|
|
|
|
Process.Start(oInfo)
|
|
End Sub
|
|
|
|
#End Region
|
|
#Region "Drag to Export"
|
|
|
|
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
|
|
_DragBoxFromMouseDown = Rectangle.Empty
|
|
End If
|
|
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
|
|
|
|
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
|
|
|
|
Dim oFullPath As String = _CurrentDocument.FullPath
|
|
Dim oFiles As String() = {oFullPath}
|
|
Dim oData As New DataObject(DataFormats.FileDrop, oFiles)
|
|
|
|
sender.GridControl.DoDragDrop(oData, DragDropEffects.All)
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
#End Region
|
|
#Region "Layout"
|
|
Private Sub SplitContainerControl1_SplitterPositionChanged(sender As Object, e As EventArgs) Handles SplitContainerControl1.SplitterPositionChanged
|
|
If _IsLoading = False Then
|
|
Config.Config.SplitContainer1Distance = SplitContainerControl1.SplitterPosition
|
|
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
|
|
End If
|
|
End Sub
|
|
|
|
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
|
|
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
|
|
End If
|
|
End Sub
|
|
#End Region
|
|
Private Sub ButtonRefresh_ItemClick(sender As Object, e As ItemClickEventArgs) Handles ButtonRefresh.ItemClick
|
|
RaiseEvent NeedsRefresh(Me, Params.ProfileGuid)
|
|
End Sub
|
|
|
|
Private Sub BarButtonItem6_ItemClick(sender As Object, e As ItemClickEventArgs) Handles BarButtonItem6.ItemClick
|
|
Try
|
|
Dim oFile = LayoutManager.GetDockmanager_LayoutName()
|
|
If File.Exists(oFile) Then
|
|
File.Delete(oFile)
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
End Sub
|
|
End Class |