From 2bc882c81457f76131f0b4324665f2151168efca Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 6 Apr 2021 20:56:12 +0200 Subject: [PATCH] Gradient picker - Properly react to gradient changes once again --- .../Controls/GradientPicker.xaml | 5 +---- .../Controls/GradientPicker.xaml.cs | 21 +++++++++++++++++++ .../DataModelConditionPredicateViewModel.cs | 18 +++++++++------- .../DataBindingModifierViewModel.cs | 15 ++++++------- 4 files changed, 40 insertions(+), 19 deletions(-) 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(); }