Files
UnrealEngineUWP/Engine/Source/Editor/ClassViewer/Private/ClassViewerNode.h
matt peters 8b7bda67fe #jira UE-121508
FClassHierarchy::PopulateClassHierarcy: Refactor for robustness.
Instead of creating a tree for classes-from-blueprint and a tree for classes-from-loaded-UClass, create a single map from ClassPathName to node, and populate the data-from-blueprint and data-from-loaded-Uclass on the same node, and then create a tree from that map.
#rb JeanFrancois.Dube
#rnx

#ROBOMERGE-SOURCE: CL 17261364 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v855-17104924)

[CL 17262941 by matt peters in ue5-release-engine-test branch]
2021-08-22 22:12:31 -04:00

116 lines
3.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "ClassViewerModule.h"
#include "UObject/WeakObjectPtr.h"
class IPropertyHandle;
class IUnloadedBlueprintData;
class UBlueprint;
class FClassViewerNode : public TSharedFromThis<FClassViewerNode>
{
public:
FClassViewerNode(UClass* Class);
/**
* Creates a node for the widget's tree.
*
* @param InClassName The name of the class this node represents.
* @param InClassDisplayName The display name of the class this node represents
* @param bInIsPlaceable true if the class is a placeable class.
*/
FClassViewerNode( const FString& InClassName, const FString& InClassDisplayName );
FClassViewerNode( const FClassViewerNode& InCopyObject);
/**
* Adds the specified child to the node.
*
* @param Child The child to be added to this node for the tree.
*/
void AddChild( TSharedPtr<FClassViewerNode> Child );
/**
* Retrieves the class name this node is associated with. This is not the literal UClass name as it is missing the _C for blueprints
* @param bUseDisplayName Whether to use the display name or class name
*/
TSharedPtr<FString> GetClassName(bool bUseDisplayName = false) const
{
return bUseDisplayName ? ClassDisplayName : ClassName;
}
/**
* Retrieves the class name this node is associated with. This is not the literal UClass name as it is missing the _C for blueprints
* @param NameType Whether to use the display name or class name
*/
TSharedPtr<FString> GetClassName(EClassViewerNameTypeToDisplay NameType) const;
/** Retrieves the children list. */
TArray<TSharedPtr<FClassViewerNode>>& GetChildrenList()
{
return ChildrenList;
}
/** Checks if the class is placeable. */
bool IsClassPlaceable() const;
/** Checks if this is a blueprint */
bool IsBlueprintClass() const;
/** Checks if this is an editor module class */
bool IsEditorOnlyClass() const;
/** Rather this class is not allowed for the specific context */
bool IsRestricted() const;
/** Get the parent node for this node. */
TSharedPtr< FClassViewerNode > GetParentNode() const;
private:
/** The nontranslated internal name for this class. This is not necessarily the UClass's name, as that may have _C for blueprints */
TSharedPtr<FString> ClassName;
/** The translated display name for this class */
TSharedPtr<FString> ClassDisplayName;
/** List of children. */
TArray<TSharedPtr<FClassViewerNode>> ChildrenList;
/** Pointer to the parent to this object. */
TWeakPtr< FClassViewerNode > ParentNode;
public:
/** The class this node is associated with. */
TWeakObjectPtr<UClass> Class;
/** The blueprint this node is associated with. */
TWeakObjectPtr<UBlueprint> Blueprint;
/** Full object path to the class including _C, set for both blueprint and native */
FName ClassPath;
/** Full object path to the parent class, may be blueprint or native */
FName ParentClassPath;
/** Full path to the Blueprint that this class is loaded from, none for native classes*/
FName BlueprintAssetPath;
/** true if the class passed the filter. */
bool bPassesFilter;
/**
* true if the class passed all the sub-filters of the filter (regardless of the TextFilter one).
* This could be useful to verify e.g., that the parent class of a IsNodeAllowed() object is also valid (even though that parent will not likely pass the TextFilter).
*/
bool bPassesFilterRegardlessTextFilter;
/** Data for unloaded blueprints, only valid if the class is unloaded. */
TSharedPtr< class IUnloadedBlueprintData > UnloadedBlueprintData;
/** The property this node will be working on. */
TSharedPtr<class IPropertyHandle> PropertyHandle;
};