diff --git a/Wabbajack.App.Wpf/Messages/LoadModlistForCompiling.cs b/Wabbajack.App.Wpf/Messages/LoadModlistForCompiling.cs index 14bb0fef..e6374ef7 100644 --- a/Wabbajack.App.Wpf/Messages/LoadModlistForCompiling.cs +++ b/Wabbajack.App.Wpf/Messages/LoadModlistForCompiling.cs @@ -1,5 +1,8 @@ using ReactiveUI; +using System.IO; using Wabbajack.Compiler; +using Wabbajack.DTOs.JsonConverters; +using Wabbajack.Paths; namespace Wabbajack.Messages; @@ -11,6 +14,7 @@ public class LoadModlistForCompiling CompilerSettings = cs; } + public static void Send(CompilerSettings cs) { MessageBus.Current.SendMessage(new LoadModlistForCompiling(cs)); diff --git a/Wabbajack.App.Wpf/ViewModels/CreateModListVM.cs b/Wabbajack.App.Wpf/ViewModels/CreateModListVM.cs index 5a3927b9..e19d523c 100644 --- a/Wabbajack.App.Wpf/ViewModels/CreateModListVM.cs +++ b/Wabbajack.App.Wpf/ViewModels/CreateModListVM.cs @@ -12,6 +12,7 @@ using System.Windows.Input; using DynamicData; using DynamicData.Binding; using Microsoft.Extensions.Logging; +using Microsoft.WindowsAPICodePack.Dialogs; using ReactiveUI; using ReactiveUI.Fody.Helpers; using SteamKit2.GC.Dota.Internal; @@ -37,10 +38,13 @@ namespace Wabbajack private readonly DTOSerializer _dtos; public ICommand NewModListCommand { get; set; } + public ICommand LoadSettingsCommand { get; set; } [Reactive] public ObservableCollection CreatedModlists { get; set; } + public FilePickerVM CompilerSettingsPicker { get; private set; } + public CreateModListVM(ILogger logger, SettingsManager settingsManager, IServiceProvider serviceProvider, DTOSerializer dtos) { @@ -48,10 +52,33 @@ namespace Wabbajack _settingsManager = settingsManager; _serviceProvider = serviceProvider; _dtos = dtos; + + CompilerSettingsPicker = new FilePickerVM + { + ExistCheckOption = FilePickerVM.CheckOptions.On, + PathType = FilePickerVM.PathTypeOptions.File, + PromptTitle = "Select a compiler settings file" + }; + CompilerSettingsPicker.Filters.AddRange([ + new CommonFileDialogFilter("Compiler Settings File", "*" + Ext.CompilerSettings) + ]); + NewModListCommand = ReactiveCommand.Create(() => { NavigateToGlobal.Send(ScreenType.Compiler); LoadModlistForCompiling.Send(new()); }); + + LoadSettingsCommand = ReactiveCommand.Create(() => + { + CompilerSettingsPicker.SetTargetPathCommand.Execute(null); + if(CompilerSettingsPicker.TargetPath != default) + { + NavigateToGlobal.Send(ScreenType.Compiler); + var compilerSettings = _dtos.Deserialize(File.ReadAllText(CompilerSettingsPicker.TargetPath.ToString())); + LoadModlistForCompiling.Send(compilerSettings); + } + }); + this.WhenActivated(disposables => { LoadAllCompilerSettings().DisposeWith(disposables); diff --git a/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml.cs b/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml.cs index 215d55aa..2caf31aa 100644 --- a/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml.cs +++ b/Wabbajack.App.Wpf/Views/Compilers/CompilerView.xaml.cs @@ -139,9 +139,6 @@ namespace Wabbajack .DisposeWith(disposables); - - - // Settings this.Bind(ViewModel, vm => vm.Settings.ModListName, view => view.ModListNameSetting.Text) diff --git a/Wabbajack.App.Wpf/Views/Compilers/CreateModListView.xaml b/Wabbajack.App.Wpf/Views/Compilers/CreateModListView.xaml index ffb29413..abc9e7a2 100644 --- a/Wabbajack.App.Wpf/Views/Compilers/CreateModListView.xaml +++ b/Wabbajack.App.Wpf/Views/Compilers/CreateModListView.xaml @@ -60,7 +60,7 @@ - + diff --git a/Wabbajack.App.Wpf/Views/Compilers/CreateModListView.xaml.cs b/Wabbajack.App.Wpf/Views/Compilers/CreateModListView.xaml.cs index d9da5f8b..ff59c9d6 100644 --- a/Wabbajack.App.Wpf/Views/Compilers/CreateModListView.xaml.cs +++ b/Wabbajack.App.Wpf/Views/Compilers/CreateModListView.xaml.cs @@ -39,6 +39,12 @@ namespace Wabbajack .Select(args => Unit.Default) .InvokeCommand(this, x => x.ViewModel.NewModListCommand) .DisposeWith(dispose); + + LoadSettingsBorder + .Events().MouseDown + .Select(args => Unit.Default) + .InvokeCommand(this, x => x.ViewModel.LoadSettingsCommand) + .DisposeWith(dispose); }); } }