using BansheeEngine;
namespace BansheeEditor
{
///
/// Displays GUI for a serializable property containing a color. Color is displayed as a GUI color field that allows
/// the user to manipulate the color using a color picker.
///
public class InspectableColor : InspectableField
{
private Color propertyValue;
private GUIColorField guiField;
///
/// Creates a new inspectable color 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 InspectableColor(string title, int depth, InspectableFieldLayout layout, SerializableProperty property)
: base(title, depth, layout, property)
{
}
///
protected internal override void BuildGUI(int layoutIndex)
{
if (property.Type == SerializableProperty.FieldType.Color)
{
guiField = new GUIColorField(new GUIContent(title));
guiField.OnChanged += OnFieldValueChanged;
layout.AddElement(layoutIndex, guiField);
}
}
///
public override bool IsModified()
{
Color newPropertyValue = property.GetValue();
if (propertyValue != newPropertyValue)
return true;
return base.IsModified();
}
///
protected internal override void Update(int layoutIndex)
{
// TODO - Skip update if it currently has input focus so user can modify the value in peace
propertyValue = property.GetValue();
if (guiField != null)
guiField.Value = propertyValue;
}
///
/// Triggered when the user selects a new color.
///
/// New value of the color field.
private void OnFieldValueChanged(Color newValue)
{
property.SetValue(newValue);
}
}
}