コード例 #1
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            ToggleData fieldToDraw,
            string labelName,
            out VisualElement propertyToggle,
            int indentLevel = 0)
        {
            var row = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            // Create and assign toggle as out variable here so that callers can also do additional work with enabling/disabling if needed
            propertyToggle = new Toggle();
            row.Add((Toggle)propertyToggle, (toggle) =>
            {
                toggle.value = fieldToDraw.isOn;
            });

            if (valueChangedCallback != null)
            {
                var toggle = (Toggle)propertyToggle;
                toggle.OnToggleChanged(evt => valueChangedCallback(new ToggleData(evt.newValue)));
            }

            row.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(row);
        }
コード例 #2
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Gradient fieldToDraw,
            string labelName,
            out VisualElement propertyGradientField,
            int indentLevel = 0)
        {
            var objectField = new GradientField {
                value = fieldToDraw
            };

            if (valueChangedCallback != null)
            {
                objectField.RegisterValueChangedCallback(evt => { valueChangedCallback((Gradient)evt.newValue); });
            }

            propertyGradientField = objectField;

            // Any core widgets used by the inspector over and over should come from some kind of factory
            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyGradientField);
            defaultRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(defaultRow);
        }
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            int fieldToDraw,
            string labelName,
            out VisualElement propertyFloatField,
            int indentLevel = 0)
        {
            var integerField = new IntegerField {
                value = fieldToDraw
            };

            if (valueChangedCallback != null)
            {
                integerField.RegisterValueChangedCallback(evt => { valueChangedCallback(evt.newValue); });
            }

            propertyFloatField = integerField;

            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyFloatField);

            defaultRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(defaultRow);
        }
コード例 #4
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            string fieldToDraw,
            string labelName,
            out VisualElement propertyTextField,
            int indentLevel = 0)
        {
            var propertyRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            propertyTextField = new TextField(512, false, false, ' ')
            {
                isDelayed = true
            };
            propertyRow.Add((TextField)propertyTextField,
                            textField =>
            {
                textField.value = fieldToDraw;
            });

            if (valueChangedCallback != null)
            {
                var textField = (TextField)propertyTextField;
                textField.RegisterValueChangedCallback(evt => valueChangedCallback(evt.newValue));
            }

            propertyRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(propertyRow);
        }
コード例 #5
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Matrix4x4 fieldToDraw,
            string labelName,
            out VisualElement propertyMatrixField,
            int indentLevel = 0)
        {
            var propertySheet = new PropertySheet();

            switch (dimension)
            {
            case MatrixDimensions.Two:
                HandleMatrix2Property(valueChangedCallback, propertySheet, fieldToDraw, labelName);
                break;

            case MatrixDimensions.Three:
                HandleMatrix3Property(valueChangedCallback, propertySheet, fieldToDraw, labelName);
                break;

            case MatrixDimensions.Four:
                HandleMatrix4Property(valueChangedCallback, propertySheet, fieldToDraw, labelName);
                break;
            }

            propertyMatrixField = propertySheet;
            return(propertyMatrixField);
        }
コード例 #6
0
 public void RemovePropertyChangedHandler <TValue>(string valueName, ValueChangedCallback <TValue> callback)
 {
     if (subscribers.TryGetValue(valueName, out var list))
     {
         list.Remove(callback);
     }
     if (list?.Count == 0)
     {
         subscribers.Remove(valueName);
     }
 }
コード例 #7
0
 public void AddPropertyChangedHandler <TValue>(string valueName, ValueChangedCallback <TValue> callback)
 {
     if (!subscribers.TryGetValue(valueName, out var list))
     {
         list = new List <Delegate>();
         subscribers.Add(valueName, list);
     }
     if (list.Contains(callback))
     {
         return;
     }
     list.Add(callback);
 }
コード例 #8
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            IEnumerable <string> fieldToDraw,
            string labelName,
            out VisualElement textArrayField,
            int indentLevel = 0)
        {
            var propertyRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            textArrayField = new PopupField <string>(fieldToDraw.ToList(), 0);
            propertyRow.Add(textArrayField);
            var popupField = (PopupField <string>)textArrayField;

            popupField.RegisterValueChangedCallback(evt =>
            {
                valueChangedCallback(popupField.index);
            });
            propertyRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));

            return(propertyRow);
        }
コード例 #9
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Vector4 fieldToDraw,
            string labelName,
            out VisualElement propertyVec4Field,
            int indentLevel = 0)
        {
            var vector4Field = new Vector4Field {
                value = fieldToDraw
            };

            var inputFields = vector4Field.Query("unity-text-input").ToList();

            foreach (var inputField in inputFields)
            {
                inputField.RegisterCallback <KeyDownEvent>(m_KeyDownCallback);
                inputField.RegisterCallback <FocusOutEvent>(m_FocusOutCallback);
            }

            vector4Field.RegisterValueChangedCallback(evt =>
            {
                // Only true when setting value via FieldMouseDragger
                // Undo recorded once per dragger release
                if (mUndoGroup == -1)
                {
                    preValueChangeCallback?.Invoke();
                }

                valueChangedCallback(evt.newValue);
                postValueChangeCallback?.Invoke();
            });

            propertyVec4Field = vector4Field;

            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyVec4Field);
            defaultRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(defaultRow);
        }
コード例 #10
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Color fieldToDraw,
            string labelName,
            out VisualElement propertyColorField,
            int indentLevel = 0)
        {
            var colorField = new ColorField {
                value = fieldToDraw, showEyeDropper = false, hdr = false
            };

            if (valueChangedCallback != null)
            {
                colorField.RegisterValueChangedCallback(evt => { valueChangedCallback((Color)evt.newValue); });
            }

            propertyColorField = colorField;

            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyColorField);
            return(defaultRow);
        }
コード例 #11
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Enum fieldToDraw,
            string labelName,
            Enum defaultValue,
            out VisualElement propertyVisualElement,
            int indentLevel = 0)
        {
            var row = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            propertyVisualElement = new EnumField(defaultValue);
            row.Add((EnumField)propertyVisualElement, (field) =>
            {
                field.value = fieldToDraw;
            });

            if (valueChangedCallback != null)
            {
                var enumField = (EnumField)propertyVisualElement;
                enumField.RegisterValueChangedCallback(evt => valueChangedCallback(evt.newValue));
            }

            return(row);
        }
コード例 #12
0
        internal VisualElement CreateGUI(
            ValueChangedCallback valueChangedCallback,
            Texture2DArray fieldToDraw,
            string labelName,
            out VisualElement propertyColorField,
            int indentLevel = 0)
        {
            var objectField = new ObjectField {
                value = fieldToDraw, objectType = typeof(Texture2DArray)
            };

            if (valueChangedCallback != null)
            {
                objectField.RegisterValueChangedCallback(evt => { valueChangedCallback((Texture2DArray)evt.newValue); });
            }

            propertyColorField = objectField;

            var defaultRow = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel));

            defaultRow.Add(propertyColorField);
            defaultRow.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow"));
            return(defaultRow);
        }
コード例 #13
0
        public static void Show(ObjectPickerContext context, UnityObjectDescription[] objectDescriptions, WrappedVariable variable, ValueChangedCallback onValueChanged)
        {
            RemoteObjectPickerWindow window = EditorWindow.GetWindow <RemoteObjectPickerWindow>(true);

            window.context            = context;
            window.objectDescriptions = objectDescriptions;
            window.variable           = variable;
            window.onValueChanged     = onValueChanged;
            if (variable != null)
            {
                window.index = objectDescriptions.Select(item => item.Guid).ToList().IndexOf((Guid)variable.Value) + 1;
            }
            window.titleContent = new GUIContent("Select Object");
            window.ShowUtility();
        }
コード例 #14
0
        void HandleMatrix2Property(
            ValueChangedCallback valueChangedCallback,
            PropertySheet propertySheet,
            Matrix4x4 matrix2Property,
            string labelName = "Default")
        {
            var vector2PropertyDrawer = new Vector2PropertyDrawer();

            vector2PropertyDrawer.preValueChangeCallback  = PreValueChangeCallback;
            vector2PropertyDrawer.postValueChangeCallback = PostValueChangeCallback;

            propertySheet.Add(vector2PropertyDrawer.CreateGUI(
                                  newValue =>
            {
                Vector2 row1 = MatrixRowFetchCallback(1);
                valueChangedCallback(new Matrix4x4()
                {
                    m00 = newValue.x,
                    m01 = newValue.y,
                    m02 = 0,
                    m03 = 0,
                    m10 = row1.x,
                    m11 = row1.y,
                    m12 = 0,
                    m13 = 0,
                    m20 = 0,
                    m21 = 0,
                    m22 = 0,
                    m23 = 0,
                    m30 = 0,
                    m31 = 0,
                    m32 = 0,
                    m33 = 0,
                });
            },
                                  matrix2Property.GetRow(0),
                                  labelName,
                                  out var row0Field
                                  ));

            propertySheet.Add(vector2PropertyDrawer.CreateGUI(
                                  newValue =>
            {
                Vector2 row0 = MatrixRowFetchCallback(0);
                valueChangedCallback(new Matrix4x4()
                {
                    m00 = row0.x,
                    m01 = row0.y,
                    m02 = 0,
                    m03 = 0,
                    m10 = newValue.x,
                    m11 = newValue.y,
                    m12 = 0,
                    m13 = 0,
                    m20 = 0,
                    m21 = 0,
                    m22 = 0,
                    m23 = 0,
                    m30 = 0,
                    m31 = 0,
                    m32 = 0,
                    m33 = 0,
                });
            },
                                  matrix2Property.GetRow(1),
                                  "",
                                  out var row1Field
                                  ));
        }