74 lines
No EOL
2.2 KiB
C#
74 lines
No EOL
2.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Threading;
|
|
using JD.Interfaces.Remoting;
|
|
using JD.Plugin.WPF.Module.ViewModel;
|
|
using Plume.WPF.Mvvm;
|
|
|
|
namespace JD.Plugin.WPF.Module.Views
|
|
{
|
|
public class PluginCollection : BindableBase, IEnumerable<PluginViewModel>
|
|
{
|
|
private readonly Dispatcher _dispatcher;
|
|
private PluginViewModel[] _plugins;
|
|
|
|
public PluginCollection(Dispatcher dispatcher, params IPlugin[] plugins)
|
|
{
|
|
_dispatcher = dispatcher;
|
|
ProcessInnerCollection(plugins);
|
|
}
|
|
|
|
public PluginCollection(params IPlugin[] plugins) : this(null, plugins)
|
|
{
|
|
}
|
|
|
|
private void ProcessInnerCollection(IPlugin[] plugins)
|
|
{
|
|
List<PluginViewModel> pluginViewModels = new List<PluginViewModel>(plugins.Length);
|
|
foreach (IPlugin plugin in plugins.ToArray())
|
|
{
|
|
plugin.ConnectedChanged += Plugin_ConnectedChanged;
|
|
PluginViewModel pluginvm = new PluginViewModel { IsConnected = plugin.IsConnected, Name = plugin.Name };
|
|
pluginViewModels.Add(pluginvm);
|
|
}
|
|
|
|
Plugins = pluginViewModels.ToArray();
|
|
}
|
|
|
|
public PluginViewModel[] Plugins
|
|
{
|
|
get => _plugins;
|
|
set => SetProperty(ref _plugins, value);
|
|
}
|
|
|
|
private void Plugin_ConnectedChanged(object sender, IPlugin e)
|
|
{
|
|
PluginViewModel pluginViewModel = Plugins.Single(p => p.Name == e.Name);
|
|
|
|
if (_dispatcher != null)
|
|
{
|
|
_dispatcher.Invoke(() => {
|
|
pluginViewModel.IsConnected = e.IsConnected;
|
|
});
|
|
}
|
|
else
|
|
{
|
|
pluginViewModel.IsConnected = e.IsConnected;
|
|
}
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public IEnumerator<PluginViewModel> GetEnumerator()
|
|
{
|
|
return _plugins.ToList().GetEnumerator();
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
{
|
|
return _plugins.GetEnumerator();
|
|
}
|
|
}
|
|
} |