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