using System.Collections.Generic; using System.Linq; using System.Windows.Controls; using JD.Interfaces.Remoting; using JD.Remoting.Services; using JD.Remoting.WPF.Actions; using JD.Remoting.WPF.Module.Actions; using JD.Remoting.WPF.Module.Settings; using JD.Remoting.WPF.View; using Plume.Icons; using Plume.Interfaces.Application; using Plume.Interfaces.Modules; using Plume.Interfaces.Settings; using Plume.Interfaces.WPF.Actions; using Plume.Interfaces.WPF.Dialog; using Plume.Interfaces.WPF.Modules; using Plume.WPF.Commands; namespace JD.Remoting.WPF { [NeededService(ServiceType = typeof(IPluginService))] public sealed class RemotingModule : IWpfModule { private IPluginService _pluginService; private RemoteStatusBarItemViewModel _remoteStatusBarItemViewModel; /// public void Dispose() { //Nothing to dispose } /// public void Setup(IModuleSetup setup) { //Nothing to setup //todo allow the app user to setup a connection based on a strategy } /// public void Initialize(IWpfModuleContext context) { context.SettingsManager.Register("Engine/Connections"); _pluginService = context.ServiceManager.GetPluginService(); InitializeActions(context); InitializeMenus(context); foreach (IPlugin plugin in _pluginService) { plugin.ConnectedChanged += Plugin_ConnectedChanged; } _remoteStatusBarItemViewModel = new RemoteStatusBarItemViewModel(context.ServiceManager, context.NotificationManager, context.ActionManager, context.SettingsManager); var statusBarItem = new RemoteStatusBarItem { DataContext = _remoteStatusBarItemViewModel }; context.StatusBarManager.AddStatusControl(statusBarItem); } private static void InitializeActions(IWpfModuleContext context) { IActionManager actionManager = context.ActionManager; actionManager.Register(); actionManager.Register(); } private void InitializeMenus(IWpfModuleContext context) { var menuManager = context.MenuManager; var actionManager = context.ActionManager; menuManager.AddMenuItem("Engine", ConnectAction.GetMenu()); menuManager.AddMenuItem("Engine", actionManager.Get()); menuManager.AddSeparator("Engine"); menuManager.AddMenuItem("Engine", actionManager.Get()); menuManager.AddSeparator("Engine"); } private void Plugin_ConnectedChanged(object sender, IPlugin plugin) { _remoteStatusBarItemViewModel.IsConnected = _pluginService.Any() && _pluginService.All(p => p.IsConnected); } } }