using Robust.Client.AutoGenerated; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; using Robust.Shared.Input; namespace Content.Client.Instruments.UI; [GenerateTypedNameReferences] public sealed partial class MinVolumeControl : BoxContainer { /// /// Raised when the user changes the min volume for MIDI input. /// public event Action? MinVolumeChanged; public int MinVolume { get => (int)Math.Ceiling(MidiMinVolumeSlider.Value); set { MidiMinVolumeSlider.Value = value; UpdateLabel(); } } public MinVolumeControl() { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); MidiMinVolumeSlider.OnValueChanged += OnMidiMinVolumeSliderValueChanged; MidiMinVolumeSlider.OnKeyBindUp += OnMidiMinVolumeSliderKeyUp; MidiMinVolumeSlider.Value = 0; } private void OnMidiMinVolumeSliderValueChanged(Robust.Client.UserInterface.Controls.Range _) { UpdateLabel(); // Do not update while still grabbed. if (MidiMinVolumeSlider.Grabbed) return; MinVolumeChanged?.Invoke(MinVolume); } private void OnMidiMinVolumeSliderKeyUp(GUIBoundKeyEventArgs args) { if (args.Function != EngineKeyFunctions.UIClick) return; UpdateLabel(); MinVolumeChanged?.Invoke(MinVolume); } private void UpdateLabel() { MidiMinVolumeValueLabel.Text = ((int)Math.Ceiling(MidiMinVolumeSlider.Value)).ToString(); } }