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