JD2022-TU1/main/tools/modules/JD.Remoting.WPF.Module/RemotingModule.cs

90 lines
3 KiB
C#

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;
/// <inheritdoc />
public void Dispose()
{
//Nothing to dispose
}
/// <inheritdoc />
public void Setup(IModuleSetup setup)
{
//Nothing to setup
//todo allow the app user to setup a connection based on a strategy
}
/// <inheritdoc />
public void Initialize(IWpfModuleContext context)
{
context.SettingsManager.Register<RemotingSettings>("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<DisconnectAction>();
actionManager.Register<ManageConnectionsAction>();
}
private void InitializeMenus(IWpfModuleContext context)
{
var menuManager = context.MenuManager;
var actionManager = context.ActionManager;
menuManager.AddMenuItem("Engine", ConnectAction.GetMenu());
menuManager.AddMenuItem("Engine", actionManager.Get<DisconnectAction>());
menuManager.AddSeparator("Engine");
menuManager.AddMenuItem("Engine", actionManager.Get<ManageConnectionsAction>());
menuManager.AddSeparator("Engine");
}
private void Plugin_ConnectedChanged(object sender, IPlugin plugin)
{
_remoteStatusBarItemViewModel.IsConnected = _pluginService.Any() && _pluginService.All(p => p.IsConnected);
}
}
}