From a646ff95ed66245a460b43469d5722d09b2d7ed0 Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Sat, 19 Sep 2020 11:43:49 +0200 Subject: [PATCH] Data model - Improved encapsulation Conditions - Renamed from DisplayConditions to DataModelConditions to better match their nature Core - More documentation --- .../Converters/GeneralDataBindingConverter.cs | 9 +- ...itionPart.cs => DataModelConditionPart.cs} | 34 +-- ...ionGroup.cs => DataModelConditionGroup.cs} | 67 +++-- ...itionList.cs => DataModelConditionList.cs} | 155 ++++++++---- ....cs => DataModelConditionListPredicate.cs} | 239 +++++++++++------- ...cate.cs => DataModelConditionPredicate.cs} | 17 +- .../DataBindings/DataBindingConverter.cs | 7 +- .../Models/Profile/RenderProfileElement.cs | 20 +- .../Attributes/DataModelIgnoreAttribute.cs | 3 + .../Attributes/DataModelProperty.cs | 3 + .../Plugins/DataModelExpansions/DataModel.cs | 32 +-- .../Internal/BaseDataModelExpansion.cs | 12 +- .../BrushConfigurationViewModel.cs | 10 + .../Plugins/LayerBrushes/LayerBrush.cs | 10 +- .../LayerBrushes/LayerBrushDescriptor.cs | 17 +- .../Plugins/LayerBrushes/PerLedLayerBrush.cs | 11 +- .../EffectConfigurationViewModel.cs | 10 + .../Plugins/LayerEffects/LayerEffect.cs | 5 +- .../BooleanActivationRequirement.cs | 1 + .../ProcessActivationRequirement.cs | 1 + src/Artemis.Core/Plugins/Modules/Module.cs | 4 +- .../Plugins/Modules/ProfileModule.cs | 19 +- .../Plugins/PluginConfigurationViewModel.cs | 10 + src/Artemis.Core/Plugins/PluginInfo.cs | 5 +- .../Plugins/PluginUpdateRegistration.cs | 4 +- .../Plugins/Settings/PluginSetting.cs | 13 +- src/Artemis.Core/RGB.NET/BitmapBrush.cs | 14 +- .../Services/Interfaces/IPluginService.cs | 4 +- .../Storage/Interfaces/ISurfaceService.cs | 3 + .../Utilities/DeserializationLogger.cs | 18 +- src/Artemis.Core/Utilities/Easings.cs | 3 +- .../Shared/DataModelVisualizationViewModel.cs | 2 +- .../Ninject/Factories/IVMFactory.cs | 8 +- .../Abstract/DisplayConditionViewModel.cs | 4 +- .../DisplayConditionGroupViewModel.cs | 32 +-- .../DisplayConditionListPredicateViewModel.cs | 52 ++-- .../DisplayConditionListViewModel.cs | 28 +- .../DisplayConditionPredicateViewModel.cs | 44 ++-- .../DisplayConditionsViewModel.cs | 6 +- 39 files changed, 581 insertions(+), 355 deletions(-) rename src/Artemis.Core/Models/Profile/Conditions/Abstract/{DisplayConditionPart.cs => DataModelConditionPart.cs} (59%) rename src/Artemis.Core/Models/Profile/Conditions/{DisplayConditionGroup.cs => DataModelConditionGroup.cs} (72%) rename src/Artemis.Core/Models/Profile/Conditions/{DisplayConditionList.cs => DataModelConditionList.cs} (74%) rename src/Artemis.Core/Models/Profile/Conditions/{DisplayConditionListPredicate.cs => DataModelConditionListPredicate.cs} (81%) rename src/Artemis.Core/Models/Profile/Conditions/{DisplayConditionPredicate.cs => DataModelConditionPredicate.cs} (96%) diff --git a/src/Artemis.Core/DefaultTypes/DataBindings/Converters/GeneralDataBindingConverter.cs b/src/Artemis.Core/DefaultTypes/DataBindings/Converters/GeneralDataBindingConverter.cs index 16ef4bb8e..fed1be236 100644 --- a/src/Artemis.Core/DefaultTypes/DataBindings/Converters/GeneralDataBindingConverter.cs +++ b/src/Artemis.Core/DefaultTypes/DataBindings/Converters/GeneralDataBindingConverter.cs @@ -2,9 +2,16 @@ namespace Artemis.Core.DefaultTypes { - /// + /// + /// Represents a generic data binding converter that acts as the bridge between a + /// and a and does not support + /// sum or interpolation + /// public class GeneralDataBindingConverter : DataBindingConverter where T : ILayerProperty { + /// + /// Creates a new instance of the class + /// public GeneralDataBindingConverter() { SupportsSum = false; diff --git a/src/Artemis.Core/Models/Profile/Conditions/Abstract/DisplayConditionPart.cs b/src/Artemis.Core/Models/Profile/Conditions/Abstract/DataModelConditionPart.cs similarity index 59% rename from src/Artemis.Core/Models/Profile/Conditions/Abstract/DisplayConditionPart.cs rename to src/Artemis.Core/Models/Profile/Conditions/Abstract/DataModelConditionPart.cs index f751046d0..f9954b483 100644 --- a/src/Artemis.Core/Models/Profile/Conditions/Abstract/DisplayConditionPart.cs +++ b/src/Artemis.Core/Models/Profile/Conditions/Abstract/DataModelConditionPart.cs @@ -8,43 +8,43 @@ namespace Artemis.Core /// /// An abstract class for display condition parts /// - public abstract class DisplayConditionPart : IDisposable + public abstract class DataModelConditionPart : IDisposable { - private readonly List _children = new List(); + private readonly List _children = new List(); /// /// Gets the parent of this part /// - public DisplayConditionPart Parent { get; internal set; } + public DataModelConditionPart Parent { get; internal set; } /// /// Gets the children of this part /// - public IReadOnlyList Children => _children.AsReadOnly(); + public IReadOnlyList Children => _children.AsReadOnly(); /// /// Adds a child to the display condition part's collection /// - /// - public void AddChild(DisplayConditionPart displayConditionPart) + /// + public void AddChild(DataModelConditionPart dataModelConditionPart) { - if (!_children.Contains(displayConditionPart)) + if (!_children.Contains(dataModelConditionPart)) { - displayConditionPart.Parent = this; - _children.Add(displayConditionPart); + dataModelConditionPart.Parent = this; + _children.Add(dataModelConditionPart); } } /// /// Removes a child from the display condition part's collection /// - /// The child to remove - public void RemoveChild(DisplayConditionPart displayConditionPart) + /// The child to remove + public void RemoveChild(DataModelConditionPart dataModelConditionPart) { - if (_children.Contains(displayConditionPart)) + if (_children.Contains(dataModelConditionPart)) { - displayConditionPart.Parent = null; - _children.Remove(displayConditionPart); + dataModelConditionPart.Parent = null; + _children.Remove(dataModelConditionPart); } } @@ -59,13 +59,16 @@ namespace Artemis.Core /// /// /// - public abstract bool EvaluateObject(object target); + internal abstract bool EvaluateObject(object target); internal abstract void Save(); internal abstract DisplayConditionPartEntity GetEntity(); #region IDisposable + /// + /// Disposed the condition part + /// protected virtual void Dispose(bool disposing) { if (disposing) @@ -73,6 +76,7 @@ namespace Artemis.Core } } + /// public void Dispose() { Dispose(true); diff --git a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionGroup.cs b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionGroup.cs similarity index 72% rename from src/Artemis.Core/Models/Profile/Conditions/DisplayConditionGroup.cs rename to src/Artemis.Core/Models/Profile/Conditions/DataModelConditionGroup.cs index 055a40b0b..9a2f3c6ef 100644 --- a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionGroup.cs +++ b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionGroup.cs @@ -6,29 +6,29 @@ using Artemis.Storage.Entities.Profile.Conditions; namespace Artemis.Core { /// - /// A group containing zero to many s which it evaluates using a boolean specific + /// A group containing zero to many s which it evaluates using a boolean specific /// operator /// - public class DisplayConditionGroup : DisplayConditionPart + public class DataModelConditionGroup : DataModelConditionPart { private bool _disposed; /// - /// Creates a new instance of the class + /// Creates a new instance of the class /// /// - public DisplayConditionGroup(DisplayConditionPart parent) + public DataModelConditionGroup(DataModelConditionPart parent) { Parent = parent; Entity = new DisplayConditionGroupEntity(); } /// - /// Creates a new instance of the class + /// Creates a new instance of the class /// /// /// - public DisplayConditionGroup(DisplayConditionPart parent, DisplayConditionGroupEntity entity) + public DataModelConditionGroup(DataModelConditionPart parent, DisplayConditionGroupEntity entity) { Parent = parent; Entity = entity; @@ -37,13 +37,13 @@ namespace Artemis.Core foreach (var childEntity in Entity.Children) { if (childEntity is DisplayConditionGroupEntity groupEntity) - AddChild(new DisplayConditionGroup(this, groupEntity)); + AddChild(new DataModelConditionGroup(this, groupEntity)); else if (childEntity is DisplayConditionListEntity listEntity) - AddChild(new DisplayConditionList(this, listEntity)); + AddChild(new DataModelConditionList(this, listEntity)); else if (childEntity is DisplayConditionPredicateEntity predicateEntity) - AddChild(new DisplayConditionPredicate(this, predicateEntity)); + AddChild(new DataModelConditionPredicate(this, predicateEntity)); else if (childEntity is DisplayConditionListPredicateEntity listPredicateEntity) - AddChild(new DisplayConditionListPredicate(this, listPredicateEntity)); + AddChild(new DataModelConditionListPredicate(this, listPredicateEntity)); } } @@ -82,8 +82,22 @@ namespace Artemis.Core } } + #region IDisposable + /// - public override bool EvaluateObject(object target) + protected override void Dispose(bool disposing) + { + _disposed = true; + foreach (var child in Children) + child.Dispose(); + + base.Dispose(disposing); + } + + #endregion + + /// + internal override bool EvaluateObject(object target) { if (_disposed) throw new ObjectDisposedException("DisplayConditionGroup"); @@ -119,26 +133,31 @@ namespace Artemis.Core { return Entity; } - - #region IDisposable - - protected override void Dispose(bool disposing) - { - _disposed = true; - foreach (var child in Children) - child.Dispose(); - - base.Dispose(disposing); - } - - #endregion } + /// + /// Represents a boolean operator + /// public enum BooleanOperator { + /// + /// All the conditions in the group should evaluate to true + /// And, + + /// + /// Any of the conditions in the group should evaluate to true + /// Or, + + /// + /// All the conditions in the group should evaluate to false + /// AndNot, + + /// + /// Any of the conditions in the group should evaluate to false + /// OrNot } } \ No newline at end of file diff --git a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionList.cs b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionList.cs similarity index 74% rename from src/Artemis.Core/Models/Profile/Conditions/DisplayConditionList.cs rename to src/Artemis.Core/Models/Profile/Conditions/DataModelConditionList.cs index 5ecbc607c..eda2ba6ee 100644 --- a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionList.cs +++ b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionList.cs @@ -8,11 +8,18 @@ using Artemis.Storage.Entities.Profile.Conditions; namespace Artemis.Core { - public class DisplayConditionList : DisplayConditionPart + /// + /// A condition that evaluates one or more predicates inside a list + /// + public class DataModelConditionList : DataModelConditionPart { private bool _disposed; - public DisplayConditionList(DisplayConditionPart parent) + /// + /// Creates a new instance of the class + /// + /// + public DataModelConditionList(DataModelConditionPart parent) { Parent = parent; Entity = new DisplayConditionListEntity(); @@ -20,7 +27,7 @@ namespace Artemis.Core Initialize(); } - public DisplayConditionList(DisplayConditionPart parent, DisplayConditionListEntity entity) + internal DataModelConditionList(DataModelConditionPart parent, DisplayConditionListEntity entity) { Parent = parent; Entity = entity; @@ -29,14 +36,29 @@ namespace Artemis.Core Initialize(); } - public DisplayConditionListEntity Entity { get; set; } + internal DisplayConditionListEntity Entity { get; set; } + /// + /// Gets or sets the list operator + /// public ListOperator ListOperator { get; set; } + + /// + /// Gets the currently used instance of the list data model + /// public DataModel ListDataModel { get; private set; } + + /// + /// Gets the path of the list property in the + /// public string ListPropertyPath { get; private set; } - public Func CompiledListAccessor { get; set; } + /// + /// Gets the compiled function that accesses the list this condition evaluates on + /// + public Func CompiledListAccessor { get; private set; } + /// public override bool Evaluate() { if (_disposed) @@ -48,27 +70,11 @@ namespace Artemis.Core return EvaluateObject(CompiledListAccessor(ListDataModel)); } - public override bool EvaluateObject(object target) - { - if (_disposed) - throw new ObjectDisposedException("DisplayConditionList"); - - if (!Children.Any()) - return false; - if (!(target is IList list)) - return false; - - var objectList = list.Cast(); - return ListOperator switch - { - ListOperator.Any => objectList.Any(o => Children[0].EvaluateObject(o)), - ListOperator.All => objectList.All(o => Children[0].EvaluateObject(o)), - ListOperator.None => objectList.Any(o => !Children[0].EvaluateObject(o)), - ListOperator.Count => false, - _ => throw new ArgumentOutOfRangeException() - }; - } - + /// + /// Updates the list the predicate is evaluated on + /// + /// The data model of the list + /// The path pointing to the list inside the list public void UpdateList(DataModel dataModel, string path) { if (_disposed) @@ -98,24 +104,49 @@ namespace Artemis.Core return; // Create a new root group - AddChild(new DisplayConditionGroup(this)); + AddChild(new DataModelConditionGroup(this)); CreateExpression(); } - public void CreateExpression() + #region IDisposable + + /// + protected override void Dispose(bool disposing) + { + _disposed = true; + + DataModelStore.DataModelAdded -= DataModelStoreOnDataModelAdded; + DataModelStore.DataModelRemoved -= DataModelStoreOnDataModelRemoved; + + foreach (var child in Children) + child.Dispose(); + + base.Dispose(disposing); + } + + #endregion + + internal override bool EvaluateObject(object target) { if (_disposed) throw new ObjectDisposedException("DisplayConditionList"); - var parameter = Expression.Parameter(typeof(object), "listDataModel"); - var accessor = ListPropertyPath.Split('.').Aggregate( - Expression.Convert(parameter, ListDataModel.GetType()), - (expression, s) => Expression.Convert(Expression.Property(expression, s), typeof(IList))); + if (!Children.Any()) + return false; + if (!(target is IList list)) + return false; - var lambda = Expression.Lambda>(accessor, parameter); - CompiledListAccessor = lambda.Compile(); + var objectList = list.Cast(); + return ListOperator switch + { + ListOperator.Any => objectList.Any(o => Children[0].EvaluateObject(o)), + ListOperator.All => objectList.All(o => Children[0].EvaluateObject(o)), + ListOperator.None => objectList.Any(o => !Children[0].EvaluateObject(o)), + ListOperator.Count => false, + _ => throw new ArgumentOutOfRangeException() + }; } - + internal override void Save() { // Target list @@ -159,14 +190,28 @@ namespace Artemis.Core // There should only be one child and it should be a group if (Entity.Children.SingleOrDefault() is DisplayConditionGroupEntity rootGroup) - AddChild(new DisplayConditionGroup(this, rootGroup)); + AddChild(new DataModelConditionGroup(this, rootGroup)); else { Entity.Children.Clear(); - AddChild(new DisplayConditionGroup(this)); + AddChild(new DataModelConditionGroup(this)); } } + private void CreateExpression() + { + if (_disposed) + throw new ObjectDisposedException("DisplayConditionList"); + + var parameter = Expression.Parameter(typeof(object), "listDataModel"); + var accessor = ListPropertyPath.Split('.').Aggregate( + Expression.Convert(parameter, ListDataModel.GetType()), + (expression, s) => Expression.Convert(Expression.Property(expression, s), typeof(IList))); + + var lambda = Expression.Lambda>(accessor, parameter); + CompiledListAccessor = lambda.Compile(); + } + #region Event handlers @@ -191,31 +236,31 @@ namespace Artemis.Core } #endregion - - #region IDisposable - - /// - protected override void Dispose(bool disposing) - { - _disposed = true; - - DataModelStore.DataModelAdded -= DataModelStoreOnDataModelAdded; - DataModelStore.DataModelRemoved -= DataModelStoreOnDataModelRemoved; - - foreach (var child in Children) - child.Dispose(); - - base.Dispose(disposing); - } - - #endregion } + /// + /// Represents a list operator + /// public enum ListOperator { + /// + /// Any of the list items should evaluate to true + /// Any, + + /// + /// All of the list items should evaluate to true + /// All, + + /// + /// None of the list items should evaluate to true + /// None, + + /// + /// A specific amount of the list items should evaluate to true + /// Count } } \ No newline at end of file diff --git a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionListPredicate.cs b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionListPredicate.cs similarity index 81% rename from src/Artemis.Core/Models/Profile/Conditions/DisplayConditionListPredicate.cs rename to src/Artemis.Core/Models/Profile/Conditions/DataModelConditionListPredicate.cs index ef93a992b..5b6cd275c 100644 --- a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionListPredicate.cs +++ b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionListPredicate.cs @@ -8,9 +8,17 @@ using Newtonsoft.Json; namespace Artemis.Core { - public class DisplayConditionListPredicate : DisplayConditionPart + /// + /// A predicate like evaluated inside a + /// + public class DataModelConditionListPredicate : DataModelConditionPart { - public DisplayConditionListPredicate(DisplayConditionPart parent, ProfileRightSideType predicateType) + /// + /// Creates a new instance of the class + /// + /// + /// + public DataModelConditionListPredicate(DataModelConditionPart parent, ProfileRightSideType predicateType) { Parent = parent; PredicateType = predicateType; @@ -20,7 +28,7 @@ namespace Artemis.Core Initialize(); } - public DisplayConditionListPredicate(DisplayConditionPart parent, DisplayConditionListPredicateEntity entity) + internal DataModelConditionListPredicate(DataModelConditionPart parent, DisplayConditionListPredicateEntity entity) { Parent = parent; Entity = entity; @@ -30,27 +38,150 @@ namespace Artemis.Core Initialize(); } - public DisplayConditionListPredicateEntity Entity { get; set; } + internal DisplayConditionListPredicateEntity Entity { get; set; } + /// + /// Gets or sets the predicate type + /// public ProfileRightSideType PredicateType { get; set; } + + /// + /// Gets the operator + /// public ConditionOperator Operator { get; private set; } + /// + /// Gets the type of the content of the list this predicate is evaluated on + /// public Type ListType { get; private set; } + + /// + /// Gets the currently used instance of the list data model + /// public DataModel ListDataModel { get; private set; } + + /// + /// Gets the path of the list property in the + /// public string ListPropertyPath { get; private set; } + /// + /// Gets the path of the left property in the + /// public string LeftPropertyPath { get; private set; } + + /// + /// Gets the path of the right property in the + /// public string RightPropertyPath { get; private set; } + + /// + /// Gets the right static value, only used it is + /// + /// public object RightStaticValue { get; private set; } + /// + /// Gets the compiled function that evaluates this predicate + /// public Func CompiledListPredicate { get; private set; } - public void ApplyParentList() + /// + /// Updates the left side of the predicate + /// + /// The path pointing to the left side value inside the list + public void UpdateLeftSide(string path) + { + if (!ListContainsInnerPath(path)) + throw new ArtemisCoreException($"List type {ListType.Name} does not contain path {path}"); + + LeftPropertyPath = path; + + ValidateOperator(); + ValidateRightSide(); + CreateExpression(); + } + + /// + /// Updates the right side of the predicate, makes the predicate dynamic and re-compiles the expression + /// + /// The path pointing to the right side value inside the list + public void UpdateRightSideDynamic(string path) + { + if (!ListContainsInnerPath(path)) + throw new ArtemisCoreException($"List type {ListType.Name} does not contain path {path}"); + + PredicateType = ProfileRightSideType.Dynamic; + RightPropertyPath = path; + + CreateExpression(); + } + + /// + /// Updates the right side of the predicate, makes the predicate static and re-compiles the expression + /// + /// The right side value to use + public void UpdateRightSideStatic(object staticValue) + { + PredicateType = ProfileRightSideType.Static; + RightPropertyPath = null; + + SetStaticValue(staticValue); + CreateExpression(); + } + + /// + /// Updates the operator of the predicate and re-compiles the expression + /// + /// + public void UpdateOperator(ConditionOperator conditionOperator) + { + if (conditionOperator == null) + { + Operator = null; + return; + } + + if (LeftPropertyPath == null) + { + Operator = conditionOperator; + return; + } + + var leftType = GetTypeAtInnerPath(LeftPropertyPath); + if (conditionOperator.SupportsType(leftType)) + Operator = conditionOperator; + + CreateExpression(); + } + + /// + /// Not supported for list predicates, always returns false + /// + public override bool Evaluate() + { + return false; + } + + #region IDisposable + + /// + protected override void Dispose(bool disposing) + { + ConditionOperatorStore.ConditionOperatorAdded -= ConditionOperatorStoreOnConditionOperatorAdded; + ConditionOperatorStore.ConditionOperatorRemoved -= ConditionOperatorStoreOnConditionOperatorRemoved; + + base.Dispose(disposing); + } + + #endregion + + internal void ApplyParentList() { var current = Parent; while (current != null) { - if (current is DisplayConditionList parentList) + if (current is DataModelConditionList parentList) { UpdateList(parentList.ListDataModel, parentList.ListPropertyPath); return; @@ -60,7 +191,7 @@ namespace Artemis.Core } } - public void UpdateList(DataModel dataModel, string path) + internal void UpdateList(DataModel dataModel, string path) { if (dataModel != null && path == null) throw new ArtemisCoreException("If a data model is provided, a path is also required"); @@ -89,70 +220,19 @@ namespace Artemis.Core CreateExpression(); } - public void UpdateLeftSide(string path) - { - if (!ListContainsInnerPath(path)) - throw new ArtemisCoreException($"List type {ListType.Name} does not contain path {path}"); - - LeftPropertyPath = path; - - ValidateOperator(); - ValidateRightSide(); - CreateExpression(); - } - - public void UpdateRightSideDynamic(string path) - { - if (!ListContainsInnerPath(path)) - throw new ArtemisCoreException($"List type {ListType.Name} does not contain path {path}"); - - PredicateType = ProfileRightSideType.Dynamic; - RightPropertyPath = path; - - CreateExpression(); - } - - public void UpdateRightSideStatic(object staticValue) - { - PredicateType = ProfileRightSideType.Static; - RightPropertyPath = null; - - SetStaticValue(staticValue); - CreateExpression(); - } - - public void UpdateOperator(ConditionOperator conditionOperator) - { - if (conditionOperator == null) - { - Operator = null; - return; - } - - if (LeftPropertyPath == null) - { - Operator = conditionOperator; - return; - } - - var leftType = GetTypeAtInnerPath(LeftPropertyPath); - if (conditionOperator.SupportsType(leftType)) - Operator = conditionOperator; - - CreateExpression(); - } - - public override bool Evaluate() - { - return false; - } - - public override bool EvaluateObject(object target) + /// + /// Evaluates the condition part on the given target + /// + /// + /// An instance of the list described in and + /// + /// + internal override bool EvaluateObject(object target) { return CompiledListPredicate != null && CompiledListPredicate(target); } - public bool ListContainsInnerPath(string path) + internal bool ListContainsInnerPath(string path) { if (ListType == null) return false; @@ -171,7 +251,7 @@ namespace Artemis.Core return true; } - public Type GetTypeAtInnerPath(string path) + internal Type GetTypeAtInnerPath(string path) { if (!ListContainsInnerPath(path)) return null; @@ -210,6 +290,11 @@ namespace Artemis.Core } } + internal override DisplayConditionPartEntity GetEntity() + { + return Entity; + } + private void Initialize() { ConditionOperatorStore.ConditionOperatorAdded += ConditionOperatorStoreOnConditionOperatorAdded; @@ -270,11 +355,6 @@ namespace Artemis.Core } } - internal override DisplayConditionPartEntity GetEntity() - { - return Entity; - } - private void CreateExpression() { CompiledListPredicate = null; @@ -412,18 +492,5 @@ namespace Artemis.Core } #endregion - - #region IDisposable - - /// - protected override void Dispose(bool disposing) - { - ConditionOperatorStore.ConditionOperatorAdded -= ConditionOperatorStoreOnConditionOperatorAdded; - ConditionOperatorStore.ConditionOperatorRemoved -= ConditionOperatorStoreOnConditionOperatorRemoved; - - base.Dispose(disposing); - } - - #endregion } } \ No newline at end of file diff --git a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionPredicate.cs b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionPredicate.cs similarity index 96% rename from src/Artemis.Core/Models/Profile/Conditions/DisplayConditionPredicate.cs rename to src/Artemis.Core/Models/Profile/Conditions/DataModelConditionPredicate.cs index a86f57dc1..5af53d9cc 100644 --- a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionPredicate.cs +++ b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionPredicate.cs @@ -9,17 +9,17 @@ using Newtonsoft.Json; namespace Artemis.Core { /// - /// A predicate in a display condition using either two data model values or one data model value and a + /// A predicate in a data model condition using either two data model values or one data model value and a /// static value /// - public class DisplayConditionPredicate : DisplayConditionPart + public class DataModelConditionPredicate : DataModelConditionPart { /// - /// Creates a new instance of the class + /// Creates a new instance of the class /// /// /// - public DisplayConditionPredicate(DisplayConditionPart parent, ProfileRightSideType predicateType) + public DataModelConditionPredicate(DataModelConditionPart parent, ProfileRightSideType predicateType) { Parent = parent; PredicateType = predicateType; @@ -28,12 +28,7 @@ namespace Artemis.Core Initialize(); } - /// - /// Creates a new instance of the class - /// - /// - /// - public DisplayConditionPredicate(DisplayConditionPart parent, DisplayConditionPredicateEntity entity) + internal DataModelConditionPredicate(DataModelConditionPart parent, DisplayConditionPredicateEntity entity) { Parent = parent; Entity = entity; @@ -219,7 +214,7 @@ namespace Artemis.Core } /// - public override bool EvaluateObject(object target) + internal override bool EvaluateObject(object target) { return false; } diff --git a/src/Artemis.Core/Models/Profile/DataBindings/DataBindingConverter.cs b/src/Artemis.Core/Models/Profile/DataBindings/DataBindingConverter.cs index 380caba36..486c50632 100644 --- a/src/Artemis.Core/Models/Profile/DataBindings/DataBindingConverter.cs +++ b/src/Artemis.Core/Models/Profile/DataBindings/DataBindingConverter.cs @@ -11,15 +11,18 @@ namespace Artemis.Core public abstract class DataBindingConverter : IDataBindingConverter { /// - /// A dynamically compiled getter pointing to the data bound property + /// Gets a dynamically compiled getter pointing to the data bound property /// public Func GetExpression { get; private set; } /// - /// A dynamically compiled setter pointing to the data bound property + /// Gets a dynamically compiled setter pointing to the data bound property used for value types /// public Action ValueTypeSetExpression { get; private set; } + /// + /// Gets a dynamically compiled setter pointing to the data bound property used for reference types + /// public Action ReferenceTypeSetExpression { get; private set; } /// diff --git a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs index 674126fcd..f2eec3588 100644 --- a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs +++ b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs @@ -49,9 +49,9 @@ namespace Artemis.Core DisplayContinuously = RenderElementEntity.DisplayContinuously; AlwaysFinishTimeline = RenderElementEntity.AlwaysFinishTimeline; - DisplayConditionGroup = RenderElementEntity.RootDisplayCondition != null - ? new DisplayConditionGroup(null, RenderElementEntity.RootDisplayCondition) - : new DisplayConditionGroup(null); + DataModelConditionGroup = RenderElementEntity.RootDisplayCondition != null + ? new DataModelConditionGroup(null, RenderElementEntity.RootDisplayCondition) + : new DataModelConditionGroup(null); ActivateEffects(); } @@ -82,8 +82,8 @@ namespace Artemis.Core } // Conditions - RenderElementEntity.RootDisplayCondition = DisplayConditionGroup?.Entity; - DisplayConditionGroup?.Save(); + RenderElementEntity.RootDisplayCondition = DataModelConditionGroup?.Entity; + DataModelConditionGroup?.Save(); } #region Properties @@ -392,22 +392,22 @@ namespace Artemis.Core private set => SetAndNotify(ref _displayConditionMet, value); } - private DisplayConditionGroup _displayConditionGroup; + private DataModelConditionGroup _dataModelConditionGroup; private TimeSpan _timelinePosition; private bool _displayConditionMet; /// /// Gets or sets the root display condition group /// - public DisplayConditionGroup DisplayConditionGroup + public DataModelConditionGroup DataModelConditionGroup { - get => _displayConditionGroup; - set => SetAndNotify(ref _displayConditionGroup, value); + get => _dataModelConditionGroup; + set => SetAndNotify(ref _dataModelConditionGroup, value); } public void UpdateDisplayCondition() { - var conditionMet = DisplayConditionGroup == null || DisplayConditionGroup.Evaluate(); + var conditionMet = DataModelConditionGroup == null || DataModelConditionGroup.Evaluate(); if (conditionMet && !DisplayConditionMet) TimelinePosition = TimeSpan.Zero; diff --git a/src/Artemis.Core/Plugins/DataModelExpansions/Attributes/DataModelIgnoreAttribute.cs b/src/Artemis.Core/Plugins/DataModelExpansions/Attributes/DataModelIgnoreAttribute.cs index 63a0003b8..a9339b2ee 100644 --- a/src/Artemis.Core/Plugins/DataModelExpansions/Attributes/DataModelIgnoreAttribute.cs +++ b/src/Artemis.Core/Plugins/DataModelExpansions/Attributes/DataModelIgnoreAttribute.cs @@ -2,6 +2,9 @@ namespace Artemis.Core.DataModelExpansions { + /// + /// Represents an attribute that marks a data model property to be ignored by the UI + /// public class DataModelIgnoreAttribute : Attribute { } diff --git a/src/Artemis.Core/Plugins/DataModelExpansions/Attributes/DataModelProperty.cs b/src/Artemis.Core/Plugins/DataModelExpansions/Attributes/DataModelProperty.cs index ee627a080..6eae6b89b 100644 --- a/src/Artemis.Core/Plugins/DataModelExpansions/Attributes/DataModelProperty.cs +++ b/src/Artemis.Core/Plugins/DataModelExpansions/Attributes/DataModelProperty.cs @@ -2,6 +2,9 @@ namespace Artemis.Core.DataModelExpansions { + /// + /// Represents an attribute that describes a data model property + /// [AttributeUsage(AttributeTargets.Property)] public class DataModelPropertyAttribute : Attribute { diff --git a/src/Artemis.Core/Plugins/DataModelExpansions/DataModel.cs b/src/Artemis.Core/Plugins/DataModelExpansions/DataModel.cs index e0fbc4f35..e9a063eef 100644 --- a/src/Artemis.Core/Plugins/DataModelExpansions/DataModel.cs +++ b/src/Artemis.Core/Plugins/DataModelExpansions/DataModel.cs @@ -28,7 +28,7 @@ namespace Artemis.Core.DataModelExpansions [DataModelIgnore] public bool IsExpansion { get; internal set; } - public bool ContainsPath(string path) + internal bool ContainsPath(string path) { var parts = path.Split('.'); var current = GetType(); @@ -43,7 +43,7 @@ namespace Artemis.Core.DataModelExpansions return true; } - public Type GetTypeAtPath(string path) + internal Type GetTypeAtPath(string path) { if (!ContainsPath(path)) return null; @@ -62,7 +62,7 @@ namespace Artemis.Core.DataModelExpansions return result; } - public Type GetListTypeInPath(string path) + internal Type GetListTypeInPath(string path) { if (!ContainsPath(path)) return null; @@ -90,7 +90,7 @@ namespace Artemis.Core.DataModelExpansions return null; } - public Type GetListTypeAtPath(string path) + internal Type GetListTypeAtPath(string path) { if (!ContainsPath(path)) return null; @@ -98,29 +98,7 @@ namespace Artemis.Core.DataModelExpansions var child = GetTypeAtPath(path); return child.GenericTypeArguments.Length > 0 ? child.GenericTypeArguments[0] : null; } - - public string GetListInnerPath(string path) - { - if (GetListTypeInPath(path) == null) - throw new ArtemisCoreException($"Cannot determine inner list path at {path} because it does not contain a list"); - - var parts = path.Split('.'); - var current = GetType(); - - for (var index = 0; index < parts.Length; index++) - { - var part = parts[index]; - var property = current.GetProperty(part); - - if (typeof(IList).IsAssignableFrom(property.PropertyType)) - return string.Join('.', parts.Skip(index + 1).ToList()); - - current = property.PropertyType; - } - - return null; - } - + /// /// Returns a read-only list of all properties in this datamodel that are to be ignored /// diff --git a/src/Artemis.Core/Plugins/DataModelExpansions/Internal/BaseDataModelExpansion.cs b/src/Artemis.Core/Plugins/DataModelExpansions/Internal/BaseDataModelExpansion.cs index b1cb9a882..7dd9838fd 100644 --- a/src/Artemis.Core/Plugins/DataModelExpansions/Internal/BaseDataModelExpansion.cs +++ b/src/Artemis.Core/Plugins/DataModelExpansions/Internal/BaseDataModelExpansion.cs @@ -10,14 +10,22 @@ namespace Artemis.Core.DataModelExpansions /// public abstract class BaseDataModelExpansion : Plugin { - protected readonly List HiddenPropertiesList = new List(); + /// + /// Gets a list of all properties ignored at runtime using IgnoreProperty(x => x.y) + /// + protected internal readonly List HiddenPropertiesList = new List(); /// - /// Gets a list of all properties ignored at runtime using IgnoreProperty(x => x.y) + /// Gets a list of all properties ignored at runtime using IgnoreProperty(x => x.y) /// public ReadOnlyCollection HiddenProperties => HiddenPropertiesList.AsReadOnly(); internal DataModel InternalDataModel { get; set; } + + /// + /// Called each frame when the data model should update + /// + /// Time in seconds since the last update public abstract void Update(double deltaTime); /// diff --git a/src/Artemis.Core/Plugins/LayerBrushes/BrushConfigurationViewModel.cs b/src/Artemis.Core/Plugins/LayerBrushes/BrushConfigurationViewModel.cs index 6d770e975..16915f0a2 100644 --- a/src/Artemis.Core/Plugins/LayerBrushes/BrushConfigurationViewModel.cs +++ b/src/Artemis.Core/Plugins/LayerBrushes/BrushConfigurationViewModel.cs @@ -2,13 +2,23 @@ namespace Artemis.Core.LayerBrushes { + /// + /// Represents a view model for a brush configuration window + /// public abstract class BrushConfigurationViewModel : Screen { + /// + /// Creates a new instance of the class + /// + /// protected BrushConfigurationViewModel(BaseLayerBrush layerBrush) { LayerBrush = layerBrush; } + /// + /// Gets the layer brush this view model is associated with + /// public BaseLayerBrush LayerBrush { get; } } } \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/LayerBrushes/LayerBrush.cs b/src/Artemis.Core/Plugins/LayerBrushes/LayerBrush.cs index 7ae5e268a..0ad17ffb2 100644 --- a/src/Artemis.Core/Plugins/LayerBrushes/LayerBrush.cs +++ b/src/Artemis.Core/Plugins/LayerBrushes/LayerBrush.cs @@ -1,10 +1,16 @@ -using Artemis.Core.Services; -using SkiaSharp; +using SkiaSharp; namespace Artemis.Core.LayerBrushes { + /// + /// Represents a brush that renders on a layer + /// + /// The type of brush properties public abstract class LayerBrush : PropertiesLayerBrush where T : LayerPropertyGroup { + /// + /// Creates a new instance of the class + /// protected LayerBrush() { BrushType = LayerBrushType.Regular; diff --git a/src/Artemis.Core/Plugins/LayerBrushes/LayerBrushDescriptor.cs b/src/Artemis.Core/Plugins/LayerBrushes/LayerBrushDescriptor.cs index c03948109..abea15d1c 100644 --- a/src/Artemis.Core/Plugins/LayerBrushes/LayerBrushDescriptor.cs +++ b/src/Artemis.Core/Plugins/LayerBrushes/LayerBrushDescriptor.cs @@ -44,6 +44,16 @@ namespace Artemis.Core.LayerBrushes /// public LayerBrushProvider LayerBrushProvider { get; } + /// + /// Determines whether the provided references to a brush provided by this descriptor + /// + public bool MatchesLayerBrushReference(LayerBrushReference reference) + { + if (reference == null) + return false; + return LayerBrushProvider.PluginInfo.Guid == reference.BrushPluginGuid && LayerBrushType.Name == reference.BrushType; + } + /// /// Creates an instance of the described brush and applies it to the layer /// @@ -61,12 +71,5 @@ namespace Artemis.Core.LayerBrushes layer.LayerBrush = brush; layer.OnLayerBrushUpdated(); } - - public bool MatchesLayerBrushReference(LayerBrushReference reference) - { - if (reference == null) - return false; - return LayerBrushProvider.PluginInfo.Guid == reference.BrushPluginGuid && LayerBrushType.Name == reference.BrushType; - } } } \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/LayerBrushes/PerLedLayerBrush.cs b/src/Artemis.Core/Plugins/LayerBrushes/PerLedLayerBrush.cs index 8ad27213a..b6783ad32 100644 --- a/src/Artemis.Core/Plugins/LayerBrushes/PerLedLayerBrush.cs +++ b/src/Artemis.Core/Plugins/LayerBrushes/PerLedLayerBrush.cs @@ -1,16 +1,21 @@ -using Artemis.Core.Services; -using SkiaSharp; +using SkiaSharp; namespace Artemis.Core.LayerBrushes { + /// + /// Represents a brush that renders on a per-layer basis + /// + /// The type of brush properties public abstract class PerLedLayerBrush : PropertiesLayerBrush where T : LayerPropertyGroup { + /// + /// Creates a new instance of the class + /// protected PerLedLayerBrush() { BrushType = LayerBrushType.Regular; } - /// /// The main method of rendering for this type of brush. Called once per frame for each LED in the layer /// diff --git a/src/Artemis.Core/Plugins/LayerEffects/EffectConfigurationViewModel.cs b/src/Artemis.Core/Plugins/LayerEffects/EffectConfigurationViewModel.cs index e1dde9fe8..472f947ea 100644 --- a/src/Artemis.Core/Plugins/LayerEffects/EffectConfigurationViewModel.cs +++ b/src/Artemis.Core/Plugins/LayerEffects/EffectConfigurationViewModel.cs @@ -2,13 +2,23 @@ namespace Artemis.Core.LayerEffects { + /// + /// Represents a view model for an effect configuration window + /// public abstract class EffectConfigurationViewModel : Screen { + /// + /// Creates a new instance of the class + /// + /// protected EffectConfigurationViewModel(BaseLayerEffect layerEffect) { LayerEffect = layerEffect; } + /// + /// Gets the layer effect this view model is associated with + /// public BaseLayerEffect LayerEffect { get; } } } \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/LayerEffects/LayerEffect.cs b/src/Artemis.Core/Plugins/LayerEffects/LayerEffect.cs index ff7c6adec..180e5b1a5 100644 --- a/src/Artemis.Core/Plugins/LayerEffects/LayerEffect.cs +++ b/src/Artemis.Core/Plugins/LayerEffects/LayerEffect.cs @@ -1,8 +1,11 @@ using System; -using Artemis.Core.Services; namespace Artemis.Core.LayerEffects { + /// + /// Represents an effect that applies preprocessing and/or postprocessing to a layer + /// + /// public abstract class LayerEffect : BaseLayerEffect where T : LayerPropertyGroup { private T _properties; diff --git a/src/Artemis.Core/Plugins/Modules/ActivationRequirements/BooleanActivationRequirement.cs b/src/Artemis.Core/Plugins/Modules/ActivationRequirements/BooleanActivationRequirement.cs index 0333d9303..ca240c5ab 100644 --- a/src/Artemis.Core/Plugins/Modules/ActivationRequirements/BooleanActivationRequirement.cs +++ b/src/Artemis.Core/Plugins/Modules/ActivationRequirements/BooleanActivationRequirement.cs @@ -16,6 +16,7 @@ return ActivationMet; } + /// public string GetUserFriendlyDescription() { return "No description available"; diff --git a/src/Artemis.Core/Plugins/Modules/ActivationRequirements/ProcessActivationRequirement.cs b/src/Artemis.Core/Plugins/Modules/ActivationRequirements/ProcessActivationRequirement.cs index 28a3899c1..d738b735c 100644 --- a/src/Artemis.Core/Plugins/Modules/ActivationRequirements/ProcessActivationRequirement.cs +++ b/src/Artemis.Core/Plugins/Modules/ActivationRequirements/ProcessActivationRequirement.cs @@ -43,6 +43,7 @@ namespace Artemis.Core.Modules : processes.Any(); } + /// public string GetUserFriendlyDescription() { var description = $"Requirement met when \"{ProcessName}.exe\" is running"; diff --git a/src/Artemis.Core/Plugins/Modules/Module.cs b/src/Artemis.Core/Plugins/Modules/Module.cs index fc35d7538..ffe21f538 100644 --- a/src/Artemis.Core/Plugins/Modules/Module.cs +++ b/src/Artemis.Core/Plugins/Modules/Module.cs @@ -144,13 +144,13 @@ namespace Artemis.Core.Modules public bool IsUpdateAllowed => IsActivated && (UpdateDuringActivationOverride || !IsActivatedOverride); /// - /// Called each frame when the module must update + /// Called each frame when the module should update /// /// Time in seconds since the last update public abstract void Update(double deltaTime); /// - /// Called each frame when the module must render + /// Called each frame when the module should render /// /// Time since the last render /// The RGB Surface to render to diff --git a/src/Artemis.Core/Plugins/Modules/ProfileModule.cs b/src/Artemis.Core/Plugins/Modules/ProfileModule.cs index 8c15c9e0a..8df97f33c 100644 --- a/src/Artemis.Core/Plugins/Modules/ProfileModule.cs +++ b/src/Artemis.Core/Plugins/Modules/ProfileModule.cs @@ -91,18 +91,27 @@ namespace Artemis.Core.Modules /// public abstract class ProfileModule : Module { - protected readonly List HiddenPropertiesList = new List(); + /// + /// Gets a list of all properties ignored at runtime using IgnoreProperty(x => x.y) + /// + protected internal readonly List HiddenPropertiesList = new List(); + /// + /// Creates a new instance of the class + /// protected ProfileModule() { OpacityOverride = 1; } /// - /// Gets a list of all properties ignored at runtime using IgnoreProperty(x => x.y) + /// Gets a list of all properties ignored at runtime using IgnoreProperty(x => x.y) /// public ReadOnlyCollection HiddenProperties => HiddenPropertiesList.AsReadOnly(); + /// + /// Gets the currently active profile + /// public Profile ActiveProfile { get; private set; } /// @@ -225,8 +234,14 @@ namespace Artemis.Core.Modules #region Events + /// + /// Occurs when the has changed + /// public event EventHandler ActiveProfileChanged; + /// + /// Invokes the event + /// protected virtual void OnActiveProfileChanged() { ActiveProfileChanged?.Invoke(this, EventArgs.Empty); diff --git a/src/Artemis.Core/Plugins/PluginConfigurationViewModel.cs b/src/Artemis.Core/Plugins/PluginConfigurationViewModel.cs index c1e1d521a..731dc1b3f 100644 --- a/src/Artemis.Core/Plugins/PluginConfigurationViewModel.cs +++ b/src/Artemis.Core/Plugins/PluginConfigurationViewModel.cs @@ -2,13 +2,23 @@ namespace Artemis.Core { + /// + /// Represents a view model for a plugin configuration window + /// public abstract class PluginConfigurationViewModel : Screen { + /// + /// Creates a new instance of the class + /// + /// protected PluginConfigurationViewModel(Plugin plugin) { Plugin = plugin; } + /// + /// Gets the plugin this configuration view model is associated with + /// public Plugin Plugin { get; } } } \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/PluginInfo.cs b/src/Artemis.Core/Plugins/PluginInfo.cs index 971658630..28646a2da 100644 --- a/src/Artemis.Core/Plugins/PluginInfo.cs +++ b/src/Artemis.Core/Plugins/PluginInfo.cs @@ -8,6 +8,9 @@ using Stylet; namespace Artemis.Core { + /// + /// Represents basic info about a plugin and contains a reference to the instance of said plugin + /// [JsonObject(MemberSerialization.OptIn)] public class PluginInfo : PropertyChangedBase { @@ -17,7 +20,6 @@ namespace Artemis.Core private Guid _guid; private string _icon; private Plugin _instance; - private bool _lastEnableSuccessful; private Exception _loadException; private string _main; private string _name; @@ -140,6 +142,7 @@ namespace Artemis.Core /// internal PluginEntity PluginEntity { get; set; } + /// public override string ToString() { return $"{Name} v{Version} - {Guid}"; diff --git a/src/Artemis.Core/Plugins/PluginUpdateRegistration.cs b/src/Artemis.Core/Plugins/PluginUpdateRegistration.cs index ec3cf11c1..4bc43c93f 100644 --- a/src/Artemis.Core/Plugins/PluginUpdateRegistration.cs +++ b/src/Artemis.Core/Plugins/PluginUpdateRegistration.cs @@ -93,12 +93,12 @@ namespace Artemis.Core Action(interval.TotalSeconds); } - private void InstanceOnPluginEnabled(object? sender, EventArgs e) + private void InstanceOnPluginEnabled(object sender, EventArgs e) { Start(); } - private void InstanceOnPluginDisabled(object? sender, EventArgs e) + private void InstanceOnPluginDisabled(object sender, EventArgs e) { Stop(); } diff --git a/src/Artemis.Core/Plugins/Settings/PluginSetting.cs b/src/Artemis.Core/Plugins/Settings/PluginSetting.cs index 31e66b849..a9b1d7f4b 100644 --- a/src/Artemis.Core/Plugins/Settings/PluginSetting.cs +++ b/src/Artemis.Core/Plugins/Settings/PluginSetting.cs @@ -6,6 +6,10 @@ using Stylet; namespace Artemis.Core { + /// + /// Represents a setting tied to a plugin of type + /// + /// The value type of the setting public class PluginSetting : PropertyChangedBase { // ReSharper disable once NotAccessedField.Local @@ -78,14 +82,21 @@ namespace Artemis.Core _pluginRepository.SaveSetting(_pluginSettingEntity); } + /// + /// Occurs when the value of the setting has been changed + /// public event EventHandler SettingChanged; + /// public override string ToString() { return $"{nameof(Name)}: {Name}, {nameof(Value)}: {Value}, {nameof(HasChanged)}: {HasChanged}"; } - protected virtual void OnSettingChanged() + /// + /// Invokes the event + /// + protected internal virtual void OnSettingChanged() { SettingChanged?.Invoke(this, EventArgs.Empty); } diff --git a/src/Artemis.Core/RGB.NET/BitmapBrush.cs b/src/Artemis.Core/RGB.NET/BitmapBrush.cs index 224cf93c7..b95dc6774 100644 --- a/src/Artemis.Core/RGB.NET/BitmapBrush.cs +++ b/src/Artemis.Core/RGB.NET/BitmapBrush.cs @@ -47,8 +47,19 @@ namespace Artemis.Core /// public Dictionary RenderedTargets { get; } = new Dictionary(); + /// + /// Gets or sets the desired scale of the bitmap brush + /// public Scale Scale { get; set; } + + /// + /// Gets the last rendered scale of the bitmap brush + /// public Scale RenderedScale { get; private set; } + + /// + /// Gets the bitmap used to sample the brush + /// public SKBitmap Bitmap { get; private set; } #endregion @@ -148,6 +159,7 @@ namespace Artemis.Core { } + /// public void Dispose() { lock (_disposeLock) @@ -157,7 +169,7 @@ namespace Artemis.Core } } - public bool IsDisposed { get; set; } + internal bool IsDisposed { get; set; } #endregion } diff --git a/src/Artemis.Core/Services/Interfaces/IPluginService.cs b/src/Artemis.Core/Services/Interfaces/IPluginService.cs index d975c28c8..50f65773a 100644 --- a/src/Artemis.Core/Services/Interfaces/IPluginService.cs +++ b/src/Artemis.Core/Services/Interfaces/IPluginService.cs @@ -70,10 +70,10 @@ namespace Artemis.Core.Services List GetAllPluginInfo(); /// - /// Finds all enabled instances of type T + /// Finds all enabled instances of /// /// Either or a plugin type implementing - /// Returns a list of plug instances of type T + /// Returns a list of plugin instances of List GetPluginsOfType() where T : Plugin; /// diff --git a/src/Artemis.Core/Services/Storage/Interfaces/ISurfaceService.cs b/src/Artemis.Core/Services/Storage/Interfaces/ISurfaceService.cs index b49dc98d1..8258b3e19 100644 --- a/src/Artemis.Core/Services/Storage/Interfaces/ISurfaceService.cs +++ b/src/Artemis.Core/Services/Storage/Interfaces/ISurfaceService.cs @@ -3,6 +3,9 @@ using System.Collections.ObjectModel; namespace Artemis.Core.Services { + /// + /// Provides access to the device surface and its configuration + /// public interface ISurfaceService : IArtemisService { /// diff --git a/src/Artemis.Core/Utilities/DeserializationLogger.cs b/src/Artemis.Core/Utilities/DeserializationLogger.cs index 1be7ad7fb..01e9bc6b2 100644 --- a/src/Artemis.Core/Utilities/DeserializationLogger.cs +++ b/src/Artemis.Core/Utilities/DeserializationLogger.cs @@ -13,26 +13,26 @@ namespace Artemis.Core _logger = kernel.Get(); } - public static void LogPredicateDeserializationFailure(DisplayConditionPredicate displayConditionPredicate, JsonException exception) + public static void LogPredicateDeserializationFailure(DataModelConditionPredicate dataModelConditionPredicate, JsonException exception) { _logger.Warning( exception, "Failed to deserialize display condition predicate {left} {operator} {right}", - displayConditionPredicate.Entity.LeftPropertyPath, - displayConditionPredicate.Entity.OperatorType, - displayConditionPredicate.Entity.RightPropertyPath + dataModelConditionPredicate.Entity.LeftPropertyPath, + dataModelConditionPredicate.Entity.OperatorType, + dataModelConditionPredicate.Entity.RightPropertyPath ); } - public static void LogListPredicateDeserializationFailure(DisplayConditionListPredicate displayConditionPredicate, JsonException exception) + public static void LogListPredicateDeserializationFailure(DataModelConditionListPredicate dataModelConditionPredicate, JsonException exception) { _logger.Warning( exception, "Failed to deserialize display condition list predicate {list} => {left} {operator} {right}", - displayConditionPredicate.Entity.ListPropertyPath, - displayConditionPredicate.Entity.LeftPropertyPath, - displayConditionPredicate.Entity.OperatorType, - displayConditionPredicate.Entity.RightPropertyPath + dataModelConditionPredicate.Entity.ListPropertyPath, + dataModelConditionPredicate.Entity.LeftPropertyPath, + dataModelConditionPredicate.Entity.OperatorType, + dataModelConditionPredicate.Entity.RightPropertyPath ); } diff --git a/src/Artemis.Core/Utilities/Easings.cs b/src/Artemis.Core/Utilities/Easings.cs index c60e7f115..c26da8f76 100644 --- a/src/Artemis.Core/Utilities/Easings.cs +++ b/src/Artemis.Core/Utilities/Easings.cs @@ -1,4 +1,5 @@ -using System; +#pragma warning disable 1591 +using System; namespace Artemis.Core { diff --git a/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs b/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs index a683e4d91..02e12d148 100644 --- a/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs +++ b/src/Artemis.UI.Shared/DataModelVisualization/Shared/DataModelVisualizationViewModel.cs @@ -176,7 +176,7 @@ namespace Artemis.UI.Shared IsMatchingFilteredTypes = filteredTypes.Any(t => t == PropertyInfo.PropertyType || t == typeof(Enum) && PropertyInfo.PropertyType.IsEnum); } - public DataModelVisualizationViewModel GetChildForCondition(DisplayConditionPredicate predicate, DisplayConditionSide side) + public DataModelVisualizationViewModel GetChildForCondition(DataModelConditionPredicate predicate, DisplayConditionSide side) { if (side == DisplayConditionSide.Left) { diff --git a/src/Artemis.UI/Ninject/Factories/IVMFactory.cs b/src/Artemis.UI/Ninject/Factories/IVMFactory.cs index 8290e0002..e6e59f368 100644 --- a/src/Artemis.UI/Ninject/Factories/IVMFactory.cs +++ b/src/Artemis.UI/Ninject/Factories/IVMFactory.cs @@ -65,10 +65,10 @@ namespace Artemis.UI.Ninject.Factories public interface IDisplayConditionsVmFactory : IVmFactory { - DisplayConditionGroupViewModel DisplayConditionGroupViewModel(DisplayConditionGroup displayConditionGroup, bool isListGroup); - DisplayConditionListViewModel DisplayConditionListViewModel(DisplayConditionList displayConditionList); - DisplayConditionPredicateViewModel DisplayConditionPredicateViewModel(DisplayConditionPredicate displayConditionPredicate); - DisplayConditionListPredicateViewModel DisplayConditionListPredicateViewModel(DisplayConditionListPredicate displayConditionListPredicate); + DisplayConditionGroupViewModel DisplayConditionGroupViewModel(DataModelConditionGroup dataModelConditionGroup, bool isListGroup); + DisplayConditionListViewModel DisplayConditionListViewModel(DataModelConditionList dataModelConditionList); + DisplayConditionPredicateViewModel DisplayConditionPredicateViewModel(DataModelConditionPredicate dataModelConditionPredicate); + DisplayConditionListPredicateViewModel DisplayConditionListPredicateViewModel(DataModelConditionListPredicate dataModelConditionListPredicate); } public interface ILayerPropertyVmFactory : IVmFactory diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/Abstract/DisplayConditionViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/Abstract/DisplayConditionViewModel.cs index 65565fdb2..2cca9b857 100644 --- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/Abstract/DisplayConditionViewModel.cs +++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/Abstract/DisplayConditionViewModel.cs @@ -5,12 +5,12 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions.Abstract { public abstract class DisplayConditionViewModel : Conductor.Collection.AllActive { - protected DisplayConditionViewModel(DisplayConditionPart model) + protected DisplayConditionViewModel(DataModelConditionPart model) { Model = model; } - public DisplayConditionPart Model { get; } + public DataModelConditionPart Model { get; } public abstract void Update(); diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionGroupViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionGroupViewModel.cs index f337d80dc..9d7a85a77 100644 --- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionGroupViewModel.cs +++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionGroupViewModel.cs @@ -17,11 +17,11 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions private bool _isInitialized; private bool _isRootGroup; - public DisplayConditionGroupViewModel(DisplayConditionGroup displayConditionGroup, + public DisplayConditionGroupViewModel(DataModelConditionGroup dataModelConditionGroup, bool isListGroup, IProfileEditorService profileEditorService, IDisplayConditionsVmFactory displayConditionsVmFactory) - : base(displayConditionGroup) + : base(dataModelConditionGroup) { IsListGroup = isListGroup; _profileEditorService = profileEditorService; @@ -38,7 +38,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions public bool IsListGroup { get; } - public DisplayConditionGroup DisplayConditionGroup => (DisplayConditionGroup) Model; + public DataModelConditionGroup DataModelConditionGroup => (DataModelConditionGroup) Model; public bool IsRootGroup { @@ -53,12 +53,12 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions } public bool DisplayBooleanOperator => Items.Count > 1; - public string SelectedBooleanOperator => DisplayConditionGroup.BooleanOperator.Humanize(); + public string SelectedBooleanOperator => DataModelConditionGroup.BooleanOperator.Humanize(); public void SelectBooleanOperator(string type) { var enumValue = Enum.Parse(type); - DisplayConditionGroup.BooleanOperator = enumValue; + DataModelConditionGroup.BooleanOperator = enumValue; NotifyOfPropertyChange(nameof(SelectedBooleanOperator)); _profileEditorService.UpdateSelectedProfileElement(); @@ -69,19 +69,19 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions if (type == "Static") { if (!IsListGroup) - DisplayConditionGroup.AddChild(new DisplayConditionPredicate(DisplayConditionGroup, ProfileRightSideType.Static)); + DataModelConditionGroup.AddChild(new DataModelConditionPredicate(DataModelConditionGroup, ProfileRightSideType.Static)); else - DisplayConditionGroup.AddChild(new DisplayConditionListPredicate(DisplayConditionGroup, ProfileRightSideType.Static)); + DataModelConditionGroup.AddChild(new DataModelConditionListPredicate(DataModelConditionGroup, ProfileRightSideType.Static)); } else if (type == "Dynamic") { if (!IsListGroup) - DisplayConditionGroup.AddChild(new DisplayConditionPredicate(DisplayConditionGroup, ProfileRightSideType.Dynamic)); + DataModelConditionGroup.AddChild(new DataModelConditionPredicate(DataModelConditionGroup, ProfileRightSideType.Dynamic)); else - DisplayConditionGroup.AddChild(new DisplayConditionListPredicate(DisplayConditionGroup, ProfileRightSideType.Dynamic)); + DataModelConditionGroup.AddChild(new DataModelConditionListPredicate(DataModelConditionGroup, ProfileRightSideType.Dynamic)); } else if (type == "List" && !IsListGroup) - DisplayConditionGroup.AddChild(new DisplayConditionList(DisplayConditionGroup)); + DataModelConditionGroup.AddChild(new DataModelConditionList(DataModelConditionGroup)); Update(); _profileEditorService.UpdateSelectedProfileElement(); @@ -89,7 +89,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions public void AddGroup() { - DisplayConditionGroup.AddChild(new DisplayConditionGroup(DisplayConditionGroup)); + DataModelConditionGroup.AddChild(new DataModelConditionGroup(DataModelConditionGroup)); Update(); _profileEditorService.UpdateSelectedProfileElement(); @@ -100,7 +100,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions NotifyOfPropertyChange(nameof(SelectedBooleanOperator)); // Remove VMs of effects no longer applied on the layer - var toRemove = Items.Where(c => !DisplayConditionGroup.Children.Contains(c.Model)).ToList(); + var toRemove = Items.Where(c => !DataModelConditionGroup.Children.Contains(c.Model)).ToList(); // Using RemoveRange breaks our lovely animations foreach (var displayConditionViewModel in toRemove) Items.Remove(displayConditionViewModel); @@ -112,17 +112,17 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions switch (childModel) { - case DisplayConditionGroup displayConditionGroup: + case DataModelConditionGroup displayConditionGroup: Items.Add(_displayConditionsVmFactory.DisplayConditionGroupViewModel(displayConditionGroup, IsListGroup)); break; - case DisplayConditionList displayConditionListPredicate: + case DataModelConditionList displayConditionListPredicate: Items.Add(_displayConditionsVmFactory.DisplayConditionListViewModel(displayConditionListPredicate)); break; - case DisplayConditionPredicate displayConditionPredicate: + case DataModelConditionPredicate displayConditionPredicate: if (!IsListGroup) Items.Add(_displayConditionsVmFactory.DisplayConditionPredicateViewModel(displayConditionPredicate)); break; - case DisplayConditionListPredicate displayConditionListPredicate: + case DataModelConditionListPredicate displayConditionListPredicate: if (IsListGroup) Items.Add(_displayConditionsVmFactory.DisplayConditionListPredicateViewModel(displayConditionListPredicate)); break; diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionListPredicateViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionListPredicateViewModel.cs index 07738d392..421dcbeb6 100644 --- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionListPredicateViewModel.cs +++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionListPredicateViewModel.cs @@ -38,12 +38,12 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions private List _supportedInputTypes; public DisplayConditionListPredicateViewModel( - DisplayConditionListPredicate displayConditionListPredicate, + DataModelConditionListPredicate dataModelConditionListPredicate, IProfileEditorService profileEditorService, IDataModelUIService dataModelUIService, IConditionOperatorService conditionOperatorService, ISettingsService settingsService, - IEventAggregator eventAggregator) : base(displayConditionListPredicate) + IEventAggregator eventAggregator) : base(dataModelConditionListPredicate) { _profileEditorService = profileEditorService; _dataModelUIService = dataModelUIService; @@ -63,8 +63,8 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions Task.Run(Initialize); } - public DisplayConditionListPredicate DisplayConditionListPredicate => (DisplayConditionListPredicate) Model; - public bool ShowRightSidePropertySelection => DisplayConditionListPredicate.PredicateType == ProfileRightSideType.Dynamic; + public DataModelConditionListPredicate DataModelConditionListPredicate => (DataModelConditionListPredicate) Model; + public bool ShowRightSidePropertySelection => DataModelConditionListPredicate.PredicateType == ProfileRightSideType.Dynamic; public bool CanActivateRightSideInputViewModel => SelectedLeftSideProperty?.PropertyInfo != null; public PluginSetting ShowDataModelValues { get; } @@ -193,45 +193,45 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions if (LeftSideDataModel == null || RightSideDataModel == null) return; - var listDataModelGuid = DisplayConditionListPredicate.ListDataModel.PluginInfo.Guid; + var listDataModelGuid = DataModelConditionListPredicate.ListDataModel.PluginInfo.Guid; // If static, only allow selecting properties also supported by input - if (DisplayConditionListPredicate.PredicateType == ProfileRightSideType.Static) + if (DataModelConditionListPredicate.PredicateType == ProfileRightSideType.Static) LeftSideDataModel.ApplyTypeFilter(false, _supportedInputTypes.ToArray()); // Determine the left side property first - SelectedLeftSideProperty = LeftSideDataModel.GetChildByPath(listDataModelGuid, DisplayConditionListPredicate.LeftPropertyPath); + SelectedLeftSideProperty = LeftSideDataModel.GetChildByPath(listDataModelGuid, DataModelConditionListPredicate.LeftPropertyPath); var leftSideType = SelectedLeftSideProperty?.PropertyInfo?.PropertyType; // Get the supported operators Operators.Clear(); Operators.AddRange(_conditionOperatorService.GetConditionOperatorsForType(leftSideType)); - if (DisplayConditionListPredicate.Operator == null) - DisplayConditionListPredicate.UpdateOperator(Operators.FirstOrDefault(o => o.SupportsType(leftSideType))); - SelectedOperator = DisplayConditionListPredicate.Operator; + if (DataModelConditionListPredicate.Operator == null) + DataModelConditionListPredicate.UpdateOperator(Operators.FirstOrDefault(o => o.SupportsType(leftSideType))); + SelectedOperator = DataModelConditionListPredicate.Operator; // Determine the right side - if (DisplayConditionListPredicate.PredicateType == ProfileRightSideType.Dynamic) + if (DataModelConditionListPredicate.PredicateType == ProfileRightSideType.Dynamic) { - SelectedRightSideProperty = RightSideDataModel.GetChildByPath(listDataModelGuid, DisplayConditionListPredicate.RightPropertyPath); + SelectedRightSideProperty = RightSideDataModel.GetChildByPath(listDataModelGuid, DataModelConditionListPredicate.RightPropertyPath); RightSideDataModel.ApplyTypeFilter(true, leftSideType); } else - RightStaticValue = DisplayConditionListPredicate.RightStaticValue; + RightStaticValue = DataModelConditionListPredicate.RightStaticValue; } public void ApplyLeftSide() { - DisplayConditionListPredicate.UpdateLeftSide(SelectedLeftSideProperty.PropertyPath); + DataModelConditionListPredicate.UpdateLeftSide(SelectedLeftSideProperty.PropertyPath); _profileEditorService.UpdateSelectedProfileElement(); - SelectedOperator = DisplayConditionListPredicate.Operator; + SelectedOperator = DataModelConditionListPredicate.Operator; Update(); } public void ApplyRightSideDynamic() { - DisplayConditionListPredicate.UpdateRightSideDynamic(SelectedRightSideProperty.PropertyPath); + DataModelConditionListPredicate.UpdateRightSideDynamic(SelectedRightSideProperty.PropertyPath); _profileEditorService.UpdateSelectedProfileElement(); Update(); @@ -241,7 +241,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions { if (isSubmitted) { - DisplayConditionListPredicate.UpdateRightSideStatic(value); + DataModelConditionListPredicate.UpdateRightSideStatic(value); _profileEditorService.UpdateSelectedProfileElement(); Update(); @@ -255,7 +255,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions public void ApplyOperator() { - DisplayConditionListPredicate.UpdateOperator(SelectedOperator); + DataModelConditionListPredicate.UpdateOperator(SelectedOperator); _profileEditorService.UpdateSelectedProfileElement(); Update(); @@ -270,7 +270,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions RightSideInputViewModel = _dataModelUIService.GetDataModelInputViewModel( SelectedLeftSideProperty.PropertyInfo.PropertyType, SelectedLeftSideProperty.PropertyDescription, - DisplayConditionListPredicate.RightStaticValue, + DataModelConditionListPredicate.RightStaticValue, ApplyRightSideStatic ); _eventAggregator.Subscribe(this); @@ -286,12 +286,12 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions private void RightDataModelUpdateRequested(object sender, EventArgs e) { - var listDataModelGuid = DisplayConditionListPredicate.ListDataModel.PluginInfo.Guid; + var listDataModelGuid = DataModelConditionListPredicate.ListDataModel.PluginInfo.Guid; var leftSideType = SelectedLeftSideProperty?.PropertyInfo?.PropertyType; // If the right side property is missing it may be available now that the data model has been updated - if (SelectedRightSideProperty == null && DisplayConditionListPredicate.RightPropertyPath != null) - SelectedRightSideProperty = RightSideDataModel.GetChildByPath(listDataModelGuid, DisplayConditionListPredicate.RightPropertyPath); + if (SelectedRightSideProperty == null && DataModelConditionListPredicate.RightPropertyPath != null) + SelectedRightSideProperty = RightSideDataModel.GetChildByPath(listDataModelGuid, DataModelConditionListPredicate.RightPropertyPath); // With the data model updated, also reapply the filter RightSideDataModel.ApplyTypeFilter(true, leftSideType); @@ -299,19 +299,19 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions private void LeftDataModelUpdateRequested(object sender, EventArgs e) { - if (DisplayConditionListPredicate.PredicateType == ProfileRightSideType.Static) + if (DataModelConditionListPredicate.PredicateType == ProfileRightSideType.Static) LeftSideDataModel.ApplyTypeFilter(false, _supportedInputTypes.ToArray()); } private DataModelVisualizationViewModel GetListDataModel() { - if (DisplayConditionListPredicate.ListDataModel == null || DisplayConditionListPredicate.ListPropertyPath == null) + if (DataModelConditionListPredicate.ListDataModel == null || DataModelConditionListPredicate.ListPropertyPath == null) throw new ArtemisUIException("Cannot create a list predicate without first selecting a target list"); var dataModel = _dataModelUIService.GetPluginDataModelVisualization(_profileEditorService.GetCurrentModule(), true); var listDataModel = (DataModelListViewModel) dataModel.GetChildByPath( - DisplayConditionListPredicate.ListDataModel.PluginInfo.Guid, - DisplayConditionListPredicate.ListPropertyPath + DataModelConditionListPredicate.ListDataModel.PluginInfo.Guid, + DataModelConditionListPredicate.ListPropertyPath ); return listDataModel.GetListTypeViewModel(_dataModelUIService); diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionListViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionListViewModel.cs index 4cf4cb2a2..353b86b9f 100644 --- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionListViewModel.cs +++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionListViewModel.cs @@ -25,12 +25,12 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions private DataModelPropertiesViewModel _targetDataModel; public DisplayConditionListViewModel( - DisplayConditionList displayConditionList, + DataModelConditionList dataModelConditionList, DisplayConditionViewModel parent, IProfileEditorService profileEditorService, IDataModelUIService dataModelUIService, IDisplayConditionsVmFactory displayConditionsVmFactory, - ISettingsService settingsService) : base(displayConditionList) + ISettingsService settingsService) : base(dataModelConditionList) { _profileEditorService = profileEditorService; _dataModelUIService = dataModelUIService; @@ -48,7 +48,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions public DelegateCommand SelectListPropertyCommand { get; } public PluginSetting ShowDataModelValues { get; } - public DisplayConditionList DisplayConditionList => (DisplayConditionList) Model; + public DataModelConditionList DataModelConditionList => (DataModelConditionList) Model; public bool IsInitialized { @@ -70,12 +70,12 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions set => SetAndNotify(ref _selectedListProperty, value); } - public string SelectedListOperator => DisplayConditionList.ListOperator.Humanize(); + public string SelectedListOperator => DataModelConditionList.ListOperator.Humanize(); public void SelectListOperator(string type) { var enumValue = Enum.Parse(type); - DisplayConditionList.ListOperator = enumValue; + DataModelConditionList.ListOperator = enumValue; NotifyOfPropertyChange(nameof(SelectedListOperator)); _profileEditorService.UpdateSelectedProfileElement(); @@ -84,9 +84,9 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions public void AddCondition(string type) { if (type == "Static") - DisplayConditionList.AddChild(new DisplayConditionPredicate(DisplayConditionList, ProfileRightSideType.Static)); + DataModelConditionList.AddChild(new DataModelConditionPredicate(DataModelConditionList, ProfileRightSideType.Static)); else if (type == "Dynamic") - DisplayConditionList.AddChild(new DisplayConditionPredicate(DisplayConditionList, ProfileRightSideType.Dynamic)); + DataModelConditionList.AddChild(new DataModelConditionPredicate(DataModelConditionList, ProfileRightSideType.Dynamic)); Update(); _profileEditorService.UpdateSelectedProfileElement(); @@ -94,7 +94,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions public void AddGroup() { - DisplayConditionList.AddChild(new DisplayConditionGroup(DisplayConditionList)); + DataModelConditionList.AddChild(new DataModelConditionGroup(DataModelConditionList)); Update(); _profileEditorService.UpdateSelectedProfileElement(); @@ -122,7 +122,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions public void ApplyList() { - DisplayConditionList.UpdateList(SelectedListProperty.DataModel, SelectedListProperty.PropertyPath); + DataModelConditionList.UpdateList(SelectedListProperty.DataModel, SelectedListProperty.PropertyPath); _profileEditorService.UpdateSelectedProfileElement(); Update(); @@ -136,11 +136,11 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions NotifyOfPropertyChange(nameof(SelectedListOperator)); // Update the selected list property - if (DisplayConditionList.ListDataModel != null && DisplayConditionList.ListPropertyPath != null) + if (DataModelConditionList.ListDataModel != null && DataModelConditionList.ListPropertyPath != null) { var child = TargetDataModel.GetChildByPath( - DisplayConditionList.ListDataModel.PluginInfo.Guid, - DisplayConditionList.ListPropertyPath + DataModelConditionList.ListDataModel.PluginInfo.Guid, + DataModelConditionList.ListPropertyPath ); SelectedListProperty = child as DataModelListViewModel; } @@ -149,7 +149,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions TargetDataModel.ApplyTypeFilter(true, typeof(IList)); // Remove VMs of effects no longer applied on the layer - var toRemove = Items.Where(c => !DisplayConditionList.Children.Contains(c.Model)).ToList(); + var toRemove = Items.Where(c => !DataModelConditionList.Children.Contains(c.Model)).ToList(); // Using RemoveRange breaks our lovely animations foreach (var displayConditionViewModel in toRemove) Items.Remove(displayConditionViewModel); @@ -158,7 +158,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions { if (Items.Any(c => c.Model == childModel)) continue; - if (!(childModel is DisplayConditionGroup displayConditionGroup)) + if (!(childModel is DataModelConditionGroup displayConditionGroup)) continue; var viewModel = _displayConditionsVmFactory.DisplayConditionGroupViewModel(displayConditionGroup, true); diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionPredicateViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionPredicateViewModel.cs index 6ce25d5ee..aa86f1d6d 100644 --- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionPredicateViewModel.cs +++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionPredicateViewModel.cs @@ -37,12 +37,12 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions private List _supportedInputTypes; public DisplayConditionPredicateViewModel( - DisplayConditionPredicate displayConditionPredicate, + DataModelConditionPredicate dataModelConditionPredicate, IProfileEditorService profileEditorService, IDataModelUIService dataModelUIService, IConditionOperatorService conditionOperatorService, ISettingsService settingsService, - IEventAggregator eventAggregator) : base(displayConditionPredicate) + IEventAggregator eventAggregator) : base(dataModelConditionPredicate) { _profileEditorService = profileEditorService; _dataModelUIService = dataModelUIService; @@ -61,8 +61,8 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions Initialize(); } - public DisplayConditionPredicate DisplayConditionPredicate => (DisplayConditionPredicate) Model; - public bool ShowRightSidePropertySelection => DisplayConditionPredicate.PredicateType == ProfileRightSideType.Dynamic; + public DataModelConditionPredicate DataModelConditionPredicate => (DataModelConditionPredicate) Model; + public bool ShowRightSidePropertySelection => DataModelConditionPredicate.PredicateType == ProfileRightSideType.Dynamic; public bool CanActivateRightSideInputViewModel => SelectedLeftSideProperty?.PropertyInfo != null; public PluginSetting ShowDataModelValues { get; } @@ -188,46 +188,46 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions public override void Update() { - if (LeftSideDataModel == null || DisplayConditionPredicate.PredicateType == ProfileRightSideType.Dynamic && RightSideDataModel == null) + if (LeftSideDataModel == null || DataModelConditionPredicate.PredicateType == ProfileRightSideType.Dynamic && RightSideDataModel == null) return; // If static, only allow selecting properties also supported by input - if (DisplayConditionPredicate.PredicateType == ProfileRightSideType.Static) + if (DataModelConditionPredicate.PredicateType == ProfileRightSideType.Static) LeftSideDataModel.ApplyTypeFilter(false, _supportedInputTypes.ToArray()); // Determine the left side property first - SelectedLeftSideProperty = LeftSideDataModel.GetChildForCondition(DisplayConditionPredicate, DisplayConditionSide.Left); + SelectedLeftSideProperty = LeftSideDataModel.GetChildForCondition(DataModelConditionPredicate, DisplayConditionSide.Left); var leftSideType = SelectedLeftSideProperty?.PropertyInfo?.PropertyType; // Get the supported operators Operators.Clear(); Operators.AddRange(_conditionOperatorService.GetConditionOperatorsForType(leftSideType)); - if (DisplayConditionPredicate.Operator == null) - DisplayConditionPredicate.UpdateOperator(Operators.FirstOrDefault(o => o.SupportsType(leftSideType))); - SelectedOperator = DisplayConditionPredicate.Operator; + if (DataModelConditionPredicate.Operator == null) + DataModelConditionPredicate.UpdateOperator(Operators.FirstOrDefault(o => o.SupportsType(leftSideType))); + SelectedOperator = DataModelConditionPredicate.Operator; // Determine the right side - if (DisplayConditionPredicate.PredicateType == ProfileRightSideType.Dynamic) + if (DataModelConditionPredicate.PredicateType == ProfileRightSideType.Dynamic) { - SelectedRightSideProperty = LeftSideDataModel.GetChildForCondition(DisplayConditionPredicate, DisplayConditionSide.Right); + SelectedRightSideProperty = LeftSideDataModel.GetChildForCondition(DataModelConditionPredicate, DisplayConditionSide.Right); RightSideDataModel.ApplyTypeFilter(true, leftSideType); } else - RightStaticValue = DisplayConditionPredicate.RightStaticValue; + RightStaticValue = DataModelConditionPredicate.RightStaticValue; } public void ApplyLeftSide() { - DisplayConditionPredicate.UpdateLeftSide(SelectedLeftSideProperty.DataModel, SelectedLeftSideProperty.PropertyPath); + DataModelConditionPredicate.UpdateLeftSide(SelectedLeftSideProperty.DataModel, SelectedLeftSideProperty.PropertyPath); _profileEditorService.UpdateSelectedProfileElement(); - SelectedOperator = DisplayConditionPredicate.Operator; + SelectedOperator = DataModelConditionPredicate.Operator; Update(); } public void ApplyRightSideDynamic() { - DisplayConditionPredicate.UpdateRightSide(SelectedRightSideProperty.DataModel, SelectedRightSideProperty.PropertyPath); + DataModelConditionPredicate.UpdateRightSide(SelectedRightSideProperty.DataModel, SelectedRightSideProperty.PropertyPath); _profileEditorService.UpdateSelectedProfileElement(); Update(); @@ -237,7 +237,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions { if (isSubmitted) { - DisplayConditionPredicate.UpdateRightSide(value); + DataModelConditionPredicate.UpdateRightSide(value); _profileEditorService.UpdateSelectedProfileElement(); Update(); @@ -251,7 +251,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions public void ApplyOperator() { - DisplayConditionPredicate.UpdateOperator(SelectedOperator); + DataModelConditionPredicate.UpdateOperator(SelectedOperator); _profileEditorService.UpdateSelectedProfileElement(); Update(); @@ -266,7 +266,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions RightSideInputViewModel = _dataModelUIService.GetDataModelInputViewModel( SelectedLeftSideProperty.PropertyInfo.PropertyType, SelectedLeftSideProperty.PropertyDescription, - DisplayConditionPredicate.RightStaticValue, + DataModelConditionPredicate.RightStaticValue, ApplyRightSideStatic ); _eventAggregator.Subscribe(this); @@ -283,8 +283,8 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions private void RightDataModelUpdateRequested(object sender, EventArgs e) { var leftSideType = SelectedLeftSideProperty?.PropertyInfo?.PropertyType; - if (DisplayConditionPredicate.PredicateType == ProfileRightSideType.Dynamic) - SelectedRightSideProperty = LeftSideDataModel.GetChildForCondition(DisplayConditionPredicate, DisplayConditionSide.Right); + if (DataModelConditionPredicate.PredicateType == ProfileRightSideType.Dynamic) + SelectedRightSideProperty = LeftSideDataModel.GetChildForCondition(DataModelConditionPredicate, DisplayConditionSide.Right); // With the data model updated, also reapply the filter RightSideDataModel.ApplyTypeFilter(true, leftSideType); @@ -292,7 +292,7 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions private void LeftDataModelUpdateRequested(object sender, EventArgs e) { - if (DisplayConditionPredicate.PredicateType == ProfileRightSideType.Static) + if (DataModelConditionPredicate.PredicateType == ProfileRightSideType.Static) LeftSideDataModel.ApplyTypeFilter(false, _supportedInputTypes.ToArray()); } diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs index 6f25f8141..112aba813 100644 --- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs +++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs @@ -82,10 +82,10 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions } // Ensure the layer has a root display condition group - if (e.RenderProfileElement.DisplayConditionGroup == null) - e.RenderProfileElement.DisplayConditionGroup = new DisplayConditionGroup(null); + if (e.RenderProfileElement.DataModelConditionGroup == null) + e.RenderProfileElement.DataModelConditionGroup = new DataModelConditionGroup(null); - ActiveItem = _displayConditionsVmFactory.DisplayConditionGroupViewModel(e.RenderProfileElement.DisplayConditionGroup, false); + ActiveItem = _displayConditionsVmFactory.DisplayConditionGroupViewModel(e.RenderProfileElement.DataModelConditionGroup, false); ActiveItem.IsRootGroup = true; ActiveItem.Update();