Datamodel - Added bool and enum support

Layer properties - Added bool support
Draggable float - Housekeeping 🙃
This commit is contained in:
Robert committed 2020-09-17 19:53:17 +02:00
1 parent a3290c40f8
commit c661b64404
14 files changed
+165 -9

No files matched your search

@@ -141,7 +141,7 @@ namespace Artemis.UI.Shared
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
stepSize = stepSize * 10;
var value = (float) UltimateRoundingFunction(startValue + stepSize * (x - startX), stepSize, 0.5m);
var value = (float) RoundToNearestOf(startValue + stepSize * (x - startX), stepSize);
if (Min != null)
value = Math.Max(value, Min.Value);
if (Max != null)
@@ -217,9 +217,15 @@ namespace Artemis.UI.Shared
return float.TryParse(fullText, out _);
}
private static decimal UltimateRoundingFunction(decimal amountToRound, decimal nearstOf, decimal fairness)
/// <summary>
/// Rounds the provided decimal to the nearest value of x with a given threshold
/// Source: https://stackoverflow.com/a/25922075/5015269
/// </summary>
/// <param name="input">The value to round</param>
/// <param name="nearestOf">The value to round down towards</param>
private static decimal RoundToNearestOf(decimal input, decimal nearestOf)
{
return Math.Floor(amountToRound / nearstOf + fairness) * nearstOf;
return Math.Floor(input / nearestOf + 0.5m) * nearestOf;
}
}
}
@@ -106,7 +106,7 @@ namespace Artemis.UI.Shared
if (typeViewModel != null)
return new DataModelListPropertyViewModel(DataModel, this, PropertyInfo) {DisplayViewModel = typeViewModel};
// For primitives, create a property view model, it may be null that is fine
if (listType.IsPrimitive || listType == typeof(string))
if (listType.IsPrimitive || listType.IsEnum || listType == typeof(string))
return new DataModelListPropertyViewModel(DataModel, this, PropertyInfo) {ListType = listType};
// For other value types create a child view model
if (listType.IsClass || listType.IsStruct())
@@ -169,11 +169,11 @@ namespace Artemis.UI.Shared
IsMatchingFilteredTypes = false;
return;
}
if (looseMatch)
IsMatchingFilteredTypes = filteredTypes.Any(t => t.IsCastableFrom(PropertyInfo.PropertyType));
IsMatchingFilteredTypes = filteredTypes.Any(t => t.IsCastableFrom(PropertyInfo.PropertyType) || t == typeof(Enum) && PropertyInfo.PropertyType.IsEnum);
else
IsMatchingFilteredTypes = filteredTypes.Any(t => t == PropertyInfo.PropertyType);
IsMatchingFilteredTypes = filteredTypes.Any(t => t == PropertyInfo.PropertyType || t == typeof(Enum) && PropertyInfo.PropertyType.IsEnum);
}
public DataModelVisualizationViewModel GetChildForCondition(DisplayConditionPredicate predicate, DisplayConditionSide side)
@@ -241,7 +241,7 @@ namespace Artemis.UI.Shared
if (typeViewModel != null)
return new DataModelPropertyViewModel(DataModel, this, propertyInfo) {DisplayViewModel = typeViewModel, Depth = depth};
// For primitives, create a property view model, it may be null that is fine
if (propertyInfo.PropertyType.IsPrimitive || propertyInfo.PropertyType == typeof(string))
if (propertyInfo.PropertyType.IsPrimitive || propertyInfo.PropertyType.IsEnum || propertyInfo.PropertyType == typeof(string))
return new DataModelPropertyViewModel(DataModel, this, propertyInfo) {Depth = depth};
if (typeof(IList).IsAssignableFrom(propertyInfo.PropertyType))
return new DataModelListViewModel(DataModel, this, propertyInfo) {Depth = depth};
@@ -179,6 +179,9 @@ namespace Artemis.UI.Shared.Services
// Fall back on a VM that supports the type through conversion
if (match == null)
match = _registeredDataModelEditors.FirstOrDefault(d => d.CompatibleConversionTypes.Contains(propertyType));
// Lastly try getting an enum VM if the provided type is an enum
if (match == null && propertyType.IsEnum)
match = _registeredDataModelEditors.FirstOrDefault(d => d.SupportedType == typeof(Enum));
if (match != null)
{