From 85341bf4cc073708919735137eba6ef91f613d58 Mon Sep 17 00:00:00 2001
From: MYTNB <31533351+MYTNB@users.noreply.github.com>
Date: Tue, 11 Aug 2020 14:31:53 +0800
Subject: [PATCH] Add Disconnect(Node) Menu And Node Header Tooltip (#288)
---
Scripts/Editor/NodeEditor.cs | 5 +++++
Scripts/Editor/NodeEditorGUI.cs | 33 ++++++++++++++++++++++-----------
2 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/Scripts/Editor/NodeEditor.cs b/Scripts/Editor/NodeEditor.cs
index 36c3a6e..8afd227 100644
--- a/Scripts/Editor/NodeEditor.cs
+++ b/Scripts/Editor/NodeEditor.cs
@@ -104,6 +104,11 @@ namespace XNodeEditor {
return NodeEditorResources.styles.nodeHighlight;
}
+ /// Override to display custom node header tooltips
+ public virtual string GetHeaderTooltip() {
+ return null;
+ }
+
/// Add items for the context menu when right-clicking this node. Override to add custom menu items.
public virtual void AddContextMenuItems(GenericMenu menu) {
bool canRemove = true;
diff --git a/Scripts/Editor/NodeEditorGUI.cs b/Scripts/Editor/NodeEditorGUI.cs
index 99cdecf..21d6d0f 100755
--- a/Scripts/Editor/NodeEditorGUI.cs
+++ b/Scripts/Editor/NodeEditorGUI.cs
@@ -112,6 +112,11 @@ namespace XNodeEditor {
/// Show right-click context menu for hovered port
void ShowPortContextMenu(XNode.NodePort hoveredPort) {
GenericMenu contextMenu = new GenericMenu();
+ foreach (var port in hoveredPort.GetConnections()) {
+ var name = port.node.name;
+ var index = hoveredPort.GetConnectionIndex(port);
+ contextMenu.AddItem(new GUIContent($"Disconnect({name})"), false, () => hoveredPort.Disconnect(index));
+ }
contextMenu.AddItem(new GUIContent("Clear Connections"), false, () => hoveredPort.ClearConnections());
contextMenu.DropDown(new Rect(Event.current.mousePosition, Vector2.zero));
if (NodeEditorPreferences.GetSettings().autoSave) AssetDatabase.SaveAssets();
@@ -531,8 +536,8 @@ namespace XNodeEditor {
if (e.type != EventType.Layout && currentActivity == NodeActivity.DragGrid) Selection.objects = preSelection.ToArray();
EndZoomed(position, zoom, topPadding);
- //If a change in is detected in the selected node, call OnValidate method.
- //This is done through reflection because OnValidate is only relevant in editor,
+ //If a change in is detected in the selected node, call OnValidate method.
+ //This is done through reflection because OnValidate is only relevant in editor,
//and thus, the code should not be included in build.
if (onValidate != null && EditorGUI.EndChangeCheck()) onValidate.Invoke(Selection.activeObject, null);
}
@@ -551,16 +556,22 @@ namespace XNodeEditor {
}
private void DrawTooltip() {
- if (hoveredPort != null && NodeEditorPreferences.GetSettings().portTooltips && graphEditor != null) {
- string tooltip = graphEditor.GetPortTooltip(hoveredPort);
- if (string.IsNullOrEmpty(tooltip)) return;
- GUIContent content = new GUIContent(tooltip);
- Vector2 size = NodeEditorResources.styles.tooltip.CalcSize(content);
- size.x += 8;
- Rect rect = new Rect(Event.current.mousePosition - (size), size);
- EditorGUI.LabelField(rect, content, NodeEditorResources.styles.tooltip);
- Repaint();
+ if (!NodeEditorPreferences.GetSettings().portTooltips || graphEditor is null)
+ return;
+ string tooltip = null;
+ if (hoveredPort != null) {
+ tooltip = graphEditor.GetPortTooltip(hoveredPort);
}
+ else if (hoveredNode != null && IsHoveringNode && IsHoveringTitle(hoveredNode)) {
+ tooltip = NodeEditor.GetEditor(hoveredNode, this).GetHeaderTooltip();
+ }
+ if (string.IsNullOrEmpty(tooltip)) return;
+ GUIContent content = new GUIContent(tooltip);
+ Vector2 size = NodeEditorResources.styles.tooltip.CalcSize(content);
+ size.x += 8;
+ Rect rect = new Rect(Event.current.mousePosition - (size), size);
+ EditorGUI.LabelField(rect, content, NodeEditorResources.styles.tooltip);
+ Repaint();
}
}
}