diff --git a/Igniter/ICC.cs b/Igniter/ICC.cs deleted file mode 100644 index 6138e6a..0000000 --- a/Igniter/ICC.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Igniter -{ - public sealed class ICC - { - public enum ID - { - ViewAllowWindow - } - - public ID IDValue { get; set; } - - public object Contents { get; set; } - } -} \ No newline at end of file diff --git a/Igniter/Igniter.csproj b/Igniter/Igniter.csproj index f228994..9fe26ca 100644 --- a/Igniter/Igniter.csproj +++ b/Igniter/Igniter.csproj @@ -103,9 +103,9 @@ MSBuild:Compile Designer - + diff --git a/Igniter/MSG/ViewAllowWindow.cs b/Igniter/MSG/ViewAllowWindow.cs new file mode 100644 index 0000000..08a02b1 --- /dev/null +++ b/Igniter/MSG/ViewAllowWindow.cs @@ -0,0 +1,14 @@ +using CommunityToolkit.Mvvm.Messaging.Messages; +using System.Windows; + +namespace Igniter.MSG +{ + public sealed class ViewAllowWindow : RequestMessage + { + public string Text { get; set; } + + public MessageBoxButton Input { get; set; } + + public MessageBoxImage Drawing { get; set; } + } +} \ No newline at end of file diff --git a/Igniter/View/MainWindow.xaml.cs b/Igniter/View/MainWindow.xaml.cs index 2b5a84f..001536e 100644 --- a/Igniter/View/MainWindow.xaml.cs +++ b/Igniter/View/MainWindow.xaml.cs @@ -1,32 +1,19 @@ using CommunityToolkit.Mvvm.Messaging; +using Igniter.MSG; using Igniter.ViewModel; -using System; -using System.Linq; using System.Windows; namespace Igniter.View { - public partial class MainWindow : IRecipient + public partial class MainWindow { public MainWindow() { InitializeComponent(); - WeakReferenceMessenger.Default.Register(this); + StrongReferenceMessenger.Default.Register(this, (recipient, message) => message.Reply(MessageBox.Show(this, message.Text, "Qwilight", message.Input, message.Drawing))); } - void OnLoaded(object sender, RoutedEventArgs e) => (DataContext as MainViewModel).OnLoaded(); - - public void Receive(ICC message) - { - switch (message.IDValue) - { - case ICC.ID.ViewAllowWindow: - var data = message.Contents as object[]; - var r = MessageBox.Show(this, data[0] as string, "Qwilight", (MessageBoxButton)data[1], (MessageBoxImage)data[2]); - (data.ElementAtOrDefault(3) as Action)?.Invoke(r); - break; - } - } + void OnLoaded(object sender, RoutedEventArgs e) => _ = (DataContext as MainViewModel).OnLoaded(); } } diff --git a/Igniter/ViewModels/MainViewModel.cs b/Igniter/ViewModels/MainViewModel.cs index bde7c55..599af4a 100644 --- a/Igniter/ViewModels/MainViewModel.cs +++ b/Igniter/ViewModels/MainViewModel.cs @@ -1,5 +1,6 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; +using Igniter.MSG; using Ionic.Zip; using System; using System.Diagnostics; @@ -36,132 +37,99 @@ set => SetProperty(ref _isVisible, value, nameof(IsVisible)); } - public void OnLoaded() + public async Task OnLoaded() { - WeakReferenceMessenger.Default.Send(new ICC + switch (StrongReferenceMessenger.Default.Send(new ViewAllowWindow { - IDValue = ICC.ID.ViewAllowWindow, - Contents = new object[] - { - LanguageSystem.Instance.Levy, - MessageBoxButton.OKCancel, - MessageBoxImage.Information, - new Action(async r => + Text = LanguageSystem.Instance.Levy, + Input = MessageBoxButton.OKCancel, + Drawing = MessageBoxImage.Information + }).Response) + { + case MessageBoxResult.OK: + while (true) { - switch (r) + try { - case MessageBoxResult.OK: - while (true) + using (var zipFile = ZipFile.Read(Environment.GetCommandLineArgs()[1])) + { + zipFile.ExtractProgress += (sender, e) => { - try + if (e.EntriesTotal > 0) { - using (var zipFile = ZipFile.Read(Environment.GetCommandLineArgs()[1])) - { - zipFile.ExtractProgress += (sender, e) => - { - if (e.EntriesTotal > 0) - { - Value = 100.0 * e.EntriesExtracted / e.EntriesTotal; - } - var fileName = e.CurrentEntry?.FileName; - if (!string.IsNullOrEmpty(fileName)) - { - Text = fileName; - } - }; - await Task.Run(() => zipFile.ExtractAll(Path.GetDirectoryName(IgniterComponent.QwilightFilePath), ExtractExistingFileAction.OverwriteSilently)).ConfigureAwait(false); - } + Value = 100.0 * e.EntriesExtracted / e.EntriesTotal; + } + var fileName = e.CurrentEntry?.FileName; + if (!string.IsNullOrEmpty(fileName)) + { + Text = fileName; + } + }; + await Task.Run(() => zipFile.ExtractAll(Path.GetDirectoryName(IgniterComponent.QwilightFilePath), ExtractExistingFileAction.OverwriteSilently)).ConfigureAwait(false); + } - OnIgnited(); - } - catch (Exception e) - { - OnIgnitingFault(e); - if (IsVisible) - { - continue; - } - } - } - case MessageBoxResult.Cancel: - Environment.Exit(1); - break; + OnIgnited(); } - }) - } - }); + catch (Exception e) + { + OnIgnitingFault(e); + if (IsVisible) + { + continue; + } + } + } + case MessageBoxResult.Cancel: + Environment.Exit(1); + break; + } void OnIgnited() { IsVisible = false; - WeakReferenceMessenger.Default.Send(new ICC + StrongReferenceMessenger.Default.Send(new ViewAllowWindow { - IDValue = ICC.ID.ViewAllowWindow, - Contents = new object[] - { - LanguageSystem.Instance.Ignited, - MessageBoxButton.OK, - MessageBoxImage.Information - } + Text = LanguageSystem.Instance.Ignited, + Input = MessageBoxButton.OK, + Drawing = MessageBoxImage.Information }); - WeakReferenceMessenger.Default.Send(new ICC + switch (StrongReferenceMessenger.Default.Send(new ViewAllowWindow { - IDValue = ICC.ID.ViewAllowWindow, - Contents = new object[] - { - LanguageSystem.Instance.ExeQwilight, - MessageBoxButton.YesNo, - MessageBoxImage.Question, - new Action(r => - { - switch (r) - { - case MessageBoxResult.Yes: - Process.Start(IgniterComponent.QwilightFilePath); - break; - } - - Environment.Exit(0); - }) - } - }); + Text = LanguageSystem.Instance.ExeQwilight, + Input = MessageBoxButton.YesNo, + Drawing = MessageBoxImage.Question + }).Response) + { + case MessageBoxResult.Yes: + Process.Start(IgniterComponent.QwilightFilePath); + break; + } + Environment.Exit(0); } void OnIgnitingFault(Exception e) { IsVisible = false; - WeakReferenceMessenger.Default.Send(new ICC + StrongReferenceMessenger.Default.Send(new ViewAllowWindow { - IDValue = ICC.ID.ViewAllowWindow, - Contents = new object[] - { - e.Message, - MessageBoxButton.OK, - MessageBoxImage.Error - } + Text = e.Message, + Input = MessageBoxButton.OK, + Drawing = MessageBoxImage.Error }); - WeakReferenceMessenger.Default.Send(new ICC + switch (StrongReferenceMessenger.Default.Send(new ViewAllowWindow { - IDValue = ICC.ID.ViewAllowWindow, - Contents = new object[] - { - LanguageSystem.Instance.IgnitingFault, - MessageBoxButton.YesNo, - MessageBoxImage.Warning, - new Action(r => - { - switch (r) - { - case MessageBoxResult.Yes: - IsVisible = true; - break; - case MessageBoxResult.No: - Environment.Exit(1); - break; - } - }) - } - }); + Text = LanguageSystem.Instance.IgnitingFault, + Input = MessageBoxButton.YesNo, + Drawing = MessageBoxImage.Warning + }).Response) + { + case MessageBoxResult.Yes: + IsVisible = true; + break; + case MessageBoxResult.No: + Environment.Exit(1); + break; + } } } } diff --git a/Qwilight/ICC.cs b/Qwilight/ICC.cs index 9db7030..26bf75b 100644 --- a/Qwilight/ICC.cs +++ b/Qwilight/ICC.cs @@ -4,7 +4,6 @@ { public enum ID { - ViewAllowWindow, ViewEntryWindow, ViewFileWindow, Quit, @@ -23,7 +22,6 @@ GetPwWindowCipher, ClearPwWindowCipher, SetBaseDrawingUIElement, - SetWindowedMode, SetNoteFileModeWindowInputs, GetWindowArea, SetWindowArea, diff --git a/Qwilight/MSG/SetWindowedMode.cs b/Qwilight/MSG/SetWindowedMode.cs new file mode 100644 index 0000000..c45cd67 --- /dev/null +++ b/Qwilight/MSG/SetWindowedMode.cs @@ -0,0 +1,6 @@ +namespace Qwilight.MSG +{ + public sealed class SetWindowedMode + { + } +} \ No newline at end of file diff --git a/Qwilight/MSG/ViewAllowWindow.cs b/Qwilight/MSG/ViewAllowWindow.cs new file mode 100644 index 0000000..e102963 --- /dev/null +++ b/Qwilight/MSG/ViewAllowWindow.cs @@ -0,0 +1,6 @@ +namespace Qwilight.MSG +{ + public sealed class ViewAllowWindow + { + } +} \ No newline at end of file diff --git a/Qwilight/System/DefaultControllerSystem/DefaultControllerSystem.cs b/Qwilight/System/DefaultControllerSystem/DefaultControllerSystem.cs index 781a03b..041566b 100644 --- a/Qwilight/System/DefaultControllerSystem/DefaultControllerSystem.cs +++ b/Qwilight/System/DefaultControllerSystem/DefaultControllerSystem.cs @@ -1,5 +1,6 @@ using CommunityToolkit.Mvvm.Messaging; using Qwilight.Compute; +using Qwilight.MSG; using Qwilight.Utilities; using Qwilight.ViewModel; using System.Diagnostics; @@ -194,10 +195,7 @@ break; case VirtualKey.Enter when isAlt: Configure.Instance.WindowedMode = !Configure.Instance.WindowedMode; - WeakReferenceMessenger.Default.Send(new() - { - IDValue = ICC.ID.SetWindowedMode - }); + StrongReferenceMessenger.Default.Send(new SetWindowedMode()); break; } switch (input) diff --git a/Qwilight/Utilities/AwaitUtility.cs b/Qwilight/Utilities/AwaitUtility.cs index c9bbb53..c5ae62c 100644 --- a/Qwilight/Utilities/AwaitUtility.cs +++ b/Qwilight/Utilities/AwaitUtility.cs @@ -6,7 +6,7 @@ { public static T Await(IAsyncOperation t) { - return Await(t); + return Await(t.AsTask()); } public static T Await(Task t) diff --git a/Qwilight/View/MainWindow/MainWindow.xaml.cs b/Qwilight/View/MainWindow/MainWindow.xaml.cs index fc04f95..bb5d455 100644 --- a/Qwilight/View/MainWindow/MainWindow.xaml.cs +++ b/Qwilight/View/MainWindow/MainWindow.xaml.cs @@ -10,6 +10,7 @@ using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media; using Qwilight.Compute; +using Qwilight.MSG; using Qwilight.ViewModel; using System.Runtime.InteropServices; using System.Windows.Input; @@ -135,6 +136,25 @@ } lpPrevWndFunc = Marshal.GetDelegateForFunctionPointer(PInvoke.SetWindowLongPtr(_handle, WINDOW_LONG_PTR_INDEX.GWLP_WNDPROC, Marshal.GetFunctionPointerForDelegate(_onWin32))); + StrongReferenceMessenger.Default.Register(this, (recipient, message) => + { + HandlingUISystem.Instance.HandleParallel(() => + { + if (Configure.Instance.WindowedMode) + { + ResizeMode = ResizeMode.CanResize; + WindowStyle = WindowStyle.SingleBorderWindow; + WindowState = WindowState.Normal; + } + else + { + ResizeMode = ResizeMode.NoResize; + WindowStyle = WindowStyle.None; + WindowState = WindowState.Maximized; + } + }); + }); + WeakReferenceMessenger.Default.Register(this); } @@ -207,23 +227,6 @@ ViewModels.Instance.InputTextValue.HandleOK = data[2] as Action; ViewModels.Instance.InputTextValue.Open(); break; - case ICC.ID.SetWindowedMode: - HandlingUISystem.Instance.HandleParallel(() => - { - if (Configure.Instance.WindowedMode) - { - ResizeMode = ResizeMode.CanResize; - WindowStyle = WindowStyle.SingleBorderWindow; - WindowState = WindowState.Normal; - } - else - { - ResizeMode = ResizeMode.NoResize; - WindowStyle = WindowStyle.None; - WindowState = WindowState.Maximized; - } - }); - break; case ICC.ID.SetWindowArea: var windowInfo = new WINDOWINFO { diff --git a/Qwilight/ViewModel/ConfigureViewModel.cs b/Qwilight/ViewModel/ConfigureViewModel.cs index 2daf3d4..a23387a 100644 --- a/Qwilight/ViewModel/ConfigureViewModel.cs +++ b/Qwilight/ViewModel/ConfigureViewModel.cs @@ -3,6 +3,7 @@ using FMOD; using Ionic.Zip; using Qwilight.Compute; +using Qwilight.MSG; using Qwilight.UIComponent; using Qwilight.Utilities; using System.Collections.ObjectModel; @@ -934,10 +935,7 @@ static void OnWindowedMode() { Configure.Instance.WindowedMode = !Configure.Instance.WindowedMode; - WeakReferenceMessenger.Default.Send(new() - { - IDValue = ICC.ID.SetWindowedMode - }); + StrongReferenceMessenger.Default.Send(new SetWindowedMode()); } [RelayCommand] diff --git a/Qwilight/ViewModel/MainViewModel.cs b/Qwilight/ViewModel/MainViewModel.cs index 1f9497f..f1dd34e 100644 --- a/Qwilight/ViewModel/MainViewModel.cs +++ b/Qwilight/ViewModel/MainViewModel.cs @@ -2,6 +2,7 @@ using CommunityToolkit.Mvvm.Messaging; using Ionic.Zip; using Qwilight.Compute; +using Qwilight.MSG; using Qwilight.NoteFile; using Qwilight.UIComponent; using Qwilight.Utilities; @@ -542,10 +543,7 @@ public async Task OnLoaded(nint handle) { - WeakReferenceMessenger.Default.Send(new() - { - IDValue = ICC.ID.SetWindowedMode - }); + StrongReferenceMessenger.Default.Send(new SetWindowedMode()); StillSystem.Instance.Init(handle); await MIDISystem.Instance.HandleSystem().ConfigureAwait(false); @@ -555,8 +553,7 @@ DrawingSystem.Instance.LoadDefaultDrawing(); DrawingSystem.Instance.LoadVeilDrawing(); - await LevelSystem.Instance.LoadJSON(false); - + await LevelSystem.Instance.LoadJSON(false).ConfigureAwait(false); await ValveSystem.Instance.Init().ConfigureAwait(false); await Task.Run(() => {