protected virtual void BeginDrawMember(MightySerializedField serializedField, T attribute, MightyDrawer.PropertyDrawCallback propertyDrawCallback = null, BasePropertyDrawerAttribute drawerAttribute = null) { var property = serializedField.Property; if (!property.IsCollection()) { BeginDraw(serializedField, attribute); propertyDrawCallback?.Invoke(serializedField, property, drawerAttribute); return; } BeginDrawArray(serializedField, attribute); BeginDrawHeader(serializedField, attribute); if (!MightyGUIUtilities.DrawFoldout(property)) { EndDrawHeader(serializedField, attribute); EndDrawArray(serializedField, attribute); return; } EditorGUI.indentLevel++; MightyGUIUtilities.DrawArraySizeField(property); EndDrawHeader(serializedField, attribute); }
public bool BeginFoldout(bool foldout, string label, int indentLevel, bool drawLine, ColorValue lineColor) { var backgroundColor = GUI.backgroundColor; var contentColor = GUI.contentColor; GUI.backgroundColor = foldout ? backgroundColor : MightyColorUtilities.DarkenColor(backgroundColor, .3f); GUI.contentColor = foldout ? contentColor : MightyColorUtilities.DarkenColor(contentColor, .25f); GUILayout.BeginVertical(MightyStyleUtilities.GetFoldAreaHeader(indentLevel)); EditorGUI.indentLevel = 1; GUILayout.BeginVertical(MightyStyles.FoldBoxHeaderContent); foldout = MightyGUIUtilities.DrawFoldout(foldout, label, MightyStyles.FoldAreaLabel); GUILayout.EndVertical(); if (!foldout) { EditorGUI.indentLevel = indentLevel; GUILayout.EndVertical(); } else if (drawLine) { DrawLine(lineColor); } GUI.backgroundColor = backgroundColor; GUI.contentColor = contentColor; return(foldout); }
public bool BeginFoldout(bool foldout, string label) { GUILayout.BeginVertical(); GUILayout.BeginVertical(); foldout = MightyGUIUtilities.DrawFoldout(foldout, label); GUILayout.EndVertical(); if (foldout) { return(true); } GUILayout.EndVertical(); return(false); }
public bool BeginFoldout(bool foldout, string label, int indentLevel) { GUILayout.BeginVertical(MightyStyleUtilities.GetFoldBoxHeader(indentLevel)); EditorGUI.indentLevel = 1; GUILayout.BeginVertical(MightyStyles.FoldBoxHeaderContent); foldout = MightyGUIUtilities.DrawFoldout(foldout, label, MightyStyles.BoldFoldout); GUILayout.EndVertical(); if (foldout) { return(true); } EditorGUI.indentLevel = indentLevel; GUILayout.EndVertical(); return(false); }
protected override void DrawArrayImpl(MightySerializedField serializedField, ButtonArrayAttribute attribute, ArrayOption options, BaseArrayDecoratorAttribute[] decoratorAttributes, IArrayElementDrawer drawer, BasePropertyDrawerAttribute drawerAttribute) { var property = serializedField.Property; foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).BeginDrawArray(serializedField, decoratorAttribute); } foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).BeginDrawHeader(serializedField, decoratorAttribute); } if (!options.Contains(ArrayOption.HideLabel)) { if (options.Contains(ArrayOption.DontFold)) { EditorGUILayout.LabelField(property.displayName, options.Contains(ArrayOption.BoldLabel) ? EditorStyles.boldLabel : EditorStyles.label); property.isExpanded = true; } else if (!MightyGUIUtilities.DrawFoldout(property, options.Contains(ArrayOption.BoldLabel) ? MightyStyles.BoldFoldout : null)) { foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawHeader(serializedField, decoratorAttribute); } foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawArray(serializedField, decoratorAttribute); } return; } } else { property.isExpanded = true; } if (!options.Contains(ArrayOption.DontIndent)) { EditorGUI.indentLevel++; } foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawHeader(serializedField, decoratorAttribute); } GUILayout.BeginVertical(MightyStyleUtilities.GetButtonArray(EditorGUI.indentLevel - 1), GUILayout.MinHeight(35)); var indent = EditorGUI.indentLevel; EditorGUI.indentLevel = 0; if (property.arraySize == 0) { GUILayout.FlexibleSpace(); if (MightyGUIUtilities.DrawAddButton()) { property.InsertArrayElementAtIndex(0); property.serializedObject.ApplyModifiedProperties(); } GUILayout.FlexibleSpace(); } MightyGUIUtilities.DrawArrayBody(property, index => { var element = property.GetArrayElementAtIndex(index); foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).BeginDrawElement(serializedField, index, decoratorAttribute); } GUILayout.BeginHorizontal(GUILayout.MinHeight(33)); GUILayout.BeginVertical(GUILayout.Width(1)); GUILayout.FlexibleSpace(); GUILayout.BeginHorizontal(); if (MightyGUIUtilities.DrawRemoveButton()) { property.DeleteArrayElementAtIndex(index); property.serializedObject.ApplyModifiedProperties(); GUILayout.EndHorizontal(); foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawElement(serializedField, index, decoratorAttribute); } return; } if (MightyGUIUtilities.DrawAddButton()) { property.InsertArrayElementAtIndex(index); property.serializedObject.ApplyModifiedProperties(); } if (serializedField.IsFoldable()) { GUILayout.Space(10); } GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndVertical(); GUILayout.BeginVertical(); GUILayout.FlexibleSpace(); if (drawer != null) { drawer.DrawElement(serializedField, index, drawerAttribute); } else if (options.Contains(ArrayOption.HideElementLabel)) { EditorGUILayout.PropertyField(element, GUIContent.none); } else { EditorGUILayout.PropertyField(element); } GUILayout.FlexibleSpace(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawElement(serializedField, index, decoratorAttribute); } }); EditorGUI.indentLevel = indent; GUILayout.EndVertical(); if (!options.Contains(ArrayOption.DontIndent)) { EditorGUI.indentLevel--; } foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawArray(serializedField, decoratorAttribute); } }
protected override void DrawArrayImpl(MightySerializedField serializedField, ReorderableListAttribute attribute, ArrayOption options, BaseArrayDecoratorAttribute[] decoratorAttributes, IArrayElementDrawer drawer, BasePropertyDrawerAttribute drawerAttribute) { var property = serializedField.Property; EditorGUILayout.BeginVertical(); foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).BeginDrawArray(serializedField, decoratorAttribute); } if (!options.Contains(ArrayOption.HideLabel) && !options.Contains(ArrayOption.LabelInHeader)) { foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).BeginDrawHeader(serializedField, decoratorAttribute); } if (options.Contains(ArrayOption.DontFold)) { EditorGUILayout.LabelField(property.displayName, options.Contains(ArrayOption.BoldLabel) ? EditorStyles.boldLabel : EditorStyles.label); property.isExpanded = true; } else if (!MightyGUIUtilities.DrawFoldout(property, options.Contains(ArrayOption.BoldLabel) ? MightyStyles.BoldFoldout : null)) { EditorGUILayout.EndVertical(); foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawHeader(serializedField, decoratorAttribute); } foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawArray(serializedField, decoratorAttribute); } return; } foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawHeader(serializedField, decoratorAttribute); } } else { property.isExpanded = true; } if (!options.Contains(ArrayOption.DontIndent)) { m_indentCache[serializedField] = EditorGUI.indentLevel; MightyGUIUtilities.BeginLayoutIndent(); EditorGUI.indentLevel = 0; EditorGUILayout.BeginVertical(); } if (!m_reorderableCache.Contains(serializedField)) { ReorderableList reorderableList = new ReorderableList(property.serializedObject, property, attribute.Draggable, options.Contains(ArrayOption.LabelInHeader) || !options.Contains(ArrayOption.HideSizeField), attribute.DrawButtons, attribute.DrawButtons) { drawHeaderCallback = position => { var labelWidth = EditorGUIUtility.labelWidth; if (options.Contains(ArrayOption.LabelInHeader)) { var labelSpace = Screen.width - WIDTH_OVERFLOW - SIZE_FIELD_WIDTH - SIZE_LABEL_WIDTH; position.width = labelSpace - SPACE; if (options.Contains(ArrayOption.BoldLabel)) { EditorGUI.LabelField(position, property.displayName, EditorStyles.boldLabel); } else { EditorGUI.LabelField(position, property.displayName); } position.x = labelSpace; position.width = SIZE_FIELD_WIDTH + SIZE_LABEL_WIDTH; EditorGUIUtility.labelWidth = SIZE_LABEL_WIDTH; } if (!options.Contains(ArrayOption.HideSizeField)) { var enabled = GUI.enabled; GUI.enabled = !options.Contains(ArrayOption.DisableSizeField); MightyGUIUtilities.DrawArraySizeField(position, property); GUI.enabled = enabled; } EditorGUIUtility.labelWidth = labelWidth; }, drawElementCallback = (position, index, isActive, isFocused) => { position.y += 2; foreach (var decoratorAttribute in decoratorAttributes) { position = ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).BeginDrawElement(position, serializedField, index, decoratorAttribute); } if (drawer != null) { var height = drawer.GetElementHeight(serializedField, index, drawerAttribute); position.height = height; drawer.DrawElement(position, serializedField, index, drawerAttribute); position = MightyGUIUtilities.JumpHeight(position, height); } else if (options.Contains(ArrayOption.HideElementLabel)) { position = MightyGUIUtilities.DrawPropertyField(position, property.GetArrayElementAtIndex(index), GUIContent.none); } else { position = MightyGUIUtilities.DrawPropertyField(position, property.GetArrayElementAtIndex(index)); } foreach (var decoratorAttribute in decoratorAttributes) { position = ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawElement(position, serializedField, index, decoratorAttribute); } }, elementHeightCallback = index => GetElementHeight(serializedField, attribute, drawer, drawerAttribute, index), headerHeight = MightyGUIUtilities.FIELD_HEIGHT + MightyGUIUtilities.FIELD_SPACING }; m_reorderableCache[serializedField] = reorderableList; } m_reorderableCache[serializedField].DoLayoutList(); if (!options.Contains(ArrayOption.DontIndent)) { EditorGUI.indentLevel = m_indentCache[serializedField]; MightyGUIUtilities.EndLayoutIndent(); EditorGUILayout.EndVertical(); } foreach (var decoratorAttribute in decoratorAttributes) { ((IArrayDecoratorDrawer)decoratorAttribute.Drawer).EndDrawArray(serializedField, decoratorAttribute); } EditorGUILayout.EndVertical(); }