private bool DrawFoldout(Rect position, GUIContent label, IEditorDictionary dict, object defaultKey, object defaultValue) { int fieldToken = fieldInfo.MetadataToken; if (!Foldouts.ContainsKey(fieldToken)) { Foldouts[fieldToken] = false; } float buttonWidth = ButtonDrawers.ButtonSize.x; Rect[] rects = position.SplitRow(position.width - buttonWidth, buttonWidth); bool foldout = EditorGUI.Foldout(rects[0], Foldouts[fieldToken], label); if (ButtonDrawers.Plus(rects[1])) { defaultKey ??= CreateInstance(dict.KeyType); defaultValue ??= CreateInstance(dict.ValueType); dict.AddEntry(defaultKey, defaultValue); } return(Foldouts[fieldToken] = foldout); }
public static bool List <T>(GUIContent label, List <T> list, T defaultValue, bool foldout, Func <T, int, T> guiMethod) { EditorGUILayout.BeginHorizontal(); foldout = EditorGUILayout.Foldout(foldout, label, true); if (foldout && ButtonDrawers.Plus()) { list.Add(defaultValue); } EditorGUILayout.EndHorizontal(); if (!foldout) { return(false); } List(list, guiMethod); return(true); }
public static bool Array <T>(GUIContent label, ref T[] array, T defaultValue, bool foldout, Func <T, int, T> guiMethod) { EditorGUILayout.BeginHorizontal(); foldout = EditorGUILayout.Foldout(foldout, label, true); if (foldout && ButtonDrawers.Plus()) { System.Array.Resize(ref array, array.Length + 1); array[array.GetUpperBound(0)] = defaultValue; } EditorGUILayout.EndHorizontal(); if (!foldout) { return(false); } Array(ref array, guiMethod); return(true); }
public static bool Dictionary <TKey, TValue>(GUIContent label, Dictionary <TKey, TValue> dictionary, TKey defaultKey, TValue defaultValue, bool foldout, Func <TKey, TKey> keyGuiMethod, Func <TKey, TValue, TValue> valueGuiMethod) { EditorGUILayout.BeginHorizontal(); foldout = EditorGUILayout.Foldout(foldout, label, true); if (foldout && ButtonDrawers.Plus() && !dictionary.ContainsKey(defaultKey)) { dictionary.Add(defaultKey, defaultValue); } EditorGUILayout.EndHorizontal(); if (!foldout) { return(false); } Dictionary(dictionary, keyGuiMethod, valueGuiMethod); return(true); }