Beispiel #1
0
        void RefreshAttributeField(BindableElement fieldElement)
        {
            var styleRow  = fieldElement.GetProperty(BuilderConstants.InspectorLinkedStyleRowVEPropertyName) as VisualElement;
            var attribute = fieldElement.GetProperty(BuilderConstants.InspectorLinkedAttributeDescriptionVEPropertyName) as UxmlAttributeDescription;

            var veType         = currentVisualElement.GetType();
            var csPropertyName = GetRemapAttributeNameToCSProperty(attribute.name);
            var fieldInfo      = veType.GetProperty(csPropertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase);

            object veValueAbstract = null;

            if (fieldInfo == null)
            {
                veValueAbstract = GetCustomValueAbstract(attribute.name);
            }
            else
            {
                veValueAbstract = fieldInfo.GetValue(currentVisualElement, null);
            }

            if (veValueAbstract == null)
            {
                if (currentVisualElement is EnumField defaultEnumField &&
                    attribute.name == "value")
                {
                    if (defaultEnumField.type == null)
                    {
                        fieldElement.SetEnabled(false);
                    }
                    else
                    {
                        ((EnumField)fieldElement).PopulateDataFromType(defaultEnumField.type);
                        fieldElement.SetEnabled(true);
                    }
                }

                return;
            }

            var attributeType = attribute.GetType();
            var vea           = currentVisualElement.GetVisualElementAsset();

            if (attribute is UxmlStringAttributeDescription &&
                attribute.name == "value" &&
                currentVisualElement is EnumField enumField &&
                fieldElement is EnumField inputEnumField)
            {
                var hasValue = enumField.value != null;
                if (hasValue)
                {
                    inputEnumField.Init(enumField.value, enumField.includeObsoleteValues);
                }
                else
                {
                    inputEnumField.SetValueWithoutNotify(null);
                }
                inputEnumField.SetEnabled(hasValue);
            }