From bf9c25f429130942be2b69627da3c7afb803bbc8 Mon Sep 17 00:00:00 2001 From: Dao Heng Liu Date: Thu, 20 Jul 2023 23:28:31 +0100 Subject: [PATCH] add confirmation dialog to delete team/round buttons in tourney editor screens --- .../RoundEditorDeleteRoundDialog.cs | 19 +++++++++++++++++ .../Components/TeamEditorDeleteTeamDialog.cs | 21 +++++++++++++++++++ .../Screens/Editors/RoundEditorScreen.cs | 17 ++++++++++----- .../Screens/Editors/TeamEditorScreen.cs | 20 +++++++++++++----- 4 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 osu.Game.Tournament/Screens/Editors/Components/RoundEditorDeleteRoundDialog.cs create mode 100644 osu.Game.Tournament/Screens/Editors/Components/TeamEditorDeleteTeamDialog.cs diff --git a/osu.Game.Tournament/Screens/Editors/Components/RoundEditorDeleteRoundDialog.cs b/osu.Game.Tournament/Screens/Editors/Components/RoundEditorDeleteRoundDialog.cs new file mode 100644 index 0000000000..629cd4e135 --- /dev/null +++ b/osu.Game.Tournament/Screens/Editors/Components/RoundEditorDeleteRoundDialog.cs @@ -0,0 +1,19 @@ +// Copyright (c) ppy Pty Ltd . 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.Tournament.Screens.Editors.Components +{ + public partial class RoundEditorDeleteRoundDialog : DangerousActionDialog + { + public RoundEditorDeleteRoundDialog(string roundName, Action action) + { + HeaderText = roundName.Length > 0 ? $@"Delete round ""{roundName}""?" : @"Delete unnamed round?"; + Icon = FontAwesome.Solid.Trash; + DangerousAction = action; + } + } +} diff --git a/osu.Game.Tournament/Screens/Editors/Components/TeamEditorDeleteTeamDialog.cs b/osu.Game.Tournament/Screens/Editors/Components/TeamEditorDeleteTeamDialog.cs new file mode 100644 index 0000000000..f91b58e185 --- /dev/null +++ b/osu.Game.Tournament/Screens/Editors/Components/TeamEditorDeleteTeamDialog.cs @@ -0,0 +1,21 @@ +// Copyright (c) ppy Pty Ltd . 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.Tournament.Screens.Editors.Components +{ + public partial class TeamEditorDeleteTeamDialog : DangerousActionDialog + { + public TeamEditorDeleteTeamDialog(string fullTeamName, string acronym, Action action) + { + HeaderText = fullTeamName.Length > 0 ? $@"Delete team ""{fullTeamName}""?" : + acronym.Length > 0 ? $@"Delete team ""{acronym}""?" : + @"Delete unnamed team?"; + Icon = FontAwesome.Solid.Trash; + DangerousAction = action; + } + } +} diff --git a/osu.Game.Tournament/Screens/Editors/RoundEditorScreen.cs b/osu.Game.Tournament/Screens/Editors/RoundEditorScreen.cs index 4a3b5c0846..712a724d4d 100644 --- a/osu.Game.Tournament/Screens/Editors/RoundEditorScreen.cs +++ b/osu.Game.Tournament/Screens/Editors/RoundEditorScreen.cs @@ -11,9 +11,11 @@ using osu.Game.Graphics; using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Online.API.Requests.Responses; +using osu.Game.Overlays; using osu.Game.Overlays.Settings; using osu.Game.Tournament.Components; using osu.Game.Tournament.Models; +using osu.Game.Tournament.Screens.Editors.Components; using osuTK; namespace osu.Game.Tournament.Screens.Editors @@ -29,6 +31,9 @@ namespace osu.Game.Tournament.Screens.Editors [Resolved] private LadderInfo ladderInfo { get; set; } = null!; + [Resolved(canBeNull: true)] + private IDialogOverlay? dialogOverlay { get; set; } + public RoundRow(TournamentRound round) { Model = round; @@ -99,11 +104,13 @@ namespace osu.Game.Tournament.Screens.Editors RelativeSizeAxes = Axes.None, Width = 150, Text = "Delete Round", - Action = () => - { - Expire(); - ladderInfo.Rounds.Remove(Model); - }, + Action = () => dialogOverlay?.Push( + new RoundEditorDeleteRoundDialog( + Model.Name.Value, () => + { + Expire(); + ladderInfo.Rounds.Remove(Model); + })) } }; diff --git a/osu.Game.Tournament/Screens/Editors/TeamEditorScreen.cs b/osu.Game.Tournament/Screens/Editors/TeamEditorScreen.cs index 93fbfba0e3..584e947b1f 100644 --- a/osu.Game.Tournament/Screens/Editors/TeamEditorScreen.cs +++ b/osu.Game.Tournament/Screens/Editors/TeamEditorScreen.cs @@ -12,9 +12,11 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Game.Graphics; using osu.Game.Online.API; +using osu.Game.Overlays; using osu.Game.Overlays.Settings; using osu.Game.Tournament.Components; using osu.Game.Tournament.Models; +using osu.Game.Tournament.Screens.Editors.Components; using osu.Game.Users; using osuTK; @@ -64,6 +66,9 @@ namespace osu.Game.Tournament.Screens.Editors [Resolved] private TournamentSceneManager? sceneManager { get; set; } + [Resolved(canBeNull: true)] + private IDialogOverlay? dialogOverlay { get; set; } + [Resolved] private LadderInfo ladderInfo { get; set; } = null!; @@ -144,11 +149,16 @@ namespace osu.Game.Tournament.Screens.Editors Width = 0.11f, Text = "Delete Team", Margin = new MarginPadding(10), - Action = () => - { - Expire(); - ladderInfo.Teams.Remove(Model); - }, + Action = () => dialogOverlay?.Push( + new TeamEditorDeleteTeamDialog(Model.FullName.Value, + Model.Acronym.Value, + () => + { + Expire(); + ladderInfo.Teams.Remove(Model); + } + ) + ) }, playerEditor, new SettingsButton