//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// namespace bs.Editor { /** @addtogroup Inspector * @{ */ /// /// Displays GUI for a serializable property containing a reference. /// [CustomInspector(typeof(Texture))] public class InspectableTexture : InspectableField { private GUITextureField guiField; private InspectableState state; /// /// Creates a new inspectable texture reference GUI for the specified property. /// /// Context shared by all inspectable fields created by the same parent. /// Name of the property, or some other value to set as the title. /// Full path to this property (includes name of this property and all parent properties). /// 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 field whose contents to display. public InspectableTexture(InspectableContext context, string title, string path, int depth, InspectableFieldLayout layout, SerializableProperty property, InspectableFieldStyleInfo style) : base(context, title, path, property.Type, depth, layout, property) { } /// protected internal override void Initialize(int layoutIndex) { guiField = new GUITextureField(GUITextureFieldType.Texture, new GUIContent(title)); guiField.OnChanged += OnFieldValueChanged; layout.AddElement(layoutIndex, guiField); } /// public override InspectableState Refresh(int layoutIndex) { if (guiField != null) { if (property.Type == SerializableProperty.FieldType.Resource) guiField.Texture = property.GetValue(); else guiField.TextureRef = property.GetValue>(); } InspectableState oldState = state; if (state.HasFlag(InspectableState.Modified)) state = InspectableState.NotModified; return oldState; } /// /// Triggered when the user drops a new resource onto the field, or clears the current value. /// /// New resource to reference. private void OnFieldValueChanged(RRefBase newValue) { StartUndo(); if (property.Type == SerializableProperty.FieldType.Resource) property.SetValue(newValue.GenericValue); else property.SetValue(newValue); state = InspectableState.Modified; EndUndo(); } } /** @} */ }