Example #1
0
        ///<summary>An IList editor (List<T> and Arrays)</summary>
        public static IList ListEditor(GUIContent content, IList list, Type listType, InspectedFieldInfo info)
        {
            var optionsAtt = info.attributes?.FirstOrDefault(x => x is ListInspectorOptionAttribute) as ListInspectorOptionAttribute;

            var argType = listType.GetEnumerableElementType();

            if (argType == null)
            {
                return(list);
            }

            if (object.Equals(list, null))
            {
                GUILayout.Label("Null List");
                return(list);
            }

            if (optionsAtt == null || optionsAtt.showFoldout)
            {
                if (!CachedFoldout(listType, content))
                {
                    return(list);
                }
            }
            else
            {
                GUILayout.Label(content.text);
            }

            GUILayout.BeginVertical();
            EditorGUI.indentLevel++;

            var options = new ReorderableListOptions();

            options.allowAdd           = optionsAtt == null || optionsAtt.allowAdd;
            options.allowRemove        = optionsAtt == null || optionsAtt.allowRemove;
            options.unityObjectContext = info.unityObjectContext;
            list = EditorUtils.ReorderableList(list, options, (i, r) =>
            {
                list[i] = ReflectedFieldInspector("Element " + i, list[i], argType, info);
            });

            EditorGUI.indentLevel--;
            Separator();
            GUILayout.EndVertical();
            return(list);
        }
        ///An IList editor (List<T> and Arrays)
        public static IList ListEditor(GUIContent content, IList list, Type listType, InspectedFieldInfo info)
        {
            var argType = listType.GetEnumerableElementType();

            if (argType == null)
            {
                return(list);
            }

            if (object.Equals(list, null))
            {
                GUILayout.Label("Null List");
                return(list);
            }

            if (!CachedFoldout(listType, content))
            {
                return(list);
            }

            GUILayout.BeginVertical();
            EditorGUI.indentLevel++;

            var options = new ReorderableListOptions();

            options.allowAdd           = true;
            options.allowRemove        = true;
            options.unityObjectContext = info.unityObjectContext;
            list = EditorUtils.ReorderableList(list, options, (i, r) =>
            {
                list[i] = ReflectedFieldInspector("Element " + i, list[i], argType, info);
            });

            EditorGUI.indentLevel--;
            Separator();
            GUILayout.EndVertical();
            return(list);
        }
        public static IList ListEditor(GUIContent content, IList list, Type listType, object contextInstance)
        {
            var argType = listType.GetEnumerableElementType();

            if (argType == null)
            {
                return(list);
            }

            //register foldout
            if (!registeredEditorFoldouts.ContainsKey(list))
            {
                registeredEditorFoldouts[list] = false;
            }

            GUILayout.BeginVertical();

            var foldout = registeredEditorFoldouts[list];

            foldout = EditorGUILayout.Foldout(foldout, content);
            registeredEditorFoldouts[list] = foldout;

            if (!foldout)
            {
                GUILayout.EndVertical();
                return(list);
            }

            if (list.Equals(null))
            {
                GUILayout.Label("Null List");
                GUILayout.EndVertical();
                return(list);
            }

            if (GUILayout.Button("Add Element"))
            {
                if (listType.IsArray)
                {
                    list = ResizeArray((Array)list, list.Count + 1);
                    registeredEditorFoldouts[list] = true;
                }
                else
                {
                    var o = argType.IsValueType? Activator.CreateInstance(argType) : null;
                    list.Add(o);
                }
            }

            EditorGUI.indentLevel++;

            EditorUtils.ReorderableList(list, (i, r) =>
            {
                GUILayout.BeginHorizontal();
                list[i] = GenericField("Element " + i, list[i], argType, null);
                if (GUILayout.Button("X", GUILayout.Width(18)))
                {
                    if (listType.IsArray)
                    {
                        list = ResizeArray((Array)list, list.Count - 1);
                        registeredEditorFoldouts[list] = true;
                    }
                    else
                    {
                        list.RemoveAt(i);
                    }
                }
                GUILayout.EndHorizontal();
            });

            EditorGUI.indentLevel--;
            Separator();

            GUILayout.EndVertical();
            return(list);
        }