using BansheeEngine;
namespace BansheeEditor
{
///
/// Displays GUI for a serializable property containing a floating point value.
///
public class InspectableFloat : InspectableField
{
private GUIFloatField guiFloatField;
private InspectableState state;
///
/// Creates a new inspectable float GUI for the specified property.
///
/// Name of the property, or some other value to set as the title.
/// Determines how deep within the inspector nesting hierarchy is this field. Some fields may
/// contain other fields, in which case you should increase this value by one.
/// Parent layout that all the field elements will be added to.
/// Serializable property referencing the array whose contents to display.
public InspectableFloat(string title, int depth, InspectableFieldLayout layout, SerializableProperty property)
: base(title, SerializableProperty.FieldType.Float, depth, layout, property)
{
}
///
protected internal override void Initialize(int layoutIndex)
{
if (property != null)
{
guiFloatField = new GUIFloatField(new GUIContent(title));
guiFloatField.OnChanged += OnFieldValueChanged;
guiFloatField.OnConfirmed += OnFieldValueConfirm;
guiFloatField.OnFocusLost += OnFieldValueConfirm;
layout.AddElement(layoutIndex, guiFloatField);
}
}
///
public override InspectableState Refresh(int layoutIndex)
{
if (guiFloatField != null && !guiFloatField.HasInputFocus)
guiFloatField.Value = property.GetValue();
InspectableState oldState = state;
if (state.HasFlag(InspectableState.Modified))
state = InspectableState.NotModified;
return oldState;
}
///
/// Triggered when the user inputs a new floating point value.
///
/// New value of the float field.
private void OnFieldValueChanged(float newValue)
{
property.SetValue(newValue);
state |= InspectableState.ModifyInProgress;
}
///
/// Triggered when the user confirms input in the float field.
///
private void OnFieldValueConfirm()
{
if (state.HasFlag(InspectableState.ModifyInProgress))
state |= InspectableState.Modified;
}
}
}