77 lines
2.6 KiB
C++
77 lines
2.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "Containers/Map.h"
|
|
#include "Delegates/Delegate.h"
|
|
#include "EditorSubsystem.h"
|
|
|
|
#include "BrowseToAssetOverrideSubsystem.generated.h"
|
|
|
|
using FBrowseToAssetOverrideDelegate = TDelegate<FName(const UObject*)>;
|
|
|
|
UCLASS(MinimalAPI)
|
|
class UBrowseToAssetOverrideSubsystem : public UEditorSubsystem
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
static UNREALED_API UBrowseToAssetOverrideSubsystem* Get();
|
|
|
|
/**
|
|
* Given an object, see if it has a "browse to asset" package name override.
|
|
* @return The package name of override, or None if there is no override.
|
|
*/
|
|
UNREALED_API FName GetBrowseToAssetOverride(const UObject* Object);
|
|
|
|
/**
|
|
* Register a per-class override for the "browse to asset" resolution.
|
|
* @note Callback should return a package name, or None if there is no override.
|
|
*/
|
|
UNREALED_API void RegisterBrowseToAssetOverrideForClass(const FTopLevelAssetPath& Class, FBrowseToAssetOverrideDelegate&& Callback);
|
|
|
|
template <typename ClassType>
|
|
void RegisterBrowseToAssetOverrideForClass(FBrowseToAssetOverrideDelegate&& Callback)
|
|
{
|
|
RegisterBrowseToAssetOverrideForClass(ClassType::StaticClass()->GetClassPathName(), MoveTemp(Callback));
|
|
}
|
|
|
|
/**
|
|
* Unregister a per-class override for the "browse to asset" resolution.
|
|
*/
|
|
UNREALED_API void UnregisterBrowseToAssetOverrideForClass(const FTopLevelAssetPath& Class);
|
|
|
|
template <typename ClassType>
|
|
void UnregisterBrowseToAssetOverrideForClass()
|
|
{
|
|
UnregisterBrowseToAssetOverrideForClass(ClassType::StaticClass()->GetClassPathName());
|
|
}
|
|
|
|
/**
|
|
* Register a per-interface override for the "browse to asset" resolution.
|
|
* @note Callback should return a package name, or None if there is no override.
|
|
*/
|
|
UNREALED_API void RegisterBrowseToAssetOverrideForInterface(const FTopLevelAssetPath& Interface, FBrowseToAssetOverrideDelegate&& Callback);
|
|
|
|
template <typename InterfaceType>
|
|
void RegisterBrowseToAssetOverrideForInterface(FBrowseToAssetOverrideDelegate&& Callback)
|
|
{
|
|
RegisterBrowseToAssetOverrideForInterface(InterfaceType::UClassType::StaticClass()->GetClassPathName(), MoveTemp(Callback));
|
|
}
|
|
|
|
/**
|
|
* Unregister a per-interface override for the "browse to asset" resolution.
|
|
*/
|
|
UNREALED_API void UnregisterBrowseToAssetOverrideForInterface(const FTopLevelAssetPath& Interface);
|
|
|
|
template <typename InterfaceType>
|
|
void UnregisterBrowseToAssetOverrideForInterface()
|
|
{
|
|
UnregisterBrowseToAssetOverrideForInterface(InterfaceType::UClassType::StaticClass()->GetClassPathName());
|
|
}
|
|
|
|
private:
|
|
TMap<FTopLevelAssetPath, FBrowseToAssetOverrideDelegate> PerClassOverrides;
|
|
TMap<FTopLevelAssetPath, FBrowseToAssetOverrideDelegate> PerInterfaceOverrides;
|
|
};
|