Files
FlaxEngine/Source/Editor/CustomEditors/Editors/Int2Editor.cs
2021-01-02 14:28:49 +01:00

88 lines
2.6 KiB
C#

// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
using System.Linq;
using FlaxEditor.CustomEditors.Elements;
using FlaxEngine;
using FlaxEngine.GUI;
namespace FlaxEditor.CustomEditors.Editors
{
/// <summary>
/// Default implementation of the inspector used to edit Int2 value type properties.
/// </summary>
[CustomEditor(typeof(Int2)), DefaultEditor]
public class Int2Editor : CustomEditor
{
/// <summary>
/// The X component editor.
/// </summary>
protected IntegerValueElement XElement;
/// <summary>
/// The Y component editor.
/// </summary>
protected IntegerValueElement YElement;
/// <inheritdoc />
public override DisplayStyle Style => DisplayStyle.Inline;
/// <inheritdoc />
public override void Initialize(LayoutElementsContainer layout)
{
var grid = layout.CustomContainer<UniformGridPanel>();
var gridControl = grid.CustomControl;
gridControl.ClipChildren = false;
gridControl.Height = TextBox.DefaultHeight;
gridControl.SlotsHorizontally = 2;
gridControl.SlotsVertically = 1;
LimitAttribute limit = null;
var attributes = Values.GetAttributes();
if (attributes != null)
{
limit = (LimitAttribute)attributes.FirstOrDefault(x => x is LimitAttribute);
}
XElement = grid.IntegerValue();
XElement.SetLimits(limit);
XElement.IntValue.ValueChanged += OnValueChanged;
XElement.IntValue.SlidingEnd += ClearToken;
YElement = grid.IntegerValue();
YElement.SetLimits(limit);
YElement.IntValue.ValueChanged += OnValueChanged;
YElement.IntValue.SlidingEnd += ClearToken;
}
private void OnValueChanged()
{
if (IsSetBlocked)
return;
var isSliding = XElement.IsSliding || YElement.IsSliding;
var token = isSliding ? this : null;
var value = new Int2(
XElement.IntValue.Value,
YElement.IntValue.Value);
SetValue(value, token);
}
/// <inheritdoc />
public override void Refresh()
{
base.Refresh();
if (HasDifferentValues)
{
// TODO: support different values for ValueBox<T>
}
else
{
var value = (Int2)Values[0];
XElement.IntValue.Value = value.X;
YElement.IntValue.Value = value.Y;
}
}
}
}