From ad7d9360e57d64377153921a5ec610b411617088 Mon Sep 17 00:00:00 2001 From: Thor Brigsted Date: Thu, 16 Nov 2017 01:59:46 +0100 Subject: [PATCH] More inclusive NodeEditorGUILayout --- Scripts/Editor/NodeEditorGUILayout.cs | 45 ++++++++++++++++----------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/Scripts/Editor/NodeEditorGUILayout.cs b/Scripts/Editor/NodeEditorGUILayout.cs index cfb42e7..ed44c60 100644 --- a/Scripts/Editor/NodeEditorGUILayout.cs +++ b/Scripts/Editor/NodeEditorGUILayout.cs @@ -7,35 +7,44 @@ namespace XNodeEditor { /// UNEC-specific version of public static class NodeEditorGUILayout { - /// Make a field for a serialized property. Automatically displays relevant node port. - public static void PropertyField(SerializedProperty property, bool includeChildren = true) { - if (property == null) throw new NullReferenceException(); - - Node node = property.serializedObject.targetObject as Node; - NodePort port = node.GetPort(property.name); - PropertyField(property, port, includeChildren); + /// Make a field for a serialized property. Automatically displays relevant node port. + public static void PropertyField(SerializedProperty property, bool includeChildren = true, params GUILayoutOption[] options) { + PropertyField(property, (GUIContent) null, includeChildren, options); } - /// Make a field for a serialized property. Manual node port override. - public static void PropertyField(SerializedProperty property, NodePort port, bool includeChildren = true) { + /// Make a field for a serialized property. Automatically displays relevant node port. + public static void PropertyField(SerializedProperty property, GUIContent label, bool includeChildren = true, params GUILayoutOption[] options) { + if (property == null) throw new NullReferenceException(); + Node node = property.serializedObject.targetObject as Node; + NodePort port = node.GetPort(property.name); + PropertyField(property, label, port, includeChildren); + } + + /// Make a field for a serialized property. Manual node port override. + public static void PropertyField(SerializedProperty property, NodePort port, bool includeChildren = true, params GUILayoutOption[] options) { + PropertyField(property, null, port, includeChildren, options); + } + + /// Make a field for a serialized property. Manual node port override. + public static void PropertyField(SerializedProperty property, GUIContent label, NodePort port, bool includeChildren = true, params GUILayoutOption[] options) { if (property == null) throw new NullReferenceException(); // If property is not a port, display a regular property field - if (port == null) EditorGUILayout.PropertyField(property, includeChildren, GUILayout.MinWidth(30)); + if (port == null) EditorGUILayout.PropertyField(property, label, includeChildren, GUILayout.MinWidth(30)); else { Rect rect = new Rect(); // If property is an input, display a regular property field and put a port handle on the left side if (port.direction == NodePort.IO.Input) { // Display a label if port is connected - if (port.IsConnected) EditorGUILayout.LabelField(property.displayName); + if (port.IsConnected) EditorGUILayout.LabelField(label != null ? label : new GUIContent(property.displayName)); // Display an editable property field if port is not connected - else EditorGUILayout.PropertyField(property, includeChildren, GUILayout.MinWidth(30)); + else EditorGUILayout.PropertyField(property, label, includeChildren, GUILayout.MinWidth(30)); rect = GUILayoutUtility.GetLastRect(); rect.position = rect.position - new Vector2(16, 0); // If property is an output, display a text label and put a port handle on the right side } else if (port.direction == NodePort.IO.Output) { - EditorGUILayout.LabelField(property.displayName, NodeEditorResources.styles.outputPort, GUILayout.MinWidth(30)); + EditorGUILayout.LabelField(label != null ? label : new GUIContent(property.displayName), NodeEditorResources.styles.outputPort, GUILayout.MinWidth(30)); rect = GUILayoutUtility.GetLastRect(); rect.position = rect.position + new Vector2(rect.width, 0); } @@ -54,15 +63,15 @@ namespace XNodeEditor { } /// Make a simple port field. - public static void PortField(NodePort port, params GUILayoutOption[] option) { - PortField(null, port, option); + public static void PortField(NodePort port, params GUILayoutOption[] options) { + PortField(null, port, options); } /// Make a simple port field. - public static void PortField(GUIContent label, NodePort port, params GUILayoutOption[] option) { + public static void PortField(GUIContent label, NodePort port, params GUILayoutOption[] options) { if (port == null) return; - if (label == null) EditorGUILayout.LabelField(port.fieldName.PrettifyCamelCase(), option); - else EditorGUILayout.LabelField(label, option); + if (label == null) EditorGUILayout.LabelField(port.fieldName.PrettifyCamelCase(), options); + else EditorGUILayout.LabelField(label, options); Rect rect = GUILayoutUtility.GetLastRect(); if (port.direction == NodePort.IO.Input) rect.position = rect.position - new Vector2(16, 0); else if (port.direction == NodePort.IO.Output) rect.position = rect.position + new Vector2(rect.width, 0);