diff --git a/Scripts/Attributes/OverrideTooltipAttribute.cs b/Scripts/Attributes/OverrideTooltipAttribute.cs new file mode 100644 index 0000000..3e8e572 --- /dev/null +++ b/Scripts/Attributes/OverrideTooltipAttribute.cs @@ -0,0 +1,23 @@ +using System; + +namespace XNodeEditor { + + /// + /// When applied to the definition of a custom class, allows for the tooltip shown beside the nodes to be overriden. + /// Optionally, whether an output node's value is shown in the tooltip can also be turned off. + /// Leaving the tooltip override blank or null will leave the normal tooltip (type name) in place. + /// + [AttributeUsage(AttributeTargets.Class)] + public sealed class OverrideTooltipAttribute : Attribute { + public readonly bool overrideTooltip; + public readonly string tooltip; + public readonly bool hideValue; + + public OverrideTooltipAttribute(string tooltip = "", bool hideValue = false) { + overrideTooltip = !string.IsNullOrEmpty(tooltip); + if (overrideTooltip) this.tooltip = tooltip; + this.hideValue = hideValue; + } + } + +} \ No newline at end of file diff --git a/Scripts/Attributes/OverrideTooltipAttribute.cs.meta b/Scripts/Attributes/OverrideTooltipAttribute.cs.meta new file mode 100644 index 0000000..36d84d2 --- /dev/null +++ b/Scripts/Attributes/OverrideTooltipAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b578945cab8b7c643ac937a49febb57e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Editor/NodeGraphEditor.cs b/Scripts/Editor/NodeGraphEditor.cs index 3a0464c..80af4b9 100644 --- a/Scripts/Editor/NodeGraphEditor.cs +++ b/Scripts/Editor/NodeGraphEditor.cs @@ -123,9 +123,17 @@ namespace XNodeEditor { public virtual string GetPortTooltip(XNode.NodePort port) { Type portType = port.ValueType; string tooltip = ""; - tooltip = portType.PrettyName(); - if (port.IsOutput) { - object obj = port.node.GetValue(port); + + // Now allow tooltips to be overridden or to have their values hidden based on attribute usage + var targetType = portType.HasElementType ? portType.GetElementType() : portType; // For arrays and lists. + // ReSharper disable once PossibleNullReferenceException + var attr = ((OverrideTooltipAttribute[])targetType + .GetCustomAttributes(typeof(OverrideTooltipAttribute), false)).SingleOrDefault(); + tooltip = attr?.overrideTooltip ?? false ? attr.tooltip : targetType.PrettyName(); + var hideValue = attr?.hideValue ?? false; + // ReSharper disable once InvertIf + if (!hideValue && port.IsOutput) { + var obj = port.node.GetValue(port); tooltip += " = " + (obj != null ? obj.ToString() : "null"); } return tooltip;