예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }