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