void FGraphNodeClassHelper::GatherClasses(const UClass* BaseClass, TArray<FGraphNodeClassData>& AvailableClasses) { const FString BaseClassName = BaseClass->GetName(); if (!RootNode.IsValid()) { BuildClassGraph(); } TSharedPtr<FGraphNodeClassNode> BaseNode = FindBaseClassNode(RootNode, BaseClassName); FindAllSubClasses(BaseNode, AvailableClasses); }
void FClassBrowseHelper::OnAssetRemoved(const class FAssetData& AssetData) { const FString* GeneratedClassname = AssetData.TagsAndValues.Find("GeneratedClass"); if (GeneratedClassname) { FString AssetClassName = *GeneratedClassname; UObject* Outer1(NULL); ResolveName(Outer1, AssetClassName, false, false); TSharedPtr<FClassDataNode> Node = FindBaseClassNode(RootNode, AssetClassName); if (Node.IsValid() && Node->ParentNode.IsValid()) { Node->ParentNode->SubNodes.RemoveSingleSwap(Node); } } }
void FClassBrowseHelper::OnAssetAdded(const class FAssetData& AssetData) { TSharedPtr<FClassDataNode> Node = CreateClassDataNode(AssetData); TSharedPtr<FClassDataNode> ParentNode; if (Node.IsValid()) { ParentNode = FindBaseClassNode(RootNode, Node->ParentClassName); } if (ParentNode.IsValid()) { ParentNode->SubNodes.Add(Node); Node->ParentNode = ParentNode; } }
TSharedPtr<FClassDataNode> FClassBrowseHelper::FindBaseClassNode(TSharedPtr<FClassDataNode> Node, const FString& ClassName) { TSharedPtr<FClassDataNode> RetNode; if (Node.IsValid()) { if (Node->Data.GetClassName() == ClassName) { return Node; } for (int32 i = 0; i < Node->SubNodes.Num(); i++) { RetNode = FindBaseClassNode(Node->SubNodes[i], ClassName); if (RetNode.IsValid()) { break; } } } return RetNode; }
void FGraphNodeClassHelper::OnAssetRemoved(const class FAssetData& AssetData) { const FString* GeneratedClassname = AssetData.TagsAndValues.Find("GeneratedClass"); if (GeneratedClassname) { FString AssetClassName = *GeneratedClassname; UObject* Outer1(NULL); ResolveName(Outer1, AssetClassName, false, false); TSharedPtr<FGraphNodeClassNode> Node = FindBaseClassNode(RootNode, AssetClassName); if (Node.IsValid() && Node->ParentNode.IsValid()) { Node->ParentNode->SubNodes.RemoveSingleSwap(Node); } } FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry")); if (!AssetRegistryModule.Get().IsLoadingAssets()) { UpdateAvailableBlueprintClasses(); } }
void FGraphNodeClassHelper::OnAssetAdded(const class FAssetData& AssetData) { TSharedPtr<FGraphNodeClassNode> Node = CreateClassDataNode(AssetData); TSharedPtr<FGraphNodeClassNode> ParentNode; if (Node.IsValid()) { ParentNode = FindBaseClassNode(RootNode, Node->ParentClassName); if (!IsPackageSaved(AssetData.PackageName)) { UnknownPackages.AddUnique(AssetData.PackageName); } else { const int32 PrevListCount = UnknownPackages.Num(); UnknownPackages.RemoveSingleSwap(AssetData.PackageName); if (UnknownPackages.Num() != PrevListCount) { OnPackageListUpdated.Broadcast(); } } } if (ParentNode.IsValid()) { ParentNode->AddUniqueSubNode(Node); Node->ParentNode = ParentNode; } FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry")); if (!AssetRegistryModule.Get().IsLoadingAssets()) { UpdateAvailableBlueprintClasses(); } }