mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
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:
parent
0ac6431755
commit
2ad78411c8
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using Artemis.Core.Plugins.Models;
|
using Artemis.Core.Plugins.Models;
|
||||||
using Artemis.Core.Services.Interfaces;
|
using Artemis.Core.Services.Interfaces;
|
||||||
@ -8,6 +9,24 @@ namespace Artemis.Core.Models.Profile.Conditions
|
|||||||
{
|
{
|
||||||
public abstract class DisplayConditionOperator
|
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 IDataModelService _dataModelService;
|
||||||
private bool _registered;
|
private bool _registered;
|
||||||
|
|
||||||
@ -25,12 +44,12 @@ namespace Artemis.Core.Models.Profile.Conditions
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the description of this logical operator
|
/// Gets or sets the description of this logical operator
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Description { get; set; }
|
public abstract string Description { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the icon of this logical operator
|
/// Gets or sets the icon of this logical operator
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Icon { get; set; }
|
public abstract string Icon { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a binary expression comparing two types
|
/// Creates a binary expression comparing two types
|
||||||
@ -69,5 +88,12 @@ namespace Artemis.Core.Models.Profile.Conditions
|
|||||||
// Profile editor service will call Unsubscribe
|
// Profile editor service will call Unsubscribe
|
||||||
_dataModelService.RemoveConditionOperator(this);
|
_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 class GreaterThanConditionOperator : DisplayConditionOperator
|
||||||
{
|
{
|
||||||
public override IReadOnlyCollection<Type> CompatibleTypes => new List<Type>
|
public override IReadOnlyCollection<Type> CompatibleTypes => NumberTypes;
|
||||||
{
|
|
||||||
typeof(sbyte),
|
public override string Description => "Is greater than";
|
||||||
typeof(byte),
|
public override string Icon => "GreaterThan";
|
||||||
typeof(short),
|
|
||||||
typeof(ushort),
|
|
||||||
typeof(int),
|
|
||||||
typeof(uint),
|
|
||||||
typeof(long),
|
|
||||||
typeof(ulong),
|
|
||||||
typeof(float),
|
|
||||||
typeof(double),
|
|
||||||
typeof(decimal)
|
|
||||||
};
|
|
||||||
|
|
||||||
public override BinaryExpression CreateExpression(Type leftSideType, Type rightSideType)
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -40,7 +40,18 @@ namespace Artemis.Core.Services
|
|||||||
AddDataModelExpansionDataModel(dataModelExpansion);
|
AddDataModelExpansionDataModel(dataModelExpansion);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReadOnlyCollection<DataModel> DataModelExpansions
|
public IReadOnlyCollection<DisplayConditionOperator> RegisteredConditionOperators
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
lock (_registeredConditionOperators)
|
||||||
|
{
|
||||||
|
return _registeredConditionOperators.AsReadOnly();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IReadOnlyCollection<DataModel> DataModelExpansions
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -128,13 +139,20 @@ namespace Artemis.Core.Services
|
|||||||
{
|
{
|
||||||
lock (_registeredConditionOperators)
|
lock (_registeredConditionOperators)
|
||||||
{
|
{
|
||||||
return _registeredConditionOperators.Where(c => c.CompatibleTypes.Contains(type)).ToList();
|
if (type == null)
|
||||||
|
return new List<DisplayConditionOperator>(_registeredConditionOperators);
|
||||||
|
return _registeredConditionOperators.Where(c => c.CompatibleTypes.Any(t => t.IsAssignableFrom(type))).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RegisterBuiltInConditionOperators()
|
private void RegisterBuiltInConditionOperators()
|
||||||
{
|
{
|
||||||
|
RegisterConditionOperator(Constants.CorePluginInfo, new EqualsConditionOperator());
|
||||||
|
RegisterConditionOperator(Constants.CorePluginInfo, new NotEqualConditionOperator());
|
||||||
|
RegisterConditionOperator(Constants.CorePluginInfo, new LessThanConditionOperator());
|
||||||
RegisterConditionOperator(Constants.CorePluginInfo, new GreaterThanConditionOperator());
|
RegisterConditionOperator(Constants.CorePluginInfo, new GreaterThanConditionOperator());
|
||||||
|
RegisterConditionOperator(Constants.CorePluginInfo, new LessThanOrEqualConditionOperator());
|
||||||
|
RegisterConditionOperator(Constants.CorePluginInfo, new GreaterThanOrEqualConditionOperator());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PluginServiceOnPluginEnabled(object sender, PluginEventArgs e)
|
private void PluginServiceOnPluginEnabled(object sender, PluginEventArgs e)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using System.Collections.ObjectModel;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using Artemis.Core.Annotations;
|
using Artemis.Core.Annotations;
|
||||||
using Artemis.Core.Models.Profile.Conditions;
|
using Artemis.Core.Models.Profile.Conditions;
|
||||||
using Artemis.Core.Plugins.Abstract;
|
using Artemis.Core.Plugins.Abstract;
|
||||||
@ -9,7 +10,8 @@ namespace Artemis.Core.Services.Interfaces
|
|||||||
{
|
{
|
||||||
public interface IDataModelService : IArtemisService
|
public interface IDataModelService : IArtemisService
|
||||||
{
|
{
|
||||||
ReadOnlyCollection<DataModel> DataModelExpansions { get; }
|
IReadOnlyCollection<DisplayConditionOperator> RegisteredConditionOperators { get; }
|
||||||
|
IReadOnlyCollection<DataModel> DataModelExpansions { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add an expansion to the datamodel to be available for use after the next update
|
/// Add an expansion to the datamodel to be available for use after the next update
|
||||||
@ -48,5 +50,7 @@ namespace Artemis.Core.Services.Interfaces
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="displayConditionOperator">The layer condition operator to remove</param>
|
/// <param name="displayConditionOperator">The layer condition operator to remove</param>
|
||||||
void RemoveConditionOperator([NotNull] DisplayConditionOperator displayConditionOperator);
|
void RemoveConditionOperator([NotNull] DisplayConditionOperator displayConditionOperator);
|
||||||
|
|
||||||
|
List<DisplayConditionOperator> GetCompatibleConditionOperators(Type type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5,13 +5,26 @@ namespace Artemis.UI.Shared.DataModelVisualization
|
|||||||
{
|
{
|
||||||
public abstract class DataModelInputViewModel<T> : DataModelInputViewModel
|
public abstract class DataModelInputViewModel<T> : DataModelInputViewModel
|
||||||
{
|
{
|
||||||
protected DataModelInputViewModel(DataModelPropertyAttribute description)
|
private T _inputValue;
|
||||||
|
|
||||||
|
protected DataModelInputViewModel(DataModelPropertyAttribute description, T initialValue)
|
||||||
{
|
{
|
||||||
Description = description;
|
Description = description;
|
||||||
|
InputValue = initialValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T InputValue
|
||||||
|
{
|
||||||
|
get => _inputValue;
|
||||||
|
set => SetAndNotify(ref _inputValue, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataModelPropertyAttribute Description { get; }
|
public DataModelPropertyAttribute Description { get; }
|
||||||
internal override object InternalGuard { get; } = null;
|
internal override object InternalGuard { get; } = null;
|
||||||
|
|
||||||
|
protected void Submit()
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Artemis.Core.Extensions;
|
using Artemis.Core.Extensions;
|
||||||
@ -19,6 +20,7 @@ namespace Artemis.UI.Shared.DataModelVisualization.Shared
|
|||||||
private DataModelVisualizationViewModel _parent;
|
private DataModelVisualizationViewModel _parent;
|
||||||
private DataModelPropertyAttribute _propertyDescription;
|
private DataModelPropertyAttribute _propertyDescription;
|
||||||
private PropertyInfo _propertyInfo;
|
private PropertyInfo _propertyInfo;
|
||||||
|
private bool _isMatchingFilteredTypes;
|
||||||
|
|
||||||
internal DataModelVisualizationViewModel(DataModel dataModel, DataModelVisualizationViewModel parent, PropertyInfo propertyInfo)
|
internal DataModelVisualizationViewModel(DataModel dataModel, DataModelVisualizationViewModel parent, PropertyInfo propertyInfo)
|
||||||
{
|
{
|
||||||
@ -26,6 +28,7 @@ namespace Artemis.UI.Shared.DataModelVisualization.Shared
|
|||||||
PropertyInfo = propertyInfo;
|
PropertyInfo = propertyInfo;
|
||||||
Parent = parent;
|
Parent = parent;
|
||||||
Children = new BindableCollection<DataModelVisualizationViewModel>();
|
Children = new BindableCollection<DataModelVisualizationViewModel>();
|
||||||
|
IsMatchingFilteredTypes = true;
|
||||||
|
|
||||||
if (dataModel == null && parent == null && propertyInfo == null)
|
if (dataModel == null && parent == null && propertyInfo == null)
|
||||||
IsRootViewModel = true;
|
IsRootViewModel = true;
|
||||||
@ -65,6 +68,12 @@ namespace Artemis.UI.Shared.DataModelVisualization.Shared
|
|||||||
set => SetAndNotify(ref _children, value);
|
set => SetAndNotify(ref _children, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsMatchingFilteredTypes
|
||||||
|
{
|
||||||
|
get => _isMatchingFilteredTypes;
|
||||||
|
set => SetAndNotify(ref _isMatchingFilteredTypes, value);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void Update(IDataModelVisualizationService dataModelVisualizationService);
|
public abstract void Update(IDataModelVisualizationService dataModelVisualizationService);
|
||||||
|
|
||||||
public virtual object GetCurrentValue()
|
public virtual object GetCurrentValue()
|
||||||
@ -72,6 +81,34 @@ namespace Artemis.UI.Shared.DataModelVisualization.Shared
|
|||||||
return Parent == null ? null : PropertyInfo.GetValue(Parent.GetCurrentValue());
|
return Parent == null ? null : PropertyInfo.GetValue(Parent.GetCurrentValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ApplyTypeFilter(params Type[] filteredTypes)
|
||||||
|
{
|
||||||
|
// If the VM has children, its own type is not relevant
|
||||||
|
if (Children.Any())
|
||||||
|
{
|
||||||
|
foreach (var child in Children)
|
||||||
|
child.ApplyTypeFilter(filteredTypes);
|
||||||
|
|
||||||
|
IsMatchingFilteredTypes = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If null is passed, clear the type filter
|
||||||
|
if (filteredTypes == null || filteredTypes.Length == 0)
|
||||||
|
{
|
||||||
|
IsMatchingFilteredTypes = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// If this VM has no property info, assume it does not match
|
||||||
|
if (PropertyInfo == null)
|
||||||
|
{
|
||||||
|
IsMatchingFilteredTypes = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IsMatchingFilteredTypes = filteredTypes.Any(t => t.IsAssignableFrom(PropertyInfo.PropertyType));
|
||||||
|
}
|
||||||
|
|
||||||
public DataModelVisualizationViewModel GetChildByPath(Guid dataModelGuid, string propertyPath)
|
public DataModelVisualizationViewModel GetChildByPath(Guid dataModelGuid, string propertyPath)
|
||||||
{
|
{
|
||||||
var path = propertyPath.Split(".");
|
var path = propertyPath.Split(".");
|
||||||
|
|||||||
@ -18,8 +18,6 @@ namespace Artemis.UI.Shared.Services
|
|||||||
private readonly IKernel _kernel;
|
private readonly IKernel _kernel;
|
||||||
private readonly List<DataModelVisualizationRegistration> _registeredDataModelDisplays;
|
private readonly List<DataModelVisualizationRegistration> _registeredDataModelDisplays;
|
||||||
private readonly List<DataModelVisualizationRegistration> _registeredDataModelEditors;
|
private readonly List<DataModelVisualizationRegistration> _registeredDataModelEditors;
|
||||||
private DataModelPropertiesViewModel _cachedMainDataModel;
|
|
||||||
private Dictionary<Plugin, DataModelPropertiesViewModel> _cachedDataModels;
|
|
||||||
|
|
||||||
public DataModelVisualizationService(IDataModelService dataModelService, IKernel kernel)
|
public DataModelVisualizationService(IDataModelService dataModelService, IKernel kernel)
|
||||||
{
|
{
|
||||||
@ -27,38 +25,24 @@ namespace Artemis.UI.Shared.Services
|
|||||||
_kernel = kernel;
|
_kernel = kernel;
|
||||||
_registeredDataModelEditors = new List<DataModelVisualizationRegistration>();
|
_registeredDataModelEditors = new List<DataModelVisualizationRegistration>();
|
||||||
_registeredDataModelDisplays = new List<DataModelVisualizationRegistration>();
|
_registeredDataModelDisplays = new List<DataModelVisualizationRegistration>();
|
||||||
_cachedDataModels = new Dictionary<Plugin, DataModelPropertiesViewModel>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IReadOnlyCollection<DataModelVisualizationRegistration> RegisteredDataModelEditors => _registeredDataModelEditors.AsReadOnly();
|
public IReadOnlyCollection<DataModelVisualizationRegistration> RegisteredDataModelEditors => _registeredDataModelEditors.AsReadOnly();
|
||||||
public IReadOnlyCollection<DataModelVisualizationRegistration> RegisteredDataModelDisplays => _registeredDataModelDisplays.AsReadOnly();
|
public IReadOnlyCollection<DataModelVisualizationRegistration> RegisteredDataModelDisplays => _registeredDataModelDisplays.AsReadOnly();
|
||||||
|
|
||||||
public DataModelPropertiesViewModel GetMainDataModelVisualization(bool useCache)
|
public DataModelPropertiesViewModel GetMainDataModelVisualization()
|
||||||
{
|
{
|
||||||
// Return from cache if found
|
|
||||||
if (useCache && _cachedMainDataModel != null)
|
|
||||||
return _cachedMainDataModel;
|
|
||||||
|
|
||||||
var viewModel = new DataModelPropertiesViewModel(null, null, null);
|
var viewModel = new DataModelPropertiesViewModel(null, null, null);
|
||||||
foreach (var dataModelExpansion in _dataModelService.DataModelExpansions)
|
foreach (var dataModelExpansion in _dataModelService.DataModelExpansions)
|
||||||
viewModel.Children.Add(new DataModelPropertiesViewModel(dataModelExpansion, viewModel, null));
|
viewModel.Children.Add(new DataModelPropertiesViewModel(dataModelExpansion, viewModel, null));
|
||||||
|
|
||||||
// Update to populate children
|
// Update to populate children
|
||||||
viewModel.Update(this);
|
viewModel.Update(this);
|
||||||
|
|
||||||
// Add to cache
|
|
||||||
_cachedMainDataModel = viewModel;
|
|
||||||
|
|
||||||
return viewModel;
|
return viewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataModelPropertiesViewModel GetPluginDataModelVisualization(Plugin plugin, bool useCache)
|
public DataModelPropertiesViewModel GetPluginDataModelVisualization(Plugin plugin)
|
||||||
{
|
{
|
||||||
// Return from cache if found
|
|
||||||
var isCached = _cachedDataModels.TryGetValue(plugin, out var cachedMainDataModel);
|
|
||||||
if (useCache && isCached)
|
|
||||||
return cachedMainDataModel;
|
|
||||||
|
|
||||||
var dataModel = _dataModelService.GetPluginDataModel(plugin);
|
var dataModel = _dataModelService.GetPluginDataModel(plugin);
|
||||||
if (dataModel == null)
|
if (dataModel == null)
|
||||||
return null;
|
return null;
|
||||||
@ -68,11 +52,6 @@ namespace Artemis.UI.Shared.Services
|
|||||||
|
|
||||||
// Update to populate children
|
// Update to populate children
|
||||||
viewModel.Update(this);
|
viewModel.Update(this);
|
||||||
|
|
||||||
// Add to cache
|
|
||||||
if (!isCached)
|
|
||||||
_cachedDataModels.Add(plugin, viewModel);
|
|
||||||
|
|
||||||
return viewModel;
|
return viewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,12 +60,6 @@ namespace Artemis.UI.Shared.Services
|
|||||||
return _dataModelService.GetPluginExtendsDataModel(plugin);
|
return _dataModelService.GetPluginExtendsDataModel(plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BustCache()
|
|
||||||
{
|
|
||||||
_cachedMainDataModel = null;
|
|
||||||
_cachedDataModels.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public DataModelVisualizationRegistration RegisterDataModelInput<T>(PluginInfo pluginInfo) where T : DataModelInputViewModel
|
public DataModelVisualizationRegistration RegisterDataModelInput<T>(PluginInfo pluginInfo) where T : DataModelInputViewModel
|
||||||
{
|
{
|
||||||
var viewModelType = typeof(T);
|
var viewModelType = typeof(T);
|
||||||
@ -173,8 +146,8 @@ namespace Artemis.UI.Shared.Services
|
|||||||
|
|
||||||
public interface IDataModelVisualizationService : IArtemisSharedUIService
|
public interface IDataModelVisualizationService : IArtemisSharedUIService
|
||||||
{
|
{
|
||||||
DataModelPropertiesViewModel GetMainDataModelVisualization(bool useCached);
|
DataModelPropertiesViewModel GetMainDataModelVisualization();
|
||||||
DataModelPropertiesViewModel GetPluginDataModelVisualization(Plugin plugin, bool useCached);
|
DataModelPropertiesViewModel GetPluginDataModelVisualization(Plugin plugin);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether the given plugin expands the main data model
|
/// Determines whether the given plugin expands the main data model
|
||||||
@ -183,8 +156,6 @@ namespace Artemis.UI.Shared.Services
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
bool GetPluginExtendsDataModel(Plugin plugin);
|
bool GetPluginExtendsDataModel(Plugin plugin);
|
||||||
|
|
||||||
void BustCache();
|
|
||||||
|
|
||||||
DataModelVisualizationRegistration RegisterDataModelInput<T>(PluginInfo pluginInfo) where T : DataModelInputViewModel;
|
DataModelVisualizationRegistration RegisterDataModelInput<T>(PluginInfo pluginInfo) where T : DataModelInputViewModel;
|
||||||
DataModelVisualizationRegistration RegisterDataModelDisplay<T>(PluginInfo pluginInfo) where T : DataModelDisplayViewModel;
|
DataModelVisualizationRegistration RegisterDataModelDisplay<T>(PluginInfo pluginInfo) where T : DataModelDisplayViewModel;
|
||||||
void RemoveDataModelInput(DataModelVisualizationRegistration registration);
|
void RemoveDataModelInput(DataModelVisualizationRegistration registration);
|
||||||
|
|||||||
@ -22,6 +22,8 @@ namespace Artemis.UI.Shared.Services.Dialog
|
|||||||
_viewManager = viewManager;
|
_viewManager = viewManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsExceptionDialogOpen { get; private set; }
|
||||||
|
|
||||||
public async Task<bool> ShowConfirmDialog(string header, string text, string confirmText = "Confirm", string cancelText = "Cancel")
|
public async Task<bool> ShowConfirmDialog(string header, string text, string confirmText = "Confirm", string cancelText = "Cancel")
|
||||||
{
|
{
|
||||||
var arguments = new IParameter[]
|
var arguments = new IParameter[]
|
||||||
@ -90,31 +92,28 @@ namespace Artemis.UI.Shared.Services.Dialog
|
|||||||
|
|
||||||
public async Task ShowExceptionDialog(string message, Exception exception)
|
public async Task ShowExceptionDialog(string message, Exception exception)
|
||||||
{
|
{
|
||||||
|
if (IsExceptionDialogOpen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
IsExceptionDialogOpen = true;
|
||||||
var arguments = new IParameter[]
|
var arguments = new IParameter[]
|
||||||
{
|
{
|
||||||
new ConstructorArgument("message", message),
|
new ConstructorArgument("message", message),
|
||||||
new ConstructorArgument("exception", exception)
|
new ConstructorArgument("exception", exception)
|
||||||
};
|
};
|
||||||
|
|
||||||
try
|
await Execute.OnUIThreadAsync(async () =>
|
||||||
{
|
{
|
||||||
await Execute.OnUIThreadAsync(async () =>
|
try
|
||||||
{
|
{
|
||||||
try
|
DialogHost.CloseDialogCommand.Execute(new object(), null);
|
||||||
{
|
await ShowDialog<ExceptionDialogViewModel>(arguments);
|
||||||
DialogHost.CloseDialogCommand.Execute(new object(), null);
|
}
|
||||||
await ShowDialog<ExceptionDialogViewModel>(arguments);
|
finally
|
||||||
}
|
{
|
||||||
catch (Exception)
|
IsExceptionDialogOpen = false;
|
||||||
{
|
}
|
||||||
// ignored
|
});
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
// ignored
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<object> ShowDialog(string identifier, DialogViewModelBase viewModel)
|
private async Task<object> ShowDialog(string identifier, DialogViewModelBase viewModel)
|
||||||
|
|||||||
@ -102,5 +102,7 @@ namespace Artemis.UI.Shared.Services.Interfaces
|
|||||||
/// <param name="exception">The exception to display. The exception message and stacktrace will be shown.</param>
|
/// <param name="exception">The exception to display. The exception message and stacktrace will be shown.</param>
|
||||||
/// <returns>A task resolving when the dialog is closed</returns>
|
/// <returns>A task resolving when the dialog is closed</returns>
|
||||||
Task ShowExceptionDialog(string message, Exception exception);
|
Task ShowExceptionDialog(string message, Exception exception);
|
||||||
|
|
||||||
|
bool IsExceptionDialogOpen { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,13 +1,14 @@
|
|||||||
<UserControl x:Class="Artemis.UI.DataModelVisualization.SKColorDataModelDisplayView"
|
<UserControl x:Class="Artemis.UI.DataModelVisualization.Display.SKColorDataModelDisplayView"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:local="clr-namespace:Artemis.UI.DataModelVisualization"
|
xmlns:local="clr-namespace:Artemis.UI.DataModelVisualization"
|
||||||
xmlns:converters="clr-namespace:Artemis.UI.Shared.Converters;assembly=Artemis.UI.Shared"
|
xmlns:converters="clr-namespace:Artemis.UI.Shared.Converters;assembly=Artemis.UI.Shared"
|
||||||
|
xmlns:display="clr-namespace:Artemis.UI.DataModelVisualization.Display"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DesignHeight="450" d:DesignWidth="800"
|
d:DesignHeight="450" d:DesignWidth="800"
|
||||||
d:DataContext="{d:DesignInstance {x:Type local:SKColorDataModelDisplayViewModel}}">
|
d:DataContext="{d:DesignInstance {x:Type display:SKColorDataModelDisplayViewModel}}">
|
||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
<ResourceDictionary.MergedDictionaries>
|
<ResourceDictionary.MergedDictionaries>
|
||||||
@ -1,7 +1,7 @@
|
|||||||
using Artemis.UI.Shared.DataModelVisualization;
|
using Artemis.UI.Shared.DataModelVisualization;
|
||||||
using SkiaSharp;
|
using SkiaSharp;
|
||||||
|
|
||||||
namespace Artemis.UI.DataModelVisualization
|
namespace Artemis.UI.DataModelVisualization.Display
|
||||||
{
|
{
|
||||||
public class SKColorDataModelDisplayViewModel : DataModelDisplayViewModel<SKColor>
|
public class SKColorDataModelDisplayViewModel : DataModelDisplayViewModel<SKColor>
|
||||||
{
|
{
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
<UserControl x:Class="Artemis.UI.DataModelVisualization.Input.StringDataModelInputView"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:Artemis.UI.DataModelVisualization.Input"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="450" d:DesignWidth="800">
|
||||||
|
<TextBox VerticalAlignment="Center" Text="{Binding InputValue}"/>
|
||||||
|
</UserControl>
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using Artemis.Core.Plugins.Abstract.DataModels.Attributes;
|
||||||
|
using Artemis.UI.Shared.DataModelVisualization;
|
||||||
|
|
||||||
|
namespace Artemis.UI.DataModelVisualization.Input
|
||||||
|
{
|
||||||
|
public class StringDataModelInputViewModel : DataModelInputViewModel<string>
|
||||||
|
{
|
||||||
|
public StringDataModelInputViewModel(DataModelPropertyAttribute description, string initialValue) : base(description, initialValue)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -48,9 +48,10 @@
|
|||||||
Background="#ab47bc"
|
Background="#ab47bc"
|
||||||
BorderBrush="#ab47bc"
|
BorderBrush="#ab47bc"
|
||||||
Style="{StaticResource DisplayConditionButton}"
|
Style="{StaticResource DisplayConditionButton}"
|
||||||
|
ToolTip="{Binding DisplayConditionPredicate.LeftPropertyPath}"
|
||||||
Click="PropertyButton_OnClick">
|
Click="PropertyButton_OnClick">
|
||||||
<Button.ContextMenu>
|
<Button.ContextMenu>
|
||||||
<ContextMenu ItemsSource="{Binding DataModel.Children}">
|
<ContextMenu ItemsSource="{Binding LeftSideDataModel.Children}">
|
||||||
<ContextMenu.ItemContainerStyle>
|
<ContextMenu.ItemContainerStyle>
|
||||||
<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource MaterialDesignMenuItem}">
|
<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource MaterialDesignMenuItem}">
|
||||||
<Setter Property="ItemsSource" Value="{Binding Children}" />
|
<Setter Property="ItemsSource" Value="{Binding Children}" />
|
||||||
@ -59,14 +60,13 @@
|
|||||||
<Setter Property="Command" Value="{Binding Data.SelectLeftPropertyCommand, Source={StaticResource DataContextProxy}}" />
|
<Setter Property="Command" Value="{Binding Data.SelectLeftPropertyCommand, Source={StaticResource DataContextProxy}}" />
|
||||||
<Setter Property="CommandParameter" Value="{Binding}" />
|
<Setter Property="CommandParameter" Value="{Binding}" />
|
||||||
<Setter Property="CommandTarget" Value="{Binding}" />
|
<Setter Property="CommandTarget" Value="{Binding}" />
|
||||||
|
<Setter Property="IsEnabled" Value="{Binding IsMatchingFilteredTypes}" />
|
||||||
</Style>
|
</Style>
|
||||||
</ContextMenu.ItemContainerStyle>
|
</ContextMenu.ItemContainerStyle>
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
</Button.ContextMenu>
|
</Button.ContextMenu>
|
||||||
<Grid>
|
<Grid>
|
||||||
<TextBlock Text="{Binding SelectedLeftSideProperty.PropertyDescription.Name}"
|
<TextBlock Text="{Binding SelectedLeftSideProperty.PropertyDescription.Name}"
|
||||||
ToolTip="{Binding SelectedLeftSideProperty.PropertyDescription.Description}"
|
|
||||||
Visibility="{Binding SelectedLeftSideProperty, Converter={StaticResource NullToVisibilityConverter}}" />
|
Visibility="{Binding SelectedLeftSideProperty, Converter={StaticResource NullToVisibilityConverter}}" />
|
||||||
<TextBlock Text="« Select a property »"
|
<TextBlock Text="« Select a property »"
|
||||||
FontStyle="Italic"
|
FontStyle="Italic"
|
||||||
@ -79,44 +79,26 @@
|
|||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Style="{StaticResource DisplayConditionButtonLeftClickMenu}"
|
Style="{StaticResource DisplayConditionButtonLeftClickMenu}"
|
||||||
Background="#7B7B7B"
|
Background="#7B7B7B"
|
||||||
BorderBrush="#7B7B7B" Content="Equals">
|
BorderBrush="#7B7B7B"
|
||||||
|
Content="{Binding DisplayConditionPredicate.Operator.Description}"
|
||||||
|
Click="PropertyButton_OnClick">
|
||||||
<Button.ContextMenu>
|
<Button.ContextMenu>
|
||||||
<ContextMenu>
|
<ContextMenu ItemsSource="{Binding Operators}">
|
||||||
<MenuItem Header="Equals">
|
<ContextMenu.ItemTemplate>
|
||||||
<MenuItem.Icon>
|
<DataTemplate>
|
||||||
<materialDesign:PackIcon Kind="Equal" />
|
<StackPanel Orientation="Horizontal">
|
||||||
</MenuItem.Icon>
|
<materialDesign:PackIcon Kind="{Binding Icon}" VerticalAlignment="Center" Margin="0 0 15 0"/>
|
||||||
</MenuItem>
|
<TextBlock Text="{Binding Description}" VerticalAlignment="Center"/>
|
||||||
<MenuItem Header="Does not equal">
|
</StackPanel>
|
||||||
<MenuItem.Icon>
|
</DataTemplate>
|
||||||
<materialDesign:PackIcon Kind="NotEqualVariant" />
|
</ContextMenu.ItemTemplate>
|
||||||
</MenuItem.Icon>
|
<ContextMenu.ItemContainerStyle>
|
||||||
</MenuItem>
|
<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource MaterialDesignMenuItem}">
|
||||||
<MenuItem Header="Is less than">
|
<Setter Property="Command" Value="{Binding Data.SelectOperatorCommand, Source={StaticResource DataContextProxy}}" />
|
||||||
<MenuItem.Icon>
|
<Setter Property="CommandParameter" Value="{Binding}" />
|
||||||
<materialDesign:PackIcon Kind="LessThan" />
|
<Setter Property="CommandTarget" Value="{Binding}" />
|
||||||
</MenuItem.Icon>
|
</Style>
|
||||||
</MenuItem>
|
</ContextMenu.ItemContainerStyle>
|
||||||
<MenuItem Header="Is greater than">
|
|
||||||
<MenuItem.Icon>
|
|
||||||
<materialDesign:PackIcon Kind="GreaterThan" />
|
|
||||||
</MenuItem.Icon>
|
|
||||||
</MenuItem>
|
|
||||||
<MenuItem Header="Is less than or equal to">
|
|
||||||
<MenuItem.Icon>
|
|
||||||
<materialDesign:PackIcon Kind="LessThanOrEqual" />
|
|
||||||
</MenuItem.Icon>
|
|
||||||
</MenuItem>
|
|
||||||
<MenuItem Header="Is greater than or equal to">
|
|
||||||
<MenuItem.Icon>
|
|
||||||
<materialDesign:PackIcon Kind="GreaterThanOrEqual" />
|
|
||||||
</MenuItem.Icon>
|
|
||||||
</MenuItem>
|
|
||||||
<MenuItem Header="Is null">
|
|
||||||
<MenuItem.Icon>
|
|
||||||
<materialDesign:PackIcon Kind="Null" />
|
|
||||||
</MenuItem.Icon>
|
|
||||||
</MenuItem>
|
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
</Button.ContextMenu>
|
</Button.ContextMenu>
|
||||||
</Button>
|
</Button>
|
||||||
@ -127,10 +109,11 @@
|
|||||||
Background="{DynamicResource PrimaryHueMidBrush}"
|
Background="{DynamicResource PrimaryHueMidBrush}"
|
||||||
BorderBrush="{DynamicResource PrimaryHueMidBrush}"
|
BorderBrush="{DynamicResource PrimaryHueMidBrush}"
|
||||||
Style="{StaticResource DisplayConditionButton}"
|
Style="{StaticResource DisplayConditionButton}"
|
||||||
|
ToolTip="{Binding DisplayConditionPredicate.RightPropertyPath}"
|
||||||
Click="PropertyButton_OnClick"
|
Click="PropertyButton_OnClick"
|
||||||
Visibility="{Binding ShowRightSidePropertySelection, Converter={x:Static s:BoolToVisibilityConverter.Instance}, Mode=OneWay}">
|
Visibility="{Binding ShowRightSidePropertySelection, Converter={x:Static s:BoolToVisibilityConverter.Instance}, Mode=OneWay}">
|
||||||
<Button.ContextMenu>
|
<Button.ContextMenu>
|
||||||
<ContextMenu ItemsSource="{Binding DataModel.Children}">
|
<ContextMenu ItemsSource="{Binding RightSideDataModel.Children}">
|
||||||
<ContextMenu.ItemContainerStyle>
|
<ContextMenu.ItemContainerStyle>
|
||||||
<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource MaterialDesignMenuItem}">
|
<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource MaterialDesignMenuItem}">
|
||||||
<Setter Property="ItemsSource" Value="{Binding Children}" />
|
<Setter Property="ItemsSource" Value="{Binding Children}" />
|
||||||
@ -139,14 +122,13 @@
|
|||||||
<Setter Property="Command" Value="{Binding Data.SelectRightPropertyCommand, Source={StaticResource DataContextProxy}}" />
|
<Setter Property="Command" Value="{Binding Data.SelectRightPropertyCommand, Source={StaticResource DataContextProxy}}" />
|
||||||
<Setter Property="CommandParameter" Value="{Binding}" />
|
<Setter Property="CommandParameter" Value="{Binding}" />
|
||||||
<Setter Property="CommandTarget" Value="{Binding}" />
|
<Setter Property="CommandTarget" Value="{Binding}" />
|
||||||
|
<Setter Property="IsEnabled" Value="{Binding IsMatchingFilteredTypes}" />
|
||||||
</Style>
|
</Style>
|
||||||
</ContextMenu.ItemContainerStyle>
|
</ContextMenu.ItemContainerStyle>
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
</Button.ContextMenu>
|
</Button.ContextMenu>
|
||||||
<Grid>
|
<Grid>
|
||||||
<TextBlock Text="{Binding SelectedRightSideProperty.PropertyDescription.Name}"
|
<TextBlock Text="{Binding SelectedRightSideProperty.PropertyDescription.Name}"
|
||||||
ToolTip="{Binding SelectedRightSideProperty.PropertyDescription.Description}"
|
|
||||||
Visibility="{Binding SelectedRightSideProperty, Converter={StaticResource NullToVisibilityConverter}}" />
|
Visibility="{Binding SelectedRightSideProperty, Converter={StaticResource NullToVisibilityConverter}}" />
|
||||||
<TextBlock Text="« Select a property »"
|
<TextBlock Text="« Select a property »"
|
||||||
FontStyle="Italic"
|
FontStyle="Italic"
|
||||||
|
|||||||
@ -1,4 +1,9 @@
|
|||||||
using Artemis.Core.Models.Profile.Conditions;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Artemis.Core.Models.Profile.Conditions;
|
||||||
|
using Artemis.Core.Services.Interfaces;
|
||||||
using Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.Abstract;
|
using Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.Abstract;
|
||||||
using Artemis.UI.Shared.DataModelVisualization;
|
using Artemis.UI.Shared.DataModelVisualization;
|
||||||
using Artemis.UI.Shared.DataModelVisualization.Shared;
|
using Artemis.UI.Shared.DataModelVisualization.Shared;
|
||||||
@ -10,35 +15,52 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
|
|||||||
{
|
{
|
||||||
public class DisplayConditionPredicateViewModel : DisplayConditionViewModel
|
public class DisplayConditionPredicateViewModel : DisplayConditionViewModel
|
||||||
{
|
{
|
||||||
|
private readonly IDataModelService _dataModelService;
|
||||||
private readonly IDataModelVisualizationService _dataModelVisualizationService;
|
private readonly IDataModelVisualizationService _dataModelVisualizationService;
|
||||||
private readonly IProfileEditorService _profileEditorService;
|
private readonly IProfileEditorService _profileEditorService;
|
||||||
private DataModelPropertiesViewModel _dataModel;
|
private DataModelPropertiesViewModel _leftSideDataModel;
|
||||||
|
private List<DisplayConditionOperator> _operators;
|
||||||
|
private DataModelPropertiesViewModel _rightSideDataModel;
|
||||||
|
private DataModelInputViewModel _rightSideInputViewModel;
|
||||||
|
private int _rightSideTransitionIndex;
|
||||||
private DataModelVisualizationViewModel _selectedLeftSideProperty;
|
private DataModelVisualizationViewModel _selectedLeftSideProperty;
|
||||||
private DataModelVisualizationViewModel _selectedRightSideProperty;
|
private DataModelVisualizationViewModel _selectedRightSideProperty;
|
||||||
private int _rightSideTransitionIndex;
|
|
||||||
private DataModelInputViewModel _rightSideInputViewModel;
|
private List<Type> _supportedInputTypes;
|
||||||
|
|
||||||
public DisplayConditionPredicateViewModel(DisplayConditionPredicate displayConditionPredicate, DisplayConditionViewModel parent,
|
public DisplayConditionPredicateViewModel(DisplayConditionPredicate displayConditionPredicate, DisplayConditionViewModel parent,
|
||||||
IProfileEditorService profileEditorService, IDataModelVisualizationService dataModelVisualizationService) : base(displayConditionPredicate, parent)
|
IProfileEditorService profileEditorService, IDataModelVisualizationService dataModelVisualizationService, IDataModelService dataModelService)
|
||||||
|
: base(displayConditionPredicate, parent)
|
||||||
{
|
{
|
||||||
_profileEditorService = profileEditorService;
|
_profileEditorService = profileEditorService;
|
||||||
_dataModelVisualizationService = dataModelVisualizationService;
|
_dataModelVisualizationService = dataModelVisualizationService;
|
||||||
|
_dataModelService = dataModelService;
|
||||||
|
|
||||||
SelectLeftPropertyCommand = new DelegateCommand(ExecuteSelectLeftProperty);
|
SelectLeftPropertyCommand = new DelegateCommand(ExecuteSelectLeftProperty);
|
||||||
SelectRightPropertyCommand = new DelegateCommand(ExecuteSelectRightProperty);
|
SelectRightPropertyCommand = new DelegateCommand(ExecuteSelectRightProperty);
|
||||||
|
SelectOperatorCommand = new DelegateCommand(ExecuteSelectOperatorCommand);
|
||||||
|
|
||||||
GetDataModel();
|
Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public DisplayConditionPredicate DisplayConditionPredicate => (DisplayConditionPredicate) Model;
|
public DisplayConditionPredicate DisplayConditionPredicate => (DisplayConditionPredicate) Model;
|
||||||
public DelegateCommand SelectLeftPropertyCommand { get; }
|
public DelegateCommand SelectLeftPropertyCommand { get; }
|
||||||
public DelegateCommand SelectRightPropertyCommand { get; }
|
public DelegateCommand SelectRightPropertyCommand { get; }
|
||||||
|
public DelegateCommand SelectOperatorCommand { get; }
|
||||||
public bool ShowRightSidePropertySelection => DisplayConditionPredicate.PredicateType == PredicateType.Dynamic;
|
public bool ShowRightSidePropertySelection => DisplayConditionPredicate.PredicateType == PredicateType.Dynamic;
|
||||||
|
|
||||||
public DataModelPropertiesViewModel DataModel
|
public bool IsInitialized { get; private set; }
|
||||||
|
|
||||||
|
public DataModelPropertiesViewModel LeftSideDataModel
|
||||||
{
|
{
|
||||||
get => _dataModel;
|
get => _leftSideDataModel;
|
||||||
set => SetAndNotify(ref _dataModel, value);
|
set => SetAndNotify(ref _leftSideDataModel, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataModelPropertiesViewModel RightSideDataModel
|
||||||
|
{
|
||||||
|
get => _rightSideDataModel;
|
||||||
|
set => SetAndNotify(ref _rightSideDataModel, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataModelVisualizationViewModel SelectedLeftSideProperty
|
public DataModelVisualizationViewModel SelectedLeftSideProperty
|
||||||
@ -65,26 +87,70 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
|
|||||||
set => SetAndNotify(ref _rightSideInputViewModel, value);
|
set => SetAndNotify(ref _rightSideInputViewModel, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GetDataModel()
|
public List<DisplayConditionOperator> Operators
|
||||||
{
|
{
|
||||||
var mainDataModel = _dataModelVisualizationService.GetMainDataModelVisualization(true);
|
get => _operators;
|
||||||
if (!_dataModelVisualizationService.GetPluginExtendsDataModel(_profileEditorService.GetCurrentModule()))
|
set => SetAndNotify(ref _operators, value);
|
||||||
mainDataModel.Children.Add(_dataModelVisualizationService.GetPluginDataModelVisualization(_profileEditorService.GetCurrentModule(), true));
|
}
|
||||||
|
|
||||||
DataModel = mainDataModel;
|
public void Initialize()
|
||||||
|
{
|
||||||
|
Task.Run(() =>
|
||||||
|
{
|
||||||
|
// Get the data models
|
||||||
|
LeftSideDataModel = _dataModelVisualizationService.GetMainDataModelVisualization();
|
||||||
|
RightSideDataModel = _dataModelVisualizationService.GetMainDataModelVisualization();
|
||||||
|
if (!_dataModelVisualizationService.GetPluginExtendsDataModel(_profileEditorService.GetCurrentModule()))
|
||||||
|
{
|
||||||
|
LeftSideDataModel.Children.Add(_dataModelVisualizationService.GetPluginDataModelVisualization(_profileEditorService.GetCurrentModule()));
|
||||||
|
RightSideDataModel.Children.Add(_dataModelVisualizationService.GetPluginDataModelVisualization(_profileEditorService.GetCurrentModule()));
|
||||||
|
}
|
||||||
|
|
||||||
Update();
|
// Determine which types are currently supported
|
||||||
|
_supportedInputTypes = _dataModelVisualizationService.RegisteredDataModelEditors.Select(e => e.SupportedType).ToList();
|
||||||
|
|
||||||
|
IsInitialized = true;
|
||||||
|
Update();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
SelectedLeftSideProperty = DisplayConditionPredicate.LeftPropertyPath != null
|
if (!IsInitialized)
|
||||||
? DataModel.GetChildByPath(DisplayConditionPredicate.LeftDataModelGuid, DisplayConditionPredicate.LeftPropertyPath)
|
return;
|
||||||
: null;
|
|
||||||
|
|
||||||
SelectedRightSideProperty = DisplayConditionPredicate.RightPropertyPath != null
|
// If static, only allow selecting properties also supported by input
|
||||||
? DataModel.GetChildByPath(DisplayConditionPredicate.RightDataModelGuid, DisplayConditionPredicate.RightPropertyPath)
|
if (DisplayConditionPredicate.PredicateType == PredicateType.Static)
|
||||||
|
LeftSideDataModel.ApplyTypeFilter(_supportedInputTypes.ToArray());
|
||||||
|
|
||||||
|
// Determine the left side property first
|
||||||
|
SelectedLeftSideProperty = DisplayConditionPredicate.LeftPropertyPath != null
|
||||||
|
? LeftSideDataModel.GetChildByPath(DisplayConditionPredicate.LeftDataModelGuid, DisplayConditionPredicate.LeftPropertyPath)
|
||||||
: null;
|
: null;
|
||||||
|
var leftSideType = SelectedLeftSideProperty?.PropertyInfo?.PropertyType;
|
||||||
|
|
||||||
|
// Right side may only select properties matching the left side
|
||||||
|
if (SelectedLeftSideProperty != null)
|
||||||
|
RightSideDataModel.ApplyTypeFilter(leftSideType);
|
||||||
|
else
|
||||||
|
RightSideDataModel.ApplyTypeFilter();
|
||||||
|
|
||||||
|
// Determine the right side property first
|
||||||
|
if (DisplayConditionPredicate.RightPropertyPath != null)
|
||||||
|
{
|
||||||
|
// Ensure the right side property still matches the left side type, else set it to null
|
||||||
|
var selectedProperty = RightSideDataModel.GetChildByPath(DisplayConditionPredicate.RightDataModelGuid, DisplayConditionPredicate.RightPropertyPath);
|
||||||
|
SelectedRightSideProperty = selectedProperty.IsMatchingFilteredTypes ? selectedProperty : null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SelectedRightSideProperty = null;
|
||||||
|
|
||||||
|
// Get the supported operators
|
||||||
|
Operators = _dataModelService.GetCompatibleConditionOperators(leftSideType);
|
||||||
|
if (DisplayConditionPredicate.Operator == null || !DisplayConditionPredicate.Operator.SupportsType(leftSideType))
|
||||||
|
DisplayConditionPredicate.Operator = Operators.FirstOrDefault(o => o.SupportsType(leftSideType));
|
||||||
|
|
||||||
|
NotifyOfPropertyChange(nameof(DisplayConditionPredicate));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ActivateRightSideInputViewModel()
|
public void ActivateRightSideInputViewModel()
|
||||||
@ -111,5 +177,14 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
|
|||||||
DisplayConditionPredicate.RightDataModelGuid = vm.DataModel.PluginInfo.Guid;
|
DisplayConditionPredicate.RightDataModelGuid = vm.DataModel.PluginInfo.Guid;
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ExecuteSelectOperatorCommand(object context)
|
||||||
|
{
|
||||||
|
if (!(context is DisplayConditionOperator displayConditionOperator))
|
||||||
|
return;
|
||||||
|
|
||||||
|
DisplayConditionPredicate.Operator = displayConditionOperator;
|
||||||
|
Update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,10 +1,7 @@
|
|||||||
using System.Linq;
|
using Artemis.Core.Models.Profile;
|
||||||
using Artemis.Core.Models.Profile;
|
|
||||||
using Artemis.Core.Models.Profile.Conditions;
|
using Artemis.Core.Models.Profile.Conditions;
|
||||||
using Artemis.UI.Ninject.Factories;
|
using Artemis.UI.Ninject.Factories;
|
||||||
using Artemis.UI.Shared.DataModelVisualization.Shared;
|
|
||||||
using Artemis.UI.Shared.Events;
|
using Artemis.UI.Shared.Events;
|
||||||
using Artemis.UI.Shared.Services;
|
|
||||||
using Artemis.UI.Shared.Services.Interfaces;
|
using Artemis.UI.Shared.Services.Interfaces;
|
||||||
|
|
||||||
namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
|
namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
|
||||||
@ -12,13 +9,10 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
|
|||||||
public class DisplayConditionsViewModel : ProfileEditorPanelViewModel
|
public class DisplayConditionsViewModel : ProfileEditorPanelViewModel
|
||||||
{
|
{
|
||||||
private readonly IDisplayConditionsVmFactory _displayConditionsVmFactory;
|
private readonly IDisplayConditionsVmFactory _displayConditionsVmFactory;
|
||||||
private readonly IDataModelVisualizationService _dataModelVisualizationService;
|
|
||||||
private DisplayConditionGroupViewModel _rootGroup;
|
private DisplayConditionGroupViewModel _rootGroup;
|
||||||
|
|
||||||
public DisplayConditionsViewModel(IProfileEditorService profileEditorService, IDataModelVisualizationService dataModelVisualizationService,
|
public DisplayConditionsViewModel(IProfileEditorService profileEditorService, IDisplayConditionsVmFactory displayConditionsVmFactory)
|
||||||
IDisplayConditionsVmFactory displayConditionsVmFactory)
|
|
||||||
{
|
{
|
||||||
_dataModelVisualizationService = dataModelVisualizationService;
|
|
||||||
_displayConditionsVmFactory = displayConditionsVmFactory;
|
_displayConditionsVmFactory = displayConditionsVmFactory;
|
||||||
profileEditorService.ProfileElementSelected += ProfileEditorServiceOnProfileElementSelected;
|
profileEditorService.ProfileElementSelected += ProfileEditorServiceOnProfileElementSelected;
|
||||||
}
|
}
|
||||||
@ -31,8 +25,6 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
|
|||||||
|
|
||||||
private void ProfileEditorServiceOnProfileElementSelected(object sender, ProfileElementEventArgs e)
|
private void ProfileEditorServiceOnProfileElementSelected(object sender, ProfileElementEventArgs e)
|
||||||
{
|
{
|
||||||
_dataModelVisualizationService.BustCache();
|
|
||||||
|
|
||||||
if (e.ProfileElement is Layer layer)
|
if (e.ProfileElement is Layer layer)
|
||||||
{
|
{
|
||||||
// Ensure the layer has a root display condition group
|
// Ensure the layer has a root display condition group
|
||||||
@ -41,6 +33,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions
|
|||||||
|
|
||||||
RootGroup = _displayConditionsVmFactory.DisplayConditionGroupViewModel(layer.DisplayConditionGroup, null);
|
RootGroup = _displayConditionsVmFactory.DisplayConditionGroupViewModel(layer.DisplayConditionGroup, null);
|
||||||
RootGroup.IsRootGroup = true;
|
RootGroup.IsRootGroup = true;
|
||||||
|
RootGroup.Update();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
RootGroup = null;
|
RootGroup = null;
|
||||||
|
|||||||
@ -10,6 +10,7 @@ using Artemis.Core.Services.Interfaces;
|
|||||||
using Artemis.UI.Events;
|
using Artemis.UI.Events;
|
||||||
using Artemis.UI.Screens.Settings;
|
using Artemis.UI.Screens.Settings;
|
||||||
using Artemis.UI.Screens.Sidebar;
|
using Artemis.UI.Screens.Sidebar;
|
||||||
|
using Artemis.UI.Services;
|
||||||
using Artemis.UI.Services.Interfaces;
|
using Artemis.UI.Services.Interfaces;
|
||||||
using Artemis.UI.Utilities;
|
using Artemis.UI.Utilities;
|
||||||
using MaterialDesignExtensions.Controls;
|
using MaterialDesignExtensions.Controls;
|
||||||
@ -23,6 +24,7 @@ namespace Artemis.UI.Screens
|
|||||||
private readonly PluginSetting<ApplicationColorScheme> _colorScheme;
|
private readonly PluginSetting<ApplicationColorScheme> _colorScheme;
|
||||||
private readonly ICoreService _coreService;
|
private readonly ICoreService _coreService;
|
||||||
private readonly IDebugService _debugService;
|
private readonly IDebugService _debugService;
|
||||||
|
private readonly IRegistrationService _builtInRegistrationService;
|
||||||
private readonly IEventAggregator _eventAggregator;
|
private readonly IEventAggregator _eventAggregator;
|
||||||
private readonly ThemeWatcher _themeWatcher;
|
private readonly ThemeWatcher _themeWatcher;
|
||||||
private readonly Timer _titleUpdateTimer;
|
private readonly Timer _titleUpdateTimer;
|
||||||
@ -33,13 +35,14 @@ namespace Artemis.UI.Screens
|
|||||||
private string _windowTitle;
|
private string _windowTitle;
|
||||||
|
|
||||||
public RootViewModel(IEventAggregator eventAggregator, SidebarViewModel sidebarViewModel, ISettingsService settingsService, ICoreService coreService,
|
public RootViewModel(IEventAggregator eventAggregator, SidebarViewModel sidebarViewModel, ISettingsService settingsService, ICoreService coreService,
|
||||||
IDebugService debugService, ISnackbarMessageQueue snackbarMessageQueue)
|
IDebugService debugService, IRegistrationService builtInRegistrationService, ISnackbarMessageQueue snackbarMessageQueue)
|
||||||
{
|
{
|
||||||
SidebarViewModel = sidebarViewModel;
|
SidebarViewModel = sidebarViewModel;
|
||||||
MainMessageQueue = snackbarMessageQueue;
|
MainMessageQueue = snackbarMessageQueue;
|
||||||
_eventAggregator = eventAggregator;
|
_eventAggregator = eventAggregator;
|
||||||
_coreService = coreService;
|
_coreService = coreService;
|
||||||
_debugService = debugService;
|
_debugService = debugService;
|
||||||
|
_builtInRegistrationService = builtInRegistrationService;
|
||||||
|
|
||||||
_titleUpdateTimer = new Timer(500);
|
_titleUpdateTimer = new Timer(500);
|
||||||
_titleUpdateTimer.Elapsed += (sender, args) => UpdateWindowTitle();
|
_titleUpdateTimer.Elapsed += (sender, args) => UpdateWindowTitle();
|
||||||
@ -56,7 +59,7 @@ namespace Artemis.UI.Screens
|
|||||||
}
|
}
|
||||||
|
|
||||||
public SidebarViewModel SidebarViewModel { get; }
|
public SidebarViewModel SidebarViewModel { get; }
|
||||||
public ISnackbarMessageQueue MainMessageQueue { get; }
|
public ISnackbarMessageQueue MainMessageQueue { get; }
|
||||||
|
|
||||||
public bool IsSidebarVisible
|
public bool IsSidebarVisible
|
||||||
{
|
{
|
||||||
@ -184,6 +187,10 @@ namespace Artemis.UI.Screens
|
|||||||
{
|
{
|
||||||
UpdateWindowTitle();
|
UpdateWindowTitle();
|
||||||
_titleUpdateTimer.Start();
|
_titleUpdateTimer.Start();
|
||||||
|
|
||||||
|
_builtInRegistrationService.RegisterBuiltInDataModelDisplays();
|
||||||
|
_builtInRegistrationService.RegisterBuiltInDataModelInputs();
|
||||||
|
_builtInRegistrationService.RegisterBuiltInPropertyEditors();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnDeactivate()
|
protected override void OnDeactivate()
|
||||||
|
|||||||
@ -93,8 +93,8 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
|
|||||||
private void GetDataModel()
|
private void GetDataModel()
|
||||||
{
|
{
|
||||||
MainDataModel = SelectedModule != null
|
MainDataModel = SelectedModule != null
|
||||||
? _dataModelVisualizationService.GetPluginDataModelVisualization(SelectedModule, false)
|
? _dataModelVisualizationService.GetPluginDataModelVisualization(SelectedModule)
|
||||||
: _dataModelVisualizationService.GetMainDataModelVisualization(false);
|
: _dataModelVisualizationService.GetMainDataModelVisualization();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PluginServiceOnPluginToggled(object? sender, PluginEventArgs e)
|
private void PluginServiceOnPluginToggled(object? sender, PluginEventArgs e)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using Artemis.Core;
|
using Artemis.Core;
|
||||||
using Artemis.UI.DataModelVisualization;
|
using Artemis.UI.DataModelVisualization.Display;
|
||||||
using Artemis.UI.Screens.Settings.Debug;
|
using Artemis.UI.Screens.Settings.Debug;
|
||||||
using Artemis.UI.Services.Interfaces;
|
using Artemis.UI.Services.Interfaces;
|
||||||
using Artemis.UI.Shared.Services;
|
using Artemis.UI.Shared.Services;
|
||||||
@ -15,21 +15,12 @@ namespace Artemis.UI.Services
|
|||||||
{
|
{
|
||||||
private readonly IKernel _kernel;
|
private readonly IKernel _kernel;
|
||||||
private readonly IWindowManager _windowManager;
|
private readonly IWindowManager _windowManager;
|
||||||
private readonly IDataModelVisualizationService _dataModelVisualizationService;
|
|
||||||
private DebugViewModel _debugViewModel;
|
private DebugViewModel _debugViewModel;
|
||||||
|
|
||||||
public DebugService(IKernel kernel, IWindowManager windowManager, IDataModelVisualizationService dataModelVisualizationService)
|
public DebugService(IKernel kernel, IWindowManager windowManager)
|
||||||
{
|
{
|
||||||
_kernel = kernel;
|
_kernel = kernel;
|
||||||
_windowManager = windowManager;
|
_windowManager = windowManager;
|
||||||
_dataModelVisualizationService = dataModelVisualizationService;
|
|
||||||
|
|
||||||
RegisterBuiltInDataModelDisplays();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RegisterBuiltInDataModelDisplays()
|
|
||||||
{
|
|
||||||
_dataModelVisualizationService.RegisterDataModelDisplay<SKColorDataModelDisplayViewModel>(Constants.CorePluginInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ShowDebugger()
|
public void ShowDebugger()
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Artemis.Core;
|
|
||||||
using Artemis.Core.Models.Profile;
|
using Artemis.Core.Models.Profile;
|
||||||
using Artemis.Core.Services;
|
using Artemis.Core.Services;
|
||||||
using Artemis.UI.PropertyInput;
|
|
||||||
using Artemis.UI.Services.Interfaces;
|
using Artemis.UI.Services.Interfaces;
|
||||||
using Artemis.UI.Shared.Services.Interfaces;
|
using Artemis.UI.Shared.Services.Interfaces;
|
||||||
using SkiaSharp;
|
using SkiaSharp;
|
||||||
@ -14,14 +12,11 @@ namespace Artemis.UI.Services
|
|||||||
{
|
{
|
||||||
public class LayerEditorService : ILayerEditorService
|
public class LayerEditorService : ILayerEditorService
|
||||||
{
|
{
|
||||||
private readonly IProfileEditorService _profileEditorService;
|
|
||||||
private readonly ISettingsService _settingsService;
|
private readonly ISettingsService _settingsService;
|
||||||
|
|
||||||
public LayerEditorService(ISettingsService settingsService, IProfileEditorService profileEditorService)
|
public LayerEditorService(ISettingsService settingsService, IProfileEditorService profileEditorService)
|
||||||
{
|
{
|
||||||
_settingsService = settingsService;
|
_settingsService = settingsService;
|
||||||
_profileEditorService = profileEditorService;
|
|
||||||
RegisterBuiltInPropertyEditors();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@ -138,16 +133,5 @@ namespace Artemis.UI.Services
|
|||||||
// The difference between the two is the offset
|
// The difference between the two is the offset
|
||||||
return topLeft - tempTopLeft;
|
return topLeft - tempTopLeft;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RegisterBuiltInPropertyEditors()
|
|
||||||
{
|
|
||||||
_profileEditorService.RegisterPropertyInput<BrushPropertyInputViewModel>(Constants.CorePluginInfo);
|
|
||||||
_profileEditorService.RegisterPropertyInput<ColorGradientPropertyInputViewModel>(Constants.CorePluginInfo);
|
|
||||||
_profileEditorService.RegisterPropertyInput<FloatPropertyInputViewModel>(Constants.CorePluginInfo);
|
|
||||||
_profileEditorService.RegisterPropertyInput<IntPropertyInputViewModel>(Constants.CorePluginInfo);
|
|
||||||
_profileEditorService.RegisterPropertyInput<SKColorPropertyInputViewModel>(Constants.CorePluginInfo);
|
|
||||||
_profileEditorService.RegisterPropertyInput<SKPointPropertyInputViewModel>(Constants.CorePluginInfo);
|
|
||||||
_profileEditorService.RegisterPropertyInput<SKSizePropertyInputViewModel>(Constants.CorePluginInfo);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
68
src/Artemis.UI/Services/RegistrationService.cs
Normal file
68
src/Artemis.UI/Services/RegistrationService.cs
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
using Artemis.Core;
|
||||||
|
using Artemis.UI.DataModelVisualization.Display;
|
||||||
|
using Artemis.UI.DataModelVisualization.Input;
|
||||||
|
using Artemis.UI.PropertyInput;
|
||||||
|
using Artemis.UI.Services.Interfaces;
|
||||||
|
using Artemis.UI.Shared.Services;
|
||||||
|
using Artemis.UI.Shared.Services.Interfaces;
|
||||||
|
|
||||||
|
namespace Artemis.UI.Services
|
||||||
|
{
|
||||||
|
public class RegistrationService : IRegistrationService
|
||||||
|
{
|
||||||
|
private readonly IDataModelVisualizationService _dataModelVisualizationService;
|
||||||
|
private readonly IProfileEditorService _profileEditorService;
|
||||||
|
private bool _registeredBuiltInDataModelDisplays;
|
||||||
|
private bool _registeredBuiltInDataModelInputs;
|
||||||
|
private bool _registeredBuiltInPropertyEditors;
|
||||||
|
|
||||||
|
public RegistrationService(IDataModelVisualizationService dataModelVisualizationService, IProfileEditorService profileEditorService)
|
||||||
|
{
|
||||||
|
_dataModelVisualizationService = dataModelVisualizationService;
|
||||||
|
_profileEditorService = profileEditorService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegisterBuiltInDataModelDisplays()
|
||||||
|
{
|
||||||
|
if (_registeredBuiltInDataModelDisplays)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_dataModelVisualizationService.RegisterDataModelDisplay<SKColorDataModelDisplayViewModel>(Constants.CorePluginInfo);
|
||||||
|
|
||||||
|
_registeredBuiltInDataModelDisplays = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegisterBuiltInDataModelInputs()
|
||||||
|
{
|
||||||
|
if (_registeredBuiltInDataModelInputs)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_dataModelVisualizationService.RegisterDataModelInput<StringDataModelInputViewModel>(Constants.CorePluginInfo);
|
||||||
|
|
||||||
|
_registeredBuiltInDataModelInputs = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegisterBuiltInPropertyEditors()
|
||||||
|
{
|
||||||
|
if (_registeredBuiltInPropertyEditors)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_profileEditorService.RegisterPropertyInput<BrushPropertyInputViewModel>(Constants.CorePluginInfo);
|
||||||
|
_profileEditorService.RegisterPropertyInput<ColorGradientPropertyInputViewModel>(Constants.CorePluginInfo);
|
||||||
|
_profileEditorService.RegisterPropertyInput<FloatPropertyInputViewModel>(Constants.CorePluginInfo);
|
||||||
|
_profileEditorService.RegisterPropertyInput<IntPropertyInputViewModel>(Constants.CorePluginInfo);
|
||||||
|
_profileEditorService.RegisterPropertyInput<SKColorPropertyInputViewModel>(Constants.CorePluginInfo);
|
||||||
|
_profileEditorService.RegisterPropertyInput<SKPointPropertyInputViewModel>(Constants.CorePluginInfo);
|
||||||
|
_profileEditorService.RegisterPropertyInput<SKSizePropertyInputViewModel>(Constants.CorePluginInfo);
|
||||||
|
|
||||||
|
_registeredBuiltInPropertyEditors = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IRegistrationService : IArtemisUIService
|
||||||
|
{
|
||||||
|
void RegisterBuiltInDataModelDisplays();
|
||||||
|
void RegisterBuiltInDataModelInputs();
|
||||||
|
void RegisterBuiltInPropertyEditors();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user