From 36359e44169709fd35d5f8d0112044f57b96023f Mon Sep 17 00:00:00 2001 From: Justin Swanson Date: Sun, 1 Dec 2019 16:20:26 -0600 Subject: [PATCH] Cleaning of startup code. Bugfix for window size defaults not being applied --- Wabbajack/App.xaml.cs | 14 +----- Wabbajack/Settings.cs | 12 +++-- Wabbajack/Views/MainWindow.xaml.cs | 79 ++++++++++++++++++++++++++---- 3 files changed, 78 insertions(+), 27 deletions(-) diff --git a/Wabbajack/App.xaml.cs b/Wabbajack/App.xaml.cs index f8dc7a0b..a57a5ea2 100644 --- a/Wabbajack/App.xaml.cs +++ b/Wabbajack/App.xaml.cs @@ -14,19 +14,7 @@ namespace Wabbajack { public App() { - // Wire any unhandled crashing exceptions to log before exiting - AppDomain.CurrentDomain.UnhandledException += (sender, e) => - { - // Don't do any special logging side effects - Utils.Log("Uncaught error:"); - Utils.Log(((Exception)e.ExceptionObject).ExceptionToString()); - }; - - var appPath = Assembly.GetExecutingAssembly().Location; - if (!ExtensionManager.IsAssociated() || ExtensionManager.NeedsUpdating(appPath)) - { - ExtensionManager.Associate(appPath); - } + // Initialization in MainWindow ctor } } } diff --git a/Wabbajack/Settings.cs b/Wabbajack/Settings.cs index d4d6367d..282c959a 100644 --- a/Wabbajack/Settings.cs +++ b/Wabbajack/Settings.cs @@ -24,11 +24,15 @@ namespace Wabbajack private Subject _saveSignal = new Subject(); public IObservable SaveSignal => _saveSignal; - public static MainSettings LoadSettings() + public static bool TryLoadTypicalSettings(out MainSettings settings) { - string[] args = Environment.GetCommandLineArgs(); - if (!File.Exists(_filename) || args.Length > 1 && args[1] == "nosettings") return new MainSettings(); - return JsonConvert.DeserializeObject(File.ReadAllText(_filename)); + if (!File.Exists(_filename)) + { + settings = default; + return false; + } + settings = JsonConvert.DeserializeObject(File.ReadAllText(_filename)); + return true; } public static void SaveSettings(MainSettings settings) diff --git a/Wabbajack/Views/MainWindow.xaml.cs b/Wabbajack/Views/MainWindow.xaml.cs index 4d7c124e..dd58971f 100644 --- a/Wabbajack/Views/MainWindow.xaml.cs +++ b/Wabbajack/Views/MainWindow.xaml.cs @@ -15,23 +15,82 @@ namespace Wabbajack private MainWindowVM _mwvm; private MainSettings _settings; + internal bool ExitWhenClosing = true; + public MainWindow() { - _settings = MainSettings.LoadSettings(); - Left = _settings.PosX; - Top = _settings.PosY; - _mwvm = new MainWindowVM(this, _settings); - DataContext = _mwvm; + // Wire any unhandled crashing exceptions to log before exiting + AppDomain.CurrentDomain.UnhandledException += (sender, e) => + { + // Don't do any special logging side effects + Wabbajack.Common.Utils.Log("Uncaught error:"); + Wabbajack.Common.Utils.Log(((Exception)e.ExceptionObject).ExceptionToString()); + }; + + var appPath = System.Reflection.Assembly.GetExecutingAssembly().Location; + if (!ExtensionManager.IsAssociated() || ExtensionManager.NeedsUpdating(appPath)) + { + ExtensionManager.Associate(appPath); + } + Wabbajack.Common.Utils.Log($"Wabbajack Build - {ThisAssembly.Git.Sha}"); - this.Loaded += (sender, e) => + // Load settings + string[] args = Environment.GetCommandLineArgs(); + if ((args.Length > 1 && args[1] == "nosettings") + || !MainSettings.TryLoadTypicalSettings(out var settings)) { - Width = _settings.Width; - Height = _settings.Height; - }; + _settings = new MainSettings(); + RunWhenLoaded(DefaultSettings); + } + else + { + _settings = settings; + RunWhenLoaded(LoadSettings); + } + + // Set datacontext + _mwvm = new MainWindowVM(this, _settings); + DataContext = _mwvm; } - internal bool ExitWhenClosing = true; + public void Init(MainWindowVM vm, MainSettings settings) + { + DataContext = vm; + _mwvm = vm; + _settings = settings; + } + + private void RunWhenLoaded(Action a) + { + if (IsLoaded) + { + a(); + } + else + { + this.Loaded += (sender, e) => + { + a(); + }; + } + } + + private void LoadSettings() + { + Width = _settings.Width; + Height = _settings.Height; + Left = _settings.PosX; + Top = _settings.PosY; + } + + private void DefaultSettings() + { + Width = 1300; + Height = 960; + Left = 15; + Top = 15; + } private void Window_Closing(object sender, CancelEventArgs e) {