Files
FlaxEngine/Source/Editor/CustomEditors/Elements/SliderElement.cs
2023-01-10 15:29:37 +01:00

90 lines
2.5 KiB
C#

// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
using System.Linq;
using System.Reflection;
using FlaxEditor.GUI.Input;
using FlaxEngine;
using FlaxEngine.GUI;
namespace FlaxEditor.CustomEditors.Elements
{
/// <summary>
/// The slider element.
/// </summary>
/// <seealso cref="FlaxEditor.CustomEditors.LayoutElement" />
public class SliderElement : LayoutElement, IFloatValueEditor, IIntegerValueEditor
{
/// <summary>
/// The slider control.
/// </summary>
public readonly SliderControl Slider;
/// <summary>
/// Initializes a new instance of the <see cref="SliderElement"/> class.
/// </summary>
public SliderElement()
{
Slider = new SliderControl(0);
}
/// <summary>
/// Sets the editor limits from member <see cref="RangeAttribute"/>.
/// </summary>
/// <param name="member">The member.</param>
public void SetLimits(MemberInfo member)
{
// Try get limit attribute for value min/max range setting and slider speed
if (member != null)
{
var attributes = member.GetCustomAttributes(true);
var limit = attributes.FirstOrDefault(x => x is RangeAttribute);
if (limit != null)
{
Slider.SetLimits((RangeAttribute)limit);
}
}
}
/// <summary>
/// Sets the editor limits from member <see cref="RangeAttribute"/>.
/// </summary>
/// <param name="limit">The limit.</param>
public void SetLimits(RangeAttribute limit)
{
if (limit != null)
{
Slider.SetLimits(limit);
}
}
/// <inheritdoc />
public override Control Control => Slider;
/// <inheritdoc />
public float Value
{
get => Slider.Value;
set => Slider.Value = value;
}
/// <inheritdoc />
int IIntegerValueEditor.Value
{
get => (int)Slider.Value;
set => Slider.Value = value;
}
/// <inheritdoc cref="IFloatValueEditor.IsSliding" />
public bool IsSliding => Slider.IsSliding;
/// <inheritdoc />
public void SetLimits(LimitAttribute limit)
{
if (limit != null)
{
Slider.SetLimits(limit);
}
}
}
}