mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 17:07:38 +08:00
Ensure selection tool correctly matches selection state
- When a selection is made (via the timeline) the selection tool should become the select tool. - When the selection tool is changed to anything *but* the select tool, the selection should be cleared.
This commit is contained in:
parent
e81d3c51ed
commit
8e2159e4eb
@ -58,6 +58,8 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
|
|
||||||
private InputManager inputManager;
|
private InputManager inputManager;
|
||||||
|
|
||||||
|
private RadioButtonCollection toolboxCollection;
|
||||||
|
|
||||||
protected HitObjectComposer(Ruleset ruleset)
|
protected HitObjectComposer(Ruleset ruleset)
|
||||||
{
|
{
|
||||||
Ruleset = ruleset;
|
Ruleset = ruleset;
|
||||||
@ -100,7 +102,6 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
layerContainers.Add(layerBelowRuleset);
|
layerContainers.Add(layerBelowRuleset);
|
||||||
layerContainers.Add(layerAboveRuleset);
|
layerContainers.Add(layerAboveRuleset);
|
||||||
|
|
||||||
RadioButtonCollection toolboxCollection;
|
|
||||||
InternalChild = new GridContainer
|
InternalChild = new GridContainer
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
@ -142,7 +143,7 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
.Select(t => new RadioButton(t.Name, () => toolSelected(t)))
|
.Select(t => new RadioButton(t.Name, () => toolSelected(t)))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
toolboxCollection.Items.First().Select();
|
setSelectTool();
|
||||||
|
|
||||||
blueprintContainer.SelectionChanged += selectionChanged;
|
blueprintContainer.SelectionChanged += selectionChanged;
|
||||||
}
|
}
|
||||||
@ -181,12 +182,19 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
{
|
{
|
||||||
var hitObjects = selectedHitObjects.ToArray();
|
var hitObjects = selectedHitObjects.ToArray();
|
||||||
|
|
||||||
if (!hitObjects.Any())
|
if (hitObjects.Any())
|
||||||
distanceSnapGridContainer.Hide();
|
{
|
||||||
else
|
// ensure in selection mode if a selection is made.
|
||||||
|
setSelectTool();
|
||||||
|
|
||||||
showGridFor(hitObjects);
|
showGridFor(hitObjects);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
distanceSnapGridContainer.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setSelectTool() => toolboxCollection.Items.First().Select();
|
||||||
|
|
||||||
private void toolSelected(HitObjectCompositionTool tool)
|
private void toolSelected(HitObjectCompositionTool tool)
|
||||||
{
|
{
|
||||||
blueprintContainer.CurrentTool = tool;
|
blueprintContainer.CurrentTool = tool;
|
||||||
@ -194,7 +202,10 @@ namespace osu.Game.Rulesets.Edit
|
|||||||
if (tool is SelectTool)
|
if (tool is SelectTool)
|
||||||
distanceSnapGridContainer.Hide();
|
distanceSnapGridContainer.Hide();
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
EditorBeatmap.SelectedHitObjects.Clear();
|
||||||
showGridFor(Enumerable.Empty<HitObject>());
|
showGridFor(Enumerable.Empty<HitObject>());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showGridFor(IEnumerable<HitObject> selectedHitObjects)
|
private void showGridFor(IEnumerable<HitObject> selectedHitObjects)
|
||||||
|
@ -74,12 +74,16 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
{
|
{
|
||||||
foreach (var o in objects)
|
foreach (var o in objects)
|
||||||
selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Select();
|
selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Select();
|
||||||
|
|
||||||
|
SelectionChanged?.Invoke(selectedHitObjects);
|
||||||
};
|
};
|
||||||
|
|
||||||
selectedHitObjects.ItemsRemoved += objects =>
|
selectedHitObjects.ItemsRemoved += objects =>
|
||||||
{
|
{
|
||||||
foreach (var o in objects)
|
foreach (var o in objects)
|
||||||
selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Deselect();
|
selectionBlueprints.FirstOrDefault(b => b.HitObject == o)?.Deselect();
|
||||||
|
|
||||||
|
SelectionChanged?.Invoke(selectedHitObjects);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,8 +336,6 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
selectionHandler.HandleSelected(blueprint);
|
selectionHandler.HandleSelected(blueprint);
|
||||||
selectionBlueprints.ChangeChildDepth(blueprint, 1);
|
selectionBlueprints.ChangeChildDepth(blueprint, 1);
|
||||||
beatmap.SelectedHitObjects.Add(blueprint.HitObject);
|
beatmap.SelectedHitObjects.Add(blueprint.HitObject);
|
||||||
|
|
||||||
SelectionChanged?.Invoke(selectionHandler.SelectedHitObjects);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onBlueprintDeselected(SelectionBlueprint blueprint)
|
private void onBlueprintDeselected(SelectionBlueprint blueprint)
|
||||||
@ -341,8 +343,6 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
selectionHandler.HandleDeselected(blueprint);
|
selectionHandler.HandleDeselected(blueprint);
|
||||||
selectionBlueprints.ChangeChildDepth(blueprint, 0);
|
selectionBlueprints.ChangeChildDepth(blueprint, 0);
|
||||||
beatmap.SelectedHitObjects.Remove(blueprint.HitObject);
|
beatmap.SelectedHitObjects.Remove(blueprint.HitObject);
|
||||||
|
|
||||||
SelectionChanged?.Invoke(selectionHandler.SelectedHitObjects);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
Loading…
Reference in New Issue
Block a user