diff --git a/osu.Game/Screens/Select/Carousel/CarouselGroup.cs b/osu.Game/Screens/Select/Carousel/CarouselGroup.cs
index 62d694976f58..c0fb5fa3977d 100644
--- a/osu.Game/Screens/Select/Carousel/CarouselGroup.cs
+++ b/osu.Game/Screens/Select/Carousel/CarouselGroup.cs
@@ -10,8 +10,31 @@ namespace osu.Game.Screens.Select.Carousel
///
/// A group which ensures only one item is selected.
///
- public class CarouselGroup : CarouselItem
+ public abstract class CarouselGroup : CarouselItem
{
+ protected CarouselGroup(List? items = null)
+ {
+ if (items != null) this.items = items;
+
+ State.ValueChanged += state =>
+ {
+ switch (state.NewValue)
+ {
+ case CarouselItemState.Collapsed:
+ case CarouselItemState.NotSelected:
+ this.items.ForEach(c => c.State.Value = CarouselItemState.Collapsed);
+ break;
+
+ case CarouselItemState.Selected:
+ this.items.ForEach(c =>
+ {
+ if (c.State.Value == CarouselItemState.Collapsed) c.State.Value = CarouselItemState.NotSelected;
+ });
+ break;
+ }
+ };
+ }
+
public override DrawableCarouselItem? CreateDrawableRepresentation() => null;
public SlimReadOnlyListWrapper Items => items.AsSlimReadOnly();
@@ -67,29 +90,6 @@ public virtual void AddItem(CarouselItem i)
TotalItemsNotFiltered++;
}
- public CarouselGroup(List? items = null)
- {
- if (items != null) this.items = items;
-
- State.ValueChanged += state =>
- {
- switch (state.NewValue)
- {
- case CarouselItemState.Collapsed:
- case CarouselItemState.NotSelected:
- this.items.ForEach(c => c.State.Value = CarouselItemState.Collapsed);
- break;
-
- case CarouselItemState.Selected:
- this.items.ForEach(c =>
- {
- if (c.State.Value == CarouselItemState.Collapsed) c.State.Value = CarouselItemState.NotSelected;
- });
- break;
- }
- };
- }
-
public override void Filter(FilterCriteria criteria)
{
base.Filter(criteria);
diff --git a/osu.Game/Screens/Select/Carousel/CarouselGroupEagerSelect.cs b/osu.Game/Screens/Select/Carousel/CarouselGroupEagerSelect.cs
index cf4ba5924fdc..8cc1ea258a71 100644
--- a/osu.Game/Screens/Select/Carousel/CarouselGroupEagerSelect.cs
+++ b/osu.Game/Screens/Select/Carousel/CarouselGroupEagerSelect.cs
@@ -10,9 +10,9 @@ namespace osu.Game.Screens.Select.Carousel
///
/// A group which ensures at least one item is selected (if the group itself is selected).
///
- public class CarouselGroupEagerSelect : CarouselGroup
+ public abstract class CarouselGroupEagerSelect : CarouselGroup
{
- public CarouselGroupEagerSelect()
+ protected CarouselGroupEagerSelect()
{
State.ValueChanged += state =>
{