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"> - +