diff --git a/src/Artemis.Core/Models/Surface/Device.cs b/src/Artemis.Core/Models/Surface/Device.cs
index 4ca88f17b..85c287cd1 100644
--- a/src/Artemis.Core/Models/Surface/Device.cs
+++ b/src/Artemis.Core/Models/Surface/Device.cs
@@ -99,9 +99,12 @@ namespace Artemis.Core.Models.Surface
(int) Math.Round(RgbDevice.Size.Height * Surface.Scale, MidpointRounding.AwayFromZero)
);
+ if (!Leds.Any())
+ return;
+
foreach (var led in Leds)
led.CalculateRenderRectangle();
-
+
var path = new GraphicsPath();
path.AddRectangles(Leds.Select(l => l.AbsoluteRenderRectangle).ToArray());
RenderPath = path;
diff --git a/src/Artemis.Core/Plugins/Abstract/Device.cs b/src/Artemis.Core/Plugins/Abstract/Device.cs
index e48bda8b7..0f2f02f59 100644
--- a/src/Artemis.Core/Plugins/Abstract/Device.cs
+++ b/src/Artemis.Core/Plugins/Abstract/Device.cs
@@ -1,4 +1,6 @@
using System;
+using System.IO;
+using Artemis.Core.Extensions;
using Artemis.Core.Plugins.Models;
using RGB.NET.Core;
@@ -16,5 +18,18 @@ namespace Artemis.Core.Plugins.Abstract
{
DeviceProvider = deviceProvider ?? throw new ArgumentNullException(nameof(deviceProvider));
}
+
+
+ protected void ResolveAbsolutePath(Type type, object sender, ResolvePathEventArgs e)
+ {
+ if (sender.GetType().IsGenericType(type))
+ {
+ // Start from the plugin directory
+ if (e.RelativePart != null && e.FileName != null)
+ e.FinalPath = Path.Combine(PluginInfo.Directory.FullName, e.RelativePart, e.FileName);
+ else if (e.RelativePath != null)
+ e.FinalPath = Path.Combine(PluginInfo.Directory.FullName, e.RelativePath);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/src/Artemis.Core/Plugins/Abstract/Module.cs b/src/Artemis.Core/Plugins/Abstract/Module.cs
index 5526dcea4..e710c3bb6 100644
--- a/src/Artemis.Core/Plugins/Abstract/Module.cs
+++ b/src/Artemis.Core/Plugins/Abstract/Module.cs
@@ -1,4 +1,5 @@
-using System.Drawing;
+using System.Collections.Generic;
+using System.Drawing;
using Artemis.Core.Models.Surface;
using Artemis.Core.Plugins.Models;
using RGB.NET.Core;
@@ -42,9 +43,9 @@ namespace Artemis.Core.Plugins.Abstract
public abstract void Render(double deltaTime, Surface surface, Graphics graphics);
///
- /// Called when the module's main view is being shown
+ /// Called when the module's view model is being show, return view models here to create tabs for them
///
///
- public abstract IScreen GetMainViewModel();
+ public abstract IEnumerable GetViewModels();
}
}
\ No newline at end of file
diff --git a/src/Artemis.Core/Plugins/Abstract/ModuleViewModel.cs b/src/Artemis.Core/Plugins/Abstract/ModuleViewModel.cs
index 559f5ed42..ead43c4e7 100644
--- a/src/Artemis.Core/Plugins/Abstract/ModuleViewModel.cs
+++ b/src/Artemis.Core/Plugins/Abstract/ModuleViewModel.cs
@@ -4,11 +4,13 @@ namespace Artemis.Core.Plugins.Abstract
{
public abstract class ModuleViewModel : Screen
{
- protected ModuleViewModel(Module module)
+ protected ModuleViewModel(Module module, string name)
{
Module = module;
+ Name = name;
}
+ public string Name { get; }
public Module Module { get; }
}
}
\ No newline at end of file
diff --git a/src/Artemis.Core/Services/CoreService.cs b/src/Artemis.Core/Services/CoreService.cs
index ca61bdc34..60d80819a 100644
--- a/src/Artemis.Core/Services/CoreService.cs
+++ b/src/Artemis.Core/Services/CoreService.cs
@@ -30,6 +30,7 @@ namespace Artemis.Core.Services
_surfaceService = surfaceService;
_rgbService.Surface.Updating += SurfaceOnUpdating;
_rgbService.Surface.Updated += SurfaceOnUpdated;
+
Task.Run(Initialize);
}
diff --git a/src/Artemis.Core/Services/Interfaces/IPluginService.cs b/src/Artemis.Core/Services/Interfaces/IPluginService.cs
index af6b27c5e..c50bec069 100644
--- a/src/Artemis.Core/Services/Interfaces/IPluginService.cs
+++ b/src/Artemis.Core/Services/Interfaces/IPluginService.cs
@@ -69,8 +69,20 @@ namespace Artemis.Core.Services.Interfaces
/// Returns a list of plug instances of type
List GetPluginsOfType() where T : Plugin;
+ Plugin GetDevicePlugin(IRGBDevice device);
+
#region Events
+ ///
+ /// Occurs when built-in plugins are being loaded
+ ///
+ event EventHandler CopyingBuildInPlugins;
+
+ ///
+ /// Occurs when a plugin has started loading
+ ///
+ event EventHandler PluginLoading;
+
///
/// Occurs when a plugin has loaded
///
@@ -92,7 +104,5 @@ namespace Artemis.Core.Services.Interfaces
event EventHandler PluginDisabled;
#endregion
-
- Plugin GetDevicePlugin(IRGBDevice device);
}
}
\ No newline at end of file
diff --git a/src/Artemis.Core/Services/PluginService.cs b/src/Artemis.Core/Services/PluginService.cs
index bce9a577b..ec4a6e3ee 100644
--- a/src/Artemis.Core/Services/PluginService.cs
+++ b/src/Artemis.Core/Services/PluginService.cs
@@ -15,6 +15,7 @@ using Ninject;
using Ninject.Extensions.ChildKernel;
using Ninject.Parameters;
using RGB.NET.Core;
+using Serilog;
namespace Artemis.Core.Services
{
@@ -24,12 +25,14 @@ namespace Artemis.Core.Services
public class PluginService : IPluginService
{
private readonly IKernel _kernel;
+ private readonly ILogger _logger;
private readonly List _plugins;
private IKernel _childKernel;
- internal PluginService(IKernel kernel)
+ internal PluginService(IKernel kernel, ILogger logger)
{
_kernel = kernel;
+ _logger = logger;
_plugins = new List();
// Ensure the plugins directory exists
@@ -43,11 +46,12 @@ namespace Artemis.Core.Services
///
public void CopyBuiltInPlugins()
{
+ OnCopyingBuildInPlugins();
var pluginDirectory = new DirectoryInfo(Path.Combine(Constants.DataFolder, "plugins"));
// Iterate built-in plugins
- var varBuiltInPluginDirectory = new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), "Plugins"));
- foreach (var subDirectory in varBuiltInPluginDirectory.EnumerateDirectories())
+ var builtInPluginDirectory = new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), "Plugins"));
+ foreach (var subDirectory in builtInPluginDirectory.EnumerateDirectories())
{
// Load the metadata
var builtInMetadataFile = Path.Combine(subDirectory.FullName, "plugin.json");
@@ -113,23 +117,33 @@ namespace Artemis.Core.Services
// 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);
+ {
+ _logger.Warning(new ArtemisPluginException("Couldn't find the plugins metadata file at " + metadataFile), "Plugin exception");
+ }
// Locate the main entry
var pluginInfo = JsonConvert.DeserializeObject(File.ReadAllText(metadataFile));
pluginInfo.Directory = subDirectory;
+ OnPluginLoading(new PluginEventArgs(pluginInfo));
LoadPlugin(pluginInfo);
}
catch (Exception e)
{
- throw new ArtemisPluginException("Failed to load plugin", e);
+ _logger.Warning(new ArtemisPluginException("Failed to load plugin", e), "Plugin exception");
}
}
// Activate plugins after they are all loaded
foreach (var pluginInfo in _plugins.Where(p => p.Enabled))
{
- pluginInfo.Instance.EnablePlugin();
+ try
+ {
+ pluginInfo.Instance.EnablePlugin();
+ }
+ catch (Exception e)
+ {
+ _logger.Warning(new ArtemisPluginException(pluginInfo, "Failed to load enable plugin", e), "Plugin exception");
+ }
OnPluginEnabled(new PluginEventArgs(pluginInfo));
}
@@ -307,11 +321,23 @@ namespace Artemis.Core.Services
#region Events
+ public event EventHandler CopyingBuildInPlugins;
+ public event EventHandler PluginLoading;
public event EventHandler PluginLoaded;
public event EventHandler PluginUnloaded;
public event EventHandler PluginEnabled;
public event EventHandler PluginDisabled;
+ protected virtual void OnCopyingBuildInPlugins()
+ {
+ CopyingBuildInPlugins?.Invoke(this, EventArgs.Empty);
+ }
+
+ protected virtual void OnPluginLoading(PluginEventArgs e)
+ {
+ PluginLoading?.Invoke(this, e);
+ }
+
protected virtual void OnPluginLoaded(PluginEventArgs e)
{
PluginLoaded?.Invoke(this, e);
diff --git a/src/Artemis.Plugins.Devices.Corsair/CorsairDevice.cs b/src/Artemis.Plugins.Devices.Corsair/CorsairDevice.cs
index 98e4b0272..610b1233c 100644
--- a/src/Artemis.Plugins.Devices.Corsair/CorsairDevice.cs
+++ b/src/Artemis.Plugins.Devices.Corsair/CorsairDevice.cs
@@ -20,24 +20,12 @@ namespace Artemis.Plugins.Devices.Corsair
public override void EnablePlugin()
{
- PathHelper.ResolvingAbsolutePath += ResolveCorsairPath;
+ PathHelper.ResolvingAbsolutePath += (sender, args) => ResolveAbsolutePath(typeof(CorsairRGBDevice<>), sender, args);
CorsairDeviceProvider.PossibleX64NativePaths.Add(Path.Combine(PluginInfo.Directory.FullName, "x64", "CUESDK.dll"));
CorsairDeviceProvider.PossibleX86NativePaths.Add(Path.Combine(PluginInfo.Directory.FullName, "x86", "CUESDK.dll"));
_rgbService.AddDeviceProvider(DeviceProvider);
}
-
- private void ResolveCorsairPath(object sender, ResolvePathEventArgs e)
- {
- if (sender.GetType().IsGenericType(typeof(CorsairRGBDevice<>)))
- {
- // Start from the plugin directory
- if (e.RelativePart != null && e.FileName != null)
- e.FinalPath = Path.Combine(PluginInfo.Directory.FullName, e.RelativePart, e.FileName);
- else if (e.RelativePath != null)
- e.FinalPath = Path.Combine(PluginInfo.Directory.FullName, e.RelativePath);
- }
- }
-
+
public override void DisablePlugin()
{
// TODO: Remove the device provider from the surface
diff --git a/src/Artemis.Plugins.Devices.Logitech/Artemis.Plugins.Devices.Logitech.csproj b/src/Artemis.Plugins.Devices.Logitech/Artemis.Plugins.Devices.Logitech.csproj
new file mode 100644
index 000000000..8bf88eab9
--- /dev/null
+++ b/src/Artemis.Plugins.Devices.Logitech/Artemis.Plugins.Devices.Logitech.csproj
@@ -0,0 +1,80 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D}
+ Library
+ Properties
+ Artemis.Plugins.Devices.Logitech
+ Artemis.Plugins.Devices.Logitech
+ v4.7.2
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\..\..\RGB.NET\bin\net45\RGB.NET.Core.dll
+
+
+ ..\..\..\RGB.NET\bin\net45\RGB.NET.Devices.Logitech.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {9B811F9B-86B9-4771-87AF-72BAE7078A36}
+ Artemis.Core
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
+ PreserveNewest
+
+
+
+
+ echo Copying resources to plugin output directory
+XCOPY "$(ProjectDir)Images" "$(TargetDir)Images" /s /q /i /y
+XCOPY "$(ProjectDir)Layouts" "$(TargetDir)Layouts" /s /q /i /y
+echo Copying plugin to Artemis.UI output directory
+XCOPY "$(TargetDir.TrimEnd('\'))" "$(SolutionDir)\Artemis.UI\$(OutDir)Plugins\$(ProjectName)" /s /q /i /y
+
+
\ No newline at end of file
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/G910.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/G910.png
new file mode 100644
index 000000000..dd4220451
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/G910.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/0_Equals_CurlyBracketRight.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/0_Equals_CurlyBracketRight.png
new file mode 100644
index 000000000..e8afa3e2a
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/0_Equals_CurlyBracketRight.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/1_ExclamationMark.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/1_ExclamationMark.png
new file mode 100644
index 000000000..1beb4e4c6
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/1_ExclamationMark.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/2_QuotationMark_Exponent2.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/2_QuotationMark_Exponent2.png
new file mode 100644
index 000000000..e424ed93e
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/2_QuotationMark_Exponent2.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/3_SectionSign_Exponent3.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/3_SectionSign_Exponent3.png
new file mode 100644
index 000000000..0611817fb
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/3_SectionSign_Exponent3.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/4_Dollar.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/4_Dollar.png
new file mode 100644
index 000000000..1c5c7c5ea
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/4_Dollar.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/5_Percent.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/5_Percent.png
new file mode 100644
index 000000000..42632546b
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/5_Percent.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/6_Ampersand.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/6_Ampersand.png
new file mode 100644
index 000000000..b5af4e71a
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/6_Ampersand.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/7_Slash_CurlyBracketLeft.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/7_Slash_CurlyBracketLeft.png
new file mode 100644
index 000000000..73a3a4691
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/7_Slash_CurlyBracketLeft.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/8_BracketLeft_SquareBracketLeft.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/8_BracketLeft_SquareBracketLeft.png
new file mode 100644
index 000000000..e9d9352e4
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/8_BracketLeft_SquareBracketLeft.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/9_BracketRight_SquareBracketRight.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/9_BracketRight_SquareBracketRight.png
new file mode 100644
index 000000000..638f59957
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/9_BracketRight_SquareBracketRight.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/A.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/A.png
new file mode 100644
index 000000000..925c71c45
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/A.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AE.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AE.png
new file mode 100644
index 000000000..5714c5bb9
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AE.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AccentGrave_AccentAcute.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AccentGrave_AccentAcute.png
new file mode 100644
index 000000000..2516065dd
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AccentGrave_AccentAcute.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Alt.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Alt.png
new file mode 100644
index 000000000..864737ae6
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Alt.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AltGr.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AltGr.png
new file mode 100644
index 000000000..dfc4b37f0
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/AltGr.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Asterisk.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Asterisk.png
new file mode 100644
index 000000000..1d8608b68
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Asterisk.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/B.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/B.png
new file mode 100644
index 000000000..296c37319
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/B.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Backspace.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Backspace.png
new file mode 100644
index 000000000..5d24401b7
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Backspace.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildDown.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildDown.png
new file mode 100644
index 000000000..90de4fb36
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildDown.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildUp.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildUp.png
new file mode 100644
index 000000000..31c1e229b
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/BildUp.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/C.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/C.png
new file mode 100644
index 000000000..3eb305ed3
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/C.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CapsLockA.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CapsLockA.png
new file mode 100644
index 000000000..51add26c8
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CapsLockA.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretDown.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretDown.png
new file mode 100644
index 000000000..570394938
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretDown.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretLeft.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretLeft.png
new file mode 100644
index 000000000..553e6e0ec
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretLeft.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretRight.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretRight.png
new file mode 100644
index 000000000..2e067445c
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretRight.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretUp.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretUp.png
new file mode 100644
index 000000000..3d72c3807
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/CaretUp.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Circumflex_Degree.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Circumflex_Degree.png
new file mode 100644
index 000000000..4e1727508
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Circumflex_Degree.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Entf.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Entf.png
new file mode 100644
index 000000000..9659d8938
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Entf.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Semicolon.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Semicolon.png
new file mode 100644
index 000000000..ff4f2056d
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Comma_Semicolon.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/D.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/D.png
new file mode 100644
index 000000000..ec7475ea8
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/D.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Dot_Colon.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Dot_Colon.png
new file mode 100644
index 000000000..4ca7ad577
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Dot_Colon.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Drucken.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Drucken.png
new file mode 100644
index 000000000..dd20a5e4e
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Drucken.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/E_Euro.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/E_Euro.png
new file mode 100644
index 000000000..7f27c30c8
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/E_Euro.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Einfg.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Einfg.png
new file mode 100644
index 000000000..fdcfeee92
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Einfg.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Ende.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Ende.png
new file mode 100644
index 000000000..8433a3308
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Ende.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Enter.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Enter.png
new file mode 100644
index 000000000..155018330
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Enter.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Entf.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Entf.png
new file mode 100644
index 000000000..d6e9deb44
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Entf.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Escape.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Escape.png
new file mode 100644
index 000000000..741b24c15
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Escape.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F.png
new file mode 100644
index 000000000..fa20fc1c3
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F1.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F1.png
new file mode 100644
index 000000000..37495c1ad
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F1.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F10.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F10.png
new file mode 100644
index 000000000..fa18ec638
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F10.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F11.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F11.png
new file mode 100644
index 000000000..af3aa8a07
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F11.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F12.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F12.png
new file mode 100644
index 000000000..f269431dc
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F12.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F2.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F2.png
new file mode 100644
index 000000000..b2d82117a
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F2.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F3.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F3.png
new file mode 100644
index 000000000..31962762f
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F3.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F4.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F4.png
new file mode 100644
index 000000000..849a49f82
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F4.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F5.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F5.png
new file mode 100644
index 000000000..1251a801d
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F5.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F6.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F6.png
new file mode 100644
index 000000000..ef3137cc9
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F6.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F7.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F7.png
new file mode 100644
index 000000000..56971fb60
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F7.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F8.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F8.png
new file mode 100644
index 000000000..8af4c3ec6
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F8.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F9.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F9.png
new file mode 100644
index 000000000..44748151e
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/F9.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G.png
new file mode 100644
index 000000000..c57c3edee
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G1.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G1.png
new file mode 100644
index 000000000..2e00a8e11
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G1.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G2.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G2.png
new file mode 100644
index 000000000..f8d3a3322
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G2.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G3.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G3.png
new file mode 100644
index 000000000..9ddb3282e
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G3.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G4.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G4.png
new file mode 100644
index 000000000..a79a2e929
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G4.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G5.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G5.png
new file mode 100644
index 000000000..e7bb655e9
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G5.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G6.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G6.png
new file mode 100644
index 000000000..5d569e843
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G6.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G7.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G7.png
new file mode 100644
index 000000000..4858d4766
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G7.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G8.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G8.png
new file mode 100644
index 000000000..de667d2c3
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G8.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G9.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G9.png
new file mode 100644
index 000000000..5988127f5
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/G9.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/H.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/H.png
new file mode 100644
index 000000000..3a62b3031
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/H.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hash_Apostrophe.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hash_Apostrophe.png
new file mode 100644
index 000000000..1d25a9de6
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hash_Apostrophe.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hyphen_Underscore.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hyphen_Underscore.png
new file mode 100644
index 000000000..754df53c3
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Hyphen_Underscore.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/I.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/I.png
new file mode 100644
index 000000000..78fecd81d
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/I.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/J.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/J.png
new file mode 100644
index 000000000..072227dac
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/J.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/K.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/K.png
new file mode 100644
index 000000000..fb572cc11
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/K.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/L.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/L.png
new file mode 100644
index 000000000..8d878c81b
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/L.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/LessThan_GreaterThan_Pipe.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/LessThan_GreaterThan_Pipe.png
new file mode 100644
index 000000000..eefd2ac26
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/LessThan_GreaterThan_Pipe.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/M_Mu.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/M_Mu.png
new file mode 100644
index 000000000..7d1a93b66
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/M_Mu.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Menu.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Menu.png
new file mode 100644
index 000000000..63edb4bd9
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Menu.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Minus.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Minus.png
new file mode 100644
index 000000000..7e87e5cea
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Minus.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/N.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/N.png
new file mode 100644
index 000000000..9e9955309
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/N.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num.png
new file mode 100644
index 000000000..ee26594d5
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num0_Einfg.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num0_Einfg.png
new file mode 100644
index 000000000..45d8fe622
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num0_Einfg.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num1_Ende.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num1_Ende.png
new file mode 100644
index 000000000..1c7637260
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num1_Ende.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num2_ArrowDown.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num2_ArrowDown.png
new file mode 100644
index 000000000..de979d14b
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num2_ArrowDown.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num3_BildDown.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num3_BildDown.png
new file mode 100644
index 000000000..2229b9679
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num3_BildDown.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num4_ArrowLeft.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num4_ArrowLeft.png
new file mode 100644
index 000000000..6ffa5d564
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num4_ArrowLeft.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num5.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num5.png
new file mode 100644
index 000000000..2cd2843c0
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num5.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num6_ArrowRight.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num6_ArrowRight.png
new file mode 100644
index 000000000..2e2eaa7ad
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num6_ArrowRight.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num7_Pos1.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num7_Pos1.png
new file mode 100644
index 000000000..b523d9bfb
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num7_Pos1.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num8_ArrowUp.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num8_ArrowUp.png
new file mode 100644
index 000000000..ad683d717
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num8_ArrowUp.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num9_BildUp.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num9_BildUp.png
new file mode 100644
index 000000000..f41195d31
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Num9_BildUp.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumEnter.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumEnter.png
new file mode 100644
index 000000000..e52f4e65c
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumEnter.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumPlus.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumPlus.png
new file mode 100644
index 000000000..db412dc53
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/NumPlus.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/O.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/O.png
new file mode 100644
index 000000000..b9c8cef66
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/O.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/OE.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/OE.png
new file mode 100644
index 000000000..f5b05a173
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/OE.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/P.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/P.png
new file mode 100644
index 000000000..5c918f9ff
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/P.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/PauseUntbr.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/PauseUntbr.png
new file mode 100644
index 000000000..efc9f3959
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/PauseUntbr.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Plus_Asterisk_Tilde.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Plus_Asterisk_Tilde.png
new file mode 100644
index 000000000..b072a01a6
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Plus_Asterisk_Tilde.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Pos1.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Pos1.png
new file mode 100644
index 000000000..bf024681e
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Pos1.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Q_At.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Q_At.png
new file mode 100644
index 000000000..365b98723
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Q_At.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/QuestionMark_SharpS_Backslash.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/QuestionMark_SharpS_Backslash.png
new file mode 100644
index 000000000..91d17bf98
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/QuestionMark_SharpS_Backslash.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/R.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/R.png
new file mode 100644
index 000000000..1cdbf0dfa
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/R.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Rollen.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Rollen.png
new file mode 100644
index 000000000..f3696df34
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Rollen.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/S.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/S.png
new file mode 100644
index 000000000..919121ddb
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/S.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Shift.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Shift.png
new file mode 100644
index 000000000..9ac730f1c
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Shift.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/ShiftBig.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/ShiftBig.png
new file mode 100644
index 000000000..f5ea3126a
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/ShiftBig.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Slash.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Slash.png
new file mode 100644
index 000000000..13609b386
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Slash.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Space.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Space.png
new file mode 100644
index 000000000..6c09dcd09
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Space.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Strg.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Strg.png
new file mode 100644
index 000000000..d3761c87a
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Strg.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/T.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/T.png
new file mode 100644
index 000000000..00328f2b8
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/T.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Tab.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Tab.png
new file mode 100644
index 000000000..c52c503f6
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Tab.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/U.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/U.png
new file mode 100644
index 000000000..c015e3bf4
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/U.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/UE.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/UE.png
new file mode 100644
index 000000000..8d51805f8
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/UE.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/V.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/V.png
new file mode 100644
index 000000000..0155f454f
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/V.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/W.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/W.png
new file mode 100644
index 000000000..b99c2da94
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/W.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Windows.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Windows.png
new file mode 100644
index 000000000..68198cdbf
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Windows.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/X.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/X.png
new file mode 100644
index 000000000..1032b2367
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/X.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Y.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Y.png
new file mode 100644
index 000000000..9c6632d8b
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Y.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Z.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Z.png
new file mode 100644
index 000000000..a05a3ac3b
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Keyboards/Raptor_Keys/Z.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Mice/G403.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Mice/G403.png
new file mode 100644
index 000000000..4b0e6c722
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/Mice/G403.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/empty.png b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/empty.png
new file mode 100644
index 000000000..af367b99a
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/Images/Logitech/empty.png differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/G610/UK.xml b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/G610/UK.xml
new file mode 100644
index 000000000..72023df7a
--- /dev/null
+++ b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/G610/UK.xml
@@ -0,0 +1,226 @@
+
+
+ Logitech G610 - Physical UK
+ Physical UK-Layout of Logitech G610 (Logical: ???)
+ Darth Affe
+ Keyboard
+ Key
+ Logitech
+ G610
+ 442
+ 152
+ Images\Logitech\Keyboards
+
+
+
+
+ 5
+ 28
+
+
+
+ +12.667
+
+
+
+
+
+
+ +12.667
+
+
+
+
+
+
+ +12.667
+
+
+
+
+
+
+ +6.75
+
+
+
+
+
+
+ 5
+ 52
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+ +6.75
+
+
+
+
+
+ +6.75
+
+
+
+
+
+
+
+ 5
+ +
+ 1.5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ M0,0 L0,0.5 L0.16666666666,0.5 L0.16666666666,1 L1,1 L1,0 Z
+ 1.5
+ 2
+
+
+
+ +6.75
+
+
+
+
+
+ +6.75
+
+
+
+
+ 2
+
+
+
+
+ 5
+ ~
+ 1.75
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +94.25
+
+
+
+
+
+
+ 5
+ +
+ 1.25
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2.75
+
+
+
+ +25.75
+
+
+
+ +25.75
+
+
+
+
+ 2
+
+
+
+
+ 5
+ ~
+ 1.5
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 5.75
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 1.5
+
+
+
+ +6.75
+
+
+
+
+
+ +6.75
+ 2
+
+
+
+
+ M 0.43535,0.91509 c -0.083,-0.013 -0.1809,-0.0541 -0.24123,-0.11683 -0.21672,-0.2247 -0.10831,-0.63995 0.19645,-0.71442 0.044,-0.0108 0.44173,-0.0156 0.47505,-0.006 0.0632,0.0184 0.0708,0.15184 0.0119,0.18175 -0.0174,0.009 -0.0369,0.009 -0.21797,0.009 -0.23755,0 -0.25559,-0.002 -0.3144,0.067 -0.14073,0.16404 -0.0357,0.36697 0.16357,0.40076 0.0569,0.01 0.0835,0.0391 0.0831,0.0846 -4.5e-4,0.0636 -0.0621,0.10873 -0.15647,0.0941 z m 0.36491,6.7e-4 c -0.0366,-0.0138 -0.0539,-0.0325 -0.0567,-0.0973 -0.006,-0.14226 -0.0741,-0.23758 -0.21563,-0.24355 -0.0562,-0.003 -0.0629,-0.004 -0.0811,-0.0233 -0.0344,-0.0359 -0.021,-0.11984 0.0238,-0.14402 0.0129,-0.007 0.0145,-0.007 0.19631,-0.007 0.25897,0 0.25297,0.005 0.25151,0.27271 -8e-4,0.17441 -8e-4,0.19394 -0.0107,0.20972 -0.0183,0.0297 -0.0769,0.0443 -0.10753,0.0326 Z
+ 5
+ 5
+
+
+
\ No newline at end of file
diff --git a/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/G810/UK.xml b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/G810/UK.xml
new file mode 100644
index 000000000..c2e38a4e4
--- /dev/null
+++ b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/G810/UK.xml
@@ -0,0 +1,226 @@
+
+
+ Logitech G810 - Physical UK
+ Physical UK-Layout of Logitech G810 (Logical: ???)
+ Darth Affe
+ Keyboard
+ Key
+ Logitech
+ G810
+ 442
+ 152
+ Images\Logitech\Keyboards
+
+
+
+
+ 5
+ 28
+
+
+
+ +12.667
+
+
+
+
+
+
+ +12.667
+
+
+
+
+
+
+ +12.667
+
+
+
+
+
+
+ +6.75
+
+
+
+
+
+
+ 5
+ 52
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+ +6.75
+
+
+
+
+
+ +6.75
+
+
+
+
+
+
+
+ 5
+ +
+ 1.5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ M0,0 L0,0.5 L0.16666666666,0.5 L0.16666666666,1 L1,1 L1,0 Z
+ 1.5
+ 2
+
+
+
+ +6.75
+
+
+
+
+
+ +6.75
+
+
+
+
+ 2
+
+
+
+
+ 5
+ ~
+ 1.75
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +94.25
+
+
+
+
+
+
+ 5
+ +
+ 1.25
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2.75
+
+
+
+ +25.75
+
+
+
+ +25.75
+
+
+
+
+ 2
+
+
+
+
+ 5
+ ~
+ 1.5
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 5.75
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 1.5
+
+
+
+ +6.75
+
+
+
+
+
+ +6.75
+ 2
+
+
+
+
+ M 0.43535,0.91509 c -0.083,-0.013 -0.1809,-0.0541 -0.24123,-0.11683 -0.21672,-0.2247 -0.10831,-0.63995 0.19645,-0.71442 0.044,-0.0108 0.44173,-0.0156 0.47505,-0.006 0.0632,0.0184 0.0708,0.15184 0.0119,0.18175 -0.0174,0.009 -0.0369,0.009 -0.21797,0.009 -0.23755,0 -0.25559,-0.002 -0.3144,0.067 -0.14073,0.16404 -0.0357,0.36697 0.16357,0.40076 0.0569,0.01 0.0835,0.0391 0.0831,0.0846 -4.5e-4,0.0636 -0.0621,0.10873 -0.15647,0.0941 z m 0.36491,6.7e-4 c -0.0366,-0.0138 -0.0539,-0.0325 -0.0567,-0.0973 -0.006,-0.14226 -0.0741,-0.23758 -0.21563,-0.24355 -0.0562,-0.003 -0.0629,-0.004 -0.0811,-0.0233 -0.0344,-0.0359 -0.021,-0.11984 0.0238,-0.14402 0.0129,-0.007 0.0145,-0.007 0.19631,-0.007 0.25897,0 0.25297,0.005 0.25151,0.27271 -8e-4,0.17441 -8e-4,0.19394 -0.0107,0.20972 -0.0183,0.0297 -0.0769,0.0443 -0.10753,0.0326 Z
+ 5
+ 5
+
+
+
\ No newline at end of file
diff --git a/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/G910/UK.xml b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/G910/UK.xml
new file mode 100644
index 000000000..f1b94c459
--- /dev/null
+++ b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/G910/UK.xml
@@ -0,0 +1,390 @@
+
+
+ Logitech G910 - Physical UK
+ Physical UK-Layout of Logitech G910 (Logical: ???)
+ Darth Affe
+ Keyboard
+ Key
+ Logitech
+ G910
+ 491
+ 238
+ Images\Logitech\Keyboards
+ G910.png
+
+
+
+ 42
+ 28
+
+
+
+ +12.667
+
+
+
+
+
+
+ +12.667
+
+
+
+
+
+
+ +12.667
+
+
+
+
+
+
+ +6.75
+
+
+
+
+
+
+ 42
+ 52
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+ +6.75
+
+
+
+
+
+ +6.75
+
+
+
+
+
+
+
+ 42
+ +
+ 1.5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ M0,0 L0,0.5 L0.16666666666,0.5 L0.16666666666,1 L1,1 L1,0 Z
+ 1.5
+ 2
+
+
+
+ +6.75
+
+
+
+
+
+ +6.75
+
+
+
+
+ 2
+
+
+
+
+ 42
+ ~
+ 1.75
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +94.25
+
+
+
+
+
+
+ 42
+ +
+ 1.25
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2.75
+
+
+
+ +25.75
+
+
+
+ +25.75
+
+
+
+
+ 2
+
+
+
+
+ 42
+ ~
+ 1.5
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 5.75
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 1.5
+
+
+
+ +6.75
+
+
+
+
+
+ +6.75
+ 2
+
+
+
+
+
+ 18
+ 52
+
+
+ 18
+ +
+
+
+ 18
+ +
+
+
+ 18
+ +
+
+
+ 18
+ +
+
+
+
+ 73.667
+ 9
+
+
+
+
+
+
+ M 0.43535,0.91509 c -0.083,-0.013 -0.1809,-0.0541 -0.24123,-0.11683 -0.21672,-0.2247 -0.10831,-0.63995 0.19645,-0.71442 0.044,-0.0108 0.44173,-0.0156 0.47505,-0.006 0.0632,0.0184 0.0708,0.15184 0.0119,0.18175 -0.0174,0.009 -0.0369,0.009 -0.21797,0.009 -0.23755,0 -0.25559,-0.002 -0.3144,0.067 -0.14073,0.16404 -0.0357,0.36697 0.16357,0.40076 0.0569,0.01 0.0835,0.0391 0.0831,0.0846 -4.5e-4,0.0636 -0.0621,0.10873 -0.15647,0.0941 z m 0.36491,6.7e-4 c -0.0366,-0.0138 -0.0539,-0.0325 -0.0567,-0.0973 -0.006,-0.14226 -0.0741,-0.23758 -0.21563,-0.24355 -0.0562,-0.003 -0.0629,-0.004 -0.0811,-0.0233 -0.0344,-0.0359 -0.021,-0.11984 0.0238,-0.14402 0.0129,-0.007 0.0145,-0.007 0.19631,-0.007 0.25897,0 0.25297,0.005 0.25151,0.27271 -8e-4,0.17441 -8e-4,0.19394 -0.0107,0.20972 -0.0183,0.0297 -0.0769,0.0443 -0.10753,0.0326 Z
+ 18
+ 28
+
+
+ M 0,0 L0.15,1 0.85,1 L 1,0 Z
+ 92.5
+ 166.5
+ 55mm
+ 9mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/Pro/UK.xml b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/Pro/UK.xml
new file mode 100644
index 000000000..4d42f843d
--- /dev/null
+++ b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Keyboards/Pro/UK.xml
@@ -0,0 +1,189 @@
+
+
+ Logitech Pro Gaming Keyboard - Physical UK
+ Physical UK-Layout of Logitech Pro Gaming Keyboard (Logical: ???)
+ Darth Affe
+ Keyboard
+ Key
+ Logitech
+ Pro
+ 360
+ 152
+ Images\Logitech\Keyboards
+
+
+
+
+ 5
+ 28
+
+
+
+ +12.667
+
+
+
+
+
+
+ +12.667
+
+
+
+
+
+
+ +12.667
+
+
+
+
+
+
+ +6.75
+
+
+
+
+
+
+ 5
+ 52
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+ +6.75
+
+
+
+
+
+
+ 5
+ +
+ 1.5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ M0,0 L0,0.5 L0.16666666666,0.5 L0.16666666666,1 L1,1 L1,0 Z
+ 1.5
+ 2
+
+
+
+ +6.75
+
+
+
+
+
+
+ 5
+ +
+ 1.75
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ +
+ 1.25
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2.75
+
+
+
+ +25.75
+
+
+
+
+ 5
+ +
+ 1.5
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 5.75
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 1.25
+
+
+ 1.5
+
+
+
+ +6.75
+
+
+
+
+
+ M 0.43535,0.91509 c -0.083,-0.013 -0.1809,-0.0541 -0.24123,-0.11683 -0.21672,-0.2247 -0.10831,-0.63995 0.19645,-0.71442 0.044,-0.0108 0.44173,-0.0156 0.47505,-0.006 0.0632,0.0184 0.0708,0.15184 0.0119,0.18175 -0.0174,0.009 -0.0369,0.009 -0.21797,0.009 -0.23755,0 -0.25559,-0.002 -0.3144,0.067 -0.14073,0.16404 -0.0357,0.36697 0.16357,0.40076 0.0569,0.01 0.0835,0.0391 0.0831,0.0846 -4.5e-4,0.0636 -0.0621,0.10873 -0.15647,0.0941 z m 0.36491,6.7e-4 c -0.0366,-0.0138 -0.0539,-0.0325 -0.0567,-0.0973 -0.006,-0.14226 -0.0741,-0.23758 -0.21563,-0.24355 -0.0562,-0.003 -0.0629,-0.004 -0.0811,-0.0233 -0.0344,-0.0359 -0.021,-0.11984 0.0238,-0.14402 0.0129,-0.007 0.0145,-0.007 0.19631,-0.007 0.25897,0 0.25297,0.005 0.25151,0.27271 -8e-4,0.17441 -8e-4,0.19394 -0.0107,0.20972 -0.0183,0.0297 -0.0769,0.0443 -0.10753,0.0326 Z
+ 5
+ 5
+
+
+
\ No newline at end of file
diff --git a/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Mice/G403.xml b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Mice/G403.xml
new file mode 100644
index 000000000..f60da7443
--- /dev/null
+++ b/src/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Mice/G403.xml
@@ -0,0 +1,23 @@
+
+
+ Logitech G403
+ Layout of the Logitech G403 Mouse
+ Darth Affe
+ Mouse
+ Device
+ Logitech
+ G403
+ 67
+ 125
+ Images\Logitech\Mice
+ G403.png
+
+
+ m 0.7025,0.00275 -0.15,0 -0,0.26 h 0.15 z m -0.16732,0.7925 c -0.7,0.0159 -0.55,0.19383 -0.006236,0.19067 l 0.001707,-0.0416 c -0.425,-0.0115 -0.225,-0.11 0.005116,-0.10 z m 0.410,0.0779 -0.435,0 0,0.0401 0.225,0 0,0.0437 0.21,0 z
+ 24
+ 15
+ 17mm
+ 81mm
+
+
+
\ No newline at end of file
diff --git a/src/Artemis.Plugins.Devices.Logitech/LogitechDevice.cs b/src/Artemis.Plugins.Devices.Logitech/LogitechDevice.cs
new file mode 100644
index 000000000..937bc5f13
--- /dev/null
+++ b/src/Artemis.Plugins.Devices.Logitech/LogitechDevice.cs
@@ -0,0 +1,37 @@
+using System;
+using System.IO;
+using Artemis.Core.Extensions;
+using Artemis.Core.Plugins.Abstract;
+using Artemis.Core.Plugins.Models;
+using Artemis.Core.Services.Interfaces;
+using RGB.NET.Core;
+using RGB.NET.Devices.Logitech;
+
+namespace Artemis.Plugins.Devices.Logitech
+{
+ public class LogitechDevice : Device
+ {
+ private readonly IRgbService _rgbService;
+
+ public LogitechDevice(PluginInfo pluginInfo, IRgbService rgbService) : base(pluginInfo, LogitechDeviceProvider.Instance)
+ {
+ _rgbService = rgbService;
+ }
+
+ public override void EnablePlugin()
+ {
+ PathHelper.ResolvingAbsolutePath += (sender, args) => ResolveAbsolutePath(typeof(LogitechRGBDevice<>), sender, args);
+ LogitechDeviceProvider.PossibleX64NativePaths.Add(Path.Combine(PluginInfo.Directory.FullName, "x64", "LogitechLedEnginesWrapper.dll"));
+ LogitechDeviceProvider.PossibleX86NativePaths.Add(Path.Combine(PluginInfo.Directory.FullName, "x86", "LogitechLedEnginesWrapper.dll"));
+ _rgbService.AddDeviceProvider(DeviceProvider);
+ }
+
+ public override void DisablePlugin()
+ {
+ }
+
+ public override void Dispose()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Artemis.Plugins.Devices.Logitech/Properties/AssemblyInfo.cs b/src/Artemis.Plugins.Devices.Logitech/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..79fac2002
--- /dev/null
+++ b/src/Artemis.Plugins.Devices.Logitech/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+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.Devices.Logitech")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Artemis.Plugins.Devices.Logitech")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("235a45c7-24ad-4f47-b9d4-cd67e610a04d")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Artemis.Plugins.Devices.Logitech/plugin.json b/src/Artemis.Plugins.Devices.Logitech/plugin.json
new file mode 100644
index 000000000..3777d2245
--- /dev/null
+++ b/src/Artemis.Plugins.Devices.Logitech/plugin.json
@@ -0,0 +1,10 @@
+{
+ "Guid": "62a45c0c-884c-4868-9fd7-3c5987fe07ca",
+ "Name": "Logitech Devices",
+ "Version": {
+ "Major": 1,
+ "Minor": 0,
+ "Build": 0
+ },
+ "Main": "Artemis.Plugins.Devices.Logitech.dll"
+}
diff --git a/src/Artemis.Plugins.Devices.Logitech/x64/LogitechLedEnginesWrapper.dll b/src/Artemis.Plugins.Devices.Logitech/x64/LogitechLedEnginesWrapper.dll
new file mode 100644
index 000000000..52ff28506
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/x64/LogitechLedEnginesWrapper.dll differ
diff --git a/src/Artemis.Plugins.Devices.Logitech/x86/LogitechLedEnginesWrapper.dll b/src/Artemis.Plugins.Devices.Logitech/x86/LogitechLedEnginesWrapper.dll
new file mode 100644
index 000000000..c4072a11d
Binary files /dev/null and b/src/Artemis.Plugins.Devices.Logitech/x86/LogitechLedEnginesWrapper.dll differ
diff --git a/src/Artemis.Plugins.Modules.General/GeneralModule.cs b/src/Artemis.Plugins.Modules.General/GeneralModule.cs
index 3ae230ed6..e1feab291 100644
--- a/src/Artemis.Plugins.Modules.General/GeneralModule.cs
+++ b/src/Artemis.Plugins.Modules.General/GeneralModule.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
@@ -6,15 +7,14 @@ using Artemis.Core.Models.Surface;
using Artemis.Core.Plugins.Abstract;
using Artemis.Core.Plugins.Models;
using Artemis.Plugins.Modules.General.ViewModels;
-using Stylet;
using Device = Artemis.Core.Models.Surface.Device;
namespace Artemis.Plugins.Modules.General
{
public class GeneralModule : Module
{
- private readonly PluginSettings _settings;
private readonly ColorBlend _rainbowColorBlend;
+ private readonly PluginSettings _settings;
public GeneralModule(PluginInfo pluginInfo, PluginSettings settings) : base(pluginInfo)
{
@@ -118,9 +118,9 @@ namespace Artemis.Plugins.Modules.General
}
}
- public override IScreen GetMainViewModel()
+ public override IEnumerable GetViewModels()
{
- return new GeneralViewModel(this);
+ return new List {new GeneralViewModel(this)};
}
public override void Dispose()
diff --git a/src/Artemis.Plugins.Modules.General/ViewModels/GeneralViewModel.cs b/src/Artemis.Plugins.Modules.General/ViewModels/GeneralViewModel.cs
index b9f75f0f8..7ab14f005 100644
--- a/src/Artemis.Plugins.Modules.General/ViewModels/GeneralViewModel.cs
+++ b/src/Artemis.Plugins.Modules.General/ViewModels/GeneralViewModel.cs
@@ -5,7 +5,7 @@ namespace Artemis.Plugins.Modules.General.ViewModels
{
public class GeneralViewModel : ModuleViewModel
{
- public GeneralViewModel(Module module) : base(module)
+ public GeneralViewModel(Module module) : base(module, "General")
{
}
}
diff --git a/src/Artemis.UI/App.xaml b/src/Artemis.UI/App.xaml
index 062eb31e9..19257ccf3 100644
--- a/src/Artemis.UI/App.xaml
+++ b/src/Artemis.UI/App.xaml
@@ -2,11 +2,11 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="https://github.com/canton7/Stylet"
- xmlns:local="clr-namespace:Artemis.UI">
+ xmlns:local="clr-namespace:Artemis.UI"
+ xmlns:dragablz="http://dragablz.net/winfx/xaml/dragablz">
-
@@ -29,6 +29,9 @@
Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Teal.xaml" />
+
+
+
@@ -55,9 +58,44 @@
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
diff --git a/src/Artemis.UI/Artemis.UI.csproj b/src/Artemis.UI/Artemis.UI.csproj
index 68ac8fc6d..1f336f351 100644
--- a/src/Artemis.UI/Artemis.UI.csproj
+++ b/src/Artemis.UI/Artemis.UI.csproj
@@ -69,6 +69,9 @@
..\packages\ControlzEx.3.0.2.4\lib\net462\ControlzEx.dll
+
+ ..\packages\Dragablz.0.0.3.203\lib\net45\Dragablz.dll
+
..\packages\FluentValidation.8.5.0\lib\net45\FluentValidation.dll
@@ -163,6 +166,7 @@
+
True
@@ -176,29 +180,33 @@
+
+
+
-
-
-
App.xaml
Code
+
+ Designer
+ MSBuild:Compile
+
MSBuild:Compile
Designer
@@ -231,10 +239,18 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
MSBuild:Compile
Designer
diff --git a/src/Artemis.UI/Bootstrapper.cs b/src/Artemis.UI/Bootstrapper.cs
index d52492dd8..16aabc25c 100644
--- a/src/Artemis.UI/Bootstrapper.cs
+++ b/src/Artemis.UI/Bootstrapper.cs
@@ -1,10 +1,12 @@
-using System.Windows;
+using System.Threading.Tasks;
+using System.Windows;
using Artemis.Core.Ninject;
using Artemis.Core.Services.Interfaces;
using Artemis.UI.Ninject;
using Artemis.UI.Stylet;
using Artemis.UI.ViewModels.Screens;
using Ninject;
+using Stylet;
namespace Artemis.UI
{
@@ -15,11 +17,37 @@ namespace Artemis.UI
protected override void OnExit(ExitEventArgs e)
{
// Stop the Artemis core
- _core.Dispose();
+ _core?.Dispose();
base.OnExit(e);
}
+ protected override void Launch()
+ {
+ var windowManager = (IWindowManager) GetInstance(typeof(IWindowManager));
+ var splashViewModel = new SplashViewModel(Kernel);
+ windowManager.ShowWindow(splashViewModel);
+
+ Task.Run(() =>
+ {
+ // Start the Artemis core
+ _core = Kernel.Get();
+ // When the core is done, hide the splash and show the main window
+ _core.Initialized += (sender, args) => ShowMainWindow(windowManager, splashViewModel);
+ // While the core is instantiated, start listening for events on the splash
+ splashViewModel.ListenToEvents();
+ });
+ }
+
+ private void ShowMainWindow(IWindowManager windowManager, SplashViewModel splashViewModel)
+ {
+ Execute.OnUIThread(() =>
+ {
+ windowManager.ShowWindow(RootViewModel);
+ splashViewModel.RequestClose();
+ });
+ }
+
protected override void ConfigureIoC(IKernel kernel)
{
kernel.Settings.InjectNonPublic = true;
@@ -28,10 +56,6 @@ namespace Artemis.UI
kernel.Load();
// Load the core assembly's module
kernel.Load();
-
- // Start the Artemis core, the core's constructor will initialize async
- _core = Kernel.Get();
-
base.ConfigureIoC(kernel);
}
}
diff --git a/src/Artemis.UI/Ninject/Factories/ModuleViewModelFactory.cs b/src/Artemis.UI/Ninject/Factories/ModuleViewModelFactory.cs
new file mode 100644
index 000000000..6dad4814d
--- /dev/null
+++ b/src/Artemis.UI/Ninject/Factories/ModuleViewModelFactory.cs
@@ -0,0 +1,10 @@
+using Artemis.Core.Plugins.Abstract;
+using Artemis.UI.ViewModels.Screens;
+
+namespace Artemis.UI.Ninject.Factories
+{
+ public interface IModuleViewModelFactory
+ {
+ ModuleRootViewModel CreateModuleViewModel(Module module);
+ }
+}
\ No newline at end of file
diff --git a/src/Artemis.UI/Ninject/UiModule.cs b/src/Artemis.UI/Ninject/UiModule.cs
index a2c16e716..38bf34559 100644
--- a/src/Artemis.UI/Ninject/UiModule.cs
+++ b/src/Artemis.UI/Ninject/UiModule.cs
@@ -1,9 +1,11 @@
-using Artemis.UI.Services.Interfaces;
+using Artemis.UI.Ninject.Factories;
+using Artemis.UI.Services.Interfaces;
using Artemis.UI.Stylet;
using Artemis.UI.ViewModels.Dialogs;
using Artemis.UI.ViewModels.Interfaces;
using FluentValidation;
using Ninject.Extensions.Conventions;
+using Ninject.Extensions.Factory;
using Ninject.Modules;
using Stylet;
@@ -32,6 +34,9 @@ namespace Artemis.UI.Ninject
.BindAllBaseClasses();
});
+ // Bind the module VM
+ Bind().ToFactory();
+
// Bind all UI services as singletons
Kernel.Bind(x =>
{
diff --git a/src/Artemis.UI/Stylet/NinjectBootstrapper.cs b/src/Artemis.UI/Stylet/NinjectBootstrapper.cs
index a2aa78168..bd448ab5e 100644
--- a/src/Artemis.UI/Stylet/NinjectBootstrapper.cs
+++ b/src/Artemis.UI/Stylet/NinjectBootstrapper.cs
@@ -36,7 +36,10 @@ namespace Artemis.UI.Stylet
kernel.Bind().ToConstant(new ViewManager(viewManagerConfig));
kernel.Bind().ToConstant(this).InTransientScope();
- kernel.Bind().ToMethod(c => new WindowManager(c.Kernel.Get(), () => c.Kernel.Get(), c.Kernel.Get())).InSingletonScope();
+ kernel.Bind().ToMethod(
+ c => new WindowManager(c.Kernel.Get(), () => c.Kernel.Get(), c.Kernel.Get())
+ )
+ .InSingletonScope();
kernel.Bind().To().InSingletonScope();
kernel.Bind().To(); // Not singleton!
}
@@ -55,7 +58,6 @@ namespace Artemis.UI.Stylet
protected override void Launch()
{
- DisplayRootView(RootViewModel);
}
public override void Dispose()
diff --git a/src/Artemis.UI/ViewModels/Controls/ProfileEditor/ProfileEditorViewModel.cs b/src/Artemis.UI/ViewModels/Controls/ProfileEditor/ProfileEditorViewModel.cs
new file mode 100644
index 000000000..1cda2e580
--- /dev/null
+++ b/src/Artemis.UI/ViewModels/Controls/ProfileEditor/ProfileEditorViewModel.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Artemis.Core.Plugins.Abstract;
+
+namespace Artemis.UI.ViewModels.Controls.ProfileEditor
+{
+ public class ProfileEditorViewModel : ModuleViewModel
+ {
+ public ProfileEditorViewModel(Module module) : base(module, "Profile Editor")
+ {
+ }
+ }
+}
diff --git a/src/Artemis.UI/ViewModels/Interfaces/IEditorViewModel.cs b/src/Artemis.UI/ViewModels/Interfaces/IEditorViewModel.cs
deleted file mode 100644
index 43313873d..000000000
--- a/src/Artemis.UI/ViewModels/Interfaces/IEditorViewModel.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Artemis.UI.ViewModels.Interfaces
-{
- public interface ISurfaceEditorViewModel : IScreenViewModel
- {
-
- }
-}
\ No newline at end of file
diff --git a/src/Artemis.UI/ViewModels/Interfaces/IHomeViewModel.cs b/src/Artemis.UI/ViewModels/Interfaces/IHomeViewModel.cs
deleted file mode 100644
index 509d2df41..000000000
--- a/src/Artemis.UI/ViewModels/Interfaces/IHomeViewModel.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Artemis.UI.ViewModels.Interfaces
-{
- public interface IHomeViewModel : IScreenViewModel
- {
- void OpenUrl(string url);
- }
-}
\ No newline at end of file
diff --git a/src/Artemis.UI/ViewModels/Interfaces/ISettingsViewModel.cs b/src/Artemis.UI/ViewModels/Interfaces/ISettingsViewModel.cs
deleted file mode 100644
index 4debbf352..000000000
--- a/src/Artemis.UI/ViewModels/Interfaces/ISettingsViewModel.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Artemis.UI.ViewModels.Interfaces
-{
- public interface ISettingsViewModel : IScreenViewModel
- {
- }
-}
\ No newline at end of file
diff --git a/src/Artemis.UI/ViewModels/Screens/DebugViewModel.cs b/src/Artemis.UI/ViewModels/Screens/DebugViewModel.cs
index 04b1263f7..4b343bc0d 100644
--- a/src/Artemis.UI/ViewModels/Screens/DebugViewModel.cs
+++ b/src/Artemis.UI/ViewModels/Screens/DebugViewModel.cs
@@ -7,11 +7,12 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using Artemis.Core.Events;
using Artemis.Core.Services.Interfaces;
+using Artemis.UI.ViewModels.Interfaces;
using Stylet;
namespace Artemis.UI.ViewModels.Screens
{
- public class DebugViewModel : Screen
+ public class DebugViewModel : Screen, IScreenViewModel
{
private readonly ICoreService _coreService;
private readonly IRgbService _rgbService;
@@ -76,5 +77,7 @@ namespace Artemis.UI.ViewModels.Screens
[DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeleteObject([In] IntPtr hObject);
+
+ public string Title => "Debugger";
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI/ViewModels/Screens/HomeViewModel.cs b/src/Artemis.UI/ViewModels/Screens/HomeViewModel.cs
index d71a83d18..94e74b5db 100644
--- a/src/Artemis.UI/ViewModels/Screens/HomeViewModel.cs
+++ b/src/Artemis.UI/ViewModels/Screens/HomeViewModel.cs
@@ -5,7 +5,7 @@ using Stylet;
namespace Artemis.UI.ViewModels.Screens
{
- public class HomeViewModel : Screen, IHomeViewModel
+ public class HomeViewModel : Screen, IScreenViewModel
{
public string Title => "Home";
diff --git a/src/Artemis.UI/ViewModels/Screens/ModuleRootViewModel.cs b/src/Artemis.UI/ViewModels/Screens/ModuleRootViewModel.cs
new file mode 100644
index 000000000..00eb1e8bf
--- /dev/null
+++ b/src/Artemis.UI/ViewModels/Screens/ModuleRootViewModel.cs
@@ -0,0 +1,21 @@
+using Artemis.Core.Plugins.Abstract;
+using Artemis.UI.ViewModels.Controls.ProfileEditor;
+using Stylet;
+
+namespace Artemis.UI.ViewModels.Screens
+{
+ public class ModuleRootViewModel : Screen
+ {
+ public ModuleRootViewModel(Module module)
+ {
+ Module = module;
+ ModuleViewModels = new BindableCollection {new ProfileEditorViewModel(Module)};
+ ModuleViewModels.AddRange(Module.GetViewModels());
+ }
+
+ public Module Module { get; }
+ public BindableCollection ModuleViewModels { get; set; }
+
+ public int FixedHeaderCount => ModuleViewModels.Count;
+ }
+}
\ No newline at end of file
diff --git a/src/Artemis.UI/ViewModels/Screens/RootViewModel.cs b/src/Artemis.UI/ViewModels/Screens/RootViewModel.cs
index 88f1f6fb5..84eb92176 100644
--- a/src/Artemis.UI/ViewModels/Screens/RootViewModel.cs
+++ b/src/Artemis.UI/ViewModels/Screens/RootViewModel.cs
@@ -1,11 +1,13 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows.Controls;
using Artemis.Core.Events;
using Artemis.Core.Plugins.Abstract;
using Artemis.Core.Services.Interfaces;
+using Artemis.UI.Ninject.Factories;
using Artemis.UI.ViewModels.Interfaces;
using Stylet;
@@ -15,11 +17,13 @@ namespace Artemis.UI.ViewModels.Screens
{
private readonly ICollection _artemisViewModels;
private readonly IPluginService _pluginService;
+ private readonly IModuleViewModelFactory _moduleViewModelFactory;
- public RootViewModel(ICollection artemisViewModels, IPluginService pluginService)
+ public RootViewModel(ICollection artemisViewModels, IPluginService pluginService, IModuleViewModelFactory moduleViewModelFactory)
{
_artemisViewModels = artemisViewModels;
_pluginService = pluginService;
+ _moduleViewModelFactory = moduleViewModelFactory;
// Add the built-in items
Items.AddRange(artemisViewModels);
@@ -28,7 +32,7 @@ namespace Artemis.UI.ViewModels.Screens
// Sync up with the plugin service
Modules = new BindableCollection();
- // Modules.AddRange(_pluginService.GetPluginsOfType());
+ Modules.AddRange(_pluginService.GetPluginsOfType());
_pluginService.PluginEnabled += PluginServiceOnPluginEnabled;
_pluginService.PluginDisabled += PluginServiceOnPluginDisabled;
@@ -47,8 +51,7 @@ namespace Artemis.UI.ViewModels.Screens
return;
// Create a view model for the given plugin info (which will be a module)
- var viewModel = await Task.Run(() => SelectedModule.GetMainViewModel());
- // Tell Stylet to active the view model, the view manager will compile and show the XAML
+ var viewModel = await Task.Run(() => _moduleViewModelFactory.CreateModuleViewModel(SelectedModule));
ActivateItem(viewModel);
SelectedPage = null;
diff --git a/src/Artemis.UI/ViewModels/Screens/SettingsViewModel.cs b/src/Artemis.UI/ViewModels/Screens/SettingsViewModel.cs
index a167aac62..e09aa992c 100644
--- a/src/Artemis.UI/ViewModels/Screens/SettingsViewModel.cs
+++ b/src/Artemis.UI/ViewModels/Screens/SettingsViewModel.cs
@@ -8,7 +8,7 @@ using Stylet;
namespace Artemis.UI.ViewModels.Screens
{
- public class SettingsViewModel : Screen, ISettingsViewModel
+ public class SettingsViewModel : Screen, IScreenViewModel
{
private readonly ICoreService _coreService;
private readonly IKernel _kernel;
diff --git a/src/Artemis.UI/ViewModels/Screens/SplashViewModel.cs b/src/Artemis.UI/ViewModels/Screens/SplashViewModel.cs
new file mode 100644
index 000000000..fe87c166e
--- /dev/null
+++ b/src/Artemis.UI/ViewModels/Screens/SplashViewModel.cs
@@ -0,0 +1,27 @@
+using Artemis.Core.Services.Interfaces;
+using Ninject;
+using Stylet;
+
+namespace Artemis.UI.ViewModels.Screens
+{
+ public class SplashViewModel : Screen
+ {
+ private readonly IKernel _kernel;
+
+ public SplashViewModel(IKernel kernel)
+ {
+ _kernel = kernel;
+ Status = "Initializing Core";
+ }
+
+ public string Status { get; set; }
+
+ public void ListenToEvents()
+ {
+ var pluginService = _kernel.Get();
+ pluginService.CopyingBuildInPlugins += (sender, args) => Status = "Updating built-in plugins";
+ pluginService.PluginLoading += (sender, args) => Status = "Loading plugin: " + args.PluginInfo.Name;
+ pluginService.PluginLoaded += (sender, args) => Status = "Initializing UI";
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Artemis.UI/ViewModels/Screens/SurfaceEditorViewModel.cs b/src/Artemis.UI/ViewModels/Screens/SurfaceEditorViewModel.cs
index 913b692dc..fd5310a93 100644
--- a/src/Artemis.UI/ViewModels/Screens/SurfaceEditorViewModel.cs
+++ b/src/Artemis.UI/ViewModels/Screens/SurfaceEditorViewModel.cs
@@ -17,7 +17,7 @@ using Stylet;
namespace Artemis.UI.ViewModels.Screens
{
- public class SurfaceEditorViewModel : Screen, ISurfaceEditorViewModel
+ public class SurfaceEditorViewModel : Screen, IScreenViewModel
{
private readonly IDialogService _dialogService;
private readonly ISurfaceService _surfaceService;
diff --git a/src/Artemis.UI/Views/Controls/ProfileEditor/ProfileEditorView.xaml b/src/Artemis.UI/Views/Controls/ProfileEditor/ProfileEditorView.xaml
new file mode 100644
index 000000000..97243184e
--- /dev/null
+++ b/src/Artemis.UI/Views/Controls/ProfileEditor/ProfileEditorView.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/src/Artemis.UI/Views/Screens/HomeView.xaml b/src/Artemis.UI/Views/Screens/HomeView.xaml
index ec6d126fd..49d621a66 100644
--- a/src/Artemis.UI/Views/Screens/HomeView.xaml
+++ b/src/Artemis.UI/Views/Screens/HomeView.xaml
@@ -4,7 +4,6 @@
xmlns:s="https://github.com/canton7/Stylet"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:vms="clr-namespace:Artemis.UI.ViewModels"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:screens="clr-namespace:Artemis.UI.ViewModels.Screens"
mc:Ignorable="d"
diff --git a/src/Artemis.UI/Views/Screens/ModuleRootView.xaml b/src/Artemis.UI/Views/Screens/ModuleRootView.xaml
new file mode 100644
index 000000000..e38d10d5c
--- /dev/null
+++ b/src/Artemis.UI/Views/Screens/ModuleRootView.xaml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Artemis.UI/Views/Screens/RootView.xaml b/src/Artemis.UI/Views/Screens/RootView.xaml
index 34f6973c6..7807159a7 100644
--- a/src/Artemis.UI/Views/Screens/RootView.xaml
+++ b/src/Artemis.UI/Views/Screens/RootView.xaml
@@ -16,40 +16,6 @@
d:DesignWidth="1113.251"
d:DataContext="{d:DesignInstance screens:RootViewModel}"
Icon="/Artemis.UI;component/Resources/logo-512.png">
-
-
-
-
-
-
-
-
-
@@ -62,7 +28,7 @@
Background="Transparent"
RenderOptions.BitmapScalingMode="HighQuality"
Margin="0,0,-10,0">
-
@@ -148,7 +114,7 @@
-
@@ -168,6 +134,7 @@
+
+
+
+
+
+
+
+
+
+ Artemis is initializing...
+
+
+
+
\ No newline at end of file
diff --git a/src/Artemis.UI/packages.config b/src/Artemis.UI/packages.config
index 1be164a31..5c9ffce65 100644
--- a/src/Artemis.UI/packages.config
+++ b/src/Artemis.UI/packages.config
@@ -2,6 +2,7 @@
+
diff --git a/src/Artemis.sln b/src/Artemis.sln
index 9e17bca28..b4da0e2d6 100644
--- a/src/Artemis.sln
+++ b/src/Artemis.sln
@@ -7,6 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.UI", "Artemis.UI\Ar
ProjectSection(ProjectDependencies) = postProject
{E592F239-FAA0-4840-9C85-46E5867D06D5} = {E592F239-FAA0-4840-9C85-46E5867D06D5}
{0F288A66-6EB0-4589-8595-E33A3A3EAEA2} = {0F288A66-6EB0-4589-8595-E33A3A3EAEA2}
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D} = {235A45C7-24AD-4F47-B9D4-CD67E610A04D}
{A779B2F8-C253-4C4B-8634-6EB8F594E96D} = {A779B2F8-C253-4C4B-8634-6EB8F594E96D}
EndProjectSection
EndProject
@@ -22,6 +23,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.Plugins.LayerTypes.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.Plugins.Devices.Corsair", "Artemis.Plugins.Devices.Corsair\Artemis.Plugins.Devices.Corsair.csproj", "{A779B2F8-C253-4C4B-8634-6EB8F594E96D}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.Plugins.Devices.Logitech", "Artemis.Plugins.Devices.Logitech\Artemis.Plugins.Devices.Logitech.csproj", "{235A45C7-24AD-4F47-B9D4-CD67E610A04D}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -78,6 +81,14 @@ Global
{A779B2F8-C253-4C4B-8634-6EB8F594E96D}.Release|Any CPU.Build.0 = Release|Any CPU
{A779B2F8-C253-4C4B-8634-6EB8F594E96D}.Release|x64.ActiveCfg = Release|Any CPU
{A779B2F8-C253-4C4B-8634-6EB8F594E96D}.Release|x64.Build.0 = Release|Any CPU
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D}.Debug|x64.Build.0 = Debug|Any CPU
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D}.Release|x64.ActiveCfg = Release|Any CPU
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -86,6 +97,7 @@ Global
{E592F239-FAA0-4840-9C85-46E5867D06D5} = {E830A02B-A7E5-4A6B-943F-76B0A542630C}
{0F288A66-6EB0-4589-8595-E33A3A3EAEA2} = {E830A02B-A7E5-4A6B-943F-76B0A542630C}
{A779B2F8-C253-4C4B-8634-6EB8F594E96D} = {E830A02B-A7E5-4A6B-943F-76B0A542630C}
+ {235A45C7-24AD-4F47-B9D4-CD67E610A04D} = {E830A02B-A7E5-4A6B-943F-76B0A542630C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C203080A-4473-4CC2-844B-F552EA43D66A}