1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-11 11:28:00 +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,38 +2,79 @@
// See the LICENCE file in the repository root for full licence text.
using System;
using osu.Framework.Allocation;
using osu.Framework.Graphics.Sprites;
using osu.Game.Overlays;
using osu.Game.Overlays.Dialog;
namespace osu.Game.Screens.Menu
{
public partial class ConfirmExitDialog : PopupDialog
{
private readonly Action onConfirm;
private readonly Action? onCancel;
/// <summary>
/// Construct a new exit confirmation dialog.
/// </summary>
/// <param name="onConfirm">An action to perform on confirmation.</param>
/// <param name="onCancel">An optional action to perform on cancel.</param>
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!?";
BodyText = "Last chance to turn back";
Icon = FontAwesome.Solid.ExclamationTriangle;
Buttons = new PopupDialogButton[]
if (notifications.HasOngoingOperations)
{
new PopupDialogOkButton
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[]
{
Text = @"Let me out!",
Action = onConfirm
},
new PopupDialogCancelButton
new PopupDialogDangerousButton
{
Text = @"Let me out!",
Action = onConfirm
},
new PopupDialogCancelButton
{
Text = @"Cancel",
Action = onCancel
},
};
}
else
{
BodyText = "Last chance to turn back";
Buttons = new PopupDialogButton[]
{
Text = @"Just a little more...",
Action = onCancel
},
};
new PopupDialogOkButton
{
Text = @"Let me out!",
Action = onConfirm
},
new PopupDialogCancelButton
{
Text = @"Just a little more...",
Action = onCancel
},
};
}
}
}
}