UI - Centralized default editors registration into a service

Display conditions - Added more test operators 
Display conditions - Implemented operator selection
Display conditions - Implemented property selection and rules
This commit is contained in:
Robert committed 2020-07-06 15:21:57 +02:00
1 parent 71f6706eec
commit f944a675f1
26 files changed
+470 -179

No files matched your search

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using Artemis.Core.Plugins.Models;
using Artemis.Core.Services.Interfaces;
@@ -8,6 +9,24 @@ namespace Artemis.Core.Models.Profile.Conditions
{
public abstract class DisplayConditionOperator
{
/// <summary>
/// A read-only collection containing all primitive number types
/// </summary>
protected static IReadOnlyCollection<Type> NumberTypes = new List<Type>
{
typeof(sbyte),
typeof(byte),
typeof(short),
typeof(ushort),
typeof(int),
typeof(uint),
typeof(long),
typeof(ulong),
typeof(float),
typeof(double),
typeof(decimal)
};
private IDataModelService _dataModelService;
private bool _registered;
@@ -25,12 +44,12 @@ namespace Artemis.Core.Models.Profile.Conditions
/// <summary>
/// Gets or sets the description of this logical operator
/// </summary>
public string Description { get; set; }
public abstract string Description { get; }
/// <summary>
/// Gets or sets the icon of this logical operator
/// </summary>
public string Icon { get; set; }
public abstract string Icon { get; }
/// <summary>
/// Creates a binary expression comparing two types
@@ -69,5 +88,12 @@ namespace Artemis.Core.Models.Profile.Conditions
// Profile editor service will call Unsubscribe
_dataModelService.RemoveConditionOperator(this);
}
public bool SupportsType(Type type)
{
if (type == null)
return true;
return CompatibleTypes.Any(t => t.IsAssignableFrom(type));
}
}
}
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class EqualsConditionOperator : DisplayConditionOperator
{
public override IReadOnlyCollection<Type> CompatibleTypes => new List<Type> {typeof(object)};
public override string Description => "Equals";
public override string Icon => "Equal";
public override BinaryExpression CreateExpression(Type leftSideType, Type rightSideType)
{
var leftSideParameter = Expression.Parameter(leftSideType, "a");
var rightSideParameter = Expression.Parameter(rightSideType, "b");
return Expression.Equal(leftSideParameter, rightSideParameter);
}
}
}
@@ -6,20 +6,10 @@ namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class GreaterThanConditionOperator : DisplayConditionOperator
{
public override IReadOnlyCollection<Type> CompatibleTypes => new List<Type>
{
typeof(sbyte),
typeof(byte),
typeof(short),
typeof(ushort),
typeof(int),
typeof(uint),
typeof(long),
typeof(ulong),
typeof(float),
typeof(double),
typeof(decimal)
};
public override IReadOnlyCollection<Type> CompatibleTypes => NumberTypes;
public override string Description => "Is greater than";
public override string Icon => "GreaterThan";
public override BinaryExpression CreateExpression(Type leftSideType, Type rightSideType)
{
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class GreaterThanOrEqualConditionOperator : DisplayConditionOperator
{
public override IReadOnlyCollection<Type> CompatibleTypes => NumberTypes;
public override string Description => "Is greater than or equal to";
public override string Icon => "GreaterThanOrEqual";
public override BinaryExpression CreateExpression(Type leftSideType, Type rightSideType)
{
var leftSideParameter = Expression.Parameter(leftSideType, "a");
var rightSideParameter = Expression.Parameter(rightSideType, "b");
return Expression.GreaterThanOrEqual(leftSideParameter, rightSideParameter);
}
}
}
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class LessThanConditionOperator : DisplayConditionOperator
{
public override IReadOnlyCollection<Type> CompatibleTypes => NumberTypes;
public override string Description => "Is less than";
public override string Icon => "LessThan";
public override BinaryExpression CreateExpression(Type leftSideType, Type rightSideType)
{
var leftSideParameter = Expression.Parameter(leftSideType, "a");
var rightSideParameter = Expression.Parameter(rightSideType, "b");
return Expression.LessThan(leftSideParameter, rightSideParameter);
}
}
}
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class LessThanOrEqualConditionOperator : DisplayConditionOperator
{
public override IReadOnlyCollection<Type> CompatibleTypes => NumberTypes;
public override string Description => "Is less than or equal to";
public override string Icon => "LessThanOrEqual";
public override BinaryExpression CreateExpression(Type leftSideType, Type rightSideType)
{
var leftSideParameter = Expression.Parameter(leftSideType, "a");
var rightSideParameter = Expression.Parameter(rightSideType, "b");
return Expression.LessThanOrEqual(leftSideParameter, rightSideParameter);
}
}
}
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class NotEqualConditionOperator : DisplayConditionOperator
{
public override IReadOnlyCollection<Type> CompatibleTypes => new List<Type> { typeof(object) };
public override string Description => "Does not equal";
public override string Icon => "NotEqualVariant";
public override BinaryExpression CreateExpression(Type leftSideType, Type rightSideType)
{
var leftSideParameter = Expression.Parameter(leftSideType, "a");
var rightSideParameter = Expression.Parameter(rightSideType, "b");
return Expression.NotEqual(leftSideParameter, rightSideParameter);
}
}
}