mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 11:56:30 +00:00
Plugins - Ported prerequisites UI
Scripting - Ported scripting UI
This commit is contained in:
1 parent
0256a0d625
commit
3b4194cb9d
56 files changed
+1301
-274
No files matched your search
@@ -0,0 +1,35 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:dialogs="clr-namespace:Artemis.UI.Screens.Scripting.Dialogs"
|
||||
xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="Artemis.UI.Screens.Scripting.Dialogs.ScriptConfigurationCreateView"
|
||||
x:DataType="dialogs:ScriptConfigurationCreateViewModel">
|
||||
<Panel>
|
||||
<StackPanel IsVisible="{CompiledBinding ScriptingProviders.Count}">
|
||||
<TextBlock Classes="label" Margin="0 5">Script name</TextBlock>
|
||||
<TextBox Watermark="Name" Text="{CompiledBinding ScriptName}" />
|
||||
<TextBlock Classes="label" Margin="0 5">Script type</TextBlock>
|
||||
<ComboBox SelectedItem="{CompiledBinding SelectedScriptingProvider}" Items="{CompiledBinding ScriptingProviders}" HorizontalAlignment="Stretch">
|
||||
<ComboBox.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<VirtualizingStackPanel />
|
||||
</ItemsPanelTemplate>
|
||||
</ComboBox.ItemsPanel>
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<shared:ArtemisIcon Icon="{CompiledBinding Info.ResolvedIcon}" Width="16" Height="16" Margin="0 0 5 0" />
|
||||
<TextBlock Text="{CompiledBinding LanguageName}" />
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
</StackPanel>
|
||||
<TextBlock IsVisible="{CompiledBinding !ScriptingProviders.Count}">
|
||||
You don't have any scripting providers installed or enabled, therefore you cannot use scripts.
|
||||
</TextBlock>
|
||||
</Panel>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,19 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.ReactiveUI;
|
||||
|
||||
namespace Artemis.UI.Screens.Scripting.Dialogs;
|
||||
|
||||
public partial class ScriptConfigurationCreateView : ReactiveUserControl<ScriptConfigurationCreateViewModel>
|
||||
{
|
||||
public ScriptConfigurationCreateView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using Artemis.Core.ScriptingProviders;
|
||||
using Artemis.Core.Services;
|
||||
using Artemis.UI.Shared;
|
||||
using FluentAvalonia.UI.Controls;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Validation.Extensions;
|
||||
|
||||
namespace Artemis.UI.Screens.Scripting.Dialogs;
|
||||
|
||||
public class ScriptConfigurationCreateViewModel : ContentDialogViewModelBase
|
||||
{
|
||||
private string? _scriptName;
|
||||
private ScriptingProvider _selectedScriptingProvider;
|
||||
|
||||
public ScriptConfigurationCreateViewModel(IScriptingService scriptingService)
|
||||
{
|
||||
ScriptingProviders = new List<ScriptingProvider>(scriptingService.ScriptingProviders);
|
||||
Submit = ReactiveCommand.Create(ExecuteSubmit, ValidationContext.Valid);
|
||||
_selectedScriptingProvider = ScriptingProviders.First();
|
||||
|
||||
this.ValidationRule(vm => vm.ScriptName, s => !string.IsNullOrWhiteSpace(s), "Script name cannot be empty.");
|
||||
}
|
||||
|
||||
public ScriptConfiguration? ScriptConfiguration { get; private set; }
|
||||
public List<ScriptingProvider> ScriptingProviders { get; }
|
||||
|
||||
public string? ScriptName
|
||||
{
|
||||
get => _scriptName;
|
||||
set => RaiseAndSetIfChanged(ref _scriptName, value);
|
||||
}
|
||||
|
||||
public ScriptingProvider SelectedScriptingProvider
|
||||
{
|
||||
get => _selectedScriptingProvider;
|
||||
set => RaiseAndSetIfChanged(ref _selectedScriptingProvider, value);
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Unit> Submit { get; }
|
||||
|
||||
private void ExecuteSubmit()
|
||||
{
|
||||
if (ScriptName == null)
|
||||
return;
|
||||
|
||||
ScriptConfiguration = new ScriptConfiguration(SelectedScriptingProvider, ScriptName, ScriptType.Profile);
|
||||
ContentDialog?.Hide(ContentDialogResult.Primary);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:dialogs="clr-namespace:Artemis.UI.Screens.Scripting.Dialogs"
|
||||
xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="Artemis.UI.Screens.Scripting.Dialogs.ScriptConfigurationEditView"
|
||||
x:DataType="dialogs:ScriptConfigurationEditViewModel">
|
||||
<TextBox Watermark="Name" Name="Input" Text="{CompiledBinding ScriptName}" />
|
||||
</UserControl>
|
||||
@@ -0,0 +1,25 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.ReactiveUI;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace Artemis.UI.Screens.Scripting.Dialogs;
|
||||
|
||||
public partial class ScriptConfigurationEditView : ReactiveUserControl<ScriptConfigurationEditViewModel>
|
||||
{
|
||||
public ScriptConfigurationEditView()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.WhenActivated(_ =>
|
||||
{
|
||||
this.Get<TextBox>("Input").Focus();
|
||||
this.Get<TextBox>("Input").SelectAll();
|
||||
});
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using System.Reactive;
|
||||
using Artemis.Core.ScriptingProviders;
|
||||
using Artemis.UI.Shared;
|
||||
using FluentAvalonia.UI.Controls;
|
||||
using ReactiveUI;
|
||||
using ReactiveUI.Validation.Extensions;
|
||||
|
||||
namespace Artemis.UI.Screens.Scripting.Dialogs;
|
||||
|
||||
public class ScriptConfigurationEditViewModel : ContentDialogViewModelBase
|
||||
{
|
||||
private string? _scriptName;
|
||||
|
||||
public ScriptConfigurationEditViewModel(ScriptConfiguration scriptConfiguration)
|
||||
{
|
||||
ScriptConfiguration = scriptConfiguration;
|
||||
Submit = ReactiveCommand.Create(ExecuteSubmit, ValidationContext.Valid);
|
||||
ScriptName = ScriptConfiguration.Name;
|
||||
|
||||
this.ValidationRule(vm => vm.ScriptName, s => !string.IsNullOrWhiteSpace(s), "Script name cannot be empty.");
|
||||
}
|
||||
|
||||
public ScriptConfiguration ScriptConfiguration { get; }
|
||||
public ReactiveCommand<Unit, Unit> Submit { get; }
|
||||
|
||||
public string? ScriptName
|
||||
{
|
||||
get => _scriptName;
|
||||
set => RaiseAndSetIfChanged(ref _scriptName, value);
|
||||
}
|
||||
|
||||
private void ExecuteSubmit()
|
||||
{
|
||||
if (ScriptName == null)
|
||||
return;
|
||||
|
||||
ScriptConfiguration.Name = ScriptName;
|
||||
ContentDialog?.Hide(ContentDialogResult.Primary);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System.Reactive;
|
||||
using System.Threading.Tasks;
|
||||
using Artemis.Core;
|
||||
using Artemis.Core.ScriptingProviders;
|
||||
using Artemis.Core.Services;
|
||||
using Artemis.UI.Screens.Scripting.Dialogs;
|
||||
using Artemis.UI.Shared;
|
||||
using Artemis.UI.Shared.Services;
|
||||
using FluentAvalonia.UI.Controls;
|
||||
using ReactiveUI;
|
||||
using ContentDialogButton = Artemis.UI.Shared.Services.Builders.ContentDialogButton;
|
||||
|
||||
namespace Artemis.UI.Screens.Scripting;
|
||||
|
||||
public class ScriptConfigurationViewModel : ActivatableViewModelBase
|
||||
{
|
||||
private readonly IScriptingService _scriptingService;
|
||||
private readonly IWindowService _windowService;
|
||||
|
||||
public ScriptConfigurationViewModel(ScriptConfiguration scriptConfiguration, IScriptingService scriptingService, IWindowService windowService)
|
||||
{
|
||||
_scriptingService = scriptingService;
|
||||
_windowService = windowService;
|
||||
|
||||
ScriptConfiguration = scriptConfiguration;
|
||||
Script = ScriptConfiguration.Script;
|
||||
EditScriptConfiguration = ReactiveCommand.CreateFromTask<ScriptConfiguration>(ExecuteEditScriptConfiguration);
|
||||
ToggleSuspended = ReactiveCommand.Create(() => ScriptConfiguration.IsSuspended = !ScriptConfiguration.IsSuspended);
|
||||
}
|
||||
|
||||
public ScriptConfigurationViewModel(Profile profile, ScriptConfiguration scriptConfiguration, IScriptingService scriptingService, IWindowService windowService)
|
||||
: this(scriptConfiguration, scriptingService, windowService)
|
||||
{
|
||||
Profile = profile;
|
||||
}
|
||||
|
||||
public Profile? Profile { get; }
|
||||
public ScriptConfiguration ScriptConfiguration { get; }
|
||||
public Script? Script { get; }
|
||||
public ReactiveCommand<ScriptConfiguration, Unit> EditScriptConfiguration { get; }
|
||||
public ReactiveCommand<Unit, bool> ToggleSuspended { get; }
|
||||
|
||||
private async Task ExecuteEditScriptConfiguration(ScriptConfiguration scriptConfiguration)
|
||||
{
|
||||
ContentDialogResult contentDialogResult = await _windowService.CreateContentDialog()
|
||||
.WithTitle("Edit script")
|
||||
.WithViewModel(out ScriptConfigurationEditViewModel vm, ("scriptConfiguration", scriptConfiguration))
|
||||
.WithCloseButtonText("Cancel")
|
||||
.HavingPrimaryButton(b => b.WithText("Confirm").WithCommand(vm.Submit))
|
||||
.HavingSecondaryButton(b => b.WithText("Delete"))
|
||||
.WithDefaultButton(ContentDialogButton.Primary)
|
||||
.ShowAsync();
|
||||
|
||||
// Remove the script if the delete button was pressed
|
||||
if (contentDialogResult == ContentDialogResult.Secondary)
|
||||
{
|
||||
if (Profile != null)
|
||||
_scriptingService.RemoveScript(scriptConfiguration, Profile);
|
||||
else
|
||||
_scriptingService.RemoveScript(scriptConfiguration);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<controls:CoreWindow xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
||||
xmlns:scripting="clr-namespace:Artemis.UI.Screens.Scripting"
|
||||
xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
|
||||
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
x:Class="Artemis.UI.Screens.Scripting.ScriptsDialogView"
|
||||
x:DataType="scripting:ScriptsDialogViewModel"
|
||||
Title="ScriptsDialogView">
|
||||
<DockPanel>
|
||||
<ScrollViewer DockPanel.Dock="Left" VerticalScrollBarVisibility="Auto" Width="240">
|
||||
<StackPanel>
|
||||
<ListBox Items="{CompiledBinding ScriptConfigurations}" SelectedItem="{CompiledBinding SelectedScript}">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate DataType="{x:Type scripting:ScriptConfigurationViewModel}">
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto" RowDefinitions="*,*" Margin="4">
|
||||
<shared:ArtemisIcon Grid.Row="0"
|
||||
Grid.Column="0"
|
||||
Grid.RowSpan="2"
|
||||
Icon="{CompiledBinding ScriptConfiguration.Script.ScriptingProvider.Info.ResolvedIcon, FallbackValue=QuestionMark}"
|
||||
Width="32 "
|
||||
Height="32"
|
||||
Margin="0 0 10 0"
|
||||
VerticalAlignment="Center" />
|
||||
<TextBlock Grid.Row="0"
|
||||
Grid.Column="1"
|
||||
VerticalAlignment="Center"
|
||||
Text="{CompiledBinding ScriptConfiguration.Name}"
|
||||
IsVisible="{CompiledBinding !ScriptConfiguration.HasChanges}" />
|
||||
<StackPanel Grid.Row="0"
|
||||
Grid.Column="1"
|
||||
VerticalAlignment="Center"
|
||||
Orientation="Horizontal"
|
||||
IsVisible="{CompiledBinding ScriptConfiguration.HasChanges}">
|
||||
<TextBlock Text="{CompiledBinding ScriptConfiguration.Name}" FontWeight="Bold"></TextBlock>
|
||||
<TextBlock Text="*"></TextBlock>
|
||||
</StackPanel>
|
||||
<TextBlock Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
Text="{CompiledBinding ScriptConfiguration.Script.ScriptingProvider.LanguageName, FallbackValue='Unknown scripting provider'}"
|
||||
Classes="subtitle"
|
||||
FontSize="11"
|
||||
VerticalAlignment="Center" />
|
||||
|
||||
<Button Classes="icon-button icon-button-small"
|
||||
Grid.Row="0"
|
||||
Grid.RowSpan="2"
|
||||
Grid.Column="2"
|
||||
ToolTip.Tip="Edit script"
|
||||
HorizontalAlignment="Right"
|
||||
Command="{CompiledBinding EditScriptConfiguration}"
|
||||
CommandParameter="{CompiledBinding ScriptConfiguration}"
|
||||
Margin="0 0 2 0">
|
||||
<avalonia:MaterialIcon Kind="Cog" />
|
||||
</Button>
|
||||
<Button Classes="icon-button icon-button-small"
|
||||
Command="{CompiledBinding ToggleSuspended}"
|
||||
Grid.Row="0"
|
||||
Grid.RowSpan="2"
|
||||
Grid.Column="3"
|
||||
ToolTip.Tip="Suspend/resume script">
|
||||
<Panel>
|
||||
<avalonia:MaterialIcon Kind="EyeOff" IsVisible="{CompiledBinding ScriptConfiguration.IsSuspended}" />
|
||||
<avalonia:MaterialIcon Kind="Eye" IsVisible="{CompiledBinding !ScriptConfiguration.IsSuspended}" />
|
||||
</Panel>
|
||||
</Button>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
<Button Content="Add new script"
|
||||
Margin="10"
|
||||
HorizontalAlignment="Stretch"
|
||||
Command="{CompiledBinding AddScriptConfiguration}" />
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
|
||||
<Border DockPanel.Dock="Top" Classes="router-container">
|
||||
<ContentControl Content="{CompiledBinding ScriptEditorViewModel}" />
|
||||
</Border>
|
||||
</DockPanel>
|
||||
|
||||
</controls:CoreWindow>
|
||||
@@ -0,0 +1,21 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
|
||||
namespace Artemis.UI.Screens.Scripting;
|
||||
|
||||
public partial class ScriptsDialogView : ReactiveCoreWindow<ScriptsDialogViewModel>
|
||||
{
|
||||
public ScriptsDialogView()
|
||||
{
|
||||
InitializeComponent();
|
||||
#if DEBUG
|
||||
this.AttachDevTools();
|
||||
#endif
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Reactive.Disposables;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Artemis.Core;
|
||||
using Artemis.Core.ScriptingProviders;
|
||||
using Artemis.Core.Services;
|
||||
using Artemis.UI.Ninject.Factories;
|
||||
using Artemis.UI.Screens.Scripting.Dialogs;
|
||||
using Artemis.UI.Shared;
|
||||
using Artemis.UI.Shared.Services;
|
||||
using DynamicData;
|
||||
using DynamicData.Binding;
|
||||
using FluentAvalonia.UI.Controls;
|
||||
using ReactiveUI;
|
||||
using ContentDialogButton = Artemis.UI.Shared.Services.Builders.ContentDialogButton;
|
||||
|
||||
namespace Artemis.UI.Screens.Scripting;
|
||||
|
||||
public class ScriptsDialogViewModel : DialogViewModelBase<object?>
|
||||
{
|
||||
private readonly IScriptingService _scriptingService;
|
||||
private readonly IWindowService _windowService;
|
||||
private readonly Dictionary<ScriptingProvider, IScriptEditorViewModel> _providerViewModels = new();
|
||||
private ObservableAsPropertyHelper<bool>? _hasScripts;
|
||||
private ScriptConfigurationViewModel? _selectedScript;
|
||||
private IScriptEditorViewModel? _scriptEditorViewModel;
|
||||
private ReadOnlyObservableCollection<ScriptConfigurationViewModel> _scriptConfigurations;
|
||||
|
||||
public ScriptsDialogViewModel(IScriptingService scriptingService, IWindowService windowService, IProfileService profileService, IScriptVmFactory scriptVmFactory)
|
||||
{
|
||||
_scriptingService = scriptingService;
|
||||
_windowService = windowService;
|
||||
|
||||
ScriptType = ScriptType.Global;
|
||||
ScriptingProviders = new List<ScriptingProvider>(scriptingService.ScriptingProviders);
|
||||
|
||||
AddScriptConfiguration = ReactiveCommand.CreateFromTask(ExecuteAddScriptConfiguration, Observable.Return(ScriptingProviders.Any()));
|
||||
this.WhenAnyValue(vm => vm.SelectedScript).Subscribe(s => SetupScriptEditor(s?.ScriptConfiguration));
|
||||
|
||||
// TODO: When not bound to a profile, base the contents of the UI on the ScriptingService
|
||||
}
|
||||
|
||||
public ScriptsDialogViewModel(Profile profile, IScriptingService scriptingService, IWindowService windowService, IProfileService profileService, IScriptVmFactory scriptVmFactory)
|
||||
: this(scriptingService, windowService, profileService, scriptVmFactory)
|
||||
{
|
||||
ScriptType = ScriptType.Profile;
|
||||
Profile = profile;
|
||||
|
||||
this.WhenActivated(d =>
|
||||
{
|
||||
_hasScripts = Profile.ScriptConfigurations.ToObservableChangeSet()
|
||||
.Count()
|
||||
.Select(c => c > 0)
|
||||
.ToProperty(this, vm => vm.HasScripts)
|
||||
.DisposeWith(d);
|
||||
Profile.ScriptConfigurations.ToObservableChangeSet()
|
||||
.Transform(c => scriptVmFactory.ScriptConfigurationViewModel(Profile, c))
|
||||
.Bind(out ReadOnlyObservableCollection<ScriptConfigurationViewModel> scriptConfigurationViewModels)
|
||||
.Subscribe()
|
||||
.DisposeWith(d);
|
||||
|
||||
ScriptConfigurations = scriptConfigurationViewModels;
|
||||
SelectedScript = ScriptConfigurations.FirstOrDefault();
|
||||
Disposable.Create(() => profileService.SaveProfile(Profile, false)).DisposeWith(d);
|
||||
});
|
||||
}
|
||||
|
||||
public ScriptType ScriptType { get; }
|
||||
public List<ScriptingProvider> ScriptingProviders { get; }
|
||||
public Profile? Profile { get; }
|
||||
public bool HasScripts => _hasScripts?.Value ?? false;
|
||||
|
||||
public ReadOnlyObservableCollection<ScriptConfigurationViewModel> ScriptConfigurations
|
||||
{
|
||||
get => _scriptConfigurations;
|
||||
set => RaiseAndSetIfChanged(ref _scriptConfigurations, value);
|
||||
}
|
||||
|
||||
public ScriptConfigurationViewModel? SelectedScript
|
||||
{
|
||||
get => _selectedScript;
|
||||
set => RaiseAndSetIfChanged(ref _selectedScript, value);
|
||||
}
|
||||
|
||||
public IScriptEditorViewModel? ScriptEditorViewModel
|
||||
{
|
||||
get => _scriptEditorViewModel;
|
||||
set => RaiseAndSetIfChanged(ref _scriptEditorViewModel, value);
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Unit> AddScriptConfiguration { get; }
|
||||
|
||||
|
||||
private void SetupScriptEditor(ScriptConfiguration? scriptConfiguration)
|
||||
{
|
||||
if (scriptConfiguration == null)
|
||||
{
|
||||
ScriptEditorViewModel = null;
|
||||
return;
|
||||
}
|
||||
|
||||
// The script is null if the provider is missing
|
||||
if (scriptConfiguration.Script == null)
|
||||
{
|
||||
ScriptEditorViewModel = null;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_providerViewModels.TryGetValue(scriptConfiguration.Script.ScriptingProvider, out IScriptEditorViewModel? viewModel))
|
||||
{
|
||||
viewModel = scriptConfiguration.Script.ScriptingProvider.CreateScriptEditor(ScriptType);
|
||||
_providerViewModels.Add(scriptConfiguration.Script.ScriptingProvider, viewModel);
|
||||
}
|
||||
|
||||
ScriptEditorViewModel = viewModel;
|
||||
ScriptEditorViewModel.ChangeScript(scriptConfiguration.Script);
|
||||
}
|
||||
|
||||
private async Task ExecuteAddScriptConfiguration()
|
||||
{
|
||||
await _windowService.CreateContentDialog()
|
||||
.WithTitle("Add script")
|
||||
.WithViewModel(out ScriptConfigurationCreateViewModel vm)
|
||||
.WithCloseButtonText("Cancel")
|
||||
.HavingPrimaryButton(b => b.WithText("Confirm").WithCommand(vm.Submit))
|
||||
.WithDefaultButton(ContentDialogButton.Primary)
|
||||
.ShowAsync();
|
||||
|
||||
if (vm.ScriptConfiguration == null)
|
||||
return;
|
||||
|
||||
// Add the script to the profile and instantiate it
|
||||
if (Profile != null)
|
||||
_scriptingService.AddScript(vm.ScriptConfiguration, Profile);
|
||||
else
|
||||
_scriptingService.AddScript(vm.ScriptConfiguration);
|
||||
|
||||
// Select the new script
|
||||
SelectedScript = ScriptConfigurations.LastOrDefault();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user