diff --git a/src/Artemis.UI.Shared/Controls/GradientPicker.xaml b/src/Artemis.UI.Shared/Controls/GradientPicker.xaml
index be9ac72d7..c13770ec8 100644
--- a/src/Artemis.UI.Shared/Controls/GradientPicker.xaml
+++ b/src/Artemis.UI.Shared/Controls/GradientPicker.xaml
@@ -37,10 +37,7 @@
Background="{StaticResource Checkerboard}">
-
+
diff --git a/src/Artemis.UI.Shared/Controls/GradientPicker.xaml.cs b/src/Artemis.UI.Shared/Controls/GradientPicker.xaml.cs
index eaa6883d8..ad7992140 100644
--- a/src/Artemis.UI.Shared/Controls/GradientPicker.xaml.cs
+++ b/src/Artemis.UI.Shared/Controls/GradientPicker.xaml.cs
@@ -1,8 +1,10 @@
using System;
+using System.Collections.Specialized;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Input;
+using System.Windows.Media;
using Artemis.Core;
using Artemis.UI.Shared.Properties;
using Artemis.UI.Shared.Services;
@@ -17,12 +19,14 @@ namespace Artemis.UI.Shared
{
private static IColorPickerService? _colorPickerService;
private bool _inCallback;
+ private ColorGradientToGradientStopsConverter _gradientConverter;
///
/// Creates a new instance of the class
///
public GradientPicker()
{
+ _gradientConverter = new ColorGradientToGradientStopsConverter();
InitializeComponent();
}
@@ -99,10 +103,27 @@ namespace Artemis.UI.Shared
return;
gradientPicker._inCallback = true;
+
+ if (e.OldValue is ColorGradient oldGradient)
+ oldGradient.CollectionChanged -= gradientPicker.GradientChanged;
+ if (e.NewValue is ColorGradient newGradient)
+ newGradient.CollectionChanged += gradientPicker.GradientChanged;
+ gradientPicker.UpdateGradientStops();
gradientPicker.OnPropertyChanged(nameof(ColorGradient));
+
gradientPicker._inCallback = false;
}
+ private void GradientChanged(object? sender, NotifyCollectionChangedEventArgs e)
+ {
+ Dispatcher.Invoke(UpdateGradientStops);
+ }
+
+ private void UpdateGradientStops()
+ {
+ GradientPreview.GradientStops = (GradientStopCollection)_gradientConverter.Convert(ColorGradient, null!, null!, null!);
+ }
+
private void UIElement_OnMouseUp(object sender, MouseButtonEventArgs e)
{
if (_colorPickerService == null)
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionPredicateViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionPredicateViewModel.cs
index 6efb8a33a..a38c17ddb 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionPredicateViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionPredicateViewModel.cs
@@ -132,16 +132,12 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
DisposeRightSideDynamicViewModel();
if (RightSideInputViewModel == null)
CreateRightSideInputViewModel();
-
+
Type preferredType = DataModelConditionPredicate.GetPreferredRightSideType();
- // Ensure the right static value is never null when the preferred type is a value type
- if (preferredType.IsValueType && DataModelConditionPredicate.RightStaticValue == null)
- RightSideInputViewModel.Value = preferredType.GetDefault();
- else
- RightSideInputViewModel.Value = DataModelConditionPredicate.RightStaticValue;
-
- if (RightSideInputViewModel.TargetType != preferredType)
+ if (preferredType != null && RightSideInputViewModel.TargetType != preferredType)
RightSideInputViewModel.UpdateTargetType(preferredType);
+
+ RightSideInputViewModel.Value = DataModelConditionPredicate.RightStaticValue;
}
}
@@ -294,6 +290,12 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
private void RightSideSelectionViewModelOnSwitchToStaticRequested(object sender, EventArgs e)
{
DataModelConditionPredicate.PredicateType = ProfileRightSideType.Static;
+
+ // Ensure the right static value is never null when the preferred type is a value type
+ Type preferredType = DataModelConditionPredicate.GetPreferredRightSideType();
+ if (DataModelConditionPredicate.RightStaticValue == null && preferredType != null && preferredType.IsValueType)
+ DataModelConditionPredicate.UpdateRightSideStatic(preferredType.GetDefault());
+
Update();
}
diff --git a/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/DataBindings/DirectDataBinding/DataBindingModifierViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/DataBindings/DirectDataBinding/DataBindingModifierViewModel.cs
index ee01ad3f4..8b943a6b6 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/DataBindings/DirectDataBinding/DataBindingModifierViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/LayerProperties/DataBindings/DirectDataBinding/DataBindingModifierViewModel.cs
@@ -73,7 +73,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
Modifier.DirectDataBinding.RemoveModifier(Modifier);
_profileEditorService.UpdateSelectedProfileElement();
}
-
+
private void ParameterSelectionViewModelOnPropertySelected(object sender, DataModelInputDynamicEventArgs e)
{
Modifier.UpdateParameterDynamic(e.DataModelPath);
@@ -139,13 +139,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
// Parameter
if (DynamicSelectionViewModel != null)
DynamicSelectionViewModel.ChangeDataModelPath(Modifier.ParameterPath);
- else if (StaticInputViewModel != null)
- {
- // Ensure the right static value is never null when the preferred type is a value type
+ else if (StaticInputViewModel != null)
StaticInputViewModel.Value = Modifier.ParameterStaticValue;
- if (SelectedModifierType.ParameterType.IsValueType && StaticInputViewModel.Value == null)
- StaticInputViewModel.Value = SelectedModifierType.ParameterType.GetDefault();
- }
}
private void ExecuteSelectModifierTypeCommand(object context)
@@ -197,6 +192,12 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
private void DynamicSelectionViewModelOnSwitchToStaticRequested(object sender, EventArgs e)
{
Modifier.ParameterType = ProfileRightSideType.Static;
+
+ // Ensure the right static value is never null when the preferred type is a value type
+ if (SelectedModifierType.ParameterType != null &&
+ SelectedModifierType.ParameterType.IsValueType && Modifier.ParameterStaticValue == null)
+ Modifier.UpdateParameterStatic(SelectedModifierType.ParameterType.GetDefault());
+
Update();
}