mirror of
https://github.com/ppy/osu.git
synced 2025-01-16 18:32:59 +08:00
Simplify bindable flow in KeyBindingRow
This commit is contained in:
parent
30d7768971
commit
ef114f2407
@ -11,7 +11,6 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Effects;
|
using osu.Framework.Graphics.Effects;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Framework.Graphics.UserInterface;
|
|
||||||
using osu.Framework.Input.Bindings;
|
using osu.Framework.Input.Bindings;
|
||||||
using osu.Framework.Input.Events;
|
using osu.Framework.Input.Events;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
@ -24,7 +23,7 @@ using osuTK.Input;
|
|||||||
|
|
||||||
namespace osu.Game.Overlays.KeyBinding
|
namespace osu.Game.Overlays.KeyBinding
|
||||||
{
|
{
|
||||||
public class KeyBindingRow : Container, IFilterable, IHasCurrentValue<bool>
|
public class KeyBindingRow : Container, IFilterable
|
||||||
{
|
{
|
||||||
private readonly object action;
|
private readonly object action;
|
||||||
private readonly IEnumerable<Framework.Input.Bindings.KeyBinding> bindings;
|
private readonly IEnumerable<Framework.Input.Bindings.KeyBinding> bindings;
|
||||||
@ -53,17 +52,11 @@ namespace osu.Game.Overlays.KeyBinding
|
|||||||
private FillFlowContainer cancelAndClearButtons;
|
private FillFlowContainer cancelAndClearButtons;
|
||||||
private FillFlowContainer<KeyButton> buttons;
|
private FillFlowContainer<KeyButton> buttons;
|
||||||
|
|
||||||
private readonly BindableWithCurrent<bool> isKeysDefaultValue = new BindableWithCurrent<bool>
|
public Bindable<bool> IsDefault { get; } = new BindableBool(true)
|
||||||
{
|
{
|
||||||
Default = true
|
Default = true
|
||||||
};
|
};
|
||||||
|
|
||||||
public Bindable<bool> Current
|
|
||||||
{
|
|
||||||
get => isKeysDefaultValue.Current;
|
|
||||||
set => isKeysDefaultValue.Current = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<string> FilterTerms => bindings.Select(b => b.KeyCombination.ReadableString()).Prepend(text.Text.ToString());
|
public IEnumerable<string> FilterTerms => bindings.Select(b => b.KeyCombination.ReadableString()).Prepend(text.Text.ToString());
|
||||||
|
|
||||||
public KeyBindingRow(object action, IEnumerable<Framework.Input.Bindings.KeyBinding> bindings)
|
public KeyBindingRow(object action, IEnumerable<Framework.Input.Bindings.KeyBinding> bindings)
|
||||||
@ -83,15 +76,7 @@ namespace osu.Game.Overlays.KeyBinding
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours)
|
||||||
{
|
{
|
||||||
isKeysDefaultValue.Value = bindings.Select(b => b.KeyCombination).SequenceEqual(Defaults);
|
updateIsDefaultValue();
|
||||||
isKeysDefaultValue.BindValueChanged(resetButtons =>
|
|
||||||
{
|
|
||||||
if (resetButtons.NewValue && !bindings.Select(b => b.KeyCombination).SequenceEqual(Defaults))
|
|
||||||
{
|
|
||||||
RestoreDefaults();
|
|
||||||
finalise();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
EdgeEffect = new EdgeEffectParameters
|
EdgeEffect = new EdgeEffectParameters
|
||||||
{
|
{
|
||||||
@ -140,6 +125,24 @@ namespace osu.Game.Overlays.KeyBinding
|
|||||||
buttons.Add(new KeyButton(b));
|
buttons.Add(new KeyButton(b));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void LoadComplete()
|
||||||
|
{
|
||||||
|
base.LoadComplete();
|
||||||
|
|
||||||
|
IsDefault.BindValueChanged(resetButtons =>
|
||||||
|
{
|
||||||
|
if (resetButtons.NewValue && !computeIsDefaultValue())
|
||||||
|
{
|
||||||
|
RestoreDefaults();
|
||||||
|
finalise();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateIsDefaultValue() => IsDefault.Value = computeIsDefaultValue();
|
||||||
|
|
||||||
|
private bool computeIsDefaultValue() => bindings.Select(b => b.KeyCombination).SequenceEqual(Defaults);
|
||||||
|
|
||||||
public void RestoreDefaults()
|
public void RestoreDefaults()
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@ -151,7 +154,7 @@ namespace osu.Game.Overlays.KeyBinding
|
|||||||
store.Update(button.KeyBinding);
|
store.Update(button.KeyBinding);
|
||||||
}
|
}
|
||||||
|
|
||||||
isKeysDefaultValue.Value = true;
|
updateIsDefaultValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool OnHover(HoverEvent e)
|
protected override bool OnHover(HoverEvent e)
|
||||||
@ -311,7 +314,7 @@ namespace osu.Game.Overlays.KeyBinding
|
|||||||
{
|
{
|
||||||
store.Update(bindTarget.KeyBinding);
|
store.Update(bindTarget.KeyBinding);
|
||||||
|
|
||||||
isKeysDefaultValue.Value = buttons.Select(b => b.KeyBinding.KeyCombination).SequenceEqual(Defaults);
|
updateIsDefaultValue();
|
||||||
|
|
||||||
bindTarget.IsBinding = false;
|
bindTarget.IsBinding = false;
|
||||||
Schedule(() =>
|
Schedule(() =>
|
||||||
|
@ -65,7 +65,7 @@ namespace osu.Game.Overlays.KeyBinding
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
restoreDefaultButton.Current = KeyBindingRow.Current;
|
restoreDefaultButton.Current = KeyBindingRow.IsDefault;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user