Ejemplo n.º 1
0
        private T DoField <T>(ref Rect position, ref Rect rect, Type type, T value)
        {
            if (value == null)
            {
                value = Misc.Default <T>(type);
            }

            if (LokiEditor.IsSupportedEditorGUIObjectField(type))
            {
                return(LokiEditor.EditorGUIObjectField <T>(rect, type, value));
            }

            DebugUtility.LogWarningTrace(LoggerTags.Engine, "Type is not supported: " + type);
            return(value);
        }
Ejemplo n.º 2
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            CheckInitialize(property, label);

            position.height = 17f;

            var foldoutRect = position;

            foldoutRect.width -= 2 * kButtonWidth;
            EditorGUI.BeginChangeCheck();
            mFoldout = EditorGUI.Foldout(foldoutRect, mFoldout, label, true);
            if (EditorGUI.EndChangeCheck())
            {
                EditorPrefs.SetBool(label.text, mFoldout);
            }

            var buttonRect = position;

            buttonRect.x     = position.width - kButtonWidth + position.x;
            buttonRect.width = kButtonWidth + 2;

            if (GUI.Button(buttonRect, new GUIContent("+", "Add item"), EditorStyles.miniButton))
            {
                if (AddNewItem(mAutoIncreaseEnum))
                {
                    mFoldout = true;
                }
            }

            buttonRect.x -= kButtonWidth;

            if (GUI.Button(buttonRect, new GUIContent("X", "Clear dictionary"), EditorStyles.miniButtonRight))
            {
                ClearDictionary();
            }

            //var toggleRect = buttonRect;
            //toggleRect.x -= kToggleWidth;
            //toggleRect.width = kToggleWidth;
            //mAutoIncreaseEnum = GUI.Toggle(toggleRect, mAutoIncreaseEnum, "Auto");

            Rect dictCountRect = buttonRect;

            dictCountRect.width = kButtonWidth;
            dictCountRect.x     = buttonRect.xMax + 2 - kButtonWidth * 2 - kLabelWidth;

            EditorGUI.LabelField(dictCountRect, mDictionary.Count.ToString());

            if (!mFoldout)
            {
                return;
            }

            Rect lineRect = position;

            lineRect.height = 1;

            foreach (var item in mDictionary)
            {
                var key   = item.Key;
                var value = item.Value;

                lineRect.y = position.y;
                LokiEditor.DrawLine(lineRect);

                position.y += 17f;

                foldoutRect       = position;
                foldoutRect.width = kButtonWidth;
                foldoutRect.x    += kButtonWidth;

                var keyRect = position;
                keyRect.width /= 2;
                keyRect.width -= 4;
                keyRect.x     += kButtonWidth * 2;

                EditorGUI.BeginChangeCheck();
                bool isTKFoldout = IsTKFoldout(key);
                isTKFoldout = EditorGUI.Foldout(foldoutRect, isTKFoldout, "", true);
                if (EditorGUI.EndChangeCheck())
                {
                    SetTKFoldout(key, isTKFoldout);
                }

                EditorGUI.BeginChangeCheck();
                var newKey = DoField(ref position, ref keyRect, typeof(TK), key);
                if (EditorGUI.EndChangeCheck())
                {
                    if (!mDictionary.ContainsKey(newKey))
                    {
                        mDictionary.Remove(key);
                        mDictionary.Add(newKey, value);
                    }
                    break;
                }

                var valueRect = position;
                valueRect.x     = position.width / 2 + 15;
                valueRect.width = keyRect.width - kButtonWidth;

                var removeRect = valueRect;
                removeRect.x     = valueRect.xMax + 2 - kButtonWidth;
                removeRect.width = kButtonWidth;
                if (GUI.Button(removeRect, new GUIContent("x", "Remove item"), EditorStyles.miniButtonRight))
                {
                    RemoveItem(key);
                    break;
                }
                EditorGUI.BeginChangeCheck();

                if (typeof(System.Collections.IList).IsAssignableFrom(typeof(TV)))
                {
                    value = DoListField(ref position, ref valueRect, typeof(TV), key, value);
                }
                else
                {
                    value = DoField(ref position, ref valueRect, typeof(TV), value);
                }

                if (EditorGUI.EndChangeCheck())
                {
                    mDictionary[key] = value;
                    break;
                }

                lineRect.y = position.y;
                LokiEditor.DrawLine(lineRect);
            }
        }