FActionMenuContent FSoundClassEditor::OnCreateGraphActionMenu(UEdGraph* InGraph, const FVector2D& InNodePosition, const TArray<UEdGraphPin*>& InDraggedPins, bool bAutoExpand, SGraphEditor::FActionMenuClosed InOnMenuClosed) { TSharedRef<SSoundClassActionMenu> ActionMenu = SNew(SSoundClassActionMenu) .GraphObj(InGraph) .NewNodePosition(InNodePosition) .DraggedFromPins(InDraggedPins) .AutoExpandActionMenu(bAutoExpand) .OnClosedCallback(InOnMenuClosed); return FActionMenuContent( ActionMenu, ActionMenu ); }
FActionMenuContent SGraphEditorImpl::GraphEd_OnGetContextMenuFor( const FVector2D& NodeAddPosition, UEdGraphNode* InGraphNode, UEdGraphPin* InGraphPin, const TArray<UEdGraphPin*>& InDragFromPins ) { if (EdGraphObj != NULL) { const UEdGraphSchema* Schema = EdGraphObj->GetSchema(); check(Schema); // Cache the pin this menu is being brought up for GraphPinForMenu = InGraphPin; if ((InGraphPin != NULL) || (InGraphNode != NULL)) { // Get all menu extenders for this context menu from the graph editor module FGraphEditorModule& GraphEditorModule = FModuleManager::GetModuleChecked<FGraphEditorModule>( TEXT("GraphEditor") ); TArray<FGraphEditorModule::FGraphEditorMenuExtender_SelectedNode> MenuExtenderDelegates = GraphEditorModule.GetAllGraphEditorContextMenuExtender(); TArray<TSharedPtr<FExtender>> Extenders; for (int32 i = 0; i < MenuExtenderDelegates.Num(); ++i) { if (MenuExtenderDelegates[i].IsBound()) { Extenders.Add(MenuExtenderDelegates[i].Execute(this->Commands.ToSharedRef(), EdGraphObj, InGraphNode, InGraphPin, !IsEditable.Get())); } } TSharedPtr<FExtender> MenuExtender = FExtender::Combine(Extenders); // Show the menu for the pin or node under the cursor const bool bShouldCloseAfterAction = true; FMenuBuilder MenuBuilder( bShouldCloseAfterAction, this->Commands, MenuExtender ); Schema->GetContextMenuActions(EdGraphObj, InGraphNode, InGraphPin, &MenuBuilder, !IsEditable.Get()); return FActionMenuContent(MenuBuilder.MakeWidget()); } else if (IsEditable.Get()) { if (EdGraphObj->GetSchema() != NULL ) { FActionMenuContent Content; if(OnCreateActionMenu.IsBound()) { Content = OnCreateActionMenu.Execute( EdGraphObj, NodeAddPosition, InDragFromPins, bAutoExpandActionMenu, SGraphEditor::FActionMenuClosed::CreateSP(this, &SGraphEditorImpl::OnClosedActionMenu) ); } else { TSharedRef<SGraphEditorActionMenu> Menu = SNew(SGraphEditorActionMenu) .GraphObj( EdGraphObj ) .NewNodePosition( NodeAddPosition ) .DraggedFromPins( InDragFromPins ) .AutoExpandActionMenu(bAutoExpandActionMenu) .OnClosedCallback( SGraphEditor::FActionMenuClosed::CreateSP(this, &SGraphEditorImpl::OnClosedActionMenu) ); Content = FActionMenuContent( Menu, Menu->GetFilterTextBox() ); } if (InDragFromPins.Num() > 0) { GraphPanel->PreservePinPreviewUntilForced(); } return Content; } return FActionMenuContent( SNew(STextBlock) .Text( NSLOCTEXT("GraphEditor", "NoNodes", "No Nodes").ToString() ) ); } else { return FActionMenuContent( SNew(STextBlock) .Text( NSLOCTEXT("GraphEditor", "CannotCreateWhileDebugging", "Cannot create new nodes while debugging").ToString() ) ); } } else { return FActionMenuContent( SNew(STextBlock) .Text( NSLOCTEXT("GraphEditor", "GraphObjectIsNull", "Graph Object is Null").ToString() ) ); } }