// Node creation when validate a choice public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) { // window to graph position var windowRoot = window.rootVisualElement; var windowMousePosition = windowRoot.ChangeCoordinatesTo(windowRoot.parent, context.screenMousePosition - window.position.position); var graphMousePosition = graphView.contentViewContainer.WorldToLocal(windowMousePosition); var nodeType = searchTreeEntry.userData is Type ? (Type)searchTreeEntry.userData : ((NodeProvider.PortDescription)searchTreeEntry.userData).nodeType; graphView.RegisterCompleteObjectUndo("Added " + nodeType); var view = graphView.AddNode(BaseNode.CreateFromType(nodeType, graphMousePosition)); if (searchTreeEntry.userData is NodeProvider.PortDescription desc) { var targetPort = view.GetPortViewFromFieldName(desc.portFieldName, desc.portIdentifier); if (inputPortView == null) { graphView.Connect(targetPort, outputPortView); } else { graphView.Connect(inputPortView, targetPort); } } return(true); }