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; } } }