1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-12 17:43:05 +08:00

Show ongoing operations in exit confirmation dialog

Also changes the button to a dangerous button, forcing user acknowledgement
This commit is contained in:
Dean Herbert 2023-06-23 15:20:19 +09:00
parent 693b7c9906
commit f66b787b12

View File

@ -2,25 +2,65 @@
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
using System; using System;
using osu.Framework.Allocation;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Game.Overlays;
using osu.Game.Overlays.Dialog; using osu.Game.Overlays.Dialog;
namespace osu.Game.Screens.Menu namespace osu.Game.Screens.Menu
{ {
public partial class ConfirmExitDialog : PopupDialog public partial class ConfirmExitDialog : PopupDialog
{ {
private readonly Action onConfirm;
private readonly Action? onCancel;
/// <summary> /// <summary>
/// Construct a new exit confirmation dialog. /// Construct a new exit confirmation dialog.
/// </summary> /// </summary>
/// <param name="onConfirm">An action to perform on confirmation.</param> /// <param name="onConfirm">An action to perform on confirmation.</param>
/// <param name="onCancel">An optional action to perform on cancel.</param> /// <param name="onCancel">An optional action to perform on cancel.</param>
public ConfirmExitDialog(Action onConfirm, Action? onCancel = null) public ConfirmExitDialog(Action onConfirm, Action? onCancel = null)
{
this.onConfirm = onConfirm;
this.onCancel = onCancel;
}
[BackgroundDependencyLoader]
private void load(INotificationOverlay notifications)
{ {
HeaderText = "Are you sure you want to exit osu!?"; HeaderText = "Are you sure you want to exit osu!?";
BodyText = "Last chance to turn back";
Icon = FontAwesome.Solid.ExclamationTriangle; Icon = FontAwesome.Solid.ExclamationTriangle;
if (notifications.HasOngoingOperations)
{
string text = "There are currently some background operations which will be aborted if you continue:\n\n";
foreach (var n in notifications.OngoingOperations)
text += $"{n.Text} ({n.Progress:0%})\n";
text += "\nLast chance to turn back";
BodyText = text;
Buttons = new PopupDialogButton[]
{
new PopupDialogDangerousButton
{
Text = @"Let me out!",
Action = onConfirm
},
new PopupDialogCancelButton
{
Text = @"Cancel",
Action = onCancel
},
};
}
else
{
BodyText = "Last chance to turn back";
Buttons = new PopupDialogButton[] Buttons = new PopupDialogButton[]
{ {
new PopupDialogOkButton new PopupDialogOkButton
@ -36,4 +76,5 @@ namespace osu.Game.Screens.Menu
}; };
} }
} }
}
} }