using FlaxEditor.GUI; using FlaxEngine; using FlaxEngine.GUI; namespace FlaxEditor.CustomEditors.Editors { /// /// Base class for custom button editors. /// See , and . /// public class BindableButtonEditor : EnumEditor { private bool _isListeningForInput; private Button _button; /// /// Where or not we are currently listening for any input. /// protected bool IsListeningForInput { get => _isListeningForInput; set { _isListeningForInput = value; if (_isListeningForInput) SetupButton(); else ResetButton(); } } /// /// The window this editor is attached to. /// Useful to hook into for key pressed, mouse buttons etc. /// protected Window Window { get; private set; } /// public override void Initialize(LayoutElementsContainer layout) { Window = layout.Control.RootWindow.Window; var panel = layout.CustomContainer(); panel.CustomControl.SlotsHorizontally = 2; panel.CustomControl.SlotsVertically = 1; var button = panel.Button("Listen", "Press to listen for input events"); _button = button.Button; _button.Clicked += OnButtonClicked; ResetButton(); var padding = panel.CustomControl.SlotPadding; panel.CustomControl.Height = ComboBox.DefaultHeight + padding.Height; base.Initialize(panel); } /// protected override void Deinitialize() { _button.Clicked -= OnButtonClicked; base.Deinitialize(); } private void ResetButton() { _button.Text = "Listen"; _button.BorderThickness = 1; var style = FlaxEngine.GUI.Style.Current; _button.BorderColor = style.BorderNormal; _button.BorderColorHighlighted = style.BorderHighlighted; _button.BorderColorSelected = style.BorderSelected; } private void SetupButton() { _button.Text = "Listening..."; _button.BorderThickness = 2; var color = FlaxEngine.GUI.Style.Current.ProgressNormal; _button.BorderColor = color; _button.BorderColorHighlighted = color; _button.BorderColorSelected = color; } private void OnButtonClicked() { _isListeningForInput = !_isListeningForInput; if (_isListeningForInput) SetupButton(); else ResetButton(); } } }