// Copyright Epic Games, Inc. All Rights Reserved. #include "AssetDefinition_TextureGraphInstance.h" #include "TextureGraphEditorModule.h" #include "TextureGraph.h" #include "AssetRegistry/AssetIdentifier.h" #include "ContentBrowserMenuContexts.h" #include "ToolMenu.h" #include "ToolMenus.h" #include "IAssetTools.h" #include "ToolMenuSection.h" #include "TG_InstanceFactory.h" #include "AssetRegistry/AssetRegistryHelpers.h" #define LOCTEXT_NAMESPACE "UAssetDefinition_TextureGraphInstance" EAssetCommandResult UAssetDefinition_TextureGraphInstance::OpenAssets(const FAssetOpenArgs& OpenArgs) const { for (UTextureGraphInstance* TextureGraphInstance : OpenArgs.LoadObjects()) { FTextureGraphEditorModule* TextureEditorModule = &FModuleManager::LoadModuleChecked("TextureGraphEditor"); TextureEditorModule->CreateTextureGraphInstanceEditor(OpenArgs.GetToolkitMode(), OpenArgs.ToolkitHost, TextureGraphInstance); } return EAssetCommandResult::Handled; } FAssetOpenSupport UAssetDefinition_TextureGraphInstance::GetAssetOpenSupport(const FAssetOpenSupportArgs& OpenSupportArgs) const { return FAssetOpenSupport(OpenSupportArgs.OpenMethod,OpenSupportArgs.OpenMethod == EAssetOpenMethod::Edit || OpenSupportArgs.OpenMethod == EAssetOpenMethod::View); } // Menu Extensions //-------------------------------------------------------------------- namespace MenuExtension_TextureGraphInstance { static void ExecuteExportTextureGraphInstance(const FToolMenuContext& InContext) { if (const UContentBrowserAssetContextMenuContext* CBContext = UContentBrowserAssetContextMenuContext::FindContextWithAssets(InContext)) { const TArray &TextureGraphs = CBContext->LoadSelectedObjects(); const FTextureGraphEditorModule& TextureGraphEditorModule = FModuleManager::Get().LoadModuleChecked(TEXT("TextureGraphEditor")); for (auto TextureGraphIt = TextureGraphs.CreateConstIterator(); TextureGraphIt; ++TextureGraphIt) { TextureGraphEditorModule.GetTextureExporter()->SetTextureGraphToExport((*TextureGraphIt)); } } } static void ExecuteNewTextureGraphInstance(const FToolMenuContext& InContext) { if (const UContentBrowserAssetContextMenuContext* CBContext = UContentBrowserAssetContextMenuContext::FindContextWithAssets(InContext)) { IAssetTools::Get().CreateAssetsFrom( CBContext->LoadSelectedObjects(), UTextureGraphInstance::StaticClass(), TEXT("_Inst"), [](UTextureGraphInstance* SourceObject) { UTG_InstanceFactory* Factory = NewObject(); Factory->InitialParent = SourceObject; return Factory; } ); } } static FDelayedAutoRegisterHelper DelayedAutoRegister(EDelayedRegisterRunPhase::EndOfEngineInit, []{ UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateLambda([]() { FToolMenuOwnerScoped OwnerScoped(UE_MODULE_NAME); { UToolMenu* Menu = UE::ContentBrowser::ExtendToolMenu_AssetContextMenu(UTextureGraphInstance::StaticClass()); FToolMenuSection& Section = Menu->FindOrAddSection("GetAssetActions"); Section.AddDynamicEntry(NAME_None, FNewToolMenuSectionDelegate::CreateLambda([](FToolMenuSection& InSection) { if (const UContentBrowserAssetContextMenuContext* Context = UContentBrowserAssetContextMenuContext::FindContextWithAssets(InSection)) { { const TAttribute Label = LOCTEXT("TextureGraphInstance_Export", "Export Texture Graph Instance"); const TAttribute ToolTip = LOCTEXT("Texture_ExportTextureGraphInstanceTooltip", "Allows Exporting Texture Graph Instance."); const FSlateIcon Icon = FSlateIcon(); const FToolMenuExecuteAction UIAction = FToolMenuExecuteAction::CreateStatic(&ExecuteExportTextureGraphInstance); InSection.AddMenuEntry("Texture_Export", Label, ToolTip, Icon, UIAction); } } })); Section.AddDynamicEntry(NAME_None, FNewToolMenuSectionDelegate::CreateLambda([](FToolMenuSection& InSection) { if (const UContentBrowserAssetContextMenuContext* Context = UContentBrowserAssetContextMenuContext::FindContextWithAssets(InSection)) { { const TAttribute Label = LOCTEXT("TextureGraph_NewInstance", "Create Texture Graph Instance"); const TAttribute ToolTip = LOCTEXT("TextureGraph_NewInstanceTooltip", "Creates a parameterized Texture Graph Instance using this Texture Graph as a base"); const FSlateIcon Icon = FSlateIcon(); const FToolMenuExecuteAction UIAction = FToolMenuExecuteAction::CreateStatic(&ExecuteNewTextureGraphInstance); InSection.AddMenuEntry("TextureGraph_NewInstance", Label, ToolTip, Icon, UIAction); } } })); } })); }); } #undef LOCTEXT_NAMESPACE