// FNodeSpawnInfo interface virtual void GetActions(UEdGraph* InDestGraph, FVector2D& InOutDestPosition, TArray<UEdGraphNode*>& OutNodes) override { IBlueprintNodeBinder::FBindingSet Bindings; UK2Node_MacroInstance* MacroInstanceNode = Cast<UK2Node_MacroInstance>(UBlueprintNodeSpawner::Create(UK2Node_MacroInstance::StaticClass())->Invoke(InDestGraph, Bindings, InOutDestPosition)); MacroInstanceNode->SetMacroGraph(MacroGraph); MacroInstanceNode->ReconstructNode(); OutNodes.Add(MacroInstanceNode); }
//------------------------------------------------------------------------------ FReply FKismetMacroDragDropAction::DroppedOnPanel(TSharedRef<SWidget> const& Panel, FVector2D ScreenPosition, FVector2D GraphPosition, UEdGraph& Graph) { check(Macro); check(CanBeDroppedDelegate.IsBound()); FReply Reply = FReply::Unhandled(); FText CannotDropReason = FText::GetEmpty(); if (CanBeDroppedDelegate.Execute(TSharedPtr<FEdGraphSchemaAction>(), &Graph, CannotDropReason)) { UK2Node_MacroInstance* MacroTemplate = NewObject<UK2Node_MacroInstance>(); MacroTemplate->SetMacroGraph(Macro); AnalyticCallback.ExecuteIfBound(); FEdGraphSchemaAction_K2NewNode::SpawnNodeFromTemplate<UK2Node_MacroInstance>(&Graph, MacroTemplate, GraphPosition); Reply = FReply::Handled(); } return Reply; }
//------------------------------------------------------------------------------ static UBlueprintNodeSpawner* FBlueprintNodeSpawnerFactory::MakeMacroNodeSpawner(UEdGraph* MacroGraph) { check(MacroGraph != nullptr); check(MacroGraph->GetSchema()->GetGraphType(MacroGraph) == GT_Macro); UBlueprintNodeSpawner* NodeSpawner = UBlueprintNodeSpawner::Create(UK2Node_MacroInstance::StaticClass()); check(NodeSpawner != nullptr); auto CustomizeMacroNodeLambda = [](UEdGraphNode* NewNode, bool bIsTemplateNode, TWeakObjectPtr<UEdGraph> InMacroGraph) { UK2Node_MacroInstance* MacroNode = CastChecked<UK2Node_MacroInstance>(NewNode); if (InMacroGraph.IsValid()) { MacroNode->SetMacroGraph(InMacroGraph.Get()); } }; TWeakObjectPtr<UEdGraph> GraphPtr = MacroGraph; NodeSpawner->CustomizeNodeDelegate = UBlueprintNodeSpawner::FCustomizeNodeDelegate::CreateStatic(CustomizeMacroNodeLambda, GraphPtr); return NodeSpawner; }