Imports DD_Clipboard_Watcher.ClassProfileFilter Imports DD_Clipboard_Watcher.ClassConstants Imports DevExpress.XtraEditors Public Class frmProfileMatch Private PrimaryFont As New Font("Segoe UI", 12, FontStyle.Bold) Private SecondaryFont As New Font("Segoe UI", 10) Private OpenForms As New List(Of IResultForm) Private ShouldHideInitially As Boolean = False Private Enum ProfileType ANY = 0 DOCS_ONLY = 1 DATA_ONLY = 2 End Enum Private Sub frmProfileMatch_Load(sender As Object, e As EventArgs) Handles Me.Load If Not ConfigManager.Config.MatchWindowLocation.IsEmpty Then Location = ConfigManager.Config.MatchWindowLocation End If If Not ConfigManager.Config.MatchWindowSize.IsEmpty Then Size = ConfigManager.Config.MatchWindowSize End If Dim oCreatedTiles = CreateTiles() If oCreatedTiles = -1 Then Exit Sub End If If oCreatedTiles = 0 Then Logger.Warn("No Results found for ""{0}""", CURRENT_CLIPBOARD_CONTENTS) Me.Close() End If Dim oMatchString = IIf(oCreatedTiles = 1, "1 Match", $"{oCreatedTiles} Matches") Label1.Text = String.Format(Label1.Text, oMatchString, CURRENT_CLIPBOARD_CONTENTS) ' Open Result Forms directly if only one match found If oCreatedTiles = 1 Then Dim oProfile As ProfileData = CURRENT_MATCHING_PROFILES.First() OpenResultForms(oProfile.Guid, oProfile.ProfileType) ShouldHideInitially = True End If End Sub Private Sub frmProfileMatch_Shown(sender As Object, e As EventArgs) Handles Me.Shown If ShouldHideInitially Then Hide() End If End Sub Function CreateTiles() As Integer Try Dim oCreatedTiles As Integer = 0 Dim oDocumentGroup = TileControlMatch.Groups.Item("TileGroupDocuments") Dim oDataGroup = TileControlMatch.Groups.Item("TileGroupData") Dim oDataDocumentsGroup = TileControlMatch.Groups.Item("TileGroupDocumentsData") oDocumentGroup.Items.Clear() oDataGroup.Items.Clear() For Each oProfile As ProfileData In CURRENT_MATCHING_PROFILES If oProfile.ProfileType = PROFILE_TYPE_DATA_DOCS Then If oProfile.CountData > 0 And oProfile.CountDocs > 0 Then Dim oCountText = oProfile.CountData + oProfile.CountDocs Dim oItem = CreateTile(oProfile, $"{oCountText} Ergebnisse") oDataDocumentsGroup.Items.Add(oItem) oCreatedTiles += 1 End If End If If oProfile.ProfileType = PROFILE_TYPE_DATA_DOCS Or oProfile.ProfileType = PROFILE_TYPE_DOCS_ONLY Then If oProfile.CountDocs > 0 Then Dim oItem = CreateTile(oProfile, $"{oProfile.CountDocs} Dokumente") oDocumentGroup.Items.Add(oItem) oCreatedTiles += 1 End If End If If oProfile.ProfileType = PROFILE_TYPE_DATA_DOCS Or oProfile.ProfileType = PROFILE_TYPE_DATA_ONLY Then If oProfile.CountData > 0 Then Dim oItem = CreateTile(oProfile, $"{oProfile.CountData} Datensätze") oDataGroup.Items.Add(oItem) oCreatedTiles += 1 End If End If Next Return oCreatedTiles Catch ex As Exception Logger.Error(ex) MsgBox("Error while creating profile tiles!" & vbNewLine & ex.Message) Return -1 End Try End Function Private Function CreateTile(Profile As ProfileData, CountText As String) As TileItem Dim oItem As New TileItem() With {.Tag = Profile.Guid} oItem.Elements.Clear() Dim oNameElement = New TileItemElement With { .Text = Profile.Name, .TextAlignment = TileItemContentAlignment.TopLeft } oNameElement.Appearance.Normal.Font = PrimaryFont oItem.Elements.Add(oNameElement) Dim oCommentElement = New TileItemElement With { .Text = Profile.Comment, .TextAlignment = TileItemContentAlignment.MiddleLeft } oCommentElement.Appearance.Normal.Font = SecondaryFont oItem.Elements.Add(oCommentElement) Dim oCountElement = New TileItemElement With { .Text = GetCountText(Profile, CountText), .TextAlignment = TileItemContentAlignment.BottomRight } oCountElement.Appearance.Normal.Font = SecondaryFont oItem.Elements.Add(oCountElement) Return oItem End Function Private Function GetCountText(Profile As ProfileData, CountText As String) As String Dim oText As String = "No implemented" If Profile.CountData = INVALID_COUNT_SQL Then oText = "Invalid SQL!" ElseIf Profile.CountData = NO_COUNT_SQL Then oText = "No SQL!" Else oText = CountText End If If Profile.CountDocs = INVALID_COUNT_SQL Then oText = "Invalid SQL!" ElseIf Profile.CountDocs = NO_COUNT_SQL Then oText = "No SQL!" Else oText = CountText End If Return oText End Function Private Sub frmProfileMatch_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing Try ConfigManager.Config.MatchWindowSize = Size ConfigManager.Config.MatchWindowLocation = Location ConfigManager.Save() CURRENT_CLIPBOARD_CONTENTS = Nothing Catch ex As Exception Logger.Error(ex) Logger.Info("Error in Save FormLayout: " & ex.Message) End Try End Sub Private Sub TileControlMatch_ItemClick(sender As Object, e As TileItemEventArgs) Handles TileControlMatch.ItemClick Dim oItem As TileItem = e.Item Dim oProfileId As Integer = oItem.Tag Select Case oItem.Group.Name Case TileGroupData.Name OpenResultForms(oProfileId, ProfileType.DATA_ONLY) Case TileGroupDocuments.Name OpenResultForms(oProfileId, ProfileType.DOCS_ONLY) Case Else OpenResultForms(oProfileId, ProfileType.ANY) End Select Hide() End Sub Private Sub OpenResultForms(ProfileId As Integer, OpenType As ProfileType) Dim oMatchingProfiles As New List(Of ProfileData) ' TODO: Implement Show All ' Click on specific profile Dim oProfile As ProfileData = CURRENT_MATCHING_PROFILES. Where(Function(p) p.Guid = ProfileId). First() oMatchingProfiles.Add(oProfile) If OpenType = ProfileType.ANY Or OpenType = ProfileType.DOCS_ONLY Then ' Show Result Document Form Dim oForm As New frmResultDoc(Me, oMatchingProfiles) AddHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed OpenForms.Add(oForm) oForm.Show() End If If OpenType = ProfileType.ANY Or OpenType = ProfileType.DATA_ONLY Then ' Show Result Data Form Dim oForm As New frmResultSQL(Me, oMatchingProfiles) AddHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed OpenForms.Add(oForm) oForm.Show() End If End Sub Private Sub ProfileResultForm_Closed(sender As Object, e As FormClosedEventArgs) Dim oShouldOpenAgain As Boolean = False Dim oThisForm = New List(Of IResultForm) From {sender} If TypeOf sender Is frmResultDoc Or TypeOf sender Is frmResultSQL Then For Each oForm As IResultForm In OpenForms ' Determine if frmProfileMatch should be shown If oForm.ShouldReturnToMatchForm Then oShouldOpenAgain = True End If Next End If ' If frmProfileMatch should be shown, close all windows of this profile If oShouldOpenAgain Then For Each oForm As Form In OpenForms.Except(oThisForm) ' Remove the Handler to prevent a loop RemoveHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed oForm.Close() Next Show() End If End Sub Private Sub AblaufSucheAnzeigenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AblaufSucheAnzeigenToolStripMenuItem.Click frmTreeView.ShowDialog() End Sub End Class