Data model visualization - Simplified and improved VMs

Layer conditions - Added left side property selection
This commit is contained in:
SpoinkyNL committed 2020-07-05 15:34:16 +02:00
1 parent 55555ed6a8
commit 4e1a09308f
38 files changed
+908 -359

No files matched your search

@@ -0,0 +1,36 @@
using System.Collections.Generic;
using System.Linq;
namespace Artemis.Core.Models.Profile.Conditions.Abstract
{
public abstract class DisplayConditionPart
{
private readonly List<DisplayConditionPart> _children;
protected DisplayConditionPart()
{
_children = new List<DisplayConditionPart>();
}
public DisplayConditionPart Parent { get; set; }
public IReadOnlyList<DisplayConditionPart> Children => _children.AsReadOnly();
public void AddChild(DisplayConditionPart displayConditionPart)
{
if (!_children.Contains(displayConditionPart))
{
displayConditionPart.Parent = this;
_children.Add(displayConditionPart);
}
}
public void RemoveChild(DisplayConditionPart displayConditionPart)
{
if (_children.Contains(displayConditionPart))
{
displayConditionPart.Parent = null;
_children.Remove(displayConditionPart);
}
}
}
}
@@ -1,14 +0,0 @@
using System.Collections.Generic;
namespace Artemis.Core.Models.Profile.Conditions.Abstract
{
public abstract class LayerConditionPart
{
protected LayerConditionPart()
{
Children = new List<LayerConditionPart>();
}
public List<LayerConditionPart> Children { get; set; }
}
}
@@ -4,9 +4,9 @@ using Artemis.Core.Plugins.Abstract.DataModels;
namespace Artemis.Core.Models.Profile.Conditions
{
public class LayerCondition
public class DisplayCondition
{
public Expression<Func<DataModel, bool>> ExpressionTree { get; set; }
public LayerConditionGroup RootGroup { get; set; }
public DisplayConditionGroup RootGroup { get; set; }
}
}
@@ -2,7 +2,7 @@
namespace Artemis.Core.Models.Profile.Conditions
{
public class LayerConditionGroup : LayerConditionPart
public class DisplayConditionGroup : DisplayConditionPart
{
public BooleanOperator BooleanOperator { get; set; }
}
@@ -2,7 +2,7 @@
namespace Artemis.Core.Models.Profile.Conditions
{
public class LayerConditionListStatement : LayerConditionPart
public class DisplayConditionListPredicate : DisplayConditionPart
{
public ListOperator ListOperator { get; set; }
@@ -6,7 +6,7 @@ using Artemis.Core.Services.Interfaces;
namespace Artemis.Core.Models.Profile.Conditions
{
public abstract class LayerConditionOperator
public abstract class DisplayConditionOperator
{
private IDataModelService _dataModelService;
private bool _registered;
@@ -3,12 +3,12 @@ using Artemis.Core.Models.Profile.Conditions.Abstract;
namespace Artemis.Core.Models.Profile.Conditions
{
public class LayerConditionStatement : LayerConditionPart
public class DisplayConditionPredicate : DisplayConditionPart
{
public Guid DataModelGuid { get; set; }
public string PropertyPath { get; set; }
public LayerConditionOperator Operator { get; set; }
public DisplayConditionOperator Operator { get; set; }
public object Value { get; set; }
}
}
@@ -4,7 +4,7 @@ using System.Linq.Expressions;
namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class GreaterThanConditionOperator : LayerConditionOperator
public class GreaterThanConditionOperator : DisplayConditionOperator
{
public override IReadOnlyCollection<Type> CompatibleTypes => new List<Type>
{
+11
View File
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Artemis.Core.Extensions;
using Artemis.Core.Models.Profile.Conditions;
using Artemis.Core.Models.Profile.LayerProperties;
using Artemis.Core.Models.Profile.LayerProperties.Attributes;
using Artemis.Core.Models.Profile.LayerShapes;
@@ -22,6 +23,7 @@ namespace Artemis.Core.Models.Profile
/// </summary>
public sealed class Layer : EffectProfileElement
{
private DisplayConditionGroup _displayConditionGroup;
private LayerGeneralProperties _general;
private SKBitmap _layerBitmap;
private BaseLayerBrush _layerBrush;
@@ -115,6 +117,15 @@ namespace Artemis.Core.Models.Profile
internal set => SetAndNotify(ref _layerBrush, value);
}
/// <summary>
/// Gets or sets the root display condition group
/// </summary>
public DisplayConditionGroup DisplayConditionGroup
{
get => _displayConditionGroup;
set => SetAndNotify(ref _displayConditionGroup, value);
}
public override string ToString()
{
return $"[Layer] {nameof(Name)}: {Name}, {nameof(Order)}: {Order}";
+25 -15
View File
@@ -21,13 +21,13 @@ namespace Artemis.Core.Services
{
private readonly List<DataModel> _dataModelExpansions;
private readonly IPluginService _pluginService;
private readonly List<LayerConditionOperator> _registeredConditionOperators;
private readonly List<DisplayConditionOperator> _registeredConditionOperators;
internal DataModelService(IPluginService pluginService)
{
_pluginService = pluginService;
_dataModelExpansions = new List<DataModel>();
_registeredConditionOperators = new List<LayerConditionOperator>();
_registeredConditionOperators = new List<DisplayConditionOperator>();
_pluginService.PluginEnabled += PluginServiceOnPluginEnabled;
_pluginService.PluginDisabled += PluginServiceOnPluginDisabled;
@@ -81,40 +81,50 @@ namespace Artemis.Core.Services
return null;
}
public bool GetPluginExtendsDataModel(Plugin plugin)
{
if (plugin is Module module)
return module.InternalExpandsMainDataModel;
if (plugin is BaseDataModelExpansion)
return true;
public void RegisterConditionOperator(PluginInfo pluginInfo, LayerConditionOperator layerConditionOperator)
return false;
}
public void RegisterConditionOperator(PluginInfo pluginInfo, DisplayConditionOperator displayConditionOperator)
{
if (pluginInfo == null)
throw new ArgumentNullException(nameof(pluginInfo));
if (layerConditionOperator == null)
throw new ArgumentNullException(nameof(layerConditionOperator));
if (displayConditionOperator == null)
throw new ArgumentNullException(nameof(displayConditionOperator));
lock (_registeredConditionOperators)
{
if (_registeredConditionOperators.Contains(layerConditionOperator))
if (_registeredConditionOperators.Contains(displayConditionOperator))
return;
layerConditionOperator.Register(pluginInfo, this);
_registeredConditionOperators.Add(layerConditionOperator);
displayConditionOperator.Register(pluginInfo, this);
_registeredConditionOperators.Add(displayConditionOperator);
}
}
public void RemoveConditionOperator(LayerConditionOperator layerConditionOperator)
public void RemoveConditionOperator(DisplayConditionOperator displayConditionOperator)
{
if (layerConditionOperator == null)
throw new ArgumentNullException(nameof(layerConditionOperator));
if (displayConditionOperator == null)
throw new ArgumentNullException(nameof(displayConditionOperator));
lock (_registeredConditionOperators)
{
if (!_registeredConditionOperators.Contains(layerConditionOperator))
if (!_registeredConditionOperators.Contains(displayConditionOperator))
return;
layerConditionOperator.Unsubscribe();
_registeredConditionOperators.Remove(layerConditionOperator);
displayConditionOperator.Unsubscribe();
_registeredConditionOperators.Remove(displayConditionOperator);
}
}
public List<LayerConditionOperator> GetCompatibleConditionOperators(Type type)
public List<DisplayConditionOperator> GetCompatibleConditionOperators(Type type)
{
lock (_registeredConditionOperators)
{
@@ -29,17 +29,24 @@ namespace Artemis.Core.Services.Interfaces
/// <param name="plugin">Should be a module with a data model or a data model expansion</param>
DataModel GetPluginDataModel(Plugin plugin);
/// <summary>
/// Determines whether the given plugin expands the main data model
/// </summary>
/// <param name="plugin"></param>
/// <returns></returns>
bool GetPluginExtendsDataModel(Plugin plugin);
/// <summary>
/// Registers a new condition operator for use in layer conditions
/// </summary>
/// <param name="pluginInfo">The PluginInfo of the plugin this condition operator belongs to</param>
/// <param name="layerConditionOperator">The condition operator to register</param>
void RegisterConditionOperator([NotNull] PluginInfo pluginInfo, [NotNull] LayerConditionOperator layerConditionOperator);
/// <param name="displayConditionOperator">The condition operator to register</param>
void RegisterConditionOperator([NotNull] PluginInfo pluginInfo, [NotNull] DisplayConditionOperator displayConditionOperator);
/// <summary>
/// Removes a condition operator so it is no longer available for use in layer conditions
/// </summary>
/// <param name="layerConditionOperator">The layer condition operator to remove</param>
void RemoveConditionOperator([NotNull] LayerConditionOperator layerConditionOperator);
/// <param name="displayConditionOperator">The layer condition operator to remove</param>
void RemoveConditionOperator([NotNull] DisplayConditionOperator displayConditionOperator);
}
}