From 1f70c65651d13b1bda1cdf226bacd18f24233b29 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 7 Aug 2020 21:29:34 +0200 Subject: [PATCH] Profile editor - Continuously update datamodel in cond. target select Profile editor - Fixed undo/redo sometimes not registering Ctrl+Z/Ctrl+Y Profile editor - Added feedback messaging to undo/redo --- .../Interfaces/IProfileEditorService.cs | 4 +- .../Services/ProfileEditorService.cs | 10 +-- .../Abstract/DisplayConditionViewModel.cs | 20 +++++- .../DisplayConditionGroupViewModel.cs | 3 + .../DisplayConditionPredicateView.xaml | 2 +- .../DisplayConditionPredicateViewModel.cs | 36 +++++++++-- .../DisplayConditionsViewModel.cs | 64 ++++++++++--------- .../ProfileEditor/ProfileEditorView.xaml | 2 + .../ProfileEditor/ProfileEditorViewModel.cs | 22 ++++++- src/Artemis.sln.DotSettings | 3 +- 10 files changed, 117 insertions(+), 49 deletions(-) diff --git a/src/Artemis.UI.Shared/Services/Interfaces/IProfileEditorService.cs b/src/Artemis.UI.Shared/Services/Interfaces/IProfileEditorService.cs index 3b5bb5c76..67f315c49 100644 --- a/src/Artemis.UI.Shared/Services/Interfaces/IProfileEditorService.cs +++ b/src/Artemis.UI.Shared/Services/Interfaces/IProfileEditorService.cs @@ -24,8 +24,8 @@ namespace Artemis.UI.Shared.Services.Interfaces void ChangeSelectedProfileElement(RenderProfileElement profileElement); void UpdateSelectedProfileElement(); void UpdateProfilePreview(); - void UndoUpdateProfile(ProfileModule module); - void RedoUpdateProfile(ProfileModule module); + bool UndoUpdateProfile(ProfileModule module); + bool RedoUpdateProfile(ProfileModule module); Module GetCurrentModule(); /// diff --git a/src/Artemis.UI.Shared/Services/ProfileEditorService.cs b/src/Artemis.UI.Shared/Services/ProfileEditorService.cs index 4edb6bf4f..fb4c2bb02 100644 --- a/src/Artemis.UI.Shared/Services/ProfileEditorService.cs +++ b/src/Artemis.UI.Shared/Services/ProfileEditorService.cs @@ -132,11 +132,11 @@ namespace Artemis.UI.Shared.Services OnProfilePreviewUpdated(); } - public void UndoUpdateProfile(ProfileModule module) + public bool UndoUpdateProfile(ProfileModule module) { var undid = _profileService.UndoUpdateProfile(SelectedProfile, module); if (!undid) - return; + return false; OnSelectedProfileChanged(new ProfileEventArgs(SelectedProfile, SelectedProfile)); @@ -149,13 +149,14 @@ namespace Artemis.UI.Shared.Services } UpdateProfilePreview(); + return true; } - public void RedoUpdateProfile(ProfileModule module) + public bool RedoUpdateProfile(ProfileModule module) { var redid = _profileService.RedoUpdateProfile(SelectedProfile, module); if (!redid) - return; + return false; OnSelectedProfileChanged(new ProfileEventArgs(SelectedProfile, SelectedProfile)); @@ -168,6 +169,7 @@ namespace Artemis.UI.Shared.Services } UpdateProfilePreview(); + return true; } public PropertyInputRegistration RegisterPropertyInput(PluginInfo pluginInfo) where T : PropertyInputViewModel diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/Abstract/DisplayConditionViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/Abstract/DisplayConditionViewModel.cs index 3c7c92ab2..cdac16aab 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/Abstract/DisplayConditionViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/Abstract/DisplayConditionViewModel.cs @@ -1,10 +1,10 @@ -using Artemis.Core.Models.Profile.Conditions; +using System; using Artemis.Core.Models.Profile.Conditions.Abstract; using Stylet; namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.Abstract { - public abstract class DisplayConditionViewModel : PropertyChangedBase + public abstract class DisplayConditionViewModel : PropertyChangedBase, IDisposable { protected DisplayConditionViewModel(DisplayConditionPart model, DisplayConditionViewModel parent) { @@ -17,6 +17,15 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.Abstract public DisplayConditionViewModel Parent { get; set; } public BindableCollection Children { get; } + public void Dispose() + { + foreach (var child in Children) + child.Dispose(); + + Dispose(true); + GC.SuppressFinalize(this); + } + public abstract void Update(); public virtual void Delete() @@ -24,5 +33,12 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions.Abstract Model.Parent.RemoveChild(Model); Parent.Update(); } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + } + } } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/DisplayConditionGroupViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/DisplayConditionGroupViewModel.cs index 9a4368f60..a4808ce29 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/DisplayConditionGroupViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/DisplayConditionGroupViewModel.cs @@ -87,7 +87,10 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.DisplayConditions var toRemove = Children.Where(c => !DisplayConditionGroup.Children.Contains(c.Model)).ToList(); // Using RemoveRange breaks our lovely animations foreach (var displayConditionViewModel in toRemove) + { Children.Remove(displayConditionViewModel); + displayConditionViewModel.Dispose(); + } foreach (var childModel in Model.Children) { diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/DisplayConditionPredicateView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/DisplayConditionPredicateView.xaml index a69b93f99..bf3757598 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/DisplayConditionPredicateView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/DisplayConditions/DisplayConditionPredicateView.xaml @@ -93,7 +93,7 @@ ToolTip="{Binding SelectedLeftSideProperty.DisplayPropertyPath}" Click="PropertyButton_OnClick"> - +