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);
        }
Beispiel #2
0
        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);
            }
        }