2021-03-28 23:36:22 +08:00
|
|
|
// 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.
|
|
|
|
|
2022-06-17 15:37:17 +08:00
|
|
|
#nullable disable
|
|
|
|
|
2021-03-28 23:36:22 +08:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Linq;
|
|
|
|
using osu.Framework.Allocation;
|
2021-04-10 19:04:39 +08:00
|
|
|
using osu.Framework.Bindables;
|
2021-03-28 23:36:22 +08:00
|
|
|
using osu.Framework.Extensions;
|
|
|
|
using osu.Framework.Graphics;
|
|
|
|
using osu.Framework.Graphics.Containers;
|
2021-09-16 17:28:35 +08:00
|
|
|
using osu.Framework.Input.Events;
|
2021-03-28 23:36:22 +08:00
|
|
|
using osu.Game.Graphics;
|
|
|
|
using osu.Game.Graphics.Sprites;
|
2021-04-07 20:38:43 +08:00
|
|
|
using osu.Game.Input.Bindings;
|
2021-04-10 19:02:22 +08:00
|
|
|
using osu.Game.Rulesets.Edit.Checks.Components;
|
2021-03-28 23:36:22 +08:00
|
|
|
|
|
|
|
namespace osu.Game.Screens.Edit.Verify
|
|
|
|
{
|
2021-04-13 22:05:58 +08:00
|
|
|
public class IssueTable : EditorTable
|
2021-03-28 23:36:22 +08:00
|
|
|
{
|
2021-04-10 19:04:39 +08:00
|
|
|
[Resolved]
|
2021-05-12 15:53:49 +08:00
|
|
|
private VerifyScreen verify { get; set; }
|
|
|
|
|
|
|
|
private Bindable<Issue> selectedIssue;
|
2021-04-10 19:04:39 +08:00
|
|
|
|
2021-04-13 22:26:19 +08:00
|
|
|
[Resolved]
|
|
|
|
private EditorClock clock { get; set; }
|
|
|
|
|
|
|
|
[Resolved]
|
|
|
|
private EditorBeatmap editorBeatmap { get; set; }
|
|
|
|
|
|
|
|
[Resolved]
|
|
|
|
private Editor editor { get; set; }
|
|
|
|
|
2021-03-28 23:36:22 +08:00
|
|
|
public IEnumerable<Issue> Issues
|
|
|
|
{
|
|
|
|
set
|
|
|
|
{
|
|
|
|
Content = null;
|
2021-04-13 22:05:58 +08:00
|
|
|
BackgroundFlow.Clear();
|
2021-03-28 23:36:22 +08:00
|
|
|
|
2021-04-10 19:09:16 +08:00
|
|
|
if (value == null)
|
2021-03-28 23:36:22 +08:00
|
|
|
return;
|
|
|
|
|
|
|
|
foreach (var issue in value)
|
|
|
|
{
|
2021-04-13 22:26:19 +08:00
|
|
|
BackgroundFlow.Add(new RowBackground(issue)
|
|
|
|
{
|
|
|
|
Action = () =>
|
|
|
|
{
|
|
|
|
selectedIssue.Value = issue;
|
|
|
|
|
|
|
|
if (issue.Time != null)
|
|
|
|
{
|
|
|
|
clock.Seek(issue.Time.Value);
|
2021-09-16 17:28:35 +08:00
|
|
|
editor.OnPressed(new KeyBindingPressEvent<GlobalAction>(GetContainingInputManager().CurrentState, GlobalAction.EditorComposeMode));
|
2021-04-13 22:26:19 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!issue.HitObjects.Any())
|
|
|
|
return;
|
|
|
|
|
|
|
|
editorBeatmap.SelectedHitObjects.Clear();
|
|
|
|
editorBeatmap.SelectedHitObjects.AddRange(issue.HitObjects);
|
|
|
|
},
|
|
|
|
});
|
2021-03-28 23:36:22 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
Columns = createHeaders();
|
|
|
|
Content = value.Select((g, i) => createContent(i, g)).ToArray().ToRectangular();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-13 22:26:19 +08:00
|
|
|
protected override void LoadComplete()
|
|
|
|
{
|
|
|
|
base.LoadComplete();
|
|
|
|
|
2021-05-12 15:53:49 +08:00
|
|
|
selectedIssue = verify.SelectedIssue.GetBoundCopy();
|
2021-04-13 22:26:19 +08:00
|
|
|
selectedIssue.BindValueChanged(issue =>
|
|
|
|
{
|
|
|
|
foreach (var b in BackgroundFlow) b.Selected = b.Item == issue.NewValue;
|
|
|
|
}, true);
|
|
|
|
}
|
|
|
|
|
2021-03-28 23:36:22 +08:00
|
|
|
private TableColumn[] createHeaders()
|
|
|
|
{
|
|
|
|
var columns = new List<TableColumn>
|
|
|
|
{
|
2021-04-10 19:10:05 +08:00
|
|
|
new TableColumn(string.Empty, Anchor.CentreLeft, new Dimension(GridSizeMode.AutoSize)),
|
|
|
|
new TableColumn("Type", Anchor.CentreLeft, new Dimension(GridSizeMode.AutoSize, minSize: 60)),
|
|
|
|
new TableColumn("Time", Anchor.CentreLeft, new Dimension(GridSizeMode.AutoSize, minSize: 60)),
|
2021-04-07 20:38:43 +08:00
|
|
|
new TableColumn("Message", Anchor.CentreLeft),
|
|
|
|
new TableColumn("Category", Anchor.CentreRight, new Dimension(GridSizeMode.AutoSize)),
|
2021-03-28 23:36:22 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
return columns.ToArray();
|
|
|
|
}
|
|
|
|
|
|
|
|
private Drawable[] createContent(int index, Issue issue) => new Drawable[]
|
|
|
|
{
|
|
|
|
new OsuSpriteText
|
|
|
|
{
|
|
|
|
Text = $"#{index + 1}",
|
2021-04-13 22:05:58 +08:00
|
|
|
Font = OsuFont.GetFont(size: TEXT_SIZE, weight: FontWeight.Medium),
|
2021-04-10 19:10:05 +08:00
|
|
|
Margin = new MarginPadding { Right = 10 }
|
2021-04-07 20:38:43 +08:00
|
|
|
},
|
|
|
|
new OsuSpriteText
|
|
|
|
{
|
|
|
|
Text = issue.Template.Type.ToString(),
|
2021-04-13 22:05:58 +08:00
|
|
|
Font = OsuFont.GetFont(size: TEXT_SIZE, weight: FontWeight.Bold),
|
2021-04-10 19:10:05 +08:00
|
|
|
Margin = new MarginPadding { Right = 10 },
|
2021-04-12 14:30:33 +08:00
|
|
|
Colour = issue.Template.Colour
|
2021-04-07 20:38:43 +08:00
|
|
|
},
|
|
|
|
new OsuSpriteText
|
|
|
|
{
|
|
|
|
Text = issue.GetEditorTimestamp(),
|
2021-04-13 22:05:58 +08:00
|
|
|
Font = OsuFont.GetFont(size: TEXT_SIZE, weight: FontWeight.Bold),
|
2021-04-10 19:10:05 +08:00
|
|
|
Margin = new MarginPadding { Right = 10 },
|
2021-03-28 23:36:22 +08:00
|
|
|
},
|
|
|
|
new OsuSpriteText
|
|
|
|
{
|
2021-04-07 20:38:43 +08:00
|
|
|
Text = issue.ToString(),
|
2021-04-13 22:05:58 +08:00
|
|
|
Font = OsuFont.GetFont(size: TEXT_SIZE, weight: FontWeight.Medium)
|
2021-03-28 23:36:22 +08:00
|
|
|
},
|
2021-04-07 20:38:43 +08:00
|
|
|
new OsuSpriteText
|
|
|
|
{
|
2021-04-12 21:47:58 +08:00
|
|
|
Text = issue.Check.Metadata.Category.ToString(),
|
2021-04-13 22:05:58 +08:00
|
|
|
Font = OsuFont.GetFont(size: TEXT_SIZE, weight: FontWeight.Bold),
|
2021-04-07 20:38:43 +08:00
|
|
|
Margin = new MarginPadding(10)
|
|
|
|
}
|
2021-03-28 23:36:22 +08:00
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|