// Copyright Epic Games, Inc. All Rights Reserved. #include "ContentBrowserMenuContexts.h" #include "Containers/UnrealString.h" #include "ContentBrowserDataSubsystem.h" #include "SContentBrowser.h" #include "UObject/UnrealNames.h" #include "ToolMenus.h" #include "Algo/Copy.h" #include "AssetViewUtils.h" FName UContentBrowserToolbarMenuContext::GetCurrentPath() const { if (TSharedPtr Browser = ContentBrowser.Pin()) { return *Browser->GetCurrentPath(EContentBrowserPathType::Virtual); } return NAME_None; } bool UContentBrowserToolbarMenuContext::CanWriteToCurrentPath() const { if (TSharedPtr Browser = ContentBrowser.Pin()) { return Browser->CanWriteToCurrentPath(); } return false; } TArray UContentBrowserAssetContextMenuContext::LoadSelectedObjectsIfNeeded() const { TArray SelectedAssetPaths; for (const FAssetData& SelectedAsset : SelectedAssets) { SelectedAssetPaths.Add(SelectedAsset.GetObjectPathString()); } TArray Objects; AssetViewUtils::LoadAssetsIfNeeded(SelectedAssetPaths, Objects); return Objects; } TArray UContentBrowserAssetContextMenuContext::GetSelectedAssetsOfType(const UClass* AssetClass, EIncludeSubclasses IncludeSubclasses) const { TArray TypedSelectedAssets; if (IncludeSubclasses == EIncludeSubclasses::Yes) { Algo::CopyIf(SelectedAssets, TypedSelectedAssets, [AssetClass](const FAssetData& AssetData) { return AssetData.IsInstanceOf(AssetClass); }); } else { Algo::CopyIf(SelectedAssets, TypedSelectedAssets, [AssetClass](const FAssetData& AssetData) { return AssetData.GetClass() == AssetClass; }); } return TypedSelectedAssets; } const FAssetData* UContentBrowserAssetContextMenuContext::GetSingleSelectedAssetOfType(const UClass* AssetClass, EIncludeSubclasses IncludeSubclasses) const { if (SelectedAssets.Num() == 1) { if (IncludeSubclasses == EIncludeSubclasses::Yes) { if (SelectedAssets[0].IsInstanceOf(AssetClass)) { return &SelectedAssets[0]; } } else { if (SelectedAssets[0].GetClass() == AssetClass) { return &SelectedAssets[0]; } } } return nullptr; } namespace UE::ContentBrowser { UToolMenu* ExtendToolMenu_AssetContextMenu(UClass* AssetClass) { return ExtendToolMenu_AssetContextMenu(TSoftClassPtr(AssetClass)); } UToolMenu* ExtendToolMenu_AssetContextMenu(TSoftClassPtr AssetSoftClass) { FNameBuilder Builder; Builder << TEXT("ContentBrowser.AssetContextMenu."); Builder << AssetSoftClass.GetAssetName(); const FName MenuName(Builder.ToView()); return UToolMenus::Get()->ExtendMenu(MenuName); } }