///<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); }