using FlaxEditor.CustomEditors.Elements;
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 panelElement = layout.CustomContainer();
var panel = panelElement.ContainerControl as Panel;
var button = panelElement.Button("Listen", "Press to listen for input events");
_button = button.Button;
_button.Width = FlaxEngine.GUI.Style.Current.FontMedium.MeasureText("Listening...").X + 8;
_button.Height = ComboBox.DefaultHeight;
_button.Clicked += OnButtonClicked;
ResetButton();
panel.Height = ComboBox.DefaultHeight;
base.Initialize(panelElement);
if (panelElement.Children.Find(x => x is EnumElement) is EnumElement comboBoxElement)
{
var comboBox = comboBoxElement.ComboBox;
comboBox.AnchorPreset = AnchorPresets.StretchAll;
comboBox.Offsets = new Margin(0, _button.Width + 2, 0, 0);
comboBox.LocalX += _button.Width + 2;
}
}
///
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();
}
}
}