From fbd9523596c286c566e795e420c1b63c0527a997 Mon Sep 17 00:00:00 2001 From: DrabWeb Date: Mon, 27 Feb 2017 23:19:28 -0400 Subject: [PATCH] Added beatmap delete dialog --- .../Screens/Select/BeatmapDeleteDialog.cs | 53 +++++++++++++++++++ osu.Game/Screens/Select/PlaySongSelect.cs | 30 +++++++++-- osu.Game/osu.Game.csproj | 1 + 3 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 osu.Game/Screens/Select/BeatmapDeleteDialog.cs diff --git a/osu.Game/Screens/Select/BeatmapDeleteDialog.cs b/osu.Game/Screens/Select/BeatmapDeleteDialog.cs new file mode 100644 index 0000000000..dfec2ea9f8 --- /dev/null +++ b/osu.Game/Screens/Select/BeatmapDeleteDialog.cs @@ -0,0 +1,53 @@ +// Copyright (c) 2007-2017 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using osu.Game.Beatmaps; +using osu.Game.Graphics; +using osu.Game.Overlays.Dialog; + +namespace osu.Game +{ + public class BeatmapDeleteDialog : PopupDialog + { + public Action OnDelete; + + private WorkingBeatmap beatmap; + public WorkingBeatmap Beatmap + { + get + { + return beatmap; + } + set + { + beatmap = value; + BodyText = $@"{beatmap?.Beatmap?.Metadata?.Artist} - {beatmap?.Beatmap?.Metadata?.Title}"; + } + } + + public BeatmapDeleteDialog() + { + Icon = FontAwesome.fa_trash_o; + HeaderText = @"Confirm deletion of"; + Buttons = new PopupDialogButton[] + { + new PopupDialogOkButton + { + Text = @"Yes. Totally. Delete it.", + Action = () => + { + if (Beatmap != null) + { + OnDelete?.Invoke(Beatmap); + } + }, + }, + new PopupDialogCancelButton + { + Text = @"Firetruck, I didn't mean to!", + }, + }; + } + } +} diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index 3011b5bf23..e2f15ac845 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -50,6 +50,8 @@ namespace osu.Game.Screens.Select private List beatmapGroups; + private BeatmapDeleteDialog deleteDialog; + private Footer footer; OsuScreen player; @@ -122,7 +124,16 @@ namespace osu.Game.Screens.Select PreferredPlayMode = playMode.Value })).LoadAsync(Game, l => Push(player)); } - } + }, + deleteDialog = new BeatmapDeleteDialog + { + RelativeSizeAxes = Axes.Both, + OnDelete = (b) => + { + b.Dispose(); + database.Delete(b.BeatmapSetInfo); + }, + }, }; footer.AddButton(@"mods", colours.Yellow, null); @@ -280,6 +291,7 @@ namespace osu.Game.Screens.Select //todo: change background in selectionChanged instead; support per-difficulty backgrounds. changeBackground(beatmap); carousel.SelectBeatmap(beatmap?.BeatmapInfo); + deleteDialog.Beatmap = beatmap; } /// @@ -382,12 +394,20 @@ namespace osu.Game.Screens.Select footer.StartButton.TriggerClick(); return true; case Key.Delete: - if (Beatmap != null) + if (state.Keyboard.ShiftPressed) { - Beatmap.Dispose(); - database.Delete(Beatmap.BeatmapSetInfo); + deleteDialog.Show(); + return true; + } + else + { + if (Beatmap != null) + { + Beatmap.Dispose(); + database.Delete(Beatmap.BeatmapSetInfo); + } + return true; } - return true; } return base.OnKeyDown(state, args); diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 220d72fe23..324382f383 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -285,6 +285,7 @@ +