TSharedPtr<FDecoratorSchemaAction_NewNode> UEdGraphSchema_BehaviorTreeDecorator::AddNewDecoratorAction(FGraphContextMenuBuilder& ContextMenuBuilder, const FText& Category, const FText& MenuDesc, const FString& Tooltip) { TSharedPtr<FDecoratorSchemaAction_NewNode> NewAction = TSharedPtr<FDecoratorSchemaAction_NewNode>(new FDecoratorSchemaAction_NewNode(Category, MenuDesc, Tooltip, 0)); ContextMenuBuilder.AddAction( NewAction ); return NewAction; }
void UCreatureAnimGraphSchema::GetGraphContextActions(FGraphContextMenuBuilder& ContextMenuBuilder) const { { TSharedPtr<FEdGraphSchemaAction_NewCreatureStateNode> Action = AddNewStateNodeAction(ContextMenuBuilder, FText::GetEmpty(), LOCTEXT("AddState", "Add State..."), TEXT("A new state")); //Action->NodeTemplate = NewObject<UCreatureAnimStateNode>(ContextMenuBuilder.OwnerOfTemporaries); } // Add Animation End Transition Node { TSharedPtr<FEdGraphSchemaAction_NewCreatureAnimationEndTransition> NewAnimationEndNode(new FEdGraphSchemaAction_NewCreatureAnimationEndTransition(FText::GetEmpty(), LOCTEXT("AddAnimEndTransition", "Add Animation End Tran..."),TEXT("Add a Animation End Transition Node"),0)); ContextMenuBuilder.AddAction(NewAnimationEndNode); } }
void UAnimationStateMachineSchema::GetGraphContextActions(FGraphContextMenuBuilder& ContextMenuBuilder) const { // Add state node { TSharedPtr<FEdGraphSchemaAction_NewStateNode> Action = AddNewStateNodeAction(ContextMenuBuilder, FText::GetEmpty(), LOCTEXT("AddState", "Add State..."), TEXT("A new state")); Action->NodeTemplate = NewObject<UAnimStateNode>(ContextMenuBuilder.OwnerOfTemporaries); } // Add conduit node { TSharedPtr<FEdGraphSchemaAction_NewStateNode> Action = AddNewStateNodeAction(ContextMenuBuilder, FText::GetEmpty(), LOCTEXT("AddConduit", "Add Conduit..."), TEXT("A new conduit state")); Action->NodeTemplate = NewObject<UAnimStateConduitNode>(ContextMenuBuilder.OwnerOfTemporaries); } // Entry point (only if doesn't already exist) { bool bHasEntry = false; for (auto NodeIt = ContextMenuBuilder.CurrentGraph->Nodes.CreateConstIterator(); NodeIt; ++NodeIt) { UEdGraphNode* Node = *NodeIt; if (const UAnimStateEntryNode* StateNode = Cast<UAnimStateEntryNode>(Node)) { bHasEntry = true; break; } } if (!bHasEntry) { TSharedPtr<FEdGraphSchemaAction_NewStateNode> Action = AddNewStateNodeAction(ContextMenuBuilder, FText::GetEmpty(), LOCTEXT("AddEntryPoint", "Add Entry Point..."), TEXT("Define State Machine's Entry Point")); Action->NodeTemplate = NewObject<UAnimStateEntryNode>(ContextMenuBuilder.OwnerOfTemporaries); } } // Add Comment if (!ContextMenuBuilder.FromPin) { UBlueprint* OwnerBlueprint = FBlueprintEditorUtils::FindBlueprintForGraphChecked(ContextMenuBuilder.CurrentGraph); const bool bIsManyNodesSelected = (FKismetEditorUtilities::GetNumberOfSelectedNodes(OwnerBlueprint) > 0); const FText MenuDescription = bIsManyNodesSelected ? LOCTEXT("CreateCommentSelection", "Create Comment from Selection") : LOCTEXT("AddComment", "Add Comment..."); const FString ToolTip = TEXT("Create a resizeable comment box around selected nodes."); TSharedPtr<FEdGraphSchemaAction_NewStateComment> NewComment( new FEdGraphSchemaAction_NewStateComment(FText::GetEmpty(), MenuDescription, ToolTip, 0) ); ContextMenuBuilder.AddAction( NewComment ); } }
void UAnimGraphNode_SequencePlayer::GetMenuEntries(FGraphContextMenuBuilder& ContextMenuBuilder) const { if ((ContextMenuBuilder.FromPin == NULL) || (UAnimationGraphSchema::IsPosePin(ContextMenuBuilder.FromPin->PinType) && (ContextMenuBuilder.FromPin->Direction == EGPD_Input))) { UBlueprint* Blueprint = FBlueprintEditorUtils::FindBlueprintForGraphChecked(ContextMenuBuilder.CurrentGraph); if (UAnimBlueprint* AnimBlueprint = Cast<UAnimBlueprint>(Blueprint)) { // Load the asset registry module FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry")); FARFilter Filter; Filter.ClassNames.Add(UAnimSequence::StaticClass()->GetFName()); Filter.bRecursiveClasses = true; // Filter by skeleton FAssetData SkeletonData(AnimBlueprint->TargetSkeleton); Filter.TagsAndValues.Add(TEXT("Skeleton"), SkeletonData.GetExportTextName()); // Find matching assets and add an entry for each one TArray<FAssetData> SequenceList; AssetRegistryModule.Get().GetAssets(Filter, /*out*/ SequenceList); for (auto AssetIt = SequenceList.CreateConstIterator(); AssetIt; ++AssetIt) { const FAssetData& Asset = *AssetIt; // Try to determine if the asset is additive (can't do it right now if the asset is unloaded) bool bAdditive = false; if (Asset.IsAssetLoaded()) { if (UAnimSequence* Sequence = Cast<UAnimSequence>(Asset.GetAsset())) { bAdditive = Sequence->IsValidAdditive(); } } // Create the menu item const FText Title = UAnimGraphNode_SequencePlayer::GetTitleGivenAssetInfo(FText::FromName(Asset.AssetName), bAdditive); TSharedPtr<FNewSequencePlayerAction> NewAction(new FNewSequencePlayerAction(Asset, Title)); ContextMenuBuilder.AddAction( NewAction ); } } } }
void UMaterialGraphSchema::GetGraphContextActions(FGraphContextMenuBuilder& ContextMenuBuilder) const { const UMaterialGraph* MaterialGraph = CastChecked<UMaterialGraph>(ContextMenuBuilder.CurrentGraph); // Run thru all nodes and add any menu items they want to add Super::GetGraphContextActions(ContextMenuBuilder); // Get the Context Actions from Material Editor Module FMaterialEditorUtilities::GetMaterialExpressionActions(ContextMenuBuilder, MaterialGraph->MaterialFunction != NULL); // Get the Material Functions as well GetMaterialFunctionActions(ContextMenuBuilder); GetCommentAction(ContextMenuBuilder, ContextMenuBuilder.CurrentGraph); // Add Paste here if appropriate if (!ContextMenuBuilder.FromPin && FMaterialEditorUtilities::CanPasteNodes(ContextMenuBuilder.CurrentGraph)) { const FText PasteDesc = LOCTEXT("PasteDesc", "Paste Here"); const FText PasteToolTip = LOCTEXT("PasteToolTip", "Pastes copied items at this location."); TSharedPtr<FMaterialGraphSchemaAction_Paste> PasteAction(new FMaterialGraphSchemaAction_Paste(TEXT(""), PasteDesc.ToString(), PasteToolTip.ToString(), 0)); ContextMenuBuilder.AddAction(PasteAction); } }
TSharedPtr<FEdGraphSchemaAction_NewCreatureStateNode> AddNewStateNodeAction(FGraphContextMenuBuilder& ContextMenuBuilder, const FText& Category, const FText& MenuDesc, const FString& Tooltip, const int32 Grouping = 0) { TSharedPtr<FEdGraphSchemaAction_NewCreatureStateNode> NewStateNode(new FEdGraphSchemaAction_NewCreatureStateNode(Category, MenuDesc, Tooltip, Grouping)); ContextMenuBuilder.AddAction(NewStateNode); return NewStateNode; }
TSharedPtr<FNiagaraSchemaAction_NewNode> AddNewNodeAction(FGraphContextMenuBuilder& ContextMenuBuilder, const FString& Category, const FText& MenuDesc, const FString& Tooltip) { TSharedPtr<FNiagaraSchemaAction_NewNode> NewAction = TSharedPtr<FNiagaraSchemaAction_NewNode>(new FNiagaraSchemaAction_NewNode(Category, MenuDesc, Tooltip, 0)); ContextMenuBuilder.AddAction( NewAction ); return NewAction; }