mirror of
https://github.com/ppy/osu.git
synced 2025-02-13 15:03:13 +08:00
Fix selection not being retained when switching between split mode
This commit is contained in:
parent
ecbf0f138e
commit
018be4c20f
@ -131,6 +131,12 @@ namespace osu.Game.Screens.Select
|
|||||||
{
|
{
|
||||||
originalBeatmapSetsDetached = beatmapSets.Detach();
|
originalBeatmapSetsDetached = beatmapSets.Detach();
|
||||||
|
|
||||||
|
if (selectedBeatmapSet != null && !originalBeatmapSetsDetached.Contains(selectedBeatmapSet.BeatmapSet))
|
||||||
|
selectedBeatmapSet = null;
|
||||||
|
|
||||||
|
var selectedSetBefore = selectedBeatmapSet;
|
||||||
|
var selectedBetmapBefore = selectedBeatmap;
|
||||||
|
|
||||||
CarouselRoot newRoot = new CarouselRoot(this);
|
CarouselRoot newRoot = new CarouselRoot(this);
|
||||||
|
|
||||||
if (beatmapsSplitOut)
|
if (beatmapsSplitOut)
|
||||||
@ -148,14 +154,12 @@ namespace osu.Game.Screens.Select
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var carouselBeatmapSets = originalBeatmapSetsDetached.Select(createCarouselSet).OfType<CarouselBeatmapSet>();
|
var carouselBeatmapSets = originalBeatmapSetsDetached.Select(createCarouselSet).OfType<CarouselBeatmapSet>();
|
||||||
|
|
||||||
newRoot.AddItems(carouselBeatmapSets);
|
newRoot.AddItems(carouselBeatmapSets);
|
||||||
}
|
}
|
||||||
|
|
||||||
root = newRoot;
|
root = newRoot;
|
||||||
|
|
||||||
if (selectedBeatmapSet != null && !originalBeatmapSetsDetached.Contains(selectedBeatmapSet.BeatmapSet))
|
|
||||||
selectedBeatmapSet = null;
|
|
||||||
|
|
||||||
Scroll.Clear(false);
|
Scroll.Clear(false);
|
||||||
itemsCache.Invalidate();
|
itemsCache.Invalidate();
|
||||||
ScrollToSelected();
|
ScrollToSelected();
|
||||||
@ -164,6 +168,15 @@ namespace osu.Game.Screens.Select
|
|||||||
|
|
||||||
if (loadedTestBeatmaps)
|
if (loadedTestBeatmaps)
|
||||||
signalBeatmapsLoaded();
|
signalBeatmapsLoaded();
|
||||||
|
|
||||||
|
// Restore selection
|
||||||
|
if (selectedBetmapBefore != null && selectedSetBefore != null && newRoot.BeatmapSetsByID.TryGetValue(selectedSetBefore.BeatmapSet.ID, out var newSelectionCandidates))
|
||||||
|
{
|
||||||
|
CarouselBeatmap? found = newSelectionCandidates.SelectMany(s => s.Beatmaps).SingleOrDefault(b => b.BeatmapInfo.ID == selectedBetmapBefore.BeatmapInfo.ID);
|
||||||
|
|
||||||
|
if (found != null)
|
||||||
|
found.State.Value = CarouselItemState.Selected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly List<CarouselItem> visibleItems = new List<CarouselItem>();
|
private readonly List<CarouselItem> visibleItems = new List<CarouselItem>();
|
||||||
|
Loading…
Reference in New Issue
Block a user