diff --git a/Scripts/Editor/NodeEditorAction.cs b/Scripts/Editor/NodeEditorAction.cs index 2c58bcd..be3d664 100644 --- a/Scripts/Editor/NodeEditorAction.cs +++ b/Scripts/Editor/NodeEditorAction.cs @@ -464,6 +464,15 @@ namespace XNodeEditor { } } + /// Draw this group on top of other group by placing it last in the graph.groups list + public void MoveGroupToTop(XNode.NodeGroup group) { + int index; + while ((index = graph.groups.IndexOf(group)) != graph.groups.Count - 1) { + graph.groups[index] = graph.groups[index + 1]; + graph.groups[index + 1] = group; + } + } + /// Duplicate selected nodes and select the duplicates public void DuplicateSelectedNodes() { UnityEngine.Object[] newNodes = new UnityEngine.Object[Selection.objects.Length]; diff --git a/Scripts/Editor/NodeEditorWindow.cs b/Scripts/Editor/NodeEditorWindow.cs index a223f4d..f9de26e 100644 --- a/Scripts/Editor/NodeEditorWindow.cs +++ b/Scripts/Editor/NodeEditorWindow.cs @@ -158,11 +158,18 @@ namespace XNodeEditor { public void SelectNodesInGroup(XNode.NodeGroup group) { Rect groupRect = new Rect(group.position, group.size); + for (int i = 0; i < graph.nodes.Count; i++) { XNode.Node node = graph.nodes[i]; if (!node) continue; if (groupRect.Contains(node.position)) SelectNode(node, true); } + + for (int i = 0; i < graph.groups.Count; i++) { + XNode.NodeGroup otherGroup = graph.groups[i]; + if (!otherGroup || group == otherGroup) continue; + if (groupRect.Contains(otherGroup.position)) SelectGroup(otherGroup, true); + } } public void DeselectNodesInGroup(XNode.NodeGroup group) @@ -176,6 +183,13 @@ namespace XNodeEditor { if (groupRect.Contains(node.position)) selection.Remove(node); } + for (int i = 0; i < graph.groups.Count; i++) { + XNode.NodeGroup otherGroup = graph.groups[i]; + if (!otherGroup || group == otherGroup) continue; + + if (groupRect.Contains(otherGroup.position)) selection.Remove(otherGroup); + } + Selection.objects = selection.ToArray(); } diff --git a/Scripts/Editor/NodeGraphEditor.cs b/Scripts/Editor/NodeGraphEditor.cs index a44c4db..2fc5c81 100644 --- a/Scripts/Editor/NodeGraphEditor.cs +++ b/Scripts/Editor/NodeGraphEditor.cs @@ -80,6 +80,7 @@ namespace XNodeEditor { // Actions if only one node is selected if (Selection.objects.Length == 1 && Selection.activeObject is XNode.NodeGroup) { XNode.NodeGroup group = Selection.activeObject as XNode.NodeGroup; + menu.AddItem(new GUIContent("Move To Top"), false, () => NodeEditorWindow.current.MoveGroupToTop(group)); menu.AddItem(new GUIContent("Rename"), false, NodeEditorWindow.current.RenameSelectedGroup); }