コード例 #1
0
            /// <inheritdoc/>
            protected internal override void CloneElement(int index)
            {
                SerializableArray array = property.GetArray();

                int   size     = array.GetLength() + 1;
                Array newArray = property.CreateArrayInstance(new int[] { size });

                object clonedEntry = null;

                for (int i = 0; i < array.GetLength(); i++)
                {
                    object value = array.GetProperty(i).GetValue <object>();

                    newArray.SetValue(value, i);

                    if (i == index)
                    {
                        clonedEntry = SerializableUtility.Clone(array.GetProperty(i).GetValue <object>());
                    }
                }

                newArray.SetValue(clonedEntry, size - 1);

                property.SetValue(newArray);
                this.array  = newArray;
                numElements = newArray.Length;
            }
コード例 #2
0
        /// <summary>
        /// Registers a set of rows for all entries of the provided array.
        /// </summary>
        /// <param name="parent">Parent foldout row to which to append the new elements.</param>
        /// <param name="serializableArray">Array whose fields to display.</param>
        private void AddArrayRows(Element parent, SerializableArray serializableArray)
        {
            List <Element> elements = new List <Element>();

            int length = serializableArray.GetLength();

            for (int i = 0; i < length; i++)
            {
                string name         = "[" + i + "]";
                string propertyPath = parent.path + name;

                Element element;
                if (AddPropertyRow(parent, name, propertyPath, serializableArray.GetProperty(i), out element))
                {
                    elements.Add(element);
                }
            }

            parent.children = elements.ToArray();
        }
コード例 #3
0
            /// <inheritdoc/>
            protected internal override object GetValue(int seqIndex)
            {
                SerializableArray serzArray = property.GetArray();

                // Create a property wrapper for native arrays so we get notified when the array values change
                if (style.StyleFlags.HasFlag(InspectableFieldStyleFlags.NativeWrapper))
                {
                    SerializableProperty.Getter getter = () =>
                    {
                        Array array = property.GetValue <Array>();

                        if (array != null)
                        {
                            return(array.GetValue(seqIndex));
                        }
                        else
                        {
                            return(null);
                        }
                    };

                    SerializableProperty.Setter setter = (object value) =>
                    {
                        Array array = property.GetValue <Array>();

                        if (array != null)
                        {
                            array.SetValue(value, seqIndex);
                            property.SetValue(array);
                        }
                    };

                    return(new SerializableProperty(serzArray.ElementPropertyType, serzArray.ElementType, getter, setter));
                }
                else
                {
                    return(serzArray.GetProperty(seqIndex));
                }
            }
コード例 #4
0
            /// <inheritdoc/>
            protected internal override object GetValue(int seqIndex)
            {
                SerializableArray array = property.GetArray();

                return(array.GetProperty(seqIndex));
            }