From 9f270d93c9d77b8412bbd77e75bdb76a624be8e8 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Mon, 30 Sep 2019 14:16:37 +0200 Subject: [PATCH] frmDocumentResultList --- ClipboardWatcher/ProfileSearches.vb | 3 + ClipboardWatcher/frmMatch.vb | 19 ++- Common/Common.vbproj | 12 ++ Common/DocumentResultConfig.vb | 6 + Common/ResultListParams.vb | 5 + Common/frmDocumentResultList.Designer.vb | 132 +++++++++++++---- Common/frmDocumentResultList.resx | 90 ++++++++++++ Common/frmDocumentResultList.vb | 178 +++++++++++++++++------ Message/EventBus.vb | 4 + Modules.Config/ConfigManager.vb | 8 +- Modules.Language/Utils.vb | 30 +++- ZooFlow/ClassInit.vb | 3 - ZooFlow/Config/ClassUIConfig.vb | 10 +- ZooFlow/frmAdmin.vb | 50 ++++--- 14 files changed, 436 insertions(+), 114 deletions(-) create mode 100644 Common/DocumentResultConfig.vb 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 + + 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) - For Each oList In _ResultLists + 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 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 BarToggleSwitchItem2_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarToggleSwitchItem2.CheckedChanged - SplitContainerControl2.Horizontal = BarToggleSwitchItem2.Checked + 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