diff --git a/src/Artemis.Core/Plugins/Modules/Module.cs b/src/Artemis.Core/Plugins/Modules/Module.cs
index ffe21f538..c891fa422 100644
--- a/src/Artemis.Core/Plugins/Modules/Module.cs
+++ b/src/Artemis.Core/Plugins/Modules/Module.cs
@@ -96,10 +96,11 @@ namespace Artemis.Core.Modules
public bool IsActivatedOverride { get; private set; }
///
- /// Gets whether this module should update if is
- /// Defaults to
+ /// Gets whether this module should update while is . When
+ /// set to and any timed updates will not get called during an activation override.
+ /// Defaults to
///
- public bool UpdateDuringActivationOverride { get; protected set; } = true;
+ public bool UpdateDuringActivationOverride { get; protected set; }
///
/// A list of activation requirements
diff --git a/src/Artemis.Core/Services/ModuleService.cs b/src/Artemis.Core/Services/ModuleService.cs
index 37903801f..b7148fdd8 100644
--- a/src/Artemis.Core/Services/ModuleService.cs
+++ b/src/Artemis.Core/Services/ModuleService.cs
@@ -46,12 +46,7 @@ namespace Artemis.Core.Services
if (ActiveModuleOverride == overrideModule)
return;
-
- // Always deactivate all modules whenever override is called
- var modules = _pluginService.GetPluginsOfType().ToList();
- foreach (var module in modules)
- OverrideDeactivate(module);
-
+
if (overrideModule != null)
{
OverrideActivate(overrideModule);
@@ -60,6 +55,11 @@ namespace Artemis.Core.Services
else
_logger.Information("Clearing active module override");
+ // Always deactivate all other modules whenever override is called
+ var modules = _pluginService.GetPluginsOfType().ToList();
+ foreach (var module in modules.Where(m => m != overrideModule))
+ OverrideDeactivate(module);
+
ActiveModuleOverride = overrideModule;
}
finally
@@ -78,7 +78,23 @@ namespace Artemis.Core.Services
await ActiveModuleSemaphore.WaitAsync();
if (ActiveModuleOverride != null)
+ {
+ // The conditions of the active module override may be matched, in that case reactivate as a non-override
+ // the principle is different for this service but not for the module
+ var shouldBeActivated = ActiveModuleOverride.EvaluateActivationRequirements();
+ if (shouldBeActivated && ActiveModuleOverride.IsActivatedOverride)
+ {
+ ActiveModuleOverride.Deactivate(true);
+ ActiveModuleOverride.Activate(false);
+ }
+ else if (!shouldBeActivated && !ActiveModuleOverride.IsActivatedOverride)
+ {
+ ActiveModuleOverride.Deactivate(false);
+ ActiveModuleOverride.Activate(true);
+ }
+
return;
+ }
var stopwatch = new Stopwatch();
stopwatch.Start();
diff --git a/src/Artemis.Core/Services/Storage/ProfileService.cs b/src/Artemis.Core/Services/Storage/ProfileService.cs
index f31724d93..bfaadba7e 100644
--- a/src/Artemis.Core/Services/Storage/ProfileService.cs
+++ b/src/Artemis.Core/Services/Storage/ProfileService.cs
@@ -236,7 +236,8 @@ namespace Artemis.Core.Services
var profileEntity = JsonConvert.DeserializeObject(json, ExportSettings);
// Assign a new GUID to make sure it is unique in case of a previous import of the same content
- profileEntity.Id = Guid.NewGuid();
+ profileEntity.UpdateGuid(Guid.NewGuid());
+ profileEntity.Name = $"{profileEntity.Name} - Imported";
_profileRepository.Add(profileEntity);
return new ProfileDescriptor(profileModule, profileEntity);
diff --git a/src/Artemis.Storage/Entities/Profile/ProfileEntity.cs b/src/Artemis.Storage/Entities/Profile/ProfileEntity.cs
index 07c88923b..3b16cc67f 100644
--- a/src/Artemis.Storage/Entities/Profile/ProfileEntity.cs
+++ b/src/Artemis.Storage/Entities/Profile/ProfileEntity.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Linq;
namespace Artemis.Storage.Entities.Profile
{
@@ -19,5 +20,15 @@ namespace Artemis.Storage.Entities.Profile
public List Folders { get; set; }
public List Layers { get; set; }
+
+ public void UpdateGuid(Guid guid)
+ {
+ var oldGuid = Id;
+ Id = guid;
+
+ var rootFolder = Folders.FirstOrDefault(f => f.ParentId == oldGuid);
+ if (rootFolder != null)
+ rootFolder.ParentId = Id;
+ }
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs b/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs
index 25039c8fe..89a5aa549 100644
--- a/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs
+++ b/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs
@@ -128,7 +128,7 @@ namespace Artemis.UI.Shared
if (PropertyInfo.GetGetMethod() == null)
return null;
- return Parent == null ? null : PropertyInfo.GetValue(Parent.GetCurrentValue());
+ return Parent?.GetCurrentValue() == null ? null : PropertyInfo.GetValue(Parent.GetCurrentValue());
}
catch (Exception)
{
diff --git a/src/Artemis.UI.Shared/ResourceDictionaries/DataModelConditions.xaml b/src/Artemis.UI.Shared/ResourceDictionaries/DataModelConditions.xaml
index 60023c5c6..a203f4403 100644
--- a/src/Artemis.UI.Shared/ResourceDictionaries/DataModelConditions.xaml
+++ b/src/Artemis.UI.Shared/ResourceDictionaries/DataModelConditions.xaml
@@ -31,12 +31,12 @@
-
+
-
+
@@ -54,12 +54,12 @@
-
+
-
+
@@ -70,25 +70,11 @@
-
+
-
-
-
+
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Dialogs/ProfileImportViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/Dialogs/ProfileImportViewModel.cs
index 99ebd1f04..52e51de3c 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/Dialogs/ProfileImportViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/Dialogs/ProfileImportViewModel.cs
@@ -32,9 +32,9 @@ namespace Artemis.UI.Screens.ProfileEditor.Dialogs
public void Accept()
{
- _profileService.ImportProfile(Document.Text, ProfileModule);
+ var descriptor = _profileService.ImportProfile(Document.Text, ProfileModule);
_mainMessageQueue.Enqueue("Profile imported.");
- Session.Close();
+ Session.Close(descriptor);
}
public void Cancel()
diff --git a/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs
index 0ab89f0f7..3bacabc15 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs
@@ -221,7 +221,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
NotifyOfPropertyChange(nameof(TimeCaretPosition));
}
- private void ProfileEditorServiceOnSelectedDataBindingChanged(object? sender, EventArgs e)
+ private void ProfileEditorServiceOnSelectedDataBindingChanged(object sender, EventArgs e)
{
RightSideIndex = ProfileEditorService.SelectedDataBinding != null ? 1 : 0;
}
@@ -562,20 +562,23 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
Execute.PostToUIThread(() =>
{
var newTime = ProfileEditorService.CurrentTime.Add(TimeSpan.FromSeconds(e.DeltaTime));
- if (Repeating && RepeatTimeline)
+ if (SelectedProfileElement != null)
{
- if (newTime > SelectedProfileElement.TimelineLength)
- newTime = TimeSpan.Zero;
- }
- else if (Repeating && RepeatSegment)
- {
- if (newTime > GetCurrentSegmentEnd())
- newTime = GetCurrentSegmentStart();
- }
- else if (newTime > SelectedProfileElement.TimelineLength)
- {
- newTime = SelectedProfileElement.TimelineLength;
- Pause();
+ if (Repeating && RepeatTimeline)
+ {
+ if (newTime > SelectedProfileElement.TimelineLength)
+ newTime = TimeSpan.Zero;
+ }
+ else if (Repeating && RepeatSegment)
+ {
+ if (newTime > GetCurrentSegmentEnd())
+ newTime = GetCurrentSegmentStart();
+ }
+ else if (newTime > SelectedProfileElement.TimelineLength)
+ {
+ newTime = SelectedProfileElement.TimelineLength;
+ Pause();
+ }
}
ProfileEditorService.CurrentTime = newTime;
diff --git a/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/Tree/TreePropertyView.xaml b/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/Tree/TreePropertyView.xaml
index b21a4f2f5..8e29a9019 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/Tree/TreePropertyView.xaml
+++ b/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/Tree/TreePropertyView.xaml
@@ -10,14 +10,38 @@
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
-
+
+
+
+
@@ -55,7 +79,7 @@
();
-
+
// Populate the panels
ProfileViewModel = profileViewModel;
ProfileTreeViewModel = profileTreeViewModel;
@@ -190,10 +191,17 @@ namespace Artemis.UI.Screens.ProfileEditor
public async Task ImportProfile()
{
- await DialogService.ShowDialog(new Dictionary
+ var result = await DialogService.ShowDialog(new Dictionary
{
{"profileModule", Module}
});
+
+ if (result != null && result is ProfileDescriptor descriptor)
+ {
+ Profiles.Add(descriptor);
+ Profiles.Sort(p => p.Name);
+ SelectedProfile = descriptor;
+ }
}
public void Undo()
diff --git a/src/Artemis.sln b/src/Artemis.sln
index 8ccde0555..746b58c30 100644
--- a/src/Artemis.sln
+++ b/src/Artemis.sln
@@ -82,7 +82,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Artemis.Plugins.Modules.Ove
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataModelExpansions", "DataModelExpansions", "{5A5B55D7-F631-467A-A16F-B880DE4E8909}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.Plugins.DataModelExpansions.TestData", "Artemis.Plugins.DataModelExpansions.TestData\Artemis.Plugins.DataModelExpansions.TestData.csproj", "{5353C9A2-2D9A-4051-8599-AFE56D54B882}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis.Plugins.DataModelExpansions.TestData", "Plugins\Artemis.Plugins.DataModelExpansions.TestData\Artemis.Plugins.DataModelExpansions.TestData.csproj", "{5353C9A2-2D9A-4051-8599-AFE56D54B882}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/src/Artemis.Plugins.DataModelExpansions.TestData/Artemis.Plugins.DataModelExpansions.TestData.csproj b/src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/Artemis.Plugins.DataModelExpansions.TestData.csproj
similarity index 94%
rename from src/Artemis.Plugins.DataModelExpansions.TestData/Artemis.Plugins.DataModelExpansions.TestData.csproj
rename to src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/Artemis.Plugins.DataModelExpansions.TestData.csproj
index 91d9e96d8..a4c38a08d 100644
--- a/src/Artemis.Plugins.DataModelExpansions.TestData/Artemis.Plugins.DataModelExpansions.TestData.csproj
+++ b/src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/Artemis.Plugins.DataModelExpansions.TestData.csproj
@@ -24,7 +24,7 @@
-
+
diff --git a/src/Artemis.Plugins.DataModelExpansions.TestData/DataModels/PluginDataModel.cs b/src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/DataModels/PluginDataModel.cs
similarity index 96%
rename from src/Artemis.Plugins.DataModelExpansions.TestData/DataModels/PluginDataModel.cs
rename to src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/DataModels/PluginDataModel.cs
index 0e24eac8b..48d021160 100644
--- a/src/Artemis.Plugins.DataModelExpansions.TestData/DataModels/PluginDataModel.cs
+++ b/src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/DataModels/PluginDataModel.cs
@@ -8,7 +8,7 @@ namespace Artemis.Plugins.DataModelExpansions.TestData.DataModels
{
public PluginDataModel()
{
- PluginSubDataModel = new PluginSubDataModel();
+ // PluginSubDataModel = new PluginSubDataModel();
ListItems = new List();
for (var i = 0; i < 20; i++)
ListItems.Add(new SomeListItem {ItemName = $"Item {i + 1}", Number = i});
diff --git a/src/Artemis.Plugins.DataModelExpansions.TestData/PluginDataModelExpansion.cs b/src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/PluginDataModelExpansion.cs
similarity index 100%
rename from src/Artemis.Plugins.DataModelExpansions.TestData/PluginDataModelExpansion.cs
rename to src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/PluginDataModelExpansion.cs
diff --git a/src/Artemis.Plugins.DataModelExpansions.TestData/Properties/launchSettings.json b/src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/Properties/launchSettings.json
similarity index 100%
rename from src/Artemis.Plugins.DataModelExpansions.TestData/Properties/launchSettings.json
rename to src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/Properties/launchSettings.json
diff --git a/src/Artemis.Plugins.DataModelExpansions.TestData/plugin.json b/src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/plugin.json
similarity index 100%
rename from src/Artemis.Plugins.DataModelExpansions.TestData/plugin.json
rename to src/Plugins/Artemis.Plugins.DataModelExpansions.TestData/plugin.json
diff --git a/src/Plugins/Artemis.Plugins.Devices.Asus/Images/Asus/Drams/TridentZ.PNG b/src/Plugins/Artemis.Plugins.Devices.Asus/Images/Asus/Drams/TridentZ.PNG
new file mode 100644
index 000000000..b17722e50
Binary files /dev/null and b/src/Plugins/Artemis.Plugins.Devices.Asus/Images/Asus/Drams/TridentZ.PNG differ
diff --git a/src/Plugins/Artemis.Plugins.Devices.Asus/Images/Asus/Mainboards/ROG_Strix_Z390-F_Gaming.png b/src/Plugins/Artemis.Plugins.Devices.Asus/Images/Asus/Mainboards/ROG_Strix_Z390-F_Gaming.png
new file mode 100644
index 000000000..f6f218785
Binary files /dev/null and b/src/Plugins/Artemis.Plugins.Devices.Asus/Images/Asus/Mainboards/ROG_Strix_Z390-F_Gaming.png differ
diff --git a/src/Plugins/Artemis.Plugins.Devices.Asus/Layouts/Asus/Drams/TridentZ.xml b/src/Plugins/Artemis.Plugins.Devices.Asus/Layouts/Asus/Drams/TridentZ.xml
new file mode 100644
index 000000000..874848b02
--- /dev/null
+++ b/src/Plugins/Artemis.Plugins.Devices.Asus/Layouts/Asus/Drams/TridentZ.xml
@@ -0,0 +1,37 @@
+
+
+ G.Skill Trident Z RGB
+ Physical layout of G.Skill Trident Z RGB
+ DRAM
+ Key
+ G.Skill
+ Trident Z RGB
+ 9
+ 135
+ 9
+ 27
+ Images\Asus\Drams
+ TridentZ.PNG
+
+
+ 0
+ 0
+
+
+ =
+ +
+
+
+ =
+ +
+
+
+ =
+ +
+
+
+ =
+ +
+
+
+
\ No newline at end of file
diff --git a/src/Plugins/Artemis.Plugins.Devices.Asus/Layouts/Asus/Mainboards/ROGSTRIXZ390-F.xml b/src/Plugins/Artemis.Plugins.Devices.Asus/Layouts/Asus/Mainboards/ROGSTRIXZ390-F.xml
new file mode 100644
index 000000000..2fabbba08
--- /dev/null
+++ b/src/Plugins/Artemis.Plugins.Devices.Asus/Layouts/Asus/Mainboards/ROGSTRIXZ390-F.xml
@@ -0,0 +1,35 @@
+
+
+ Asus ROG STRIX Z390-F
+ Asus ROG STRIX Z390-F
+ Mainboard
+ Device
+ Asus
+ ROG STRIX Z390-F
+ 244
+ 305
+ 15
+ 110
+ Images\Asus\Mainboards
+ ROG_Strix_Z390-F_Gaming.png
+
+
+ 8
+ 40
+
+
+
+
+ 100
+ 150
+ 8
+ 0.1
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
\ No newline at end of file
diff --git a/src/Plugins/Artemis.Plugins.Devices.Corsair/Images/Corsair/Customs/MLFAN.png b/src/Plugins/Artemis.Plugins.Devices.Corsair/Images/Corsair/Customs/MLFAN.png
new file mode 100644
index 000000000..5760a5317
Binary files /dev/null and b/src/Plugins/Artemis.Plugins.Devices.Corsair/Images/Corsair/Customs/MLFAN.png differ
diff --git a/src/Plugins/Artemis.Plugins.Devices.Corsair/Layouts/Corsair/Customs/LLFAN.xml b/src/Plugins/Artemis.Plugins.Devices.Corsair/Layouts/Corsair/Customs/LLFAN.xml
index 5652f18ad..9bea3bb82 100644
--- a/src/Plugins/Artemis.Plugins.Devices.Corsair/Layouts/Corsair/Customs/LLFAN.xml
+++ b/src/Plugins/Artemis.Plugins.Devices.Corsair/Layouts/Corsair/Customs/LLFAN.xml
@@ -1,14 +1,13 @@
-
Corsair LL RGB Fan
Physical layout of Corsairs LL RGB Fan
Fan
Key
Corsair
- MM800 RGB
- 140
- 140
+ LL RGB
+ 120
+ 120
20
20
Images\Corsair\Customs
@@ -16,8 +15,8 @@
Circle
- 59.5
- 40
+ 50
+ 30
Circle
@@ -33,66 +32,65 @@
-
-
-
Circle
- 7.9
- 29.8
+ 6.7
+ 25
Circle
- 0.4
- 59.9
+ 0
+ 50
Circle
- 8
- 90.4
+ 6.7
+ 75
Circle
- 30.7
- 113.1
+ 25
+ 93.3
Circle
- 59.5
- 120.5
+ 50
+ 100
Circle
- 90.5
- 113.1
+ 75
+ 93.3
Circle
- 113
- 90.4
+ 93.3
+ 75
Circle
- 120.5
- 59.9
+ 100
+ 50
Circle
- 113
- 29.8
+ 93.3
+ 25
Circle
- 90.5
- 7.6
+ 75
+ 6.7
Circle
- 59.5
+ 50
0
Circle
- 28
- 7.6
+ 25
+ 6.7
\ No newline at end of file
diff --git a/src/Plugins/Artemis.Plugins.Devices.Corsair/Layouts/Corsair/Customs/MLFAN.xml b/src/Plugins/Artemis.Plugins.Devices.Corsair/Layouts/Corsair/Customs/MLFAN.xml
new file mode 100644
index 000000000..9ddfa7444
--- /dev/null
+++ b/src/Plugins/Artemis.Plugins.Devices.Corsair/Layouts/Corsair/Customs/MLFAN.xml
@@ -0,0 +1,36 @@
+
+
+ Corsair ML RGB Fan
+ Physical layout of Corsairs ML RGB Fan
+ Fan
+ Key
+ Corsair
+ ML PRO RGB
+ 120
+ 120
+ 20
+ 20
+ Images\Corsair\Customs
+ MLFAN.png
+
+
+ Circle
+ 50
+ 30
+
+
+ Circle
+ +
+
+
+ Circle
+ -
+ +
+
+
+ Circle
+ -
+ -
+
+
+
\ No newline at end of file
diff --git a/src/Plugins/Artemis.Plugins.Devices.Logitech/Images/Logitech/Headsets/G935.png b/src/Plugins/Artemis.Plugins.Devices.Logitech/Images/Logitech/Headsets/G935.png
new file mode 100644
index 000000000..30e65222b
Binary files /dev/null and b/src/Plugins/Artemis.Plugins.Devices.Logitech/Images/Logitech/Headsets/G935.png differ
diff --git a/src/Plugins/Artemis.Plugins.Devices.Logitech/Images/Logitech/Mice/G502.png b/src/Plugins/Artemis.Plugins.Devices.Logitech/Images/Logitech/Mice/G502.png
new file mode 100644
index 000000000..7f8ddff6e
Binary files /dev/null and b/src/Plugins/Artemis.Plugins.Devices.Logitech/Images/Logitech/Mice/G502.png differ
diff --git a/src/Plugins/Artemis.Plugins.Devices.Logitech/Images/Logitech/Mousepads/Powerplay.png b/src/Plugins/Artemis.Plugins.Devices.Logitech/Images/Logitech/Mousepads/Powerplay.png
new file mode 100644
index 000000000..ed2659cdc
Binary files /dev/null and b/src/Plugins/Artemis.Plugins.Devices.Logitech/Images/Logitech/Mousepads/Powerplay.png differ
diff --git a/src/Plugins/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Headsets/G935.xml b/src/Plugins/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Headsets/G935.xml
new file mode 100644
index 000000000..c9a94c605
--- /dev/null
+++ b/src/Plugins/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Headsets/G935.xml
@@ -0,0 +1,28 @@
+
+
+ Logitech G935
+ Layout of the G935 Headset
+ Headset
+ Key
+ Logitech
+ G935
+ 200
+ 213
+ 15
+ 15
+ Images\Logitech\Headsets
+ G935.png
+
+
+ M0.522,0.417 L0.92,0.417 L0.92,0.812 L0.731,0.812 L0.731,0.603 L0.516,0.603z M0.52,0.06 L0.402,0.075 L0.269,0.132 L0.19,0.199 L0.13,0.278 L0.093,0.362 L0.076,0.458 L0.074,0.537 L0.079,0.596 L0.098,0.646 L0.133,0.71 L0.177,0.771 L0.237,0.831 L0.311,0.878 L0.385,0.912 L0.454,0.922 L0.516,0.925 L0.516,0.759 L0.414,0.739 L0.333,0.675 L0.283,0.586 L0.266,0.502 L0.281,0.411 L0.338,0.325 L0.422,0.268 L0.474,0.253 L0.52,0.253z
+ 70
+ 195
+
+
+ 90
+ 110
+ 1
+ 6
+
+
+
\ No newline at end of file
diff --git a/src/Plugins/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Mice/G502.xml b/src/Plugins/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Mice/G502.xml
new file mode 100644
index 000000000..0062dc4bb
--- /dev/null
+++ b/src/Plugins/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Mice/G502.xml
@@ -0,0 +1,27 @@
+
+
+ Logitech G502
+ Layout of the G502 mouse
+ Mouse
+ Key
+ Logitech
+ G502
+ 75
+ 130
+ 15
+ 15
+ Images\Logitech\Mice
+ G502.png
+
+
+ 11
+ 59
+ 0.3
+
+
+ M0.522,0.417 L0.92,0.417 L0.92,0.812 L0.731,0.812 L0.731,0.603 L0.516,0.603z M0.52,0.06 L0.402,0.075 L0.269,0.132 L0.19,0.199 L0.13,0.278 L0.093,0.362 L0.076,0.458 L0.074,0.537 L0.079,0.596 L0.098,0.646 L0.133,0.71 L0.177,0.771 L0.237,0.831 L0.311,0.878 L0.385,0.912 L0.454,0.922 L0.516,0.925 L0.516,0.759 L0.414,0.739 L0.333,0.675 L0.283,0.586 L0.266,0.502 L0.281,0.411 L0.338,0.325 L0.422,0.268 L0.474,0.253 L0.52,0.253z
+ 23
+ 82
+
+
+
\ No newline at end of file
diff --git a/src/Plugins/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Mousepads/Powerplay.xml b/src/Plugins/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Mousepads/Powerplay.xml
new file mode 100644
index 000000000..cc3f9d006
--- /dev/null
+++ b/src/Plugins/Artemis.Plugins.Devices.Logitech/Layouts/Logitech/Mousepads/Powerplay.xml
@@ -0,0 +1,24 @@
+
+
+ Logitech Powerplay
+ Layout of the Logitech Powerplay
+ Mousepad
+ Device
+ Logitech
+ Powerplay
+ 320
+ 285
+ 16
+ 16
+ Images\Logitech\Mousepads
+ Powerplay.png
+
+
+ Circle
+ 52
+ 7
+ 1
+ 1
+
+
+
\ No newline at end of file