mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 20:06:33 +00:00
Implemented layer element saving
Added a working setting to the brush element
This commit is contained in:
1 parent
275d2b32a6
commit
1a44e34d16
24 files changed
+440
-85
No files matched your search
@@ -1,4 +1,7 @@
|
||||
using Artemis.Core.Models.Profile;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Artemis.Core.Models.Profile;
|
||||
using Artemis.Core.Plugins.Exceptions;
|
||||
using Artemis.Core.Plugins.LayerElement;
|
||||
using Artemis.Core.Services.Interfaces;
|
||||
@@ -17,28 +20,41 @@ namespace Artemis.Core.Services
|
||||
_kernel = kernel;
|
||||
}
|
||||
|
||||
public LayerElement InstantiateLayerElement(Layer layer, LayerElementDescriptor layerElementDescriptor, string settings)
|
||||
public LayerElement InstantiateLayerElement(Layer layer, LayerElementDescriptor layerElementDescriptor, string settings, Guid? guid)
|
||||
{
|
||||
// Deserialize the settings, if provided
|
||||
object deserializedSettings = null;
|
||||
if (settings != null)
|
||||
if (guid == null)
|
||||
guid = Guid.NewGuid();
|
||||
|
||||
// Determine the settings type declared by the layer element
|
||||
object settingsInstance = null;
|
||||
var properties = layerElementDescriptor.LayerElementType.GetProperties();
|
||||
var settingsType = properties.FirstOrDefault(p => p.Name == "Settings" &&
|
||||
p.DeclaringType == layerElementDescriptor.LayerElementType)?.PropertyType;
|
||||
|
||||
// Deserialize the settings if provided, check for null in JSON as well
|
||||
if (settings != null && settings != "null")
|
||||
{
|
||||
var settingsType = layerElementDescriptor.LayerElementType.GetProperty(nameof(LayerElement.Settings))?.PropertyType;
|
||||
// Setting where provided but no settings type was found, something is wrong
|
||||
if (settingsType == null)
|
||||
{
|
||||
throw new ArtemisPluginException(
|
||||
layerElementDescriptor.LayerElementProvider.PluginInfo,
|
||||
$"Layer element of type {layerElementDescriptor.LayerElementType} has no Settings property."
|
||||
$"Settings where provided but layer element of type {layerElementDescriptor.LayerElementType.Name} has no Settings property."
|
||||
);
|
||||
}
|
||||
|
||||
deserializedSettings = JsonConvert.DeserializeObject(settings, settingsType);
|
||||
settingsInstance = JsonConvert.DeserializeObject(settings, settingsType);
|
||||
}
|
||||
// If no settings found, provide a fresh instance of the settings type
|
||||
else if (settingsType != null)
|
||||
{
|
||||
settingsInstance = Activator.CreateInstance(settingsType);
|
||||
}
|
||||
|
||||
var arguments = new IParameter[]
|
||||
{
|
||||
new ConstructorArgument("layer", layer),
|
||||
new ConstructorArgument("settings", deserializedSettings),
|
||||
new ConstructorArgument("guid", guid.Value),
|
||||
new ConstructorArgument("settings", settingsInstance),
|
||||
new ConstructorArgument("descriptor", layerElementDescriptor)
|
||||
};
|
||||
var layerElement = (LayerElement) _kernel.Get(layerElementDescriptor.LayerElementType, arguments);
|
||||
@@ -46,5 +62,11 @@ namespace Artemis.Core.Services
|
||||
|
||||
return layerElement;
|
||||
}
|
||||
|
||||
public void RemoveLayerElement(Layer layer, LayerElement layerElement)
|
||||
{
|
||||
layer.RemoveLayerElement(layerElement);
|
||||
layerElement.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user