Ejemplo n.º 1
0
        /// <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);
            }
        }