public override VisualElement CreatePropertyGUI(SerializedProperty property) { var element = this.CreateNextElement(property); var validate = new VisualElement(); validate.AddStyleSheet(Configuration.ElementsPath, Stylesheet); validate.AddToClassList(UssClassName); var validateAttribute = attribute as ValidateAttribute; var message = new MessageBox((MessageBoxType)(int)validateAttribute.Type, validateAttribute.Message); message.AddToClassList(MessageBoxUssClassName); validate.Add(element); validate.Add(message); var method = GetMethod(property, validateAttribute); if (method != null) { var owner = method.IsStatic ? null : property.GetOwner <object>(); var change = ChangeTriggerControl.Create(property, () => Update(message, method, owner)); Update(message, method, owner); element.Add(change); } return(validate); }
protected override void ExecuteDefaultActionAtTarget(EventBase evt) { base.ExecuteDefaultActionAtTarget(evt); if (this.TryGetPropertyBindEvent(evt, out var property)) { if (property.isArray) { var sizeBinding = new ChangeTriggerControl <int>(null, (oldSize, size) => Control.Refresh()); sizeBinding.Watch(property.FindPropertyRelative("Array.size")); Add(sizeBinding); } else { Debug.LogErrorFormat(_invalidBindingError, bindingPath, property.propertyPath, property.propertyType); } } }
public override VisualElement CreatePropertyGUI(SerializedProperty property) { var element = this.CreateNextElement(property); if (property.propertyType == SerializedPropertyType.String || property.propertyType == SerializedPropertyType.ObjectReference) { var required = new VisualElement(); required.AddStyleSheet(Configuration.ElementsPath, Stylesheet); required.AddToClassList(UssClassName); var requiredAttribute = attribute as RequiredAttribute; var message = new MessageBox((MessageBoxType)(int)requiredAttribute.Type, requiredAttribute.Message); message.AddToClassList(MessageBoxUssClassName); required.Add(element); required.Add(message); if (property.propertyType == SerializedPropertyType.String) { var change = new ChangeTriggerControl <string>(property, (previous, current) => UpdateString(message, current)); UpdateString(message, property.stringValue); element.Add(change); } else if (property.propertyType == SerializedPropertyType.ObjectReference) { var change = new ChangeTriggerControl <Object>(property, (previous, current) => UpdateObject(message, current)); UpdateObject(message, property.objectReferenceValue); element.Add(change); } return(required); } else { Debug.LogWarningFormat(_invalidTypeWarning, property.propertyPath); return(element); } }