diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs
index 35896d4982..b47cf97a4d 100644
--- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs
+++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs
@@ -182,8 +182,7 @@ namespace osu.Game.Rulesets.Edit
///
/// Construct a relevant blueprint container. This will manage hitobject selection/placement input handling and display logic.
///
- protected virtual ComposeBlueprintContainer CreateBlueprintContainer()
- => new ComposeBlueprintContainer(this);
+ protected virtual ComposeBlueprintContainer CreateBlueprintContainer() => new ComposeBlueprintContainer(this);
///
/// Construct a drawable ruleset for the provided ruleset.
diff --git a/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs b/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs
index bd22c7329a..7f81629f80 100644
--- a/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/BlueprintContainer.cs
@@ -67,7 +67,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
///
/// Creates a which outlines s and handles movement of selections.
///
- protected virtual SelectionHandler CreateSelectionHandler() => new SelectionHandler();
+ protected abstract SelectionHandler CreateSelectionHandler();
///
/// Creates a for a specific .
diff --git a/osu.Game/Screens/Edit/Compose/Components/EditorBlueprintContainer.cs b/osu.Game/Screens/Edit/Compose/Components/EditorBlueprintContainer.cs
index aef02d5ffd..0cb9cf930c 100644
--- a/osu.Game/Screens/Edit/Compose/Components/EditorBlueprintContainer.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/EditorBlueprintContainer.cs
@@ -135,6 +135,8 @@ namespace osu.Game.Screens.Edit.Compose.Components
protected override Container> CreateSelectionBlueprintContainer() => new HitObjectOrderedSelectionContainer { RelativeSizeAxes = Axes.Both };
+ protected override SelectionHandler CreateSelectionHandler() => new EditorSelectionHandler();
+
protected override void SelectAll()
{
Composer.Playfield.KeepAllAlive();
diff --git a/osu.Game/Screens/Edit/Compose/Components/EditorSelectionHandler.cs b/osu.Game/Screens/Edit/Compose/Components/EditorSelectionHandler.cs
index 4c6833cc4a..4b85b5cc0e 100644
--- a/osu.Game/Screens/Edit/Compose/Components/EditorSelectionHandler.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/EditorSelectionHandler.cs
@@ -101,11 +101,11 @@ namespace osu.Game.Screens.Edit.Compose.Components
///
protected virtual void UpdateTernaryStates()
{
- SelectionNewComboState.Value = GetStateFromSelection(EditorBeatmap.SelectedHitObjects.OfType(), h => h.NewCombo);
+ SelectionNewComboState.Value = GetStateFromSelection(SelectedItems.OfType(), h => h.NewCombo);
foreach (var (sampleName, bindable) in SelectionSampleStates)
{
- bindable.Value = GetStateFromSelection(EditorBeatmap.SelectedHitObjects, h => h.Samples.Any(s => s.Name == sampleName));
+ bindable.Value = GetStateFromSelection(SelectedItems, h => h.Samples.Any(s => s.Name == sampleName));
}
}
diff --git a/osu.Game/Screens/Edit/Compose/Components/SelectionHandler.cs b/osu.Game/Screens/Edit/Compose/Components/SelectionHandler.cs
index 59ade746a9..4b99aa5da7 100644
--- a/osu.Game/Screens/Edit/Compose/Components/SelectionHandler.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/SelectionHandler.cs
@@ -25,7 +25,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
///
/// A component which outlines s and handles movement of selections.
///
- public class SelectionHandler : CompositeDrawable, IKeyBindingHandler
+ public abstract class SelectionHandler : CompositeDrawable, IKeyBindingHandler
{
///
/// The currently selected blueprints.
@@ -47,7 +47,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
[Resolved(CanBeNull = true)]
protected IEditorChangeHandler ChangeHandler { get; private set; }
- public SelectionHandler()
+ protected SelectionHandler()
{
selectedBlueprints = new List>();
@@ -265,9 +265,11 @@ namespace osu.Game.Screens.Edit.Compose.Components
DeleteSelected();
}
- protected virtual void DeleteItems(IEnumerable items)
- {
- }
+ ///
+ /// Called whenever the deletion of items has been requested.
+ ///
+ /// The items to be deleted.
+ protected abstract void DeleteItems(IEnumerable items);
///
/// Ensure the blueprint is in a selected state.