From a5c13bb5431df0cd05a5a803dc89dcd7f0e9a669 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 21 Jun 2021 22:43:31 +0200 Subject: [PATCH] Scripts - Properly register script with its owner Scripts UI - Save on close Scripts UI - Dispose script on removal --- .../ScriptingProviders/Scripts/LayerScript.cs | 4 ++++ .../ScriptingProviders/Scripts/ProfileScript.cs | 4 ++++ .../ScriptingProviders/Scripts/PropertyScript.cs | 4 ++++ .../Scripting/ScriptConfigurationViewModel.cs | 1 + .../Screens/Scripting/ScriptsDialogViewModel.cs | 16 +++++++++++++++- 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/LayerScript.cs b/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/LayerScript.cs index a5f63f89e..5ac8d5cd1 100644 --- a/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/LayerScript.cs +++ b/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/LayerScript.cs @@ -11,6 +11,10 @@ namespace Artemis.Core.ScriptingProviders protected LayerScript(Layer layer, ScriptConfiguration configuration) : base(configuration) { Layer = layer; + lock (Layer.Scripts) + { + Layer.Scripts.Add(this); + } } /// diff --git a/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/ProfileScript.cs b/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/ProfileScript.cs index b4d65e16f..9328c895a 100644 --- a/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/ProfileScript.cs +++ b/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/ProfileScript.cs @@ -11,6 +11,10 @@ namespace Artemis.Core.ScriptingProviders protected ProfileScript(Profile profile, ScriptConfiguration configuration) : base(configuration) { Profile = profile; + lock (Profile.Scripts) + { + Profile.Scripts.Add(this); + } } /// diff --git a/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/PropertyScript.cs b/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/PropertyScript.cs index 5fbb3034d..f0e4aee2a 100644 --- a/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/PropertyScript.cs +++ b/src/Artemis.Core/Plugins/ScriptingProviders/Scripts/PropertyScript.cs @@ -10,6 +10,10 @@ protected PropertyScript(ILayerProperty layerProperty, ScriptConfiguration configuration) : base(configuration) { LayerProperty = layerProperty; + lock (LayerProperty.Scripts) + { + LayerProperty.Scripts.Add(this); + } } /// diff --git a/src/Artemis.UI/Screens/Scripting/ScriptConfigurationViewModel.cs b/src/Artemis.UI/Screens/Scripting/ScriptConfigurationViewModel.cs index d0d980826..eaf1e5de9 100644 --- a/src/Artemis.UI/Screens/Scripting/ScriptConfigurationViewModel.cs +++ b/src/Artemis.UI/Screens/Scripting/ScriptConfigurationViewModel.cs @@ -68,6 +68,7 @@ namespace Artemis.UI.Screens.Scripting } ScriptConfiguration.DiscardPendingChanges(); + ScriptConfiguration.Script?.Dispose(); RequestClose(); } } diff --git a/src/Artemis.UI/Screens/Scripting/ScriptsDialogViewModel.cs b/src/Artemis.UI/Screens/Scripting/ScriptsDialogViewModel.cs index cb89ac002..8a95db8de 100644 --- a/src/Artemis.UI/Screens/Scripting/ScriptsDialogViewModel.cs +++ b/src/Artemis.UI/Screens/Scripting/ScriptsDialogViewModel.cs @@ -15,15 +15,17 @@ namespace Artemis.UI.Screens.Scripting { private readonly IScriptingService _scriptingService; private readonly IDialogService _dialogService; + private readonly IProfileEditorService _profileEditorService; private readonly IScriptVmFactory _scriptVmFactory; public Profile Profile { get; } public Layer Layer { get; } public ILayerProperty LayerProperty { get; } - public ScriptsDialogViewModel(Profile profile, IScriptingService scriptingService, IDialogService dialogService, IScriptVmFactory scriptVmFactory) + public ScriptsDialogViewModel(Profile profile, IScriptingService scriptingService, IDialogService dialogService, IProfileEditorService profileEditorService, IScriptVmFactory scriptVmFactory) { _scriptingService = scriptingService; _dialogService = dialogService; + _profileEditorService = profileEditorService; _scriptVmFactory = scriptVmFactory; DisplayName = "Artemis | Profile Scripts"; @@ -74,5 +76,17 @@ namespace Artemis.UI.Screens.Scripting Items.Add(_scriptVmFactory.ScriptConfigurationViewModel(scriptConfiguration)); } + + #region Overrides of OneActive + + /// + protected override void OnClose() + { + _profileEditorService.SaveSelectedProfileConfiguration(); + + base.OnClose(); + } + + #endregion } } \ No newline at end of file