1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00
Artemis/src/Artemis.UI/Screens/Scripting/ScriptConfigurationViewModel.cs
Robert a5c13bb543 Scripts - Properly register script with its owner
Scripts UI - Save on close
Scripts UI - Dispose script on removal
2021-06-21 22:43:31 +02:00

83 lines
3.2 KiB
C#

using System.Collections.Generic;
using System.Threading.Tasks;
using Artemis.Core.ScriptingProviders;
using Artemis.Core.Services;
using Artemis.UI.Screens.Scripting.Dialogs;
using Artemis.UI.Shared.ScriptingProviders;
using Artemis.UI.Shared.Services;
using Stylet;
namespace Artemis.UI.Screens.Scripting
{
public class ScriptConfigurationViewModel : Conductor<IScriptEditorViewModel>
{
private readonly IScriptingService _scriptingService;
private readonly IDialogService _dialogService;
public ScriptConfigurationViewModel(ScriptConfiguration scriptConfiguration, IScriptingService scriptingService, IDialogService dialogService)
{
_scriptingService = scriptingService;
_dialogService = dialogService;
ScriptConfiguration = scriptConfiguration;
Script = ScriptConfiguration.Script;
ActiveItem = Script switch
{
GlobalScript globalScript => Script.ScriptingProvider.CreateGlobalScriptEditor(globalScript),
LayerScript layerScript => Script.ScriptingProvider.CreateLayerScriptScriptEditor(layerScript),
ProfileScript profileScript => Script.ScriptingProvider.CreateProfileScriptEditor(profileScript),
PropertyScript propertyScript => Script.ScriptingProvider.CreatePropertyScriptEditor(propertyScript),
_ => new UnknownScriptEditorViewModel(null)
};
}
public Script Script { get; set; }
public ScriptConfiguration ScriptConfiguration { get; }
public async Task ViewProperties()
{
object result = await _dialogService.ShowDialog<ScriptConfigurationEditViewModel>(new Dictionary<string, object>
{
{"scriptConfiguration", ScriptConfiguration}
});
if (result is nameof(ScriptConfigurationEditViewModel.Delete))
await Delete();
}
private async Task Delete()
{
bool result = await _dialogService.ShowConfirmDialogAt("ScriptsDialog", "Delete script", $"Are you sure you want to delete '{ScriptConfiguration.Name}'?");
if (!result)
return;
switch (Script)
{
case GlobalScript globalScript:
_scriptingService.DeleteScript(ScriptConfiguration);
break;
case LayerScript layerScript:
layerScript.Layer.ScriptConfigurations.Remove(ScriptConfiguration);
break;
case ProfileScript profileScript:
profileScript.Profile.ScriptConfigurations.Remove(ScriptConfiguration);
break;
case PropertyScript propertyScript:
propertyScript.LayerProperty.ScriptConfigurations.Remove(ScriptConfiguration);
break;
}
ScriptConfiguration.DiscardPendingChanges();
ScriptConfiguration.Script?.Dispose();
RequestClose();
}
}
public class UnknownScriptEditorViewModel : ScriptEditorViewModel
{
/// <inheritdoc />
public UnknownScriptEditorViewModel(Script script) : base(script)
{
}
}
}