Modules/GUIs.ZooFlow/frmAdmin.vb

203 lines
8.0 KiB
VB.net

Imports System.Threading.Tasks
Imports DevExpress.LookAndFeel
Imports DevExpress.XtraSplashScreen
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Windows
Imports DigitalData.Modules.Messaging
Imports DigitalData.Modules.ZooFlow
Imports DigitalData.Modules.ZooFlow.Params
Imports DigitalData.GUIs.ZooFlow.OnFlowFormStateChangedEvent.FlowFormState
Imports DigitalData.GUIs.ClipboardWatcher
Partial Public Class frmAdmin
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)
Private MatchTreeView As New TreeView
Public Sub New()
InitializeComponent()
End Sub
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' === Initialization ===
Init = New ClassInit(My.LogConfig, Me)
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)
' === Register As Event Listener ===
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
Public Sub OnEvent(e As OnFlowFormInteractionEvent)
Select Case e.Interaction
Case OnFlowFormInteractionEvent.FlowFormInteraction.Click
Dim oClipboardContents As String = Clipboard.GetText()
Dim oEnvironment As New Environment() With {
.User = My.Application.User,
.Modules = My.Application.Modules,
.Database = My.Database,
.Settings = My.Application.Settings
}
Dim oParams As New ClipboardWatcherParams() With {
.MatchingProfiles = MatchingProfiles,
.MatchTreeView = MatchTreeView,
.ClipboardContents = oClipboardContents
}
Dim oForm As New frmMatch(My.LogConfig, oEnvironment, oParams)
oForm.Show()
End Select
End Sub
Private Sub TimerRefreshData_Tick(sender As Object, e As EventArgs)
RefreshData()
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!")
Exit Sub
End If
Dim oProfileFilter As ProfileFilter
Dim oMatchingProfiles As List(Of ProfileData)
Dim oWindow As New Window(My.LogConfig)
Dim oWindowInfo = oWindow.GetWindowInfo()
Dim oClipboardContents As String = Clipboard.GetText()
Dim oUserState = My.Application.User
Try
oProfileFilter = New ProfileFilter(My.LogConfig,
My.Application.ClipboardWatcher.UserProfiles,
My.Application.ClipboardWatcher.ProfileProcesses,
My.Application.ClipboardWatcher.ProfileWindows,
My.Application.ClipboardWatcher.ProfileControls,
MatchTreeView)
oMatchingProfiles = oProfileFilter.Profiles
oMatchingProfiles = oProfileFilter.FilterProfilesByClipboardRegex(oMatchingProfiles, oClipboardContents)
oMatchingProfiles = oProfileFilter.FilterProfilesByProcess(oMatchingProfiles, oWindowInfo.ProcessName)
oMatchingProfiles = oProfileFilter.FilterWindowsByWindowTitleRegex(oMatchingProfiles, oWindowInfo.WindowTitle)
oMatchingProfiles = oProfileFilter.FilterProfilesByFocusedControl(oMatchingProfiles, oClipboardContents, Handle)
oMatchingProfiles = Await Task.Run(Function()
Return oProfileFilter.FilterProfilesBySearchResults(
oMatchingProfiles,
My.Database,
oUserState,
oClipboardContents)
End Function)
oMatchingProfiles = oProfileFilter.ClearNotMatchedProfiles(oMatchingProfiles)
Catch ex As Exception
MsgBox("Fehler beim Laden der Profile. Möglicherweise liegt ein Konfigurationsfehler vor." & vbNewLine & vbNewLine & ex.Message, 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 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