Implemented layer element saving

Added a working setting to the brush element
This commit is contained in:
Robert committed 2019-12-04 13:26:18 +01:00
1 parent 275d2b32a6
commit 1a44e34d16
24 files changed
+440 -85

No files matched your search

+32 -10
View File
@@ -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();
}
}
}