diff --git a/ClipboardWatcher/ProfileSearches.vb b/ClipboardWatcher/ProfileSearches.vb
index b7bf21a8..7331c7e5 100644
--- a/ClipboardWatcher/ProfileSearches.vb
+++ b/ClipboardWatcher/ProfileSearches.vb
@@ -8,6 +8,7 @@ Public Class ProfileSearches
Private _Params As ClipboardWatcherParams
Public Class Search
+ Public Guid As Integer
Public DataTable As DataTable
Public TabIndex As Integer
Public TabCaption As String
@@ -38,6 +39,7 @@ Public Class ProfileSearches
Dim oProfileId As Integer = oRow.Item("PROFILE_ID")
Dim oTabTitle As String = oRow.Item("TAB_TITLE")
Dim oConnectionId As Integer = oRow.Item("CONN_ID")
+ Dim oGuid As Integer = oRow.Item("GUID")
oSQL = oRow.Item("SQL_COMMAND")
oSQL = oPatterns.ReplaceUserValues(oSQL, _Environment.User)
@@ -46,6 +48,7 @@ Public Class ProfileSearches
Dim oDatatable As DataTable = _Environment.Database.GetDatatable(oSQL, oConnectionId)
oDocSearches.Add(New Search() With {
+ .Guid = oGuid,
.DataTable = oDatatable,
.ProfileId = oProfileId,
.TabCaption = oTabTitle,
diff --git a/ClipboardWatcher/frmMatch.vb b/ClipboardWatcher/frmMatch.vb
index 08fc4b9d..9251d594 100644
--- a/ClipboardWatcher/frmMatch.vb
+++ b/ClipboardWatcher/frmMatch.vb
@@ -4,6 +4,7 @@ Imports DevExpress.XtraEditors
Imports DigitalData.GUIs.Common
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Windows
+Imports DigitalData.Modules.Language
Imports DigitalData.Modules.ZooFlow
Imports DigitalData.Modules.ZooFlow.Params
@@ -182,6 +183,10 @@ Public Class frmMatch
Dim oProfileId As Integer = oItem.Tag
Dim oProfileSearch As New ProfileSearches(_LogConfig, _Environment, _Params)
+ Dim oProfile As ProfileData = _Params.MatchingProfiles.
+ Where(Function(p) p.Guid = oProfileId).
+ ToList().
+ First()
Select Case oItem.Group.Name
Case TileGroupData.Name
@@ -189,7 +194,7 @@ Public Class frmMatch
Case TileGroupDocuments.Name
Dim oSearches = Await oProfileSearch.LoadDocumentSearchesAsync()
- OpenDocumentResults(oProfileId, oSearches)
+ OpenDocumentResults(oProfile, oSearches)
Case Else
'OpenResultForms(oProfileId, ProfileType.ANY)
@@ -198,12 +203,18 @@ Public Class frmMatch
Hide()
End Sub
- Private Sub OpenDocumentResults(ProfileId As Integer, Searches As List(Of ProfileSearches.Search))
- Dim oParams = New ResultListParams()
+ Private Sub OpenDocumentResults(Profile As ProfileData, Searches As List(Of ProfileSearches.Search))
+ Dim oNameSlug = Language.Utils.ConvertTextToSlug(Profile.Name)
+ Dim oSearchGuids = Searches.Select(Function(s) s.Guid).ToArray
+ Dim oWindowGuid = $"{Profile.Guid}-{oNameSlug}-{String.Join("-", oSearchGuids)}"
+ Dim oParams = New ResultListParams() With {
+ .WindowGuid = oWindowGuid
+ }
For Each oSearch In Searches
oParams.Results.Add(New DocumentResult() With {
- .Datatable = oSearch.DataTable
+ .Title = oSearch.TabCaption,
+ .Datatable = oSearch.DataTable
})
Next
diff --git a/Common/Common.vbproj b/Common/Common.vbproj
index 5ebf4597..6462d855 100644
--- a/Common/Common.vbproj
+++ b/Common/Common.vbproj
@@ -44,13 +44,16 @@
+
+
+
..\packages\NLog.4.6.7\lib\net45\NLog.dll
@@ -82,6 +85,7 @@
+
frmDocumentResultList.vb
@@ -140,10 +144,18 @@
+
+ {44982f9b-6116-44e2-85d0-f39650b1ef99}
+ Config
+
{EAF0EA75-5FA7-485D-89C7-B2D843B03A96}
Database
+
+ {d3c8cfed-d6f6-43a8-9bdf-454145d0352f}
+ Language
+
{903B2D7D-3B80-4BE9-8713-7447B704E1B0}
Logging
diff --git a/Common/DocumentResultConfig.vb b/Common/DocumentResultConfig.vb
new file mode 100644
index 00000000..5cb4bfda
--- /dev/null
+++ b/Common/DocumentResultConfig.vb
@@ -0,0 +1,6 @@
+Public Class DocumentResultConfig
+ Public Property SplitContainer1Distance As Integer = 500
+ Public Property SplitContainer1Horizontal As Boolean = True
+ Public Property SplitContainer2Distance As Integer = 250
+ Public Property SplitContainer2Horizontal As Boolean = False
+End Class
diff --git a/Common/ResultListParams.vb b/Common/ResultListParams.vb
index 6deaf514..e6e569b0 100644
--- a/Common/ResultListParams.vb
+++ b/Common/ResultListParams.vb
@@ -1,7 +1,12 @@
Public Class ResultListParams
+ '''
+ ''' WindowGuid is used to save layout data
+ '''
+ Public WindowGuid As String
Public Results As New List(Of DocumentResult)
End Class
Public Class DocumentResult
+ Public Title As String
Public Datatable As DataTable
End Class
diff --git a/Common/frmDocumentResultList.Designer.vb b/Common/frmDocumentResultList.Designer.vb
index 80dd923c..8d67a5d6 100644
--- a/Common/frmDocumentResultList.Designer.vb
+++ b/Common/frmDocumentResultList.Designer.vb
@@ -19,20 +19,28 @@ Partial Class frmDocumentResultList
'Do not modify it using the code editor.
_
Private Sub InitializeComponent()
+ Me.components = New System.ComponentModel.Container()
+ Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmDocumentResultList))
Me.RibbonControl = New DevExpress.XtraBars.Ribbon.RibbonControl()
- Me.BarToggleSwitchItem1 = New DevExpress.XtraBars.BarToggleSwitchItem()
- Me.BarToggleSwitchItem2 = New DevExpress.XtraBars.BarToggleSwitchItem()
+ Me.SwitchMainContainerHorizontal = New DevExpress.XtraBars.BarToggleSwitchItem()
+ Me.SwitchDetailContainerHorizontal = New DevExpress.XtraBars.BarToggleSwitchItem()
+ Me.BarButtonItemExportGrid1 = New DevExpress.XtraBars.BarButtonItem()
Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
+ Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonStatusBar = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
Me.SplitContainerControl1 = New DevExpress.XtraEditors.SplitContainerControl()
Me.GridControl1 = New DevExpress.XtraGrid.GridControl()
- Me.GridView1 = New DevExpress.XtraGrid.Views.Grid.GridView()
+ Me.GridView1 = New DevExpress.XtraGrid.Views.BandedGrid.BandedGridView()
+ Me.GridBand1 = New DevExpress.XtraGrid.Views.BandedGrid.GridBand()
Me.SplitContainerControl2 = New DevExpress.XtraEditors.SplitContainerControl()
Me.GridControl2 = New DevExpress.XtraGrid.GridControl()
- Me.GridView2 = New DevExpress.XtraGrid.Views.Grid.GridView()
+ Me.GridView2 = New DevExpress.XtraGrid.Views.BandedGrid.BandedGridView()
+ Me.GridBand2 = New DevExpress.XtraGrid.Views.BandedGrid.GridBand()
Me.GridControl3 = New DevExpress.XtraGrid.GridControl()
- Me.GridView3 = New DevExpress.XtraGrid.Views.Grid.GridView()
+ Me.GridView3 = New DevExpress.XtraGrid.Views.BandedGrid.BandedGridView()
+ Me.GridBand3 = New DevExpress.XtraGrid.Views.BandedGrid.GridBand()
+ Me.XtraSaveFileDialog = New DevExpress.XtraEditors.XtraSaveFileDialog(Me.components)
CType(Me.RibbonControl, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainerControl1.SuspendLayout()
@@ -49,39 +57,56 @@ Partial Class frmDocumentResultList
'RibbonControl
'
Me.RibbonControl.ExpandCollapseItem.Id = 0
- Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.BarToggleSwitchItem1, Me.BarToggleSwitchItem2})
+ Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.SwitchMainContainerHorizontal, Me.SwitchDetailContainerHorizontal, Me.BarButtonItemExportGrid1})
Me.RibbonControl.Location = New System.Drawing.Point(0, 0)
- Me.RibbonControl.MaxItemId = 3
+ Me.RibbonControl.MaxItemId = 4
Me.RibbonControl.Name = "RibbonControl"
Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1})
+ Me.RibbonControl.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
Me.RibbonControl.Size = New System.Drawing.Size(1189, 143)
Me.RibbonControl.StatusBar = Me.RibbonStatusBar
'
- 'BarToggleSwitchItem1
+ 'SwitchMainContainerHorizontal
'
- Me.BarToggleSwitchItem1.Caption = "BarToggleSwitchItem1"
- Me.BarToggleSwitchItem1.Id = 1
- Me.BarToggleSwitchItem1.Name = "BarToggleSwitchItem1"
+ Me.SwitchMainContainerHorizontal.BindableChecked = True
+ Me.SwitchMainContainerHorizontal.Caption = "Hauptgrid Horizontal"
+ Me.SwitchMainContainerHorizontal.Checked = True
+ Me.SwitchMainContainerHorizontal.Id = 1
+ Me.SwitchMainContainerHorizontal.Name = "SwitchMainContainerHorizontal"
'
- 'BarToggleSwitchItem2
+ 'SwitchDetailContainerHorizontal
'
- Me.BarToggleSwitchItem2.Caption = "BarToggleSwitchItem2"
- Me.BarToggleSwitchItem2.Id = 2
- Me.BarToggleSwitchItem2.Name = "BarToggleSwitchItem2"
+ Me.SwitchDetailContainerHorizontal.Caption = "Detailgrid Horizontal"
+ Me.SwitchDetailContainerHorizontal.Id = 2
+ Me.SwitchDetailContainerHorizontal.Name = "SwitchDetailContainerHorizontal"
+ '
+ 'BarButtonItemExportGrid1
+ '
+ Me.BarButtonItemExportGrid1.Caption = "Haupttabelle exportieren"
+ Me.BarButtonItemExportGrid1.Id = 3
+ Me.BarButtonItemExportGrid1.ImageOptions.Image = CType(resources.GetObject("BarButtonItemExportGrid1.ImageOptions.Image"), System.Drawing.Image)
+ Me.BarButtonItemExportGrid1.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonItemExportGrid1.ImageOptions.LargeImage"), System.Drawing.Image)
+ Me.BarButtonItemExportGrid1.Name = "BarButtonItemExportGrid1"
'
'RibbonPage1
'
- Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1})
+ Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2})
Me.RibbonPage1.Name = "RibbonPage1"
- Me.RibbonPage1.Text = "RibbonPage1"
+ Me.RibbonPage1.Text = "Ergebnisse"
'
'RibbonPageGroup1
'
- Me.RibbonPageGroup1.ItemLinks.Add(Me.BarToggleSwitchItem1)
- Me.RibbonPageGroup1.ItemLinks.Add(Me.BarToggleSwitchItem2)
+ Me.RibbonPageGroup1.ItemLinks.Add(Me.SwitchMainContainerHorizontal)
+ Me.RibbonPageGroup1.ItemLinks.Add(Me.SwitchDetailContainerHorizontal)
Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
Me.RibbonPageGroup1.Text = "Layout"
'
+ 'RibbonPageGroup2
+ '
+ Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItemExportGrid1)
+ Me.RibbonPageGroup2.Name = "RibbonPageGroup2"
+ Me.RibbonPageGroup2.Text = "Export"
+ '
'RibbonStatusBar
'
Me.RibbonStatusBar.Location = New System.Drawing.Point(0, 640)
@@ -91,6 +116,7 @@ Partial Class frmDocumentResultList
'
'SplitContainerControl1
'
+ Me.SplitContainerControl1.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2
Me.SplitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitContainerControl1.Location = New System.Drawing.Point(0, 143)
Me.SplitContainerControl1.Name = "SplitContainerControl1"
@@ -116,12 +142,28 @@ Partial Class frmDocumentResultList
'
'GridView1
'
+ Me.GridView1.Bands.AddRange(New DevExpress.XtraGrid.Views.BandedGrid.GridBand() {Me.GridBand1})
Me.GridView1.GridControl = Me.GridControl1
Me.GridView1.Name = "GridView1"
Me.GridView1.OptionsView.ShowAutoFilterRow = True
+ Me.GridView1.OptionsView.ShowGroupPanel = False
+ '
+ 'GridBand1
+ '
+ Me.GridBand1.AppearanceHeader.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
+ Me.GridBand1.AppearanceHeader.Options.UseFont = True
+ Me.GridBand1.Caption = "GridBand1"
+ Me.GridBand1.Name = "GridBand1"
+ Me.GridBand1.OptionsBand.AllowHotTrack = False
+ Me.GridBand1.OptionsBand.AllowMove = False
+ Me.GridBand1.OptionsBand.AllowPress = False
+ Me.GridBand1.OptionsBand.AllowSize = False
+ Me.GridBand1.VisibleIndex = 0
+ Me.GridBand1.Width = 513
'
'SplitContainerControl2
'
+ Me.SplitContainerControl2.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2
Me.SplitContainerControl2.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitContainerControl2.Horizontal = False
Me.SplitContainerControl2.Location = New System.Drawing.Point(0, 0)
@@ -148,9 +190,23 @@ Partial Class frmDocumentResultList
'
'GridView2
'
+ Me.GridView2.Bands.AddRange(New DevExpress.XtraGrid.Views.BandedGrid.GridBand() {Me.GridBand2})
Me.GridView2.GridControl = Me.GridControl2
Me.GridView2.Name = "GridView2"
Me.GridView2.OptionsView.ShowAutoFilterRow = True
+ Me.GridView2.OptionsView.ShowGroupPanel = False
+ '
+ 'GridBand2
+ '
+ Me.GridBand2.AppearanceHeader.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
+ Me.GridBand2.AppearanceHeader.Options.UseFont = True
+ Me.GridBand2.Caption = "GridBand2"
+ Me.GridBand2.Name = "GridBand2"
+ Me.GridBand2.OptionsBand.AllowHotTrack = False
+ Me.GridBand2.OptionsBand.AllowMove = False
+ Me.GridBand2.OptionsBand.AllowPress = False
+ Me.GridBand2.OptionsBand.AllowSize = False
+ Me.GridBand2.VisibleIndex = 0
'
'GridControl3
'
@@ -165,9 +221,27 @@ Partial Class frmDocumentResultList
'
'GridView3
'
+ Me.GridView3.Bands.AddRange(New DevExpress.XtraGrid.Views.BandedGrid.GridBand() {Me.GridBand3})
Me.GridView3.GridControl = Me.GridControl3
Me.GridView3.Name = "GridView3"
Me.GridView3.OptionsView.ShowAutoFilterRow = True
+ Me.GridView3.OptionsView.ShowGroupPanel = False
+ '
+ 'GridBand3
+ '
+ Me.GridBand3.AppearanceHeader.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
+ Me.GridBand3.AppearanceHeader.Options.UseFont = True
+ Me.GridBand3.Caption = "GridBand3"
+ Me.GridBand3.Name = "GridBand3"
+ Me.GridBand3.OptionsBand.AllowHotTrack = False
+ Me.GridBand3.OptionsBand.AllowMove = False
+ Me.GridBand3.OptionsBand.AllowPress = False
+ Me.GridBand3.OptionsBand.AllowSize = False
+ Me.GridBand3.VisibleIndex = 0
+ '
+ 'XtraSaveFileDialog
+ '
+ Me.XtraSaveFileDialog.FileName = "XtraSaveFileDialog1"
'
'frmDocumentResultList
'
@@ -177,10 +251,11 @@ Partial Class frmDocumentResultList
Me.Controls.Add(Me.SplitContainerControl1)
Me.Controls.Add(Me.RibbonStatusBar)
Me.Controls.Add(Me.RibbonControl)
+ Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "frmDocumentResultList"
Me.Ribbon = Me.RibbonControl
Me.StatusBar = Me.RibbonStatusBar
- Me.Text = "frmDocumentResultList"
+ Me.Text = "Dokumenten Suche ({0} Ergebnisse)"
CType(Me.RibbonControl, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.SplitContainerControl1.ResumeLayout(False)
@@ -201,15 +276,20 @@ Partial Class frmDocumentResultList
Friend WithEvents RibbonPage1 As DevExpress.XtraBars.Ribbon.RibbonPage
Friend WithEvents RibbonPageGroup1 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents RibbonStatusBar As DevExpress.XtraBars.Ribbon.RibbonStatusBar
- Friend WithEvents BarToggleSwitchItem1 As DevExpress.XtraBars.BarToggleSwitchItem
- Friend WithEvents BarToggleSwitchItem2 As DevExpress.XtraBars.BarToggleSwitchItem
+ Friend WithEvents SwitchMainContainerHorizontal As DevExpress.XtraBars.BarToggleSwitchItem
+ Friend WithEvents SwitchDetailContainerHorizontal As DevExpress.XtraBars.BarToggleSwitchItem
Friend WithEvents SplitContainerControl1 As DevExpress.XtraEditors.SplitContainerControl
Friend WithEvents GridControl1 As DevExpress.XtraGrid.GridControl
- Friend WithEvents GridView1 As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents SplitContainerControl2 As DevExpress.XtraEditors.SplitContainerControl
Friend WithEvents GridControl2 As DevExpress.XtraGrid.GridControl
- Friend WithEvents GridView2 As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents GridControl3 As DevExpress.XtraGrid.GridControl
- Friend WithEvents GridView3 As DevExpress.XtraGrid.Views.Grid.GridView
-
+ Friend WithEvents GridView1 As DevExpress.XtraGrid.Views.BandedGrid.BandedGridView
+ Friend WithEvents GridBand1 As DevExpress.XtraGrid.Views.BandedGrid.GridBand
+ Friend WithEvents GridView2 As DevExpress.XtraGrid.Views.BandedGrid.BandedGridView
+ Friend WithEvents GridBand2 As DevExpress.XtraGrid.Views.BandedGrid.GridBand
+ Friend WithEvents GridView3 As DevExpress.XtraGrid.Views.BandedGrid.BandedGridView
+ Friend WithEvents GridBand3 As DevExpress.XtraGrid.Views.BandedGrid.GridBand
+ Friend WithEvents BarButtonItemExportGrid1 As DevExpress.XtraBars.BarButtonItem
+ Friend WithEvents RibbonPageGroup2 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
+ Friend WithEvents XtraSaveFileDialog As DevExpress.XtraEditors.XtraSaveFileDialog
End Class
diff --git a/Common/frmDocumentResultList.resx b/Common/frmDocumentResultList.resx
index 1af7de15..8f70ff33 100644
--- a/Common/frmDocumentResultList.resx
+++ b/Common/frmDocumentResultList.resx
@@ -117,4 +117,94 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAfdEVYdFRpdGxlAEV4cG9ydDtYc2x0O0V4cG9ydFRv
+ WHNsdDsT1nubAAAAd0lEQVQ4T91S2wmAMAzs1E6QHRzBHVzBTweKXMpJDBUN8cuDI6/LtZQ2VTWKiGbI
+ vYvBW/zVAJ0kusG0zFqhGQCjCK77ZjUw0pwGFPphzFl7rRmwgUgRF+Is1o83INkDvPb2DQCf80TARzOo
+ sP4PmHzylTPse9oOhn1G54TA0vAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAfdEVYdFRpdGxlAEV4cG9ydDtYc2x0O0V4cG9ydFRv
+ WHNsdDsT1nubAAABNUlEQVRYR+WQPQ7CMAyFOV+PwgE4QdcOiIGpMxNiZGJAYuIOnZA4BAzhPYRRcJ02
+ paH8PemTa9dpPhg5596KORwSczgk5nBIzCHJ89x15AAywLM1rDuIOSQ4hBIf7hdFcS7LMkOrv/XQ+5jD
+ G51CgaqqTIlWgcli7vrAyD9mSVAAezX4LrkAoyWiBBirkuV+e+2Z0K4vwNwkTpSIFpCLpGfVz9LrXS3A
+ iATeZdhrFpAPsrJnWK131i4FGjhir1mAkQ9Lz+ojM0bvNoUS2GsX0JXxn/1fbO2GEiXQh7Z8hYD1Mlla
+ BWbjVQ0eShnrDozTCaymO15yhZFnHzXfoE0ngDN3Qr1Ub/4nAqE58jqBUNTeawRiQX5QICbe7ocLxMLg
+ TFqBJ/gMgS6kFlgD86IA67vA+3CjC4yA0LudSp2BAAAAAElFTkSuQmCC
+
+
+
+ 17, 17
+
+
+
+ AAABAAIAEBAAAAEACABoBQAAJgAAACAgAAABAAgAqAgAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAEAB
+ AAAAAAAAAAAAAAABAAAAAAAA3ufvAM7n7wDG1tYAwMDAAL21tQCkoKAAraWUAISEhADvpUoAzpRKAPeM
+ MQC1lHsA72sAAMZrKQDOYwAArXNKAJRzYwCtezEAtUIAAGtrYwBrY1IAWlpSAHNaGABaUjkAUikQAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA////AP7+/v7+/v7+/v7+/v7+/v7+BxAQExMTExMTExMTExAHBBYYGBgY
+ GBgYGBgYGBgYFAsAAAAADwAAAAAAAAAACxULAAAAAA8BBAQEBAMCAQsXCwAAAAAPAQYGBQUEAwELFwsA
+ AAAADwIEBAQEAwIBCxcLAAAAAA8AAAAAAAAAAAsXCwAAAAAPAQQEBAQDAgELFwsAAAAADwIFBgUFBAMB
+ CxcLAAAAAA8BAgICAgIBAQsXCwAAAAAPAAICAgICAQELFQsMDAwMDgwMDAwKCggRERMLDQ0NDQ0NDQ0N
+ CQkJDxIE/gQGBgYGBgYGBgYGBgYDAv7+/v7+/v7+/v7+/v7+/v7/////gAD//wAA//8AAP//AAD//wAA
+ //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//4AA////////KAAAACAAAABAAAAAAQAIAAAA
+ AACABAAAAAAAAAAAAAAAAQAAAAAAAN7r7wDW6+8A1ufvANbj5wDW3+cA3tvWAN7X1gDW3t4A1s/OANbL
+ xgDO294AztfeAM7V1gDOz84AzsvGAM7HxgDGzc4AxsXGAMbDvQDGvr0AxrKlAL28vQC9urUAvbS1AL2y
+ rQC9rK0Ava6lALWqpQC1pqUAtaScAL2ijAC9loQArZ6cAK2blACtlpQArZqMAK2UjACtjpQArYuMAKWM
+ hAClhIQA78NzAPe6ewD3qkoA755SAOeSSgDeqmMA55I5AO+WIQDvjhAA74oIAO+CAADeghAApYJ7AJSG
+ ewD/AP8AznEpANZ1EADedQAAzmUAAKV9ewCleWMAtXlaAK1tSgCceXMAnHFzAJR5ewCcbWsAhHFjAIxp
+ awCEbVoAlF1CAL19OQC1ZSEAvWUYAKVVMQCtSQgAnEkhAIRFIQClPAAAnDAAAEpt1gB7ZVoAe2FSAHNh
+ UgBzXVIAa1lSAGtVSgBjUUoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
+ /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
+ /v43CAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQgFNzdGU1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
+ VVVVUjYFPk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NVAlLFA4ODg4ODg4OUA4ODg4ODg4ODg4O
+ Dg4ODg4ODlBXD0sOAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUFgPSw4AAAAAAAAAAFAAACUoKCYk
+ IiEgHR0YEQwDAABQWA9LDgAAAAAAAAAAUAAACwsLCwoKCgoHBwQDAgEAAFBYD0sOAAAAAAAAAABQAAAA
+ AAAAAAAAAAAAAAAAAAAAUFgPSw4AAAAAAAAAAFAAADxDQUA8NScnJCMcFhAEAABQWA9LDgAAAAAAAAAA
+ UAAAAAAAAAAAAAAAAAAAAAAAAFBYD0sOAAAAAAAAAABQAAALCwsLCgoKCgcHBAMCAQAAUFgPSw4AAAAA
+ AAAAAFAAACUoKCYmIiEhHR0YEw0EAABQWA9LDgAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFBYD0sO
+ AAAAAAAAAABQAAAXGRkXFxcVFRMSEAwKAgAAUFgPSw4AAAAAAAAAAFAAABcZGRcXFxUVExIRDAoDAABQ
+ WA9LDgAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFBYD0sOAAAAAAAAAABQAAA8Q0FAPDUnJyQhGxYQ
+ BwEAUFgPSw4AAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQWA9LDgAAAAAAAAAAUAAACgsKCgoHBwQE
+ AwMCAgEAAFBYD0sOAAAAAAAAAABQAAAlKCckIiEdHRsXFRAMBwEAUFgPSw4AAAAAAAAAAFAAAAAAAAAA
+ AAAAAAAAAAAAAABQWA9LLikpKSkpKSkpOykpKSkpKSkpKSkpKSkpKSkpKVBYD0s6MzMzMzMzMzMzMzMz
+ MzMzMzMzMSswMSsxSEI0UFYJR0o7Ozs7Ozs7Ozs7Ozs7Ozs7OzsvKi8vKjlFUUlQRAYeTzgsLCwsLCws
+ LCwsLCwsLCwsLCwsLCwsLCwtTE4a/v4fP0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0s9/v7+/v7+/v7+
+ /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
+ /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+////////////////AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAf///////////////8=
+
+
\ No newline at end of file
diff --git a/Common/frmDocumentResultList.vb b/Common/frmDocumentResultList.vb
index 80452989..efd55c49 100644
--- a/Common/frmDocumentResultList.vb
+++ b/Common/frmDocumentResultList.vb
@@ -1,75 +1,121 @@
Imports System.Drawing
+Imports System.IO
+Imports System.Windows.Forms
Imports DevExpress.Utils
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Columns
Imports DevExpress.XtraGrid.Views.Grid
+Imports DevExpress.XtraPrinting
+Imports DigitalData.Modules.Config
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow
+Imports DigitalData.Modules.Language
Public Class frmDocumentResultList
Private _LogConfig As LogConfig
Private _Logger As Logger
+ Private _Config As ConfigManager(Of DocumentResultConfig)
Private _Environment As Environment
Private _ResultLists As List(Of DocumentResult)
+ Private _IsLoading As Boolean = True
+
Public Sub New(LogConfig As LogConfig, Environment As Environment, Params As ResultListParams)
' 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, "DocumentResultList", Params.WindowGuid)
+
_LogConfig = LogConfig
_Logger = LogConfig.GetLogger()
+ _Config = New ConfigManager(Of DocumentResultConfig)(LogConfig, oConfigPath)
_Environment = Environment
_ResultLists = Params.Results
End Sub
Private Sub frmDocumentResultList_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Dim oCounter = 1
+ Try
+ ' Load config
+ SplitContainerControl1.SplitterPosition = _Config.Config.SplitContainer1Distance
+ SwitchMainContainerHorizontal.Checked = _Config.Config.SplitContainer1Horizontal
+ SplitContainerControl2.SplitterPosition = _Config.Config.SplitContainer2Distance
+ SwitchDetailContainerHorizontal.Checked = _Config.Config.SplitContainer2Horizontal
- For Each oList In _ResultLists
+ Dim oTotalResults = 0
+
+ For Each oList In _ResultLists
+ oTotalResults += oList.Datatable.Rows.Count
+ Next
+
+ Text = String.Format(Text, oTotalResults)
+
+ ' Load Grids
+ For index = 0 To _ResultLists.Count - 1
+ Select Case index
+ Case 0
+ Dim oResult As DocumentResult = _ResultLists.Item(0)
+ GridBand1.Caption = $"{oResult.Title} ({oResult.Datatable.Rows.Count})"
+ CreateDocumentGrid(GridView1, oResult.Datatable)
+
+ Case 1
+ Dim oResult As DocumentResult = _ResultLists.Item(1)
+ GridBand2.Caption = $"{oResult.Title} ({oResult.Datatable.Rows.Count})"
+ CreateDocumentGrid(GridView2, oResult.Datatable)
+
+ Case 2
+ Dim oResult As DocumentResult = _ResultLists.Item(2)
+ GridBand3.Caption = $"{oResult.Title} ({oResult.Datatable.Rows.Count})"
+ CreateDocumentGrid(GridView3, oResult.Datatable)
+
+ Case Else
+ MessageBox.Show("You have more than three searches configured. This Window will only show the first three result lists!")
+ Exit For
+ End Select
+ Next
+
+ ' Hide Grids depending on Result count
Select Case _ResultLists.Count
Case 1
- CreateDocumentGrid(GridView1, oList.Datatable)
+ SplitContainerControl1.SetPanelCollapsed(True)
+ SplitContainerControl2.SetPanelCollapsed(True)
Case 2
- CreateDocumentGrid(GridView2, oList.Datatable)
- Case 3
- CreateDocumentGrid(GridView3, oList.Datatable)
+ SplitContainerControl2.SetPanelCollapsed(True)
End Select
- oCounter += 1
- Next
+ 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 CreateDocumentGrid(GridView As GridView, Datatable As DataTable)
Dim oMyDocDatatable As New DataTable
Try
'Die Icon Colum erstellen und konfigurieren
- Dim oColIcon As New DataColumn() With {
+ oMyDocDatatable.Columns.Add(New DataColumn() With {
.DataType = GetType(Image),
.ColumnName = "ICON",
.Caption = ""
- }
- oMyDocDatatable.Columns.Add(oColIcon)
-
- Dim oColPath As New DataColumn() With {
+ })
+ oMyDocDatatable.Columns.Add(New DataColumn() With {
.DataType = GetType(String),
.ColumnName = "FULL_FILENAME",
.Caption = "Fullpath"
- }
- oMyDocDatatable.Columns.Add(oColPath)
-
- Dim oColDocID As New DataColumn() With {
+ })
+ oMyDocDatatable.Columns.Add(New DataColumn() With {
.DataType = GetType(Int32),
.ColumnName = "DocID",
.Caption = "DocID"
- }
- oMyDocDatatable.Columns.Add(oColDocID)
-
- Dim oColFilename As New DataColumn() With {
+ })
+ oMyDocDatatable.Columns.Add(New DataColumn() With {
.DataType = GetType(String),
.ColumnName = "Filename",
.Caption = "Filename"
- }
- oMyDocDatatable.Columns.Add(oColFilename)
+ })
Dim oRestColArray As New List(Of String)
For Each oCol As DataColumn In Datatable.Columns
@@ -135,12 +181,12 @@ Public Class frmDocumentResultList
oNewRow.Item(2) = oDocID
oNewRow.Item(3) = oFilename
- Dim i = 4 'Fängt bei 3 an, um die definierten Spalten zu überspringen
- For Each Colname As String In oRestColArray
+ Dim oIndex = 4 'Fängt bei 4 an, um die definierten Spalten zu überspringen
+ For Each oColumnName As String In oRestColArray
Dim oRowValue
- oRowValue = oRow.Item(Colname)
- oNewRow.Item(i) = oRowValue.ToString
- i += 1
+ oRowValue = oRow.Item(oColumnName)
+ oNewRow.Item(oIndex) = oRowValue.ToString
+ oIndex += 1
Next
oMyDocDatatable.Rows.Add(oNewRow)
Next
@@ -157,30 +203,32 @@ Public Class frmDocumentResultList
Catch ex As Exception
End Try
- Dim created, changed As String
+ Dim oCreated, oChanged As String
If _Environment.User.Language <> "de-DE" Then
- changed = "Changed"
- created = "Created"
+ oChanged = "Changed"
+ oCreated = "Created"
Else
- changed = "Geändert"
- created = "Erstellt"
+ oChanged = "Geändert"
+ oCreated = "Erstellt"
End If
- Dim createdColumn = GridView.Columns(created)
- If Not IsNothing(createdColumn) Then
- createdColumn.DisplayFormat.FormatType = FormatType.DateTime
- createdColumn.DisplayFormat.FormatString = _Environment.User.DateFormat & " HH:MM:ss"
+ 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 changedColumn = GridView.Columns(changed)
- If Not IsNothing(changedColumn) Then
- changedColumn.DisplayFormat.FormatType = FormatType.DateTime
- changedColumn.DisplayFormat.FormatString = _Environment.User.DateFormat & " HH:MM:ss"
+ 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
+
' Alle Spalten aus ReadOnly setzen, danach werden alle passenden auf nicht ReadOnly gesetzt
- For Each column As GridColumn In GridView.Columns
- column.OptionsColumn.AllowEdit = False
+ For Each oColumn As GridColumn In GridView.Columns
+ oColumn.OptionsColumn.AllowEdit = False
Next
+
GridView.Columns.Item("ICON").MaxWidth = 24
GridView.Columns.Item("ICON").MinWidth = 24
GridView.OptionsView.BestFitMaxRowCount = -1
@@ -190,11 +238,47 @@ Public Class frmDocumentResultList
End Try
End Sub
- Private Sub BarToggleSwitchItem1_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarToggleSwitchItem1.CheckedChanged
- SplitContainerControl1.Horizontal = BarToggleSwitchItem1.Checked
+ 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 BarToggleSwitchItem2_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarToggleSwitchItem2.CheckedChanged
- SplitContainerControl2.Horizontal = BarToggleSwitchItem2.Checked
+ Private Sub BarToggleSwitchItem2_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
+ XtraSaveFileDialog.FileName = Utils.ConvertTextToSlug(GridBand1.Caption) & ".xlsx"
+ XtraSaveFileDialog.DefaultExt = ".xlsx"
+
+ If XtraSaveFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
+ Dim oOptions As New XlsxExportOptions() With {
+ .ExportMode = XlsxExportMode.SingleFile
+ }
+ GridControl1.ExportToXlsx(XtraSaveFileDialog.FileName, oOptions)
+ 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
End Class
\ No newline at end of file
diff --git a/Message/EventBus.vb b/Message/EventBus.vb
index 4f96ac6d..7ec9a70f 100644
--- a/Message/EventBus.vb
+++ b/Message/EventBus.vb
@@ -17,6 +17,10 @@ Public Class EventBus
End Get
End Property
+ '''
+ ''' Register a form as an event listener.
+ '''
+ ''' The event listener, usually `Me`
Public Sub Register(ByVal listener As Object)
If Not _Listeners.Any(Function(l) l.Listener.Equals(listener)) Then
_Listeners.Add(New EventListenerWrapper(listener))
diff --git a/Modules.Config/ConfigManager.vb b/Modules.Config/ConfigManager.vb
index 50a60ddc..11d1bdfd 100644
--- a/Modules.Config/ConfigManager.vb
+++ b/Modules.Config/ConfigManager.vb
@@ -62,8 +62,8 @@ Public Class ConfigManager(Of T)
'''
'''
''' LogConfig instance
- ''' The path to check for a user config file, eg. AppData
- ''' The path to check for a computer config file, eg. ProgramData
+ ''' The path to check for a user config file, eg. AppData (Usually Application.UserAppDataPath or Application.LocalUserAppDataPath)
+ ''' The path to check for a computer config file, eg. ProgramData (Usually Application.CommonAppDataPath)
''' Override values from ComputerConfig with UserConfig
Public Sub New(LogConfig As LogConfig, UserConfigPath As String, ComputerConfigPath As String, Optional ForceUserConfig As Boolean = False)
_LogConfig = LogConfig
@@ -87,8 +87,8 @@ Public Class ConfigManager(Of T)
'''
''' Creates a new ConfigManager with a single (user)config path
'''
- '''
- '''
+ ''' LogConfig instance
+ ''' The path to check for a user config file, eg. AppData (Usually Application.UserAppDataPath or Application.LocalUserAppDataPath)
Public Sub New(LogConfig As LogConfig, ConfigPath As String)
MyClass.New(LogConfig, ConfigPath, ConfigPath, ForceUserConfig:=True)
End Sub
diff --git a/Modules.Language/Utils.vb b/Modules.Language/Utils.vb
index 99219905..decf8753 100644
--- a/Modules.Language/Utils.vb
+++ b/Modules.Language/Utils.vb
@@ -1,4 +1,5 @@
-'''
+Imports System.Text
+'''
''' Provides common utility functions that do not require a specific context.
'''
Public Class Utils
@@ -35,4 +36,31 @@ Public Class Utils
Return value
End If
End Function
+
+ '''
+ ''' Creates a "slug" from text that can be used as part of a valid URL.
+ ''' Invalid characters are converted to hyphens. Punctuation that Is
+ ''' perfect valid in a URL Is also converted to hyphens to keep the
+ ''' result mostly text. Steps are taken to prevent leading, trailing,
+ ''' And consecutive hyphens.
+ '''
+ ''' The string to convert
+ Public Shared Function ConvertTextToSlug(ByVal s As String) As String
+ Dim oBuilder As StringBuilder = New StringBuilder()
+ Dim oWasHyphen As Boolean = True
+
+ For Each oChar As Char In s
+
+ If Char.IsLetterOrDigit(oChar) Then
+ oBuilder.Append(Char.ToLower(oChar))
+ oWasHyphen = False
+ ElseIf Char.IsWhiteSpace(oChar) AndAlso Not oWasHyphen Then
+ oBuilder.Append("-"c)
+ oWasHyphen = True
+ End If
+ Next
+
+ If oWasHyphen AndAlso oBuilder.Length > 0 Then oBuilder.Length -= 1
+ Return oBuilder.ToString()
+ End Function
End Class
diff --git a/ZooFlow/ClassInit.vb b/ZooFlow/ClassInit.vb
index 0c3f6512..d363b6b5 100644
--- a/ZooFlow/ClassInit.vb
+++ b/ZooFlow/ClassInit.vb
@@ -39,9 +39,6 @@ Public Class ClassInit
AddHandler oInit.ProgressChanged, AddressOf ProgressChanged
AddHandler oInit.InitCompleted, AddressOf InitCompleted
- SplashScreenManager.ActivateParentOnSplashFormClosing = True
- SplashScreenManager.ShowForm(_MainForm, GetType(frmSplash), False, False)
-
oInit.Run()
End If
End Sub
diff --git a/ZooFlow/Config/ClassUIConfig.vb b/ZooFlow/Config/ClassUIConfig.vb
index 44a4d80d..43223d89 100644
--- a/ZooFlow/Config/ClassUIConfig.vb
+++ b/ZooFlow/Config/ClassUIConfig.vb
@@ -1,12 +1,8 @@
Public Class ClassUIConfig
Public Property SkinName As String = "Office 2016 Colorful"
+ Public Property FlowForm As New FlowFormConfig
- Public Property EditFormConfigs As New List(Of EditFormConfig)
-
- Public Class EditFormConfig
- Public Property SysKey As String
-
- Public Property SplitterDistance As Integer = 700
- Public Property SplitterHorizontal As Boolean = True
+ Public Class FlowFormConfig
+ Public Property Location As New Point(0, 0)
End Class
End Class
diff --git a/ZooFlow/frmAdmin.vb b/ZooFlow/frmAdmin.vb
index b2c2a1c1..020b33aa 100644
--- a/ZooFlow/frmAdmin.vb
+++ b/ZooFlow/frmAdmin.vb
@@ -28,6 +28,9 @@ Partial Public Class frmAdmin
AddHandler Init.Completed, AddressOf Init_Completed
Init.InitializeApplication()
+ ' === Show Splash Screen ===
+ SplashScreenManager.ShowForm(Me, GetType(frmSplash), False, False)
+
' === Layout and Skin ===
UserLookAndFeel.Default.SetSkinStyle(My.UIConfig.SkinName)
@@ -35,6 +38,28 @@ Partial Public Class frmAdmin
EventBus.Instance.Register(Me)
End Sub
+ Private Sub Init_Completed(sender As Object, e As EventArgs)
+ ' === Initialization Complete ===
+ Loading = False
+ SplashScreenManager.CloseForm(False)
+
+ ' === Setup Timers ===
+ AddHandler TimerRefreshData.Tick, AddressOf TimerRefreshData_Tick
+ TimerRefreshData.Enabled = True
+
+ ' === Setup Flow Form ===
+ FlowForm = New frmFlowForm(My.Application.ModulesActive)
+ FlowForm.Location = My.UIConfig.FlowForm.Location
+ FlowForm.Show()
+
+ ' === Load Data ===
+ RefreshData()
+ End Sub
+
+ Private Sub frmAdmin_Shown(sender As Object, e As EventArgs) Handles Me.Shown
+ Visible = False
+ End Sub
+
Private Sub frmMain_FormClosed(sender As Object, e As FormClosedEventArgs)
EventBus.Instance.Unregister(Me)
End Sub
@@ -58,31 +83,10 @@ Partial Public Class frmAdmin
End Select
End Sub
- Private Sub Init_Completed(sender As Object, e As EventArgs)
- ' === Initialization Complete ===
- Loading = False
- SplashScreenManager.CloseForm(False)
-
- ' === Setup Timers ===
- AddHandler TimerRefreshData.Tick, AddressOf TimerRefreshData_Tick
- TimerRefreshData.Enabled = True
-
- ' === Setup Flow Form ===
- FlowForm = New frmFlowForm(My.Application.ModulesActive)
- FlowForm.Show()
-
- ' === Load Data ===
- RefreshData()
- End Sub
-
Private Sub TimerRefreshData_Tick(sender As Object, e As EventArgs)
RefreshData()
End Sub
- Private Sub frmMain_Shown(sender As Object, e As EventArgs)
- WindowState = FormWindowState.Minimized
- End Sub
-
Private Async Sub FlowForm_ClipboardChanged(sender As Object, e As IDataObject) Handles FlowForm.ClipboardChanged
If My.Application.ClipboardWatcher.UserProfiles.Rows.Count = 0 Then
Logger.Warn("Clipboard Changed but no profiles configured!")
@@ -118,7 +122,7 @@ Partial Public Class frmAdmin
End Function)
oMatchingProfiles = oProfileFilter.ClearNotMatchedProfiles(oMatchingProfiles)
Catch ex As Exception
- MsgBox("Fehler beim Laden der Profile. Möglicherweise liegt ein Konfigurationsfehler vor.", MsgBoxStyle.Critical, Text)
+ MsgBox("Fehler beim Laden der Profile. Möglicherweise liegt ein Konfigurationsfehler vor." & vbNewLine & vbNewLine & ex.Message, MsgBoxStyle.Critical, Text)
Exit Sub
End Try
@@ -192,4 +196,6 @@ Partial Public Class frmAdmin
Logger.Error(ex)
End Try
End Sub
+
+
End Class