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