/// <summary> /// Raises the GUI event. /// </summary> /// <param name="position">Position.</param> /// <param name="property">Property.</param> /// <param name="label">Label.</param> public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { // initialize the status getter method string key = property.propertyPath; if (!m_PopupData.ContainsKey(key)) { m_PopupData[key] = new PopupData(); } PopupData popupData = m_PopupData[key]; if (!string.IsNullOrEmpty(this.Attribute.StatusGetter)) { popupData.GetStatusCallback = StatusPropertyDrawer.GetStatusCallback(property, this.Attribute.StatusGetter); } Rect iconPosition = new Rect(); ValidationStatus status = ValidationStatus.None; string statusTooltip = null; if (popupData.GetStatusCallback != null || !string.IsNullOrEmpty(this.Attribute.StatusGetter)) { FieldInfo field; object provider = property.GetProvider(out field); if (popupData.GetStatusCallback != null) { status = popupData.GetStatusCallback(provider, property.GetValue(), out statusTooltip); } else { status = ValidationStatus.Warning; statusTooltip = string.Format( "{0} {1}.{2} not found.", typeof(StatusPropertyAttribute.GetStatusCallback), provider.GetType(), this.Attribute.StatusGetter ); } if (status != ValidationStatus.None) { position.width -= EditorGUIUtility.singleLineHeight; iconPosition = position; iconPosition.x += iconPosition.width; iconPosition.width = EditorGUIUtility.singleLineHeight; } } DisplayPopup(position, property, label); if (status != ValidationStatus.None) { EditorGUIX.DisplayValidationStatusIcon(iconPosition, status, statusTooltip); } }