From e3f3c379535d078d4c7e0003c555a20afe64b5b1 Mon Sep 17 00:00:00 2001
From: Joseph Madamba <madamba.joehu@outlook.com>
Date: Wed, 9 Jun 2021 17:03:46 -0700
Subject: [PATCH] Add ability to navigate score panels with left/right arrows

---
 osu.Game/Screens/Ranking/ScorePanelList.cs | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/osu.Game/Screens/Ranking/ScorePanelList.cs b/osu.Game/Screens/Ranking/ScorePanelList.cs
index 441c9e048a..e170241ede 100644
--- a/osu.Game/Screens/Ranking/ScorePanelList.cs
+++ b/osu.Game/Screens/Ranking/ScorePanelList.cs
@@ -8,9 +8,11 @@ using System.Linq;
 using osu.Framework.Bindables;
 using osu.Framework.Graphics;
 using osu.Framework.Graphics.Containers;
+using osu.Framework.Input.Events;
 using osu.Game.Graphics.Containers;
 using osu.Game.Scoring;
 using osuTK;
+using osuTK.Input;
 
 namespace osu.Game.Screens.Ranking
 {
@@ -263,6 +265,26 @@ namespace osu.Game.Screens.Ranking
             container.Attach();
         }
 
+        protected override bool OnKeyDown(KeyDownEvent e)
+        {
+            var expandedPanelIndex = flow.GetPanelIndex(expandedPanel.Score);
+
+            switch (e.Key)
+            {
+                case Key.Left:
+                    if (expandedPanelIndex > 0)
+                        SelectedScore.Value = flow.Children[expandedPanelIndex - 1].Panel.Score;
+                    return true;
+
+                case Key.Right:
+                    if (expandedPanelIndex < flow.Count - 1)
+                        SelectedScore.Value = flow.Children[expandedPanelIndex + 1].Panel.Score;
+                    return true;
+            }
+
+            return base.OnKeyDown(e);
+        }
+
         private class Flow : FillFlowContainer<ScorePanelTrackingContainer>
         {
             public override IEnumerable<Drawable> FlowingChildren => applySorting(AliveInternalChildren);