From 571a3fe16828876485626499b47a96fed30e3d57 Mon Sep 17 00:00:00 2001 From: Robert Beekman Date: Wed, 10 Apr 2019 16:05:19 +0200 Subject: [PATCH] Removed the rest of CS Script and removed old plugin projects --- src/Artemis.Core/Ninject/CoreModule.cs | 3 +- .../Plugins/Abstract/ProfileModule.cs | 35 +-- .../Exceptions/ArtemisPluginException.cs | 8 + .../Interfaces/ILayerTypeConfiguration.cs | 1 - .../Plugins/Interfaces/IModule.cs | 15 +- src/Artemis.Core/Plugins/Models/PluginInfo.cs | 44 +--- src/Artemis.Core/ProfileElements/Layer.cs | 2 + src/Artemis.Core/RGB.NET/DirectBitmap.cs | 48 ++-- src/Artemis.Core/RGB.NET/GraphicsDecorator.cs | 3 +- src/Artemis.Core/Services/CoreService.cs | 6 +- .../Services/Interfaces/IPluginService.cs | 8 - src/Artemis.Core/Services/PluginService.cs | 110 +++++---- src/Artemis.Core/Services/RgbService.cs | 3 +- src/Artemis.Core/app.config | 21 +- src/Artemis.Core/packages.config | 1 + .../Modules/General/GeneralView.xaml | 8 - .../Modules/General/plugin.json | 5 - src/Artemis.Plugins.BuiltIn/app.config | 108 --------- src/Artemis.Plugins.BuiltIn/packages.config | 9 - .../Artemis.Plugins.LayerTypes.Brush.csproj | 73 ++++++ .../BrushConfiguration.cs | 2 +- .../BrushLayerType.cs | 2 +- .../Properties/AssemblyInfo.cs | 10 +- .../app.config | 12 + .../packages.config | 6 + .../Artemis.Plugins.Modules.General.csproj} | 76 ++----- .../GeneralDataModel.cs | 2 +- .../GeneralModule.cs | 26 ++- .../Properties/AssemblyInfo.cs | 10 +- .../ViewModels}/GeneralViewModel.cs | 2 +- .../Views/GeneralView.xaml | 10 + .../app.config | 12 + .../packages.config | 7 + .../plugin.json | 5 + src/Artemis.Plugins/Artemis.Plugins.csproj | 157 ------------- src/Artemis.Plugins/app.config | 59 ----- src/Artemis.Plugins/packages.config | 55 ----- .../20180406175247_InitialCreate.cs | 138 ++++++------ .../Migrations/StorageContextModelSnapshot.cs | 210 +++++++++--------- src/Artemis.UI/App.config | 15 +- src/Artemis.UI/Artemis.UI.csproj | 11 +- .../Visualizers/RGBSurfaceVisualizer.cs | 2 + src/Artemis.UI/FodyWeavers.xml | 1 + src/Artemis.UI/ViewModels/RootViewModel.cs | 13 +- .../ViewModels/Settings/SettingsViewModel.cs | 5 +- src/Artemis.UI/packages.config | 3 +- src/Artemis.sln | 34 ++- 47 files changed, 550 insertions(+), 846 deletions(-) delete mode 100644 src/Artemis.Plugins.BuiltIn/Modules/General/GeneralView.xaml delete mode 100644 src/Artemis.Plugins.BuiltIn/Modules/General/plugin.json delete mode 100644 src/Artemis.Plugins.BuiltIn/app.config delete mode 100644 src/Artemis.Plugins.BuiltIn/packages.config create mode 100644 src/Artemis.Plugins.LayerTypes.Brush/Artemis.Plugins.LayerTypes.Brush.csproj rename src/{Artemis.Plugins.BuiltIn/LayerTypes/Brush => Artemis.Plugins.LayerTypes.Brush}/BrushConfiguration.cs (78%) rename src/{Artemis.Plugins.BuiltIn/LayerTypes/Brush => Artemis.Plugins.LayerTypes.Brush}/BrushLayerType.cs (93%) rename src/{Artemis.Plugins.BuiltIn => Artemis.Plugins.LayerTypes.Brush}/Properties/AssemblyInfo.cs (80%) create mode 100644 src/Artemis.Plugins.LayerTypes.Brush/app.config create mode 100644 src/Artemis.Plugins.LayerTypes.Brush/packages.config rename src/{Artemis.Plugins.BuiltIn/Artemis.Plugins.BuiltIn.csproj => Artemis.Plugins.Modules.General/Artemis.Plugins.Modules.General.csproj} (50%) rename src/{Artemis.Plugins.BuiltIn/Modules/General => Artemis.Plugins.Modules.General}/GeneralDataModel.cs (83%) rename src/{Artemis.Plugins.BuiltIn/Modules/General => Artemis.Plugins.Modules.General}/GeneralModule.cs (88%) rename src/{Artemis.Plugins => Artemis.Plugins.Modules.General}/Properties/AssemblyInfo.cs (80%) rename src/{Artemis.Plugins.BuiltIn/Modules/General => Artemis.Plugins.Modules.General/ViewModels}/GeneralViewModel.cs (80%) create mode 100644 src/Artemis.Plugins.Modules.General/Views/GeneralView.xaml create mode 100644 src/Artemis.Plugins.Modules.General/app.config create mode 100644 src/Artemis.Plugins.Modules.General/packages.config create mode 100644 src/Artemis.Plugins.Modules.General/plugin.json delete mode 100644 src/Artemis.Plugins/Artemis.Plugins.csproj delete mode 100644 src/Artemis.Plugins/app.config delete mode 100644 src/Artemis.Plugins/packages.config diff --git a/src/Artemis.Core/Ninject/CoreModule.cs b/src/Artemis.Core/Ninject/CoreModule.cs index fca497a8b..6b1c062c2 100644 --- a/src/Artemis.Core/Ninject/CoreModule.cs +++ b/src/Artemis.Core/Ninject/CoreModule.cs @@ -1,5 +1,4 @@ -using System.Linq; -using Artemis.Core.Services.Interfaces; +using Artemis.Core.Services.Interfaces; using Ninject.Extensions.Conventions; using Ninject.Modules; diff --git a/src/Artemis.Core/Plugins/Abstract/ProfileModule.cs b/src/Artemis.Core/Plugins/Abstract/ProfileModule.cs index 3e35618b6..509460501 100644 --- a/src/Artemis.Core/Plugins/Abstract/ProfileModule.cs +++ b/src/Artemis.Core/Plugins/Abstract/ProfileModule.cs @@ -3,6 +3,7 @@ using System.Drawing; using Artemis.Core.Plugins.Interfaces; using Artemis.Core.ProfileElements; using RGB.NET.Core; +using Stylet; namespace Artemis.Core.Plugins.Abstract { @@ -10,9 +11,6 @@ namespace Artemis.Core.Plugins.Abstract { public Profile ActiveProfile { get; private set; } - /// - public abstract Type ViewModelType { get; } - /// public abstract bool ExpandsMainDataModel { get; } @@ -22,20 +20,6 @@ namespace Artemis.Core.Plugins.Abstract // Load and activate the last active profile } - public void ChangeActiveProfile(Profile profile) - { - lock (this) - { - if (profile == null) - throw new ArgumentNullException(nameof(profile)); - - ActiveProfile?.Deactivate(); - - ActiveProfile = profile; - ActiveProfile.Activate(); - } - } - /// public virtual void Update(double deltaTime) { @@ -56,9 +40,26 @@ namespace Artemis.Core.Plugins.Abstract } } + /// + public abstract IScreen GetMainViewModel(); + /// public void Dispose() { } + + public void ChangeActiveProfile(Profile profile) + { + lock (this) + { + if (profile == null) + throw new ArgumentNullException(nameof(profile)); + + ActiveProfile?.Deactivate(); + + ActiveProfile = profile; + ActiveProfile.Activate(); + } + } } } \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/Exceptions/ArtemisPluginException.cs b/src/Artemis.Core/Plugins/Exceptions/ArtemisPluginException.cs index 3d0a0917b..25d8546a5 100644 --- a/src/Artemis.Core/Plugins/Exceptions/ArtemisPluginException.cs +++ b/src/Artemis.Core/Plugins/Exceptions/ArtemisPluginException.cs @@ -20,6 +20,14 @@ namespace Artemis.Core.Plugins.Exceptions PluginInfo = pluginInfo; } + public ArtemisPluginException(string message) : base(message) + { + } + + public ArtemisPluginException(string message, Exception inner) : base(message, inner) + { + } + public PluginInfo PluginInfo { get; } } } \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/Interfaces/ILayerTypeConfiguration.cs b/src/Artemis.Core/Plugins/Interfaces/ILayerTypeConfiguration.cs index 5aec9edad..6d9bb15ae 100644 --- a/src/Artemis.Core/Plugins/Interfaces/ILayerTypeConfiguration.cs +++ b/src/Artemis.Core/Plugins/Interfaces/ILayerTypeConfiguration.cs @@ -2,6 +2,5 @@ { public interface ILayerTypeConfiguration { - } } \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/Interfaces/IModule.cs b/src/Artemis.Core/Plugins/Interfaces/IModule.cs index 2458e1fff..a21baed39 100644 --- a/src/Artemis.Core/Plugins/Interfaces/IModule.cs +++ b/src/Artemis.Core/Plugins/Interfaces/IModule.cs @@ -1,6 +1,6 @@ -using System; -using System.Drawing; +using System.Drawing; using RGB.NET.Core; +using Stylet; namespace Artemis.Core.Plugins.Interfaces { @@ -10,11 +10,6 @@ namespace Artemis.Core.Plugins.Interfaces /// public interface IModule : IPlugin { - /// - /// The type of this module's view model - /// - Type ViewModelType { get; } - /// /// Wether or not this module expands upon the main data model. If set to true any data in main data model can be /// accessed by profiles in this module @@ -34,5 +29,11 @@ namespace Artemis.Core.Plugins.Interfaces /// The RGB Surface to render to /// void Render(double deltaTime, RGBSurface surface, Graphics graphics); + + /// + /// Called when the module's main view is being shown + /// + /// + IScreen GetMainViewModel(); } } \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/Models/PluginInfo.cs b/src/Artemis.Core/Plugins/Models/PluginInfo.cs index c37e1e5fd..359ed7511 100644 --- a/src/Artemis.Core/Plugins/Models/PluginInfo.cs +++ b/src/Artemis.Core/Plugins/Models/PluginInfo.cs @@ -1,21 +1,14 @@ using System; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Threading.Tasks; -using Artemis.Core.Plugins.Exceptions; +using System.Collections.Generic; using Artemis.Core.Plugins.Interfaces; using Newtonsoft.Json; -using Ninject; namespace Artemis.Core.Plugins.Models { public class PluginInfo { - private static AppDomain _appDomain; - /// - /// The plugin's GUID + /// The plugins GUID /// public Guid Guid { get; set; } @@ -28,42 +21,23 @@ namespace Artemis.Core.Plugins.Models /// The version of the plugin /// public string Version { get; set; } - + /// - /// The instantiated plugin, available after successful load + /// The main entry DLL, should contain a class implementing IPlugin /// - [JsonIgnore] - public IPlugin Plugin { get; set; } + public string Main { get; set; } /// /// Full path to the plugin's current folder /// [JsonIgnore] public string Folder { get; set; } - + /// - /// Gets the view model of the module accompanying the provided plugin info + /// A references to the types implementing IPlugin, available after successful load /// - /// The Ninject kernel to use for DI - /// - public IModuleViewModel GetModuleViewModel(IKernel kernel) - { - // Don't attempt to locate VMs for something other than a module - if (Plugin == null) - throw new ArtemisPluginException(this, "Cannot locate a view model for this plugin because it's not compiled."); - if (!(Plugin is IModule module)) - throw new ArtemisPluginException(this, "Cannot locate a view model for this plugin as it's not a module."); - - // Get the type from the module - var vmType = module.ViewModelType; - if (!typeof(IModuleViewModel).IsAssignableFrom(vmType)) - throw new ArtemisPluginException(this, "ViewModel must implement IModuleViewModel."); - - // Instantiate the ViewModel with Ninject - var vm = (IModuleViewModel) kernel.Get(vmType); - vm.PluginInfo = this; - return vm; - } + [JsonIgnore] + public List Instances { get; set; } public override string ToString() { diff --git a/src/Artemis.Core/ProfileElements/Layer.cs b/src/Artemis.Core/ProfileElements/Layer.cs index 7cd3a612a..dd519f67c 100644 --- a/src/Artemis.Core/ProfileElements/Layer.cs +++ b/src/Artemis.Core/ProfileElements/Layer.cs @@ -61,10 +61,12 @@ namespace Artemis.Core.ProfileElements public void UpdateLayerType(ILayerType layerType) { if (LayerType != null) + { lock (LayerType) { LayerType.Dispose(); } + } LayerType = layerType; } diff --git a/src/Artemis.Core/RGB.NET/DirectBitmap.cs b/src/Artemis.Core/RGB.NET/DirectBitmap.cs index f5b1bc102..40b286242 100644 --- a/src/Artemis.Core/RGB.NET/DirectBitmap.cs +++ b/src/Artemis.Core/RGB.NET/DirectBitmap.cs @@ -7,39 +7,22 @@ namespace Artemis.Core.RGB.NET { public class DirectBitmap : IDisposable { - public Bitmap Bitmap { get; private set; } - public Int32[] Bits { get; private set; } - public bool Disposed { get; private set; } - public int Height { get; private set; } - public int Width { get; private set; } - - protected GCHandle BitsHandle { get; private set; } - public DirectBitmap(int width, int height) { Width = width; Height = height; - Bits = new Int32[width * height]; + Bits = new int[width * height]; BitsHandle = GCHandle.Alloc(Bits, GCHandleType.Pinned); Bitmap = new Bitmap(width, height, width * 4, PixelFormat.Format32bppPArgb, BitsHandle.AddrOfPinnedObject()); } - public void SetPixel(int x, int y, Color colour) - { - int index = x + (y * Width); - int col = colour.ToArgb(); + public Bitmap Bitmap { get; } + public int[] Bits { get; } + public bool Disposed { get; private set; } + public int Height { get; } + public int Width { get; } - Bits[index] = col; - } - - public Color GetPixel(int x, int y) - { - int index = x + (y * Width); - int col = Bits[index]; - Color result = Color.FromArgb(col); - - return result; - } + protected GCHandle BitsHandle { get; } public void Dispose() { @@ -48,5 +31,22 @@ namespace Artemis.Core.RGB.NET Bitmap.Dispose(); BitsHandle.Free(); } + + public void SetPixel(int x, int y, Color colour) + { + var index = x + y * Width; + var col = colour.ToArgb(); + + Bits[index] = col; + } + + public Color GetPixel(int x, int y) + { + var index = x + y * Width; + var col = Bits[index]; + var result = Color.FromArgb(col); + + return result; + } } } \ No newline at end of file diff --git a/src/Artemis.Core/RGB.NET/GraphicsDecorator.cs b/src/Artemis.Core/RGB.NET/GraphicsDecorator.cs index 87ee3ce64..9a1103761 100644 --- a/src/Artemis.Core/RGB.NET/GraphicsDecorator.cs +++ b/src/Artemis.Core/RGB.NET/GraphicsDecorator.cs @@ -1,5 +1,4 @@ using System.Drawing; -using System.Linq; using RGB.NET.Core; using RGB.NET.Groups; using Color = RGB.NET.Core.Color; @@ -17,7 +16,7 @@ namespace Artemis.Core.RGB.NET // var height = ledGroup.GetLeds().Max(l => l.LedRectangle.Y + l.LedRectangle.Height); var width = 500; var height = 500; - _bitmap = new DirectBitmap((int) width, (int) height); + _bitmap = new DirectBitmap(width, height); } public Color ManipulateColor(Rectangle rectangle, BrushRenderTarget renderTarget, Color color) diff --git a/src/Artemis.Core/Services/CoreService.cs b/src/Artemis.Core/Services/CoreService.cs index 44b921b0a..874c53452 100644 --- a/src/Artemis.Core/Services/CoreService.cs +++ b/src/Artemis.Core/Services/CoreService.cs @@ -48,8 +48,10 @@ namespace Artemis.Core.Services { try { + var modules = _pluginService.Plugins.SelectMany(p => p.Instances).OfType().ToList(); + // Update all active modules - foreach (var module in _pluginService.Plugins.Select(p => p.Plugin).OfType()) + foreach (var module in modules) module.Update(args.DeltaTime); if (_rgbService.GraphicsDecorator == null) @@ -60,7 +62,7 @@ namespace Artemis.Core.Services { g.Clear(Color.Red); - foreach (var module in _pluginService.Plugins.Select(p => p.Plugin).OfType()) + foreach (var module in modules) module.Render(args.DeltaTime, _rgbService.Surface, g); } } diff --git a/src/Artemis.Core/Services/Interfaces/IPluginService.cs b/src/Artemis.Core/Services/Interfaces/IPluginService.cs index 83be0b42c..602f37cc6 100644 --- a/src/Artemis.Core/Services/Interfaces/IPluginService.cs +++ b/src/Artemis.Core/Services/Interfaces/IPluginService.cs @@ -4,7 +4,6 @@ using System.Threading.Tasks; using Artemis.Core.Events; using Artemis.Core.Plugins.Interfaces; using Artemis.Core.Plugins.Models; -using Artemis.Core.ProfileElements; namespace Artemis.Core.Services.Interfaces { @@ -25,18 +24,11 @@ namespace Artemis.Core.Services.Interfaces /// Task LoadPlugins(); - /// - /// Gets the view model of the module accompanying the provided plugin info - /// - /// The plugin info containing the module for which to load the view model - Task GetModuleViewModel(PluginInfo pluginInfo); - /// /// Occurs when a single plugin has loaded /// event EventHandler PluginLoaded; - /// /// Occurs when loading all plugins has started /// diff --git a/src/Artemis.Core/Services/PluginService.cs b/src/Artemis.Core/Services/PluginService.cs index 9b9c0b6d1..a7c825562 100644 --- a/src/Artemis.Core/Services/PluginService.cs +++ b/src/Artemis.Core/Services/PluginService.cs @@ -10,8 +10,8 @@ using Artemis.Core.Exceptions; using Artemis.Core.Plugins.Exceptions; using Artemis.Core.Plugins.Interfaces; using Artemis.Core.Plugins.Models; -using Artemis.Core.ProfileElements; using Artemis.Core.Services.Interfaces; +using Newtonsoft.Json; using Ninject; using Ninject.Extensions.ChildKernel; @@ -20,9 +20,8 @@ namespace Artemis.Core.Services public class PluginService : IPluginService { private readonly IKernel _kernel; - private IKernel _childKernel; - private AppDomain _appDomain; private readonly List _plugins; + private IKernel _childKernel; public PluginService(IKernel kernel) { @@ -44,23 +43,70 @@ namespace Artemis.Core.Services OnStartedLoadingPlugins(); - UnloadPlugins(); - - // Create a child kernel and app domain that will only contain the plugins - _childKernel = new ChildKernel(_kernel); - _appDomain = AppDomain.CreateDomain("PluginAppDomain"); - - // Load the plugin assemblies into the app domain - var directory = new DirectoryInfo(Constants.DataFolder + "plugins"); - foreach (var subDirectory in directory.EnumerateDirectories()) + await Task.Run(() => { -// _appDomain.Load() -// _plugins.Add(new PluginInfo(subDirectory.FullName)); - } + UnloadPlugins(); + + // Create a child kernel and app domain that will only contain the plugins + _childKernel = new ChildKernel(_kernel); + + // Load the plugin assemblies into the plugin context + var directory = new DirectoryInfo(Path.Combine(Constants.DataFolder, "plugins")); + foreach (var subDirectory in directory.EnumerateDirectories()) + { + try + { + // Load the metadata + var metadataFile = Path.Combine(subDirectory.FullName, "plugin.json"); + if (!File.Exists(metadataFile)) + throw new ArtemisPluginException("Couldn't find the plugins metadata file at " + metadataFile); + + // Locate the main entry + var pluginInfo = JsonConvert.DeserializeObject(File.ReadAllText(metadataFile)); + var mainFile = Path.Combine(subDirectory.FullName, pluginInfo.Main); + if (!File.Exists(mainFile)) + throw new ArtemisPluginException(pluginInfo, "Couldn't find the plugins main entry at " + mainFile); + + // Load the plugin, all types implementing IPlugin and register them with DI + var assembly = Assembly.LoadFile(mainFile); + var pluginTypes = assembly.GetTypes().Where(t => typeof(IPlugin).IsAssignableFrom(t)).ToArray(); + foreach (var pluginType in pluginTypes) + { + _childKernel.Bind(pluginType).To().InSingletonScope(); + pluginInfo.Instances.Add((IPlugin) _childKernel.Get(pluginType)); + } + + _plugins.Add(pluginInfo); + } + catch (Exception e) + { + throw new ArtemisPluginException("Failed to load plugin", e); + } + } + }); OnFinishedLoadedPlugins(); } + /// + public ILayerType GetLayerTypeByGuid(Guid layerTypeGuid) + { + var pluginInfo = _plugins.FirstOrDefault(p => p.Guid == layerTypeGuid); + if (pluginInfo == null) + return null; + + var layerType = pluginInfo.Instances.SingleOrDefault(p => p is ILayerType); + if (layerType == null) + throw new ArtemisPluginException(pluginInfo, "Plugin is expected to implement exactly one ILayerType"); + + return (ILayerType) layerType; + } + + public void Dispose() + { + UnloadPlugins(); + } + private void UnloadPlugins() { _plugins.Clear(); @@ -70,38 +116,6 @@ namespace Artemis.Core.Services _childKernel.Dispose(); _childKernel = null; } - if (_appDomain != null) - { - AppDomain.Unload(_appDomain); - _appDomain = null; - } - } - - /// - public async Task GetModuleViewModel(PluginInfo pluginInfo) - { - return await Task.Run(() => pluginInfo.GetModuleViewModel(_kernel)); - } - - /// - public ILayerType GetLayerTypeByGuid(Guid layerTypeGuid) - { - var pluginInfo = _plugins.FirstOrDefault(p => p.Guid == layerTypeGuid); - if (pluginInfo == null) - return null; - - // Layer types are instantiated per layer so lets compile and return a new instance - if (!(pluginInfo.Plugin is ILayerType)) - { - throw new ArtemisPluginException(pluginInfo, "Plugin is expected to implement ILayerType"); - } - - return (ILayerType) pluginInfo.Plugin; - } - - public void Dispose() - { - UnloadPlugins(); } #region Events @@ -114,7 +128,7 @@ namespace Artemis.Core.Services { PluginLoaded?.Invoke(this, e); } - + private void OnStartedLoadingPlugins() { LoadingPlugins = true; diff --git a/src/Artemis.Core/Services/RgbService.cs b/src/Artemis.Core/Services/RgbService.cs index 402a48ca8..45606879f 100644 --- a/src/Artemis.Core/Services/RgbService.cs +++ b/src/Artemis.Core/Services/RgbService.cs @@ -14,7 +14,7 @@ namespace Artemis.Core.Services public class RgbService : IRgbService, IDisposable { private readonly TimerUpdateTrigger _updateTrigger; - private List _loadedDevices; + private readonly List _loadedDevices; public RgbService() { @@ -44,7 +44,6 @@ namespace Artemis.Core.Services await Task.Run(() => { - // TODO SpoinkyNL 8-1-18: Keep settings into account // This one doesn't work well without ASUS devices installed // Surface.LoadDevices(AsusDeviceProvider.Instance); diff --git a/src/Artemis.Core/app.config b/src/Artemis.Core/app.config index 735ba3d2d..ec91ee1d6 100644 --- a/src/Artemis.Core/app.config +++ b/src/Artemis.Core/app.config @@ -1,4 +1,5 @@  + @@ -27,7 +28,8 @@ - + @@ -51,7 +53,8 @@ - + @@ -67,7 +70,8 @@ - + @@ -83,7 +87,8 @@ - + @@ -91,7 +96,8 @@ - + @@ -104,4 +110,7 @@ - + + + + \ No newline at end of file diff --git a/src/Artemis.Core/packages.config b/src/Artemis.Core/packages.config index 0462691bd..411ff3c70 100644 --- a/src/Artemis.Core/packages.config +++ b/src/Artemis.Core/packages.config @@ -1,4 +1,5 @@  + diff --git a/src/Artemis.Plugins.BuiltIn/Modules/General/GeneralView.xaml b/src/Artemis.Plugins.BuiltIn/Modules/General/GeneralView.xaml deleted file mode 100644 index b27e2ec37..000000000 --- a/src/Artemis.Plugins.BuiltIn/Modules/General/GeneralView.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - \ No newline at end of file diff --git a/src/Artemis.Plugins.BuiltIn/Modules/General/plugin.json b/src/Artemis.Plugins.BuiltIn/Modules/General/plugin.json deleted file mode 100644 index d70efe1e2..000000000 --- a/src/Artemis.Plugins.BuiltIn/Modules/General/plugin.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Name": "Default", - "Version": "1.0.0", - "Main": "GeneralModule.dll" -} \ No newline at end of file diff --git a/src/Artemis.Plugins.BuiltIn/app.config b/src/Artemis.Plugins.BuiltIn/app.config deleted file mode 100644 index 367494c7e..000000000 --- a/src/Artemis.Plugins.BuiltIn/app.config +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Artemis.Plugins.BuiltIn/packages.config b/src/Artemis.Plugins.BuiltIn/packages.config deleted file mode 100644 index a5b5bff49..000000000 --- a/src/Artemis.Plugins.BuiltIn/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/Artemis.Plugins.LayerTypes.Brush/Artemis.Plugins.LayerTypes.Brush.csproj b/src/Artemis.Plugins.LayerTypes.Brush/Artemis.Plugins.LayerTypes.Brush.csproj new file mode 100644 index 000000000..d2008d288 --- /dev/null +++ b/src/Artemis.Plugins.LayerTypes.Brush/Artemis.Plugins.LayerTypes.Brush.csproj @@ -0,0 +1,73 @@ + + + + + Debug + AnyCPU + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2} + Library + Properties + Artemis.Plugins.LayerTypes.Brush + Artemis.Plugins.LayerTypes.Brush + v4.6.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + ..\packages\RGB.NET.Core.0.1.22\lib\net45\RGB.NET.Core.dll + + + ..\packages\Stylet.1.1.22\lib\net45\Stylet.dll + + + + + + ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll + + + + + + + + + + + + + + + + + + {9b811f9b-86b9-4771-87af-72bae7078a36} + Artemis.Core + + + + + + + + \ No newline at end of file diff --git a/src/Artemis.Plugins.BuiltIn/LayerTypes/Brush/BrushConfiguration.cs b/src/Artemis.Plugins.LayerTypes.Brush/BrushConfiguration.cs similarity index 78% rename from src/Artemis.Plugins.BuiltIn/LayerTypes/Brush/BrushConfiguration.cs rename to src/Artemis.Plugins.LayerTypes.Brush/BrushConfiguration.cs index 5bf92678e..cd6b6c2d9 100644 --- a/src/Artemis.Plugins.BuiltIn/LayerTypes/Brush/BrushConfiguration.cs +++ b/src/Artemis.Plugins.LayerTypes.Brush/BrushConfiguration.cs @@ -1,6 +1,6 @@ using Artemis.Core.Plugins.Interfaces; -namespace Artemis.Plugins.BuiltIn.LayerTypes.Brush +namespace Artemis.Plugins.LayerTypes.Brush { public class BrushConfiguration : ILayerTypeConfiguration { diff --git a/src/Artemis.Plugins.BuiltIn/LayerTypes/Brush/BrushLayerType.cs b/src/Artemis.Plugins.LayerTypes.Brush/BrushLayerType.cs similarity index 93% rename from src/Artemis.Plugins.BuiltIn/LayerTypes/Brush/BrushLayerType.cs rename to src/Artemis.Plugins.LayerTypes.Brush/BrushLayerType.cs index 91308acbf..10a6bbc6a 100644 --- a/src/Artemis.Plugins.BuiltIn/LayerTypes/Brush/BrushLayerType.cs +++ b/src/Artemis.Plugins.LayerTypes.Brush/BrushLayerType.cs @@ -4,7 +4,7 @@ using Artemis.Core.Plugins.Interfaces; using Artemis.Core.ProfileElements; using RGB.NET.Core; -namespace Artemis.Plugins.BuiltIn.LayerTypes.Brush +namespace Artemis.Plugins.LayerTypes.Brush { public class BrushLayerType : ILayerType { diff --git a/src/Artemis.Plugins.BuiltIn/Properties/AssemblyInfo.cs b/src/Artemis.Plugins.LayerTypes.Brush/Properties/AssemblyInfo.cs similarity index 80% rename from src/Artemis.Plugins.BuiltIn/Properties/AssemblyInfo.cs rename to src/Artemis.Plugins.LayerTypes.Brush/Properties/AssemblyInfo.cs index 1cceb3def..7bdb1b642 100644 --- a/src/Artemis.Plugins.BuiltIn/Properties/AssemblyInfo.cs +++ b/src/Artemis.Plugins.LayerTypes.Brush/Properties/AssemblyInfo.cs @@ -4,12 +4,12 @@ using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("Artemis.Plugins.BuiltIn")] +[assembly: AssemblyTitle("Artemis.Plugins.LayerTypes.Brush")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Artemis.Plugins.BuiltIn")] -[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyCompany("HP Inc.")] +[assembly: AssemblyProduct("Artemis.Plugins.LayerTypes.Brush")] +[assembly: AssemblyCopyright("Copyright © HP Inc. 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -19,7 +19,7 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("106f08ae-5fe8-433e-aa65-64e5219b5fc7")] +[assembly: Guid("0f288a66-6eb0-4589-8595-e33a3a3eaea2")] // Version information for an assembly consists of the following four values: // diff --git a/src/Artemis.Plugins.LayerTypes.Brush/app.config b/src/Artemis.Plugins.LayerTypes.Brush/app.config new file mode 100644 index 000000000..8d070a7b6 --- /dev/null +++ b/src/Artemis.Plugins.LayerTypes.Brush/app.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Artemis.Plugins.LayerTypes.Brush/packages.config b/src/Artemis.Plugins.LayerTypes.Brush/packages.config new file mode 100644 index 000000000..ac354a2d0 --- /dev/null +++ b/src/Artemis.Plugins.LayerTypes.Brush/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/Artemis.Plugins.BuiltIn/Artemis.Plugins.BuiltIn.csproj b/src/Artemis.Plugins.Modules.General/Artemis.Plugins.Modules.General.csproj similarity index 50% rename from src/Artemis.Plugins.BuiltIn/Artemis.Plugins.BuiltIn.csproj rename to src/Artemis.Plugins.Modules.General/Artemis.Plugins.Modules.General.csproj index cb7b08d8d..3ab93ac6f 100644 --- a/src/Artemis.Plugins.BuiltIn/Artemis.Plugins.BuiltIn.csproj +++ b/src/Artemis.Plugins.Modules.General/Artemis.Plugins.Modules.General.csproj @@ -4,15 +4,14 @@ Debug AnyCPU - {106F08AE-5FE8-433E-AA65-64E5219B5FC7} + {E592F239-FAA0-4840-9C85-46E5867D06D5} Library Properties - Artemis.Plugins.BuiltIn - Artemis.Plugins.BuiltIn + Artemis.Plugins.Modules.General + Artemis.Plugins.Modules.General v4.6.1 512 - - + true true @@ -22,7 +21,6 @@ DEBUG;TRACE prompt 4 - 5 pdbonly @@ -32,82 +30,52 @@ prompt 4 - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - 5 - prompt - MinimumRecommendedRules.ruleset - - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - - - ..\packages\RGB.NET.Brushes.0.1.22\lib\net45\RGB.NET.Brushes.dll - ..\packages\RGB.NET.Core.0.1.22\lib\net45\RGB.NET.Core.dll - - ..\packages\RGB.NET.Decorators.0.1.22\lib\net45\RGB.NET.Decorators.dll - - - ..\packages\RGB.NET.Groups.0.1.22\lib\net45\RGB.NET.Groups.dll - ..\packages\Stylet.1.1.22\lib\net45\Stylet.dll - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll + + ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll + + + + + - - - - - + + + - - - MSBuild:Compile - Designer - - - + - {9B811F9B-86B9-4771-87AF-72BAE7078A36} + {9b811f9b-86b9-4771-87af-72bae7078a36} Artemis.Core + + + Designer + MSBuild:Compile + + - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - \ No newline at end of file diff --git a/src/Artemis.Plugins.BuiltIn/Modules/General/GeneralDataModel.cs b/src/Artemis.Plugins.Modules.General/GeneralDataModel.cs similarity index 83% rename from src/Artemis.Plugins.BuiltIn/Modules/General/GeneralDataModel.cs rename to src/Artemis.Plugins.Modules.General/GeneralDataModel.cs index 28988381a..76e09a167 100644 --- a/src/Artemis.Plugins.BuiltIn/Modules/General/GeneralDataModel.cs +++ b/src/Artemis.Plugins.Modules.General/GeneralDataModel.cs @@ -1,7 +1,7 @@ using Artemis.Core.Attributes; using Artemis.Core.Plugins.Interfaces; -namespace Artemis.Plugins.BuiltIn.Modules.General +namespace Artemis.Plugins.Modules.General { public class GeneralDataModel : IModuleDataModel { diff --git a/src/Artemis.Plugins.BuiltIn/Modules/General/GeneralModule.cs b/src/Artemis.Plugins.Modules.General/GeneralModule.cs similarity index 88% rename from src/Artemis.Plugins.BuiltIn/Modules/General/GeneralModule.cs rename to src/Artemis.Plugins.Modules.General/GeneralModule.cs index 84e962bdd..f4770ec36 100644 --- a/src/Artemis.Plugins.BuiltIn/Modules/General/GeneralModule.cs +++ b/src/Artemis.Plugins.Modules.General/GeneralModule.cs @@ -1,14 +1,15 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Drawing; using Artemis.Core; using Artemis.Core.Plugins.Interfaces; using Artemis.Core.Services.Interfaces; +using Artemis.Plugins.Modules.General.ViewModels; using RGB.NET.Core; +using Stylet; using Color = System.Drawing.Color; using Rectangle = System.Drawing.Rectangle; -namespace Artemis.Plugins.BuiltIn.Modules.General +namespace Artemis.Plugins.Modules.General { public class GeneralModule : IModule { @@ -16,6 +17,10 @@ namespace Artemis.Plugins.BuiltIn.Modules.General private readonly RGBSurface _surface; private Dictionary _colors; + public GeneralModule() + { + + } public GeneralModule(IRgbService rgbService) { _rgbService = rgbService; @@ -25,16 +30,8 @@ namespace Artemis.Plugins.BuiltIn.Modules.General _rgbService.FinishedLoadedDevices += (sender, args) => PopulateColors(); } - public Type ViewModelType - { - get { return typeof(GeneralViewModel); } - } - // True since the main data model is all this module shows - public bool ExpandsMainDataModel - { - get { return true; } - } + public bool ExpandsMainDataModel => true; public void Update(double deltaTime) { @@ -59,6 +56,11 @@ namespace Artemis.Plugins.BuiltIn.Modules.General } } + public IScreen GetMainViewModel() + { + return new GeneralViewModel(); + } + public void Dispose() { _colors = null; diff --git a/src/Artemis.Plugins/Properties/AssemblyInfo.cs b/src/Artemis.Plugins.Modules.General/Properties/AssemblyInfo.cs similarity index 80% rename from src/Artemis.Plugins/Properties/AssemblyInfo.cs rename to src/Artemis.Plugins.Modules.General/Properties/AssemblyInfo.cs index ab66f94cf..499ae7d5c 100644 --- a/src/Artemis.Plugins/Properties/AssemblyInfo.cs +++ b/src/Artemis.Plugins.Modules.General/Properties/AssemblyInfo.cs @@ -4,12 +4,12 @@ using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("Artemis.Plugins")] +[assembly: AssemblyTitle("Artemis.Plugins.Modules.General")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Artemis.Plugins")] -[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyCompany("HP Inc.")] +[assembly: AssemblyProduct("Artemis.Plugins.Modules.General")] +[assembly: AssemblyCopyright("Copyright © HP Inc. 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -19,7 +19,7 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("cd23bc5e-57f0-46ce-a007-24d031146219")] +[assembly: Guid("e592f239-faa0-4840-9c85-46e5867d06d5")] // Version information for an assembly consists of the following four values: // diff --git a/src/Artemis.Plugins.BuiltIn/Modules/General/GeneralViewModel.cs b/src/Artemis.Plugins.Modules.General/ViewModels/GeneralViewModel.cs similarity index 80% rename from src/Artemis.Plugins.BuiltIn/Modules/General/GeneralViewModel.cs rename to src/Artemis.Plugins.Modules.General/ViewModels/GeneralViewModel.cs index f3fbd9c86..3db2d3641 100644 --- a/src/Artemis.Plugins.BuiltIn/Modules/General/GeneralViewModel.cs +++ b/src/Artemis.Plugins.Modules.General/ViewModels/GeneralViewModel.cs @@ -2,7 +2,7 @@ using Artemis.Core.Plugins.Models; using Stylet; -namespace Artemis.Plugins.BuiltIn.Modules.General +namespace Artemis.Plugins.Modules.General.ViewModels { public class GeneralViewModel : Screen, IModuleViewModel { diff --git a/src/Artemis.Plugins.Modules.General/Views/GeneralView.xaml b/src/Artemis.Plugins.Modules.General/Views/GeneralView.xaml new file mode 100644 index 000000000..fcfb5103b --- /dev/null +++ b/src/Artemis.Plugins.Modules.General/Views/GeneralView.xaml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/src/Artemis.Plugins.Modules.General/app.config b/src/Artemis.Plugins.Modules.General/app.config new file mode 100644 index 000000000..8d070a7b6 --- /dev/null +++ b/src/Artemis.Plugins.Modules.General/app.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Artemis.Plugins.Modules.General/packages.config b/src/Artemis.Plugins.Modules.General/packages.config new file mode 100644 index 000000000..3bd1a62d7 --- /dev/null +++ b/src/Artemis.Plugins.Modules.General/packages.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/Artemis.Plugins.Modules.General/plugin.json b/src/Artemis.Plugins.Modules.General/plugin.json new file mode 100644 index 000000000..2b8b086c0 --- /dev/null +++ b/src/Artemis.Plugins.Modules.General/plugin.json @@ -0,0 +1,5 @@ +{ + "Name": "General module", + "Version": "1.0.0", + "Main": "Artemis.Plugins.Modules.General.dll" +} \ No newline at end of file diff --git a/src/Artemis.Plugins/Artemis.Plugins.csproj b/src/Artemis.Plugins/Artemis.Plugins.csproj deleted file mode 100644 index 5fb5dcdb4..000000000 --- a/src/Artemis.Plugins/Artemis.Plugins.csproj +++ /dev/null @@ -1,157 +0,0 @@ - - - - - Debug - AnyCPU - {CD23BC5E-57F0-46CE-A007-24D031146219} - Library - Properties - Artemis.Plugins - Artemis.Plugins - v4.6.1 - 512 - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\CS-Script.bin.3.28.0.1\lib\net46\CSScriptLibrary.dll - - - ..\packages\Microsoft.CodeAnalysis.Common.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.dll - - - ..\packages\Microsoft.CodeAnalysis.CSharp.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll - - - ..\packages\Microsoft.CodeAnalysis.CSharp.Scripting.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.Scripting.dll - - - ..\packages\Microsoft.CodeAnalysis.Scripting.Common.2.6.1\lib\netstandard1.3\Microsoft.CodeAnalysis.Scripting.dll - - - ..\packages\CS-Script.bin.3.28.0.1\lib\net46\Mono.CSharp.dll - - - ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll - - - ..\packages\Ninject.3.3.4\lib\net45\Ninject.dll - - - ..\packages\Stylet.1.1.21\lib\net45\Stylet.dll - - - - ..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll - True - - - ..\packages\System.Collections.Immutable.1.3.1\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll - True - - - - ..\packages\System.Console.4.3.0\lib\net46\System.Console.dll - - - - ..\packages\System.Diagnostics.FileVersionInfo.4.3.0\lib\net46\System.Diagnostics.FileVersionInfo.dll - - - ..\packages\System.Diagnostics.StackTrace.4.3.0\lib\net46\System.Diagnostics.StackTrace.dll - - - ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll - True - - - ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll - - - ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll - - - - ..\packages\System.Reflection.Metadata.1.4.2\lib\portable-net45+win8\System.Reflection.Metadata.dll - - - ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net46\System.Security.Cryptography.Algorithms.dll - True - - - ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll - - - ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll - - - ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net46\System.Security.Cryptography.X509Certificates.dll - True - - - ..\packages\System.Text.Encoding.CodePages.4.3.0\lib\net46\System.Text.Encoding.CodePages.dll - - - ..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll - - - ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - ..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll - - - ..\packages\System.Xml.XmlDocument.4.3.0\lib\net46\System.Xml.XmlDocument.dll - - - ..\packages\System.Xml.XPath.4.3.0\lib\net46\System.Xml.XPath.dll - - - ..\packages\System.Xml.XPath.XDocument.4.3.0\lib\net46\System.Xml.XPath.XDocument.dll - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Artemis.Plugins/app.config b/src/Artemis.Plugins/app.config deleted file mode 100644 index 794ce2453..000000000 --- a/src/Artemis.Plugins/app.config +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Artemis.Plugins/packages.config b/src/Artemis.Plugins/packages.config deleted file mode 100644 index c198b478b..000000000 --- a/src/Artemis.Plugins/packages.config +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Artemis.Storage/Migrations/20180406175247_InitialCreate.cs b/src/Artemis.Storage/Migrations/20180406175247_InitialCreate.cs index 8ff05fdf3..f27232e6d 100644 --- a/src/Artemis.Storage/Migrations/20180406175247_InitialCreate.cs +++ b/src/Artemis.Storage/Migrations/20180406175247_InitialCreate.cs @@ -1,6 +1,5 @@ -using Microsoft.EntityFrameworkCore.Migrations; -using System; -using System.Collections.Generic; +using System; +using Microsoft.EntityFrameworkCore.Migrations; namespace Artemis.Storage.Migrations { @@ -9,8 +8,8 @@ namespace Artemis.Storage.Migrations protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( - name: "Folders", - columns: table => new + "Folders", + table => new { Guid = table.Column(nullable: false), FolderEntityGuid = table.Column(nullable: true), @@ -21,28 +20,25 @@ namespace Artemis.Storage.Migrations { table.PrimaryKey("PK_Folders", x => x.Guid); table.ForeignKey( - name: "FK_Folders_Folders_FolderEntityGuid", - column: x => x.FolderEntityGuid, - principalTable: "Folders", - principalColumn: "Guid", + "FK_Folders_Folders_FolderEntityGuid", + x => x.FolderEntityGuid, + "Folders", + "Guid", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( - name: "Settings", - columns: table => new + "Settings", + table => new { Name = table.Column(nullable: false), Value = table.Column(nullable: true) }, - constraints: table => - { - table.PrimaryKey("PK_Settings", x => x.Name); - }); + constraints: table => { table.PrimaryKey("PK_Settings", x => x.Name); }); migrationBuilder.CreateTable( - name: "Layers", - columns: table => new + "Layers", + table => new { Guid = table.Column(nullable: false), FolderEntityGuid = table.Column(nullable: true), @@ -53,16 +49,16 @@ namespace Artemis.Storage.Migrations { table.PrimaryKey("PK_Layers", x => x.Guid); table.ForeignKey( - name: "FK_Layers_Folders_FolderEntityGuid", - column: x => x.FolderEntityGuid, - principalTable: "Folders", - principalColumn: "Guid", + "FK_Layers_Folders_FolderEntityGuid", + x => x.FolderEntityGuid, + "Folders", + "Guid", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( - name: "Profiles", - columns: table => new + "Profiles", + table => new { Guid = table.Column(nullable: false), Name = table.Column(nullable: true), @@ -74,16 +70,16 @@ namespace Artemis.Storage.Migrations { table.PrimaryKey("PK_Profiles", x => x.Guid); table.ForeignKey( - name: "FK_Profiles_Folders_RootFolderGuid", - column: x => x.RootFolderGuid, - principalTable: "Folders", - principalColumn: "Guid", + "FK_Profiles_Folders_RootFolderGuid", + x => x.RootFolderGuid, + "Folders", + "Guid", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( - name: "LayerSettings", - columns: table => new + "LayerSettings", + table => new { Guid = table.Column(nullable: false), LayerEntityGuid = table.Column(nullable: true), @@ -94,16 +90,16 @@ namespace Artemis.Storage.Migrations { table.PrimaryKey("PK_LayerSettings", x => x.Guid); table.ForeignKey( - name: "FK_LayerSettings_Layers_LayerEntityGuid", - column: x => x.LayerEntityGuid, - principalTable: "Layers", - principalColumn: "Guid", + "FK_LayerSettings_Layers_LayerEntityGuid", + x => x.LayerEntityGuid, + "Layers", + "Guid", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( - name: "Leds", - columns: table => new + "Leds", + table => new { Guid = table.Column(nullable: false), LayerGuid = table.Column(nullable: true), @@ -115,16 +111,16 @@ namespace Artemis.Storage.Migrations { table.PrimaryKey("PK_Leds", x => x.Guid); table.ForeignKey( - name: "FK_Leds_Layers_LayerGuid", - column: x => x.LayerGuid, - principalTable: "Layers", - principalColumn: "Guid", + "FK_Leds_Layers_LayerGuid", + x => x.LayerGuid, + "Layers", + "Guid", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( - name: "Keypoints", - columns: table => new + "Keypoints", + table => new { Guid = table.Column(nullable: false), LayerSettingEntityGuid = table.Column(nullable: true), @@ -135,66 +131,66 @@ namespace Artemis.Storage.Migrations { table.PrimaryKey("PK_Keypoints", x => x.Guid); table.ForeignKey( - name: "FK_Keypoints_LayerSettings_LayerSettingEntityGuid", - column: x => x.LayerSettingEntityGuid, - principalTable: "LayerSettings", - principalColumn: "Guid", + "FK_Keypoints_LayerSettings_LayerSettingEntityGuid", + x => x.LayerSettingEntityGuid, + "LayerSettings", + "Guid", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateIndex( - name: "IX_Folders_FolderEntityGuid", - table: "Folders", - column: "FolderEntityGuid"); + "IX_Folders_FolderEntityGuid", + "Folders", + "FolderEntityGuid"); migrationBuilder.CreateIndex( - name: "IX_Keypoints_LayerSettingEntityGuid", - table: "Keypoints", - column: "LayerSettingEntityGuid"); + "IX_Keypoints_LayerSettingEntityGuid", + "Keypoints", + "LayerSettingEntityGuid"); migrationBuilder.CreateIndex( - name: "IX_Layers_FolderEntityGuid", - table: "Layers", - column: "FolderEntityGuid"); + "IX_Layers_FolderEntityGuid", + "Layers", + "FolderEntityGuid"); migrationBuilder.CreateIndex( - name: "IX_LayerSettings_LayerEntityGuid", - table: "LayerSettings", - column: "LayerEntityGuid"); + "IX_LayerSettings_LayerEntityGuid", + "LayerSettings", + "LayerEntityGuid"); migrationBuilder.CreateIndex( - name: "IX_Leds_LayerGuid", - table: "Leds", - column: "LayerGuid"); + "IX_Leds_LayerGuid", + "Leds", + "LayerGuid"); migrationBuilder.CreateIndex( - name: "IX_Profiles_RootFolderGuid", - table: "Profiles", - column: "RootFolderGuid"); + "IX_Profiles_RootFolderGuid", + "Profiles", + "RootFolderGuid"); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( - name: "Keypoints"); + "Keypoints"); migrationBuilder.DropTable( - name: "Leds"); + "Leds"); migrationBuilder.DropTable( - name: "Profiles"); + "Profiles"); migrationBuilder.DropTable( - name: "Settings"); + "Settings"); migrationBuilder.DropTable( - name: "LayerSettings"); + "LayerSettings"); migrationBuilder.DropTable( - name: "Layers"); + "Layers"); migrationBuilder.DropTable( - name: "Folders"); + "Folders"); } } -} +} \ No newline at end of file diff --git a/src/Artemis.Storage/Migrations/StorageContextModelSnapshot.cs b/src/Artemis.Storage/Migrations/StorageContextModelSnapshot.cs index 73a5fc452..c27d9c124 100644 --- a/src/Artemis.Storage/Migrations/StorageContextModelSnapshot.cs +++ b/src/Artemis.Storage/Migrations/StorageContextModelSnapshot.cs @@ -1,17 +1,13 @@ // -using Artemis.Storage; + +using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage; -using Microsoft.EntityFrameworkCore.Storage.Internal; -using System; namespace Artemis.Storage.Migrations { [DbContext(typeof(StorageContext))] - partial class StorageContextModelSnapshot : ModelSnapshot + internal class StorageContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { @@ -20,171 +16,171 @@ namespace Artemis.Storage.Migrations .HasAnnotation("ProductVersion", "2.0.2-rtm-10011"); modelBuilder.Entity("Artemis.Storage.Entities.FolderEntity", b => - { - b.Property("Guid") - .ValueGeneratedOnAdd(); + { + b.Property("Guid") + .ValueGeneratedOnAdd(); - b.Property("FolderEntityGuid"); + b.Property("FolderEntityGuid"); - b.Property("Name"); + b.Property("Name"); - b.Property("Order"); + b.Property("Order"); - b.HasKey("Guid"); + b.HasKey("Guid"); - b.HasIndex("FolderEntityGuid"); + b.HasIndex("FolderEntityGuid"); - b.ToTable("Folders"); - }); + b.ToTable("Folders"); + }); modelBuilder.Entity("Artemis.Storage.Entities.KeypointEntity", b => - { - b.Property("Guid") - .ValueGeneratedOnAdd(); + { + b.Property("Guid") + .ValueGeneratedOnAdd(); - b.Property("LayerSettingEntityGuid"); + b.Property("LayerSettingEntityGuid"); - b.Property("Time"); + b.Property("Time"); - b.Property("Value"); + b.Property("Value"); - b.HasKey("Guid"); + b.HasKey("Guid"); - b.HasIndex("LayerSettingEntityGuid"); + b.HasIndex("LayerSettingEntityGuid"); - b.ToTable("Keypoints"); - }); + b.ToTable("Keypoints"); + }); modelBuilder.Entity("Artemis.Storage.Entities.LayerEntity", b => - { - b.Property("Guid") - .ValueGeneratedOnAdd(); + { + b.Property("Guid") + .ValueGeneratedOnAdd(); - b.Property("FolderEntityGuid"); + b.Property("FolderEntityGuid"); - b.Property("Name"); + b.Property("Name"); - b.Property("Order"); + b.Property("Order"); - b.HasKey("Guid"); + b.HasKey("Guid"); - b.HasIndex("FolderEntityGuid"); + b.HasIndex("FolderEntityGuid"); - b.ToTable("Layers"); - }); + b.ToTable("Layers"); + }); modelBuilder.Entity("Artemis.Storage.Entities.LayerSettingEntity", b => - { - b.Property("Guid") - .ValueGeneratedOnAdd(); + { + b.Property("Guid") + .ValueGeneratedOnAdd(); - b.Property("LayerEntityGuid"); + b.Property("LayerEntityGuid"); - b.Property("Name"); + b.Property("Name"); - b.Property("Value"); + b.Property("Value"); - b.HasKey("Guid"); + b.HasKey("Guid"); - b.HasIndex("LayerEntityGuid"); + b.HasIndex("LayerEntityGuid"); - b.ToTable("LayerSettings"); - }); + b.ToTable("LayerSettings"); + }); modelBuilder.Entity("Artemis.Storage.Entities.LedEntity", b => - { - b.Property("Guid") - .ValueGeneratedOnAdd(); + { + b.Property("Guid") + .ValueGeneratedOnAdd(); - b.Property("LayerGuid"); + b.Property("LayerGuid"); - b.Property("LayerId"); + b.Property("LayerId"); - b.Property("LedName"); + b.Property("LedName"); - b.Property("LimitedToDevice"); + b.Property("LimitedToDevice"); - b.HasKey("Guid"); + b.HasKey("Guid"); - b.HasIndex("LayerGuid"); + b.HasIndex("LayerGuid"); - b.ToTable("Leds"); - }); + b.ToTable("Leds"); + }); modelBuilder.Entity("Artemis.Storage.Entities.ProfileEntity", b => - { - b.Property("Guid") - .ValueGeneratedOnAdd(); + { + b.Property("Guid") + .ValueGeneratedOnAdd(); - b.Property("Name"); + b.Property("Name"); - b.Property("PluginGuid"); + b.Property("PluginGuid"); - b.Property("RootFolderGuid"); + b.Property("RootFolderGuid"); - b.Property("RootFolderId"); + b.Property("RootFolderId"); - b.HasKey("Guid"); + b.HasKey("Guid"); - b.HasIndex("RootFolderGuid"); + b.HasIndex("RootFolderGuid"); - b.ToTable("Profiles"); - }); + b.ToTable("Profiles"); + }); modelBuilder.Entity("Artemis.Storage.Entities.SettingEntity", b => - { - b.Property("Name") - .ValueGeneratedOnAdd(); + { + b.Property("Name") + .ValueGeneratedOnAdd(); - b.Property("Value"); + b.Property("Value"); - b.HasKey("Name"); + b.HasKey("Name"); - b.ToTable("Settings"); - }); + b.ToTable("Settings"); + }); modelBuilder.Entity("Artemis.Storage.Entities.FolderEntity", b => - { - b.HasOne("Artemis.Storage.Entities.FolderEntity") - .WithMany("Folders") - .HasForeignKey("FolderEntityGuid"); - }); + { + b.HasOne("Artemis.Storage.Entities.FolderEntity") + .WithMany("Folders") + .HasForeignKey("FolderEntityGuid"); + }); modelBuilder.Entity("Artemis.Storage.Entities.KeypointEntity", b => - { - b.HasOne("Artemis.Storage.Entities.LayerSettingEntity") - .WithMany("Keypoints") - .HasForeignKey("LayerSettingEntityGuid"); - }); + { + b.HasOne("Artemis.Storage.Entities.LayerSettingEntity") + .WithMany("Keypoints") + .HasForeignKey("LayerSettingEntityGuid"); + }); modelBuilder.Entity("Artemis.Storage.Entities.LayerEntity", b => - { - b.HasOne("Artemis.Storage.Entities.FolderEntity") - .WithMany("Layers") - .HasForeignKey("FolderEntityGuid"); - }); + { + b.HasOne("Artemis.Storage.Entities.FolderEntity") + .WithMany("Layers") + .HasForeignKey("FolderEntityGuid"); + }); modelBuilder.Entity("Artemis.Storage.Entities.LayerSettingEntity", b => - { - b.HasOne("Artemis.Storage.Entities.LayerEntity") - .WithMany("Settings") - .HasForeignKey("LayerEntityGuid"); - }); + { + b.HasOne("Artemis.Storage.Entities.LayerEntity") + .WithMany("Settings") + .HasForeignKey("LayerEntityGuid"); + }); modelBuilder.Entity("Artemis.Storage.Entities.LedEntity", b => - { - b.HasOne("Artemis.Storage.Entities.LayerEntity", "Layer") - .WithMany("Leds") - .HasForeignKey("LayerGuid"); - }); + { + b.HasOne("Artemis.Storage.Entities.LayerEntity", "Layer") + .WithMany("Leds") + .HasForeignKey("LayerGuid"); + }); modelBuilder.Entity("Artemis.Storage.Entities.ProfileEntity", b => - { - b.HasOne("Artemis.Storage.Entities.FolderEntity", "RootFolder") - .WithMany() - .HasForeignKey("RootFolderGuid"); - }); + { + b.HasOne("Artemis.Storage.Entities.FolderEntity", "RootFolder") + .WithMany() + .HasForeignKey("RootFolderGuid"); + }); #pragma warning restore 612, 618 } } -} +} \ No newline at end of file diff --git a/src/Artemis.UI/App.config b/src/Artemis.UI/App.config index 39dcaca51..fcbfc6adb 100644 --- a/src/Artemis.UI/App.config +++ b/src/Artemis.UI/App.config @@ -31,7 +31,8 @@ - + @@ -55,7 +56,8 @@ - + @@ -71,7 +73,8 @@ - + @@ -87,7 +90,8 @@ - + @@ -95,7 +99,8 @@ - + diff --git a/src/Artemis.UI/Artemis.UI.csproj b/src/Artemis.UI/Artemis.UI.csproj index b7d92d988..ea191cc59 100644 --- a/src/Artemis.UI/Artemis.UI.csproj +++ b/src/Artemis.UI/Artemis.UI.csproj @@ -216,10 +216,6 @@ {9b811f9b-86b9-4771-87af-72bae7078a36} Artemis.Core - - {106f08ae-5fe8-433e-aa65-64e5219b5fc7} - Artemis.Plugins.BuiltIn - @@ -236,9 +232,8 @@ - echo Copying built-in plugins... -mkdir %25ProgramData%25\Artemis\plugins -xcopy /s /y /q $(SolutionDir)Artemis.Plugins.BuiltIn\Modules %25ProgramData%25\Artemis\plugins + + @@ -246,8 +241,8 @@ xcopy /s /y /q $(SolutionDir)Artemis.Plugins.BuiltIn\Modules %25ProgramData%25\A This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + \ No newline at end of file diff --git a/src/Artemis.UI/Controls/Visualizers/RGBSurfaceVisualizer.cs b/src/Artemis.UI/Controls/Visualizers/RGBSurfaceVisualizer.cs index d05fd77c1..32c0cb364 100644 --- a/src/Artemis.UI/Controls/Visualizers/RGBSurfaceVisualizer.cs +++ b/src/Artemis.UI/Controls/Visualizers/RGBSurfaceVisualizer.cs @@ -70,8 +70,10 @@ namespace Artemis.UI.Controls.Visualizers private void RGBSurfaceOnSurfaceLayoutChanged(SurfaceLayoutChangedEventArgs args) { if (args.DeviceAdded) + { foreach (var device in args.Devices) _newDevices.Add(device); + } UpdateSurface(); } diff --git a/src/Artemis.UI/FodyWeavers.xml b/src/Artemis.UI/FodyWeavers.xml index 4e68ed1a8..ef627f96d 100644 --- a/src/Artemis.UI/FodyWeavers.xml +++ b/src/Artemis.UI/FodyWeavers.xml @@ -1,4 +1,5 @@  + \ No newline at end of file diff --git a/src/Artemis.UI/ViewModels/RootViewModel.cs b/src/Artemis.UI/ViewModels/RootViewModel.cs index f1c92210b..4b6376768 100644 --- a/src/Artemis.UI/ViewModels/RootViewModel.cs +++ b/src/Artemis.UI/ViewModels/RootViewModel.cs @@ -5,7 +5,6 @@ using System.Linq; using System.Threading.Tasks; using System.Windows.Controls; using Artemis.Core.Plugins.Interfaces; -using Artemis.Core.Plugins.Models; using Artemis.Core.Services.Interfaces; using Artemis.UI.ViewModels.Interfaces; using Artemis.UI.ViewModels.Settings; @@ -29,25 +28,25 @@ namespace Artemis.UI.ViewModels ActiveItem = _artemisViewModels.First(v => v.GetType() == typeof(HomeViewModel)); // Sync up with the plugin service - Modules = new BindableCollection(); + Modules = new BindableCollection(); LoadingPlugins = _pluginService.LoadingPlugins; _pluginService.StartedLoadingPlugins += PluginServiceOnStartedLoadingPlugins; _pluginService.FinishedLoadedPlugins += PluginServiceOnFinishedLoadedPlugins; if (!LoadingPlugins) - Modules.AddRange(_pluginService.Plugins.Where(p => p.Plugin is IModule)); + Modules.AddRange(_pluginService.Plugins.SelectMany(p => p.Instances.Where(i => i is IModule).Cast())); PropertyChanged += OnSelectedModuleChanged; PropertyChanged += OnSelectedPageChanged; } - public IObservableCollection Modules { get; set; } + public IObservableCollection Modules { get; set; } public bool MenuOpen { get; set; } public bool LoadingPlugins { get; set; } public ListBoxItem SelectedPage { get; set; } - public PluginInfo SelectedModule { get; set; } + public IModule SelectedModule { get; set; } private void PluginServiceOnStartedLoadingPlugins(object sender, EventArgs eventArgs) { @@ -59,7 +58,7 @@ namespace Artemis.UI.ViewModels private void PluginServiceOnFinishedLoadedPlugins(object sender, EventArgs eventArgs) { - Modules.AddRange(_pluginService.Plugins.Where(p => p.Plugin is IModule)); + Modules.AddRange(_pluginService.Plugins.SelectMany(p => p.Instances.Where(i => i is IModule).Cast())); SelectedModule = null; LoadingPlugins = false; @@ -71,7 +70,7 @@ namespace Artemis.UI.ViewModels return; // Create a view model for the given plugin info (which will be a module) - var viewModel = await _pluginService.GetModuleViewModel(SelectedModule); + var viewModel = await Task.Run(() => SelectedModule.GetMainViewModel()); // Tell Stylet to active the view model, the view manager will compile and show the XAML ActivateItem(viewModel); diff --git a/src/Artemis.UI/ViewModels/Settings/SettingsViewModel.cs b/src/Artemis.UI/ViewModels/Settings/SettingsViewModel.cs index 504814b7a..a7d5b61ac 100644 --- a/src/Artemis.UI/ViewModels/Settings/SettingsViewModel.cs +++ b/src/Artemis.UI/ViewModels/Settings/SettingsViewModel.cs @@ -8,8 +8,6 @@ namespace Artemis.UI.ViewModels.Settings { public class SettingsViewModel : Screen, ISettingsViewModel { - public string Title => "Settings"; - public SettingsViewModel(IRgbService rgbService) { DeviceSettingsViewModels = new List(); @@ -20,10 +18,11 @@ namespace Artemis.UI.ViewModels.Settings } public List DeviceSettingsViewModels { get; set; } + public string Title => "Settings"; private void UpdateDevices(object sender, DeviceEventArgs deviceEventArgs) { DeviceSettingsViewModels.Add(new DeviceSettingsViewModel(deviceEventArgs.Device)); } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/Artemis.UI/packages.config b/src/Artemis.UI/packages.config index 5346bf2d3..521c233ed 100644 --- a/src/Artemis.UI/packages.config +++ b/src/Artemis.UI/packages.config @@ -1,4 +1,5 @@  + @@ -11,7 +12,7 @@ - + diff --git a/src/Artemis.sln b/src/Artemis.sln index 33fc02c72..8eaffd955 100644 --- a/src/Artemis.sln +++ b/src/Artemis.sln @@ -9,7 +9,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Artemis.Storage", "Artemis. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.Core", "Artemis.Core\Artemis.Core.csproj", "{9B811F9B-86B9-4771-87AF-72BAE7078A36}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.Plugins.BuiltIn", "Artemis.Plugins.BuiltIn\Artemis.Plugins.BuiltIn.csproj", "{106F08AE-5FE8-433E-AA65-64E5219B5FC7}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{E830A02B-A7E5-4A6B-943F-76B0A542630C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.Plugins.Modules.General", "Artemis.Plugins.Modules.General\Artemis.Plugins.Modules.General.csproj", "{E592F239-FAA0-4840-9C85-46E5867D06D5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.Plugins.LayerTypes.Brush", "Artemis.Plugins.LayerTypes.Brush\Artemis.Plugins.LayerTypes.Brush.csproj", "{0F288A66-6EB0-4589-8595-E33A3A3EAEA2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -43,18 +47,30 @@ Global {9B811F9B-86B9-4771-87AF-72BAE7078A36}.Release|Any CPU.Build.0 = Release|Any CPU {9B811F9B-86B9-4771-87AF-72BAE7078A36}.Release|x64.ActiveCfg = Release|x64 {9B811F9B-86B9-4771-87AF-72BAE7078A36}.Release|x64.Build.0 = Release|x64 - {106F08AE-5FE8-433E-AA65-64E5219B5FC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {106F08AE-5FE8-433E-AA65-64E5219B5FC7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {106F08AE-5FE8-433E-AA65-64E5219B5FC7}.Debug|x64.ActiveCfg = Debug|x64 - {106F08AE-5FE8-433E-AA65-64E5219B5FC7}.Debug|x64.Build.0 = Debug|x64 - {106F08AE-5FE8-433E-AA65-64E5219B5FC7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {106F08AE-5FE8-433E-AA65-64E5219B5FC7}.Release|Any CPU.Build.0 = Release|Any CPU - {106F08AE-5FE8-433E-AA65-64E5219B5FC7}.Release|x64.ActiveCfg = Release|x64 - {106F08AE-5FE8-433E-AA65-64E5219B5FC7}.Release|x64.Build.0 = Release|x64 + {E592F239-FAA0-4840-9C85-46E5867D06D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E592F239-FAA0-4840-9C85-46E5867D06D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E592F239-FAA0-4840-9C85-46E5867D06D5}.Debug|x64.ActiveCfg = Debug|Any CPU + {E592F239-FAA0-4840-9C85-46E5867D06D5}.Debug|x64.Build.0 = Debug|Any CPU + {E592F239-FAA0-4840-9C85-46E5867D06D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E592F239-FAA0-4840-9C85-46E5867D06D5}.Release|Any CPU.Build.0 = Release|Any CPU + {E592F239-FAA0-4840-9C85-46E5867D06D5}.Release|x64.ActiveCfg = Release|Any CPU + {E592F239-FAA0-4840-9C85-46E5867D06D5}.Release|x64.Build.0 = Release|Any CPU + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2}.Debug|x64.ActiveCfg = Debug|Any CPU + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2}.Debug|x64.Build.0 = Debug|Any CPU + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2}.Release|Any CPU.Build.0 = Release|Any CPU + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2}.Release|x64.ActiveCfg = Release|Any CPU + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {E592F239-FAA0-4840-9C85-46E5867D06D5} = {E830A02B-A7E5-4A6B-943F-76B0A542630C} + {0F288A66-6EB0-4589-8595-E33A3A3EAEA2} = {E830A02B-A7E5-4A6B-943F-76B0A542630C} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C203080A-4473-4CC2-844B-F552EA43D66A} EndGlobalSection