Imports System.IO Imports System.Windows.Threading Imports Supervisor.Plugin.Interface Public Class MainWindowVM Friend m_PluginTestInfo As Integer = 764 ' Riferimento al Model della MainWindow Private m_MainWindowM As MainWindowM Friend ReadOnly Property MainWindowM As MainWindowM Get Return m_MainWindowM End Get End Property ' Riferimento al gestore delle macchine a stati Private m_FiniteStateMachineManager As FiniteStateMachineManager Friend ReadOnly Property FiniteStateMachineManager As FiniteStateMachineManager Get Return m_FiniteStateMachineManager End Get End Property ' Riferimento al gestore del della comunicazione macchine Private m_MachineManager As MachineManager Friend ReadOnly Property MachineManager As MachineManager Get Return m_MachineManager End Get End Property ' Riferimento al gestore del server Redis Private m_RedisManager As RedisManager Friend ReadOnly Property RedisManager As RedisManager Get Return m_RedisManager End Get End Property Private m_ContentPanel As Panel Public Property ContentPanel As Panel Get Return m_ContentPanel End Get Set(value As Panel) m_ContentPanel = value End Set End Property Sub New() ' Avvio l'inizializzazione della mappa passandogli il riferimento al MainWindowVM Map.BeginInit(Me) ' Creo Model della MainWindow m_MainWindowM = New MainWindowM ' creo gestore delle macchine a stati m_FiniteStateMachineManager = New FiniteStateMachineManager If GetMainPrivateProfileInt(S_REDIS, K_ENABLED, 0) = 1 Then m_RedisManager = New RedisManager End If ' aggiungo Dictionary del plugin Dim PluginDictionary As IPluginControl = GetDictionary(Of IPluginControl)("Supervisor.Plugin.FiveLakes") Application.Current.Resources.MergedDictionaries.Add(PluginDictionary) ' aggiungo MainMenu dal plugin Dim PluginMainMenu As IPluginControl = GetControlByName(Of IPluginControl)("Supervisor.Plugin.FiveLakes", "MainMenu") 'ContentPanel = PluginMainMenu ' aggiungo Project dal plugin Dim ProjectPlugin As IPluginControl = GetControlByName(Of IPluginControl)("Supervisor.Plugin.FiveLakes", "Project") ContentPanel = ProjectPlugin End Sub #Region "Plugin" Private m_Loader As MEFLoader = New MEFLoader() Private Function GetPathByName(sPluginFileName As String) As String Return MainWindowM.sDataRoot & "\Plugin\" & sPluginFileName End Function Friend Function GetControlByName(Of T)(sPluginFileName As String, sPluginTagName As String) As Panel Dim PlugInControl As Object = m_Loader.LoadByTag(Of T)(GetPathByName(sPluginFileName), sPluginTagName).FirstOrDefault() Dim PluginPanel As Panel = Nothing If PlugInControl.GetType().BaseType.FullName = GetType(Panel).FullName OrElse PlugInControl.GetType().BaseType.FullName = GetType(Grid).FullName Then PluginPanel = TryCast(PlugInControl, Panel) End If Return PluginPanel End Function Friend Function GetDictionary(Of T)(sPluginFileName As String) As ResourceDictionary Dim DictionaryControl As Object = m_Loader.LoadByTag(Of T)(GetPathByName(sPluginFileName), "Dictionary").FirstOrDefault() Dim Dictionary As ResourceDictionary = Nothing Dictionary = TryCast(DictionaryControl, ResourceDictionary) Return DictionaryControl End Function #End Region ' Plugin End Class