From a71a80182badae5319ab9fbc45f08231651d1fd0 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:13:12 +0200 Subject: [PATCH] Add `SavingWorldWindow` to see the progress when saving a world --- .../Content/SavingWorldWindow.xmmp | 9 +++ .../StoneRed.LogicSimulator.csproj | 3 + .../UserInterface/Windows/SaveWorldWindow.cs | 30 ++------- .../Windows/SavingWorldWindow.cs | 66 +++++++++++++++++++ .../WorldWriters/WorldWriterV1.cs | 5 ++ 5 files changed, 90 insertions(+), 23 deletions(-) create mode 100644 StoneRed.LogicSimulator/Content/SavingWorldWindow.xmmp create mode 100644 StoneRed.LogicSimulator/UserInterface/Windows/SavingWorldWindow.cs diff --git a/StoneRed.LogicSimulator/Content/SavingWorldWindow.xmmp b/StoneRed.LogicSimulator/Content/SavingWorldWindow.xmmp new file mode 100644 index 0000000..e151138 --- /dev/null +++ b/StoneRed.LogicSimulator/Content/SavingWorldWindow.xmmp @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/StoneRed.LogicSimulator/StoneRed.LogicSimulator.csproj b/StoneRed.LogicSimulator/StoneRed.LogicSimulator.csproj index ec27b9b..ccd732e 100644 --- a/StoneRed.LogicSimulator/StoneRed.LogicSimulator.csproj +++ b/StoneRed.LogicSimulator/StoneRed.LogicSimulator.csproj @@ -62,6 +62,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/StoneRed.LogicSimulator/UserInterface/Windows/SaveWorldWindow.cs b/StoneRed.LogicSimulator/UserInterface/Windows/SaveWorldWindow.cs index eaa857f..0823651 100644 --- a/StoneRed.LogicSimulator/UserInterface/Windows/SaveWorldWindow.cs +++ b/StoneRed.LogicSimulator/UserInterface/Windows/SaveWorldWindow.cs @@ -1,14 +1,10 @@ -using FluentResults; - -using Myra.Graphics2D.UI; +using Myra.Graphics2D.UI; using StoneRed.LogicSimulator.Misc; using StoneRed.LogicSimulator.WorldSaveSystem; using System; using System.IO; -using System.Linq; -using System.Threading.Tasks; namespace StoneRed.LogicSimulator.UserInterface.Windows; @@ -64,7 +60,7 @@ internal class SaveWorldWindow : SrlsWindow srls.ShowWindow(inputDialog); } - private async void NewSaveInputDialog_Ok(object? sender, InputDialogEventArgs e) + private void NewSaveInputDialog_Ok(object? sender, InputDialogEventArgs e) { if (string.IsNullOrWhiteSpace(e.Text)) { @@ -73,28 +69,16 @@ internal class SaveWorldWindow : SrlsWindow } worldData.SaveName = e.Text; - await Save(); + Save(); } - private async void SaveButton_Clicked(object? sender, EventArgs e) + private void SaveButton_Clicked(object? sender, EventArgs e) { - await Save(); + Save(); } - private async Task Save() + private void Save() { - WorldSaver worldSaver = new WorldSaver(srls); - Result result = await worldSaver.SaveWorld(worldData, new Progress()); - - if (result.IsSuccess) - { - _ = Dialog.CreateMessageBox("Success", "Saved world!"); - } - else - { - _ = Dialog.CreateMessageBox("Error", string.Join(',', result.Errors.Select(e => e.Message))); - } - - Close(); + srls.ShowWindow(new SavingWorldWindow(worldData)); } } \ No newline at end of file diff --git a/StoneRed.LogicSimulator/UserInterface/Windows/SavingWorldWindow.cs b/StoneRed.LogicSimulator/UserInterface/Windows/SavingWorldWindow.cs new file mode 100644 index 0000000..78865eb --- /dev/null +++ b/StoneRed.LogicSimulator/UserInterface/Windows/SavingWorldWindow.cs @@ -0,0 +1,66 @@ +using FluentResults; + +using Myra.Graphics2D.UI; + +using StoneRed.LogicSimulator.WorldSaveSystem; + +using System; +using System.Linq; +using System.Threading.Tasks; + +namespace StoneRed.LogicSimulator.UserInterface.Windows; + +internal class SavingWorldWindow : SrlsWindow +{ + private readonly WorldData worldData; + private bool windowClosable = false; + private Label label = null!; + private HorizontalProgressBar horizontalProgressBar = null!; + protected override string XmmpPath => "SavingWorldWindow.xmmp"; + + public SavingWorldWindow(WorldData worldData) + { + this.worldData = worldData; + } + + public override void Initialize() + { + window.Closing += (_, e) => e.Cancel = !windowClosable; + + label = window.FindChildById