Modules/ZooFlow/frmMain.vb
2019-09-18 12:10:03 +02:00

199 lines
8.1 KiB
VB.net

Imports System.Threading.Tasks
Imports DevExpress.LookAndFeel
Imports DevExpress.XtraSplashScreen
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Windows
Imports DigitalData.Modules.ZooFlow
Imports DigitalData.Modules.Messaging
Imports DigitalData.Modules.ZooFlow.Params
Imports DigitalData.Products.ClipboardWatcher
Imports DigitalData.GUIs.ZooFlow.OnFlowFormStateChangedEvent.FlowFormState
Partial Public Class frmMain
Private WithEvents FlowForm As frmFlowForm
Private Init As ClassInit
Private Loading As Boolean = True
Private Logger As Logger = My.LogConfig.GetLogger
Private MatchingProfiles As List(Of ProfileData)
Public Sub New()
InitializeComponent()
End Sub
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
' === Initialization ===
Init = New ClassInit(My.LogConfig, Me)
AddHandler Init.Completed, AddressOf Init_Completed
Init.InitializeApplication()
' === Layout and Skin ===
UserLookAndFeel.Default.SetSkinStyle(My.UIConfig.SkinName)
' === Register As Event Listener ===
EventBus.Instance.Register(Me)
End Sub
Private Sub frmMain_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
EventBus.Instance.Unregister(Me)
End Sub
Public Sub OnEvent(e As OnFlowFormInteractionEvent)
Select Case e.Interaction
Case OnFlowFormInteractionEvent.FlowFormInteraction.Click
Dim oEnvironment As New Environment() With {
.User = My.Application.User,
.Modules = My.Application.Modules
}
Dim oParams As New ClipboardWatcherParams() With {
.MatchingProfiles = MatchingProfiles
}
Dim oForm As New frmMatch(My.LogConfig, oEnvironment, oParams)
oForm.Show()
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) Handles Me.Shown
Hide()
End Sub
Private Async Sub FlowForm_ClipboardChangedAsync(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!")
Exit Sub
End If
Dim oProfileFilter As ClassProfileFilter
Dim oMatchingProfiles As List(Of ProfileData)
Dim oWindow As New Window(My.LogConfig)
Dim oWindowInfo = oWindow.GetWindowInfo()
Dim oFocusedControl As Window.WindowInfo = oWindow.GetFocusedControl(Handle)
Dim oClipboardContents As String = Clipboard.GetText()
Try
oProfileFilter = New ClassProfileFilter(My.LogConfig,
My.Application.ClipboardWatcher.UserProfiles,
My.Application.ClipboardWatcher.ProfileProcesses,
My.Application.ClipboardWatcher.ProfileWindows,
My.Application.ClipboardWatcher.ProfileControls)
oMatchingProfiles = oProfileFilter.Profiles
Logger.Debug("Profiles before filtering: {0}", oMatchingProfiles.Count)
oMatchingProfiles = oProfileFilter.FilterProfilesByClipboardRegex(oMatchingProfiles, oClipboardContents)
Logger.Debug("Profiles after FilterProfilesByClipboardRegex: {0}", oMatchingProfiles.Count)
oMatchingProfiles = oProfileFilter.FilterProfilesByProcess(oMatchingProfiles, oWindowInfo.ProcessName)
Logger.Debug("Profiles after FilterProfilesByProcess: {0}", oMatchingProfiles.Count)
oMatchingProfiles = oProfileFilter.FilterWindowsByWindowTitleRegex(oMatchingProfiles, oWindowInfo.WindowTitle)
Logger.Debug("Profiles after FilterWindowsByWindowTitleRegex: {0}", oMatchingProfiles.Count)
oMatchingProfiles = oProfileFilter.FilterProfilesByFocusedControl(oMatchingProfiles, oClipboardContents, oFocusedControl.hWnd.ToString)
Logger.Debug("Profiles after FilterProfilesByFocusedControl: {0}", oMatchingProfiles.Count)
oMatchingProfiles = Await Task.Run(Function() oProfileFilter.FilterProfilesBySearchResults(oMatchingProfiles))
Logger.Debug("Profiles after FilterProfilesBySearchResults: {0}", oMatchingProfiles.Count)
oMatchingProfiles = oProfileFilter.ClearNotMatchedProfiles(oMatchingProfiles)
Logger.Debug("Profiles after ClearNotMatchedProfiles: {0}", oMatchingProfiles.Count)
oMatchingProfiles = oMatchingProfiles.ToList()
Catch ex As Exception
MsgBox("Fehler beim Laden der Profile. Möglicherweise liegt ein Konfigurationsfehler vor.", MsgBoxStyle.Critical, Text)
Exit Sub
End Try
If oMatchingProfiles.Count = 0 Then
Logger.Warn("No matching Profiles found")
Exit Sub
End If
MatchingProfiles = oMatchingProfiles
EventBus.Instance.PostEvent(New OnFlowFormStateChangedEvent(HasSearchResults))
End Sub
#Region "Notify Icon Menu"
Private Sub BeendenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BeendenToolStripMenuItem.Click
Application.Exit()
End Sub
Private Sub NotifyIconMain_DoubleClick(sender As Object, e As EventArgs) Handles NotifyIconMain.DoubleClick
ToggleVisibility()
End Sub
Private Sub AnzeigenVersteckenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AnzeigenVersteckenToolStripMenuItem.Click
ToggleVisibility()
End Sub
#End Region
Private Sub ToggleVisibility()
If Visible Then
Hide()
Else
Show()
BringToFront()
End If
End Sub
Private Sub ButtonSettings_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles ButtonSettings.ItemClick
frmSettings.ShowDialog()
End Sub
Private Sub ButtonExit_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles ButtonExit.ItemClick
End Sub
Private Sub frmMain_StyleChanged(sender As Object, e As EventArgs) Handles Me.StyleChanged
If Loading = False Then
My.UIConfig.SkinName = LookAndFeel.ActiveSkinName
My.UIConfigManager.Save()
End If
End Sub
Public Sub RefreshData()
Try
Dim oUserId As Integer = My.Application.User.UserId
Dim oSql As String = My.Queries.ClipboardWatcher.VWCW_USER_PROFILE(oUserId)
My.Application.ClipboardWatcher.UserProfiles = My.Database.GetDatatable(oSql)
If My.Application.ClipboardWatcher.UserProfiles.Rows.Count = 0 Then
MsgBox("No profiles configured for this user so far!", MsgBoxStyle.Exclamation)
Else
oSql = My.Queries.ClipboardWatcher.TBCW_PROFILE_PROCESS(oUserId)
My.Application.ClipboardWatcher.ProfileProcesses = My.Database.GetDatatable(oSql)
oSql = My.Queries.ClipboardWatcher.VWCW_PROFILE_REL_WINDOW(oUserId)
My.Application.ClipboardWatcher.ProfileWindows = My.Database.GetDatatable(oSql)
oSql = My.Queries.ClipboardWatcher.VWCW_PROFILE_REL_CONTROL(oUserId)
My.Application.ClipboardWatcher.ProfileControls = My.Database.GetDatatable(oSql)
End If
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
End Class