diff --git a/src/Artemis.Core/Constants.cs b/src/Artemis.Core/Constants.cs
index c95a2be2e..f6226c541 100644
--- a/src/Artemis.Core/Constants.cs
+++ b/src/Artemis.Core/Constants.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.IO;
using Artemis.Core.Plugins.Models;
@@ -6,9 +7,42 @@ namespace Artemis.Core
{
public static class Constants
{
+ ///
+ /// The full path to the Artemis application folder
+ ///
public static readonly string ApplicationFolder = Path.GetDirectoryName(typeof(Constants).Assembly.Location);
+
+ ///
+ /// The full path to the Artemis data folder
+ ///
public static readonly string DataFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\Artemis\\";
+
+ ///
+ /// The connection string used to connect to the database
+ ///
public static readonly string ConnectionString = $"FileName={DataFolder}\\database.db";
+
+ ///
+ /// The plugin info used by core components of Artemis
+ ///
public static readonly PluginInfo CorePluginInfo = new PluginInfo {Guid = Guid.Parse("ffffffff-ffff-ffff-ffff-ffffffffffff"), Name = "Artemis Core"};
+
+ ///
+ /// A read-only collection containing all primitive number types
+ ///
+ public static IReadOnlyCollection NumberTypes = new List
+ {
+ typeof(sbyte),
+ typeof(byte),
+ typeof(short),
+ typeof(ushort),
+ typeof(int),
+ typeof(uint),
+ typeof(long),
+ typeof(ulong),
+ typeof(float),
+ typeof(double),
+ typeof(decimal)
+ };
}
}
\ No newline at end of file
diff --git a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionOperator.cs b/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionOperator.cs
index 895da9a24..e8eeb4ee5 100644
--- a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionOperator.cs
+++ b/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionOperator.cs
@@ -10,24 +10,6 @@ namespace Artemis.Core.Models.Profile.Conditions
{
public abstract class DisplayConditionOperator
{
- ///
- /// A read-only collection containing all primitive number types
- ///
- protected static IReadOnlyCollection NumberTypes = new List
- {
- typeof(sbyte),
- typeof(byte),
- typeof(short),
- typeof(ushort),
- typeof(int),
- typeof(uint),
- typeof(long),
- typeof(ulong),
- typeof(float),
- typeof(double),
- typeof(decimal)
- };
-
private IDataModelService _dataModelService;
private bool _registered;
diff --git a/src/Artemis.Core/Models/Profile/Conditions/Operators/GreaterThanConditionOperator.cs b/src/Artemis.Core/Models/Profile/Conditions/Operators/GreaterThanConditionOperator.cs
index 058305ab7..a8fa3adb4 100644
--- a/src/Artemis.Core/Models/Profile/Conditions/Operators/GreaterThanConditionOperator.cs
+++ b/src/Artemis.Core/Models/Profile/Conditions/Operators/GreaterThanConditionOperator.cs
@@ -6,7 +6,7 @@ namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class GreaterThanConditionOperator : DisplayConditionOperator
{
- public override IReadOnlyCollection CompatibleTypes => NumberTypes;
+ public override IReadOnlyCollection CompatibleTypes => Constants.NumberTypes;
public override string Description => "Is greater than";
public override string Icon => "GreaterThan";
diff --git a/src/Artemis.Core/Models/Profile/Conditions/Operators/GreaterThanOrEqualConditionOperator.cs b/src/Artemis.Core/Models/Profile/Conditions/Operators/GreaterThanOrEqualConditionOperator.cs
index a40aefcbc..9b428c0cf 100644
--- a/src/Artemis.Core/Models/Profile/Conditions/Operators/GreaterThanOrEqualConditionOperator.cs
+++ b/src/Artemis.Core/Models/Profile/Conditions/Operators/GreaterThanOrEqualConditionOperator.cs
@@ -6,7 +6,7 @@ namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class GreaterThanOrEqualConditionOperator : DisplayConditionOperator
{
- public override IReadOnlyCollection CompatibleTypes => NumberTypes;
+ public override IReadOnlyCollection CompatibleTypes => Constants.NumberTypes;
public override string Description => "Is greater than or equal to";
public override string Icon => "GreaterThanOrEqual";
diff --git a/src/Artemis.Core/Models/Profile/Conditions/Operators/LessThanConditionOperator.cs b/src/Artemis.Core/Models/Profile/Conditions/Operators/LessThanConditionOperator.cs
index 1ce2f1e3c..2a9ba1310 100644
--- a/src/Artemis.Core/Models/Profile/Conditions/Operators/LessThanConditionOperator.cs
+++ b/src/Artemis.Core/Models/Profile/Conditions/Operators/LessThanConditionOperator.cs
@@ -6,7 +6,7 @@ namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class LessThanConditionOperator : DisplayConditionOperator
{
- public override IReadOnlyCollection CompatibleTypes => NumberTypes;
+ public override IReadOnlyCollection CompatibleTypes => Constants.NumberTypes;
public override string Description => "Is less than";
public override string Icon => "LessThan";
diff --git a/src/Artemis.Core/Models/Profile/Conditions/Operators/LessThanOrEqualConditionOperator.cs b/src/Artemis.Core/Models/Profile/Conditions/Operators/LessThanOrEqualConditionOperator.cs
index cd2d75ccb..d01fe5d1b 100644
--- a/src/Artemis.Core/Models/Profile/Conditions/Operators/LessThanOrEqualConditionOperator.cs
+++ b/src/Artemis.Core/Models/Profile/Conditions/Operators/LessThanOrEqualConditionOperator.cs
@@ -6,7 +6,7 @@ namespace Artemis.Core.Models.Profile.Conditions.Operators
{
public class LessThanOrEqualConditionOperator : DisplayConditionOperator
{
- public override IReadOnlyCollection CompatibleTypes => NumberTypes;
+ public override IReadOnlyCollection CompatibleTypes => Constants.NumberTypes;
public override string Description => "Is less than or equal to";
public override string Icon => "LessThanOrEqual";
diff --git a/src/Artemis.UI.Shared/DataModelVisualization/DataModelInputViewModel.cs b/src/Artemis.UI.Shared/DataModelVisualization/DataModelInputViewModel.cs
index 216cb829a..fd4fe4b38 100644
--- a/src/Artemis.UI.Shared/DataModelVisualization/DataModelInputViewModel.cs
+++ b/src/Artemis.UI.Shared/DataModelVisualization/DataModelInputViewModel.cs
@@ -1,9 +1,12 @@
using System;
+using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Input;
using Artemis.Core.Plugins.Abstract.DataModels.Attributes;
+using Artemis.UI.Shared.Exceptions;
using Stylet;
namespace Artemis.UI.Shared.DataModelVisualization
@@ -38,11 +41,29 @@ namespace Artemis.UI.Shared.DataModelVisualization
}
///
- public sealed override void Cancel()
+ public sealed override void Cancel()
{
OnCancel();
UpdateCallback(InputValue, false);
}
+
+ ///
+ /// May be called to convert an object to one of the types defined in CompatibleConversionTypes
+ ///
+ /// The object to convert, will always be of a type contained in CompatibleConversionTypes
+ /// The converted value
+ protected virtual T ConvertToSupportedType(object source)
+ {
+ return default;
+ }
+
+ internal override object InternalConvertToSupportedType(object source)
+ {
+ if (CompatibleConversionTypes != null && CompatibleConversionTypes.Contains(source.GetType()))
+ return ConvertToSupportedType(source);
+
+ throw new ArtemisSharedUIException($"Cannot convert source of type {source.GetType().Name} because the data model input view model does not support it.");
+ }
}
///
@@ -58,6 +79,11 @@ namespace Artemis.UI.Shared.DataModelVisualization
internal Action