mirror of
https://github.com/ppy/osu
synced 2025-02-17 02:47:19 +00:00
Add confirmation dialog when about to discard a playlist
The confirmation will only show if items have been added to the playlist. Closes https://github.com/ppy/osu/issues/19444.
This commit is contained in:
parent
eb92c35335
commit
9d457535c6
39
osu.Game/Screens/Menu/ConfirmDiscardChangesDialog.cs
Normal file
39
osu.Game/Screens/Menu/ConfirmDiscardChangesDialog.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Game.Overlays.Dialog;
|
||||||
|
|
||||||
|
namespace osu.Game.Screens.Menu
|
||||||
|
{
|
||||||
|
public class ConfirmDiscardChangesDialog : PopupDialog
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Construct a new discard changes 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 ConfirmDiscardChangesDialog(Action onConfirm, Action? onCancel = null)
|
||||||
|
{
|
||||||
|
HeaderText = "Are you sure you want to go back?";
|
||||||
|
BodyText = "This will discard any unsaved changes";
|
||||||
|
|
||||||
|
Icon = FontAwesome.Solid.ExclamationTriangle;
|
||||||
|
|
||||||
|
Buttons = new PopupDialogButton[]
|
||||||
|
{
|
||||||
|
new PopupDialogDangerousButton
|
||||||
|
{
|
||||||
|
Text = @"Yes",
|
||||||
|
Action = onConfirm
|
||||||
|
},
|
||||||
|
new PopupDialogCancelButton
|
||||||
|
{
|
||||||
|
Text = @"No I didn't mean to",
|
||||||
|
Action = onCancel
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,6 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Game.Overlays.Dialog;
|
using osu.Game.Overlays.Dialog;
|
||||||
@ -16,7 +14,7 @@ namespace osu.Game.Screens.Menu
|
|||||||
/// </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)
|
||||||
{
|
{
|
||||||
HeaderText = "Are you sure you want to exit osu!?";
|
HeaderText = "Are you sure you want to exit osu!?";
|
||||||
BodyText = "Last chance to turn back";
|
BodyText = "Last chance to turn back";
|
||||||
|
@ -28,6 +28,7 @@ using osu.Game.Overlays;
|
|||||||
using osu.Game.Overlays.Mods;
|
using osu.Game.Overlays.Mods;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
using osu.Game.Rulesets.Mods;
|
using osu.Game.Rulesets.Mods;
|
||||||
|
using osu.Game.Screens.Menu;
|
||||||
using osu.Game.Screens.OnlinePlay.Match.Components;
|
using osu.Game.Screens.OnlinePlay.Match.Components;
|
||||||
using osu.Game.Screens.OnlinePlay.Multiplayer;
|
using osu.Game.Screens.OnlinePlay.Multiplayer;
|
||||||
|
|
||||||
@ -280,13 +281,30 @@ namespace osu.Game.Screens.OnlinePlay.Match
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Resolved(canBeNull: true)]
|
||||||
|
private IDialogOverlay dialogOverlay { get; set; }
|
||||||
|
|
||||||
public override bool OnBackButton()
|
public override bool OnBackButton()
|
||||||
{
|
{
|
||||||
if (Room.RoomID.Value == null)
|
if (Room.RoomID.Value == null)
|
||||||
{
|
{
|
||||||
// room has not been created yet; exit immediately.
|
if (dialogOverlay == null || Room.Playlist.Count == 0)
|
||||||
settingsOverlay.Hide();
|
{
|
||||||
return base.OnBackButton();
|
settingsOverlay.Hide();
|
||||||
|
return base.OnBackButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the dialog is already displayed, block exiting until the user explicitly makes a decision.
|
||||||
|
if (dialogOverlay.CurrentDialog is ConfirmDiscardChangesDialog)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
dialogOverlay?.Push(new ConfirmDiscardChangesDialog(() =>
|
||||||
|
{
|
||||||
|
settingsOverlay.Hide();
|
||||||
|
this.Exit();
|
||||||
|
}));
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UserModsSelectOverlay.State.Value == Visibility.Visible)
|
if (UserModsSelectOverlay.State.Value == Visibility.Visible)
|
||||||
|
Loading…
Reference in New Issue
Block a user