4#include "Widgets/Docking/SDockTab.h" 
    5#include "AssetRegistryModule.h" 
    7#include "WorkspaceMenuStructureModule.h" 
    8#include "WorkspaceMenuStructure.h" 
    9#include "EdGraphNode_Comment.h" 
   22#define LOCTEXT_NAMESPACE "SDialogueBrowser" 
   24#if ENGINE_MINOR_VERSION >= 24 
   25    #define NY_ARRAY_COUNT UE_ARRAY_COUNT 
   27    #define NY_ARRAY_COUNT ARRAY_COUNT 
   49        const FName TabID = 
FName(*FString::Printf(TEXT(
"GlobalNotYetDialogueFindResults_%02d"), TabIdx + 1));
 
 
   62    const TSharedPtr<FDialogueSearchResult>& OutParentNode,
 
   66    if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid())
 
   70    bool bContainsSearchString = 
false;
 
   75        bContainsSearchString = 
true;
 
   76        const FText Category = FText::Format(
 
   77            LOCTEXT(
"DlgTextArgumentDisplayString", 
"TextArgument.DisplayString at index = {0}"),
 
   78            FText::AsNumber(ArgumentIndex)
 
   92        bContainsSearchString = 
true;
 
   93        const FText Category = FText::Format(
 
   94            LOCTEXT(
"DlgTextArgumentParticipantName", 
"TextArgument.ParticipantName at index = {0}"),
 
   95            FText::AsNumber(ArgumentIndex)
 
  109        bContainsSearchString = 
true;
 
  110        const FText Category = FText::Format(
 
  111            LOCTEXT(
"DlgTextArgumentVariableName", 
"TextArgument.VariableName at index = {0}"),
 
  112            FText::AsNumber(ArgumentIndex)
 
  128            bContainsSearchString = 
true;
 
  129            const FText Category = FText::Format(
 
  130                LOCTEXT(
"DlgTextArgumentCustomTextArgument", 
"TextArgument.CustomTextArgument at index = {0}"),
 
  131                FText::AsNumber(ArgumentIndex)
 
  135                FText::FromString(FoundName),
 
  142    return bContainsSearchString;
 
 
  148    const TSharedPtr<FDialogueSearchResult>& OutParentNode,
 
  149    int32 ConditionIndex,
 
  150    FName ConditionMemberName
 
  153    if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid())
 
  157    bool bContainsSearchString = 
false;
 
  163        bContainsSearchString = 
true;
 
  164        const FText Category = FText::Format(
 
  165            LOCTEXT(
"DlgConditionParticipantName", 
"{0}.ParticipantName at index = {1}"),
 
  166             FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
 
  180        bContainsSearchString = 
true;
 
  181        const FText Category = FText::Format(
 
  182            LOCTEXT(
"DlgConditionCallbackName", 
"{0}.CallbackName at index = {01}"),
 
  183            FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
 
  194    if (!InDlgCondition.
NameValue.IsNone() &&
 
  197        bContainsSearchString = 
true;
 
  198        const FText Category = FText::Format(
 
  199            LOCTEXT(
"DlgConditionNameValue", 
"{0}.NameValue at index = {1}"),
 
  200            FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
 
  204            FText::FromName(InDlgCondition.
NameValue),
 
  214        bContainsSearchString = 
true;
 
  215        const FText Category = FText::Format(
 
  216            LOCTEXT(
"DlgConditionOtherParticipantName", 
"{0}.OtherParticipantName at index = {1}"),
 
  217            FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
 
  231        bContainsSearchString = 
true;
 
  232        const FText Category = FText::Format(
 
  233            LOCTEXT(
"DlgConditionOtherVariableName", 
"{0}.OtherVariableName at index = {1}"),
 
  234            FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
 
  250            bContainsSearchString = 
true;
 
  251            const FText Category = FText::Format(
 
  252                LOCTEXT(
"DlgConditionCustomCondition", 
"{0}.CustomCondition at index = {1}"),
 
  253                FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
 
  257                FText::FromString(FoundName),
 
  270            bContainsSearchString = 
true;
 
  271            const FText Category = FText::Format(
 
  272                LOCTEXT(
"DlgConditioGUID", 
"{0}.GUID at index = {1}"),
 
  273                FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
 
  277                FText::FromString(FoundGUID),
 
  290            bContainsSearchString = 
true;
 
  291            const FText Category = FText::Format(
 
  292                LOCTEXT(
"DlgConditionIntValue", 
"{0}.IntValue at index = {1}"),
 
  293                FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
 
  307            bContainsSearchString = 
true;
 
  308            const FText Category = FText::Format(
 
  309                LOCTEXT(
"DlgConditionFloatValue", 
"{0}.FloatValue at index = {1}"),
 
  310                FText::FromName(ConditionMemberName), FText::AsNumber(ConditionIndex)
 
  321    return bContainsSearchString;
 
 
  327    const TSharedPtr<FDialogueSearchResult>& OutParentNode,
 
  329    FName EventMemberName
 
  332    if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid())
 
  336    bool bContainsSearchString = 
false;
 
  342        bContainsSearchString = 
true;
 
  343        const FText Category = FText::Format(
 
  344            LOCTEXT(
"DlgEventParticipantName", 
"{0}.ParticipantName at index = {1}"),
 
  345            FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
 
  359        bContainsSearchString = 
true;
 
  360        const FText Category = FText::Format(
 
  361            LOCTEXT(
"DlgEventCallbackName", 
"{0}.EventName at index = {1}"),
 
  362            FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
 
  376        bContainsSearchString = 
true;
 
  377        const FText Category = FText::Format(
 
  378            LOCTEXT(
"DlgEventNameValue", 
"{0}.NameValue at index = {1}"),
 
  379            FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
 
  394            bContainsSearchString = 
true;
 
  395            const FText Category = FText::Format(
 
  396                LOCTEXT(
"DlgEventCustomEvent", 
"{0}.CustomEvent at index = {1}"),
 
  397                FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
 
  401                FText::FromString(FoundName),
 
  414            bContainsSearchString = 
true;
 
  415            const FText Category = FText::Format(
 
  416                LOCTEXT(
"DlgEventIntValue", 
"{0}.IntValue at index = {1}"),
 
  417                FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
 
  431            bContainsSearchString = 
true;
 
  432            const FText Category = FText::Format(
 
  433                LOCTEXT(
"DlgEventFloatValue", 
"{0}.FloatValue at index = {1}"),
 
  434                FText::FromName(EventMemberName), FText::AsNumber(EventIndex)
 
  445    return bContainsSearchString;
 
 
  451    const TSharedPtr<FDialogueSearchResult>& OutParentNode
 
  454    if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid())
 
  458    bool bContainsSearchString = 
false;
 
  463        bContainsSearchString = 
true;
 
  464        const FText Category = LOCTEXT(
"DlgEdgText", 
"Edge.Text");
 
  479            LOCTEXT(
"EdgeTextNamespaceName_Found", 
"Edge Text Namespace"), TEXT(
"Edge Text Localization Namespace"),
 
  480            LOCTEXT(
"EdgeTextKey_Found", 
"Edge Text Key"), TEXT(
"Edge Text Localization Key")
 
  481        ) || bContainsSearchString;
 
  485    for (int32 Index = 0, Num = InDlgEdge.
Conditions.Num(); Index < Num; Index++)
 
  493        ) || bContainsSearchString;
 
  500        bContainsSearchString = 
true;
 
  501        const FText Category = LOCTEXT(
"DlgEdgeSpeakerState", 
"Edge.SpeakerState");
 
  511    const TArray<FDlgTextArgument>&  TextArguments = InDlgEdge.
GetTextArguments();
 
  512    for (int32 Index = 0, Num = TextArguments.Num(); Index < Num; Index++)
 
  514        bContainsSearchString = 
QueryDlgTextArgument(SearchFilter, TextArguments[Index], OutParentNode, Index) || bContainsSearchString;
 
  517    return bContainsSearchString;
 
 
  523    const TSharedPtr<FDialogueSearchResult>& OutParentNode
 
  526    if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid() || !IsValid(InGraphNode))
 
  531    bool bContainsSearchString = 
false;
 
  534    const FString NodeType = Node.GetNodeTypeString();
 
  537    const FText DisplayText = FText::Format(
 
  538        LOCTEXT(
"TreeGraphNodeCategory", 
"{0} Node at index {1}"),
 
  539        FText::FromString(NodeType), FText::AsNumber(NodeIndex)
 
  541    TSharedPtr<FDialogueSearchResult_GraphNode> TreeGraphNode = MakeShared<FDialogueSearchResult_GraphNode>(DisplayText, OutParentNode);
 
  542    TreeGraphNode->SetCategory(FText::FromString(NodeType));
 
  543    TreeGraphNode->SetGraphNode(InGraphNode);
 
  549        if (FString::FromInt(NodeIndex).Contains(SearchFilter.
SearchString))
 
  551            bContainsSearchString = 
true;
 
  558        if (InGraphNode->NodeComment.Contains(SearchFilter.
SearchString))
 
  560            bContainsSearchString = 
true;
 
  563                FText::FromString(InGraphNode->NodeComment),
 
  564                LOCTEXT(
"NodeCommentKey", 
"Comment on Node"),
 
  565                TEXT(
"Comment on Node")
 
  573        bContainsSearchString = 
true;
 
  577            LOCTEXT(
"ParticipantNameKey", 
"Participant Name"),
 
  578            TEXT(
"Participant Name")
 
  585        bContainsSearchString = 
true;
 
  589            LOCTEXT(
"DescriptionKey", 
"Text"),
 
  599            LOCTEXT(
"TextNamespaceName_Found", 
"Text Namespace"), TEXT(
"Text Localization Namespace"),
 
  600            LOCTEXT(
"TextKey_Found", 
"Text Key"), TEXT(
"Text Localization Key")
 
  601        ) || bContainsSearchString;
 
  606    for (int32 Index = 0, Num = EnterConditions.Num(); Index < Num; Index++)
 
  610            EnterConditions[Index],
 
  613            TEXT(
"EnterCondition")
 
  614        ) || bContainsSearchString;
 
  619    for (int32 Index = 0, Num = EnterEvents.Num(); Index < Num; Index++)
 
  627        ) || bContainsSearchString;
 
  634        bContainsSearchString = 
true;
 
  638            LOCTEXT(
"SpeakerStateKey", 
"Speaker State"),
 
  639            TEXT(
"Speaker State")
 
  645    for (int32 Index = 0, Num = TextArguments.Num(); Index < Num; Index++)
 
  647        bContainsSearchString = 
QueryDlgTextArgument(SearchFilter, TextArguments[Index], TreeGraphNode, Index) || bContainsSearchString;
 
  656            bContainsSearchString = 
true;
 
  659                FText::FromString(FoundName),
 
  660                LOCTEXT(
"NodeDataKey", 
"Node Data"),
 
  672            bContainsSearchString = 
true;
 
  675                FText::FromString(FoundGUID),
 
  676                LOCTEXT(
"NodeGUID", 
"Node GUID"),
 
  685        const TArray<FDlgSpeechSequenceEntry>& SpeechSequenceArray = SpeechSequence->GetNodeSpeechSequence();
 
  686        for (int32 Index = 0, Num = SpeechSequenceArray.Num(); Index < Num; Index++)
 
  693                bContainsSearchString = 
true;
 
  694                const FText Category = FText::Format(LOCTEXT(
"SequenceEntrySpeaker", 
"SequenceEntry.Speaker at index = {0}"), FText::AsNumber(Index));
 
  699            const FText TextCategory = FText::Format(LOCTEXT(
"SequenceEntryText", 
"SequenceEntry.Text at index = {0}"), FText::AsNumber(Index));
 
  702                bContainsSearchString = 
true;
 
  707                const FText NamespaceCategory = FText::FromString(TEXT(
"Namespace ") + TextCategory.ToString());
 
  708                const FText KeyCategory =  FText::FromString(TEXT(
"Key ") + TextCategory.ToString());
 
  712                    NamespaceCategory, NamespaceCategory.ToString(),
 
  713                    KeyCategory, KeyCategory.ToString()
 
  714                ) || bContainsSearchString;
 
  718            const FText EdgeTextCategory = FText::Format(LOCTEXT(
"SequenceEntryEdgeText", 
"SequenceEntry.EdgeText at index = {0}"), FText::AsNumber(Index));
 
  721                bContainsSearchString = 
true;
 
  726                const FText NamespaceCategory = FText::FromString(TEXT(
"Namespace ") + EdgeTextCategory.ToString());
 
  727                const FText KeyCategory =  FText::FromString(TEXT(
"Key ") + EdgeTextCategory.ToString());
 
  731                    NamespaceCategory, NamespaceCategory.ToString(),
 
  732                    KeyCategory, KeyCategory.ToString()
 
  733                ) || bContainsSearchString;
 
  740                bContainsSearchString = 
true;
 
  741                const FText Category = FText::Format(LOCTEXT(
"SequenceEntrySpeakerState", 
"SequenceEntry.SpeakerState at index = {0}"), FText::AsNumber(Index));
 
  747    if (bContainsSearchString)
 
  749        OutParentNode->AddChild(TreeGraphNode);
 
  752    return bContainsSearchString;
 
 
  758    const TSharedPtr<FDialogueSearchResult>& OutParentNode
 
  761    if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid() || !IsValid(InEdgeNode))
 
  765    bool bContainsSearchString = 
false;
 
  768    int32 FromParent = -1;
 
  778    const FText DisplayText = FText::Format(LOCTEXT(
"EdgeNodeDisplaytext", 
"Edge between {0} -> {1}"),
 
  779        FText::AsNumber(FromParent), FText::AsNumber(ToChild));
 
  780    TSharedPtr<FDialogueSearchResult_EdgeNode> TreeEdgeNode = MakeShared<FDialogueSearchResult_EdgeNode>(DisplayText, OutParentNode);
 
  781    TreeEdgeNode->SetCategory(DisplayText);
 
  782    TreeEdgeNode->SetEdgeNode(InEdgeNode);
 
  786    bContainsSearchString = 
QueryDlgEdge(SearchFilter, DialogueEdge, TreeEdgeNode) || bContainsSearchString;
 
  788    if (bContainsSearchString)
 
  790        OutParentNode->AddChild(TreeEdgeNode);
 
  793    return bContainsSearchString;
 
 
  798    const UEdGraphNode_Comment* InCommentNode,
 
  799    const TSharedPtr<FDialogueSearchResult>& OutParentNode
 
  807    if (InCommentNode->NodeComment.Contains(SearchFilter.
SearchString))
 
  809        const FText Category = LOCTEXT(
"TreeNodeCommentCategory", 
"Comment Node");
 
  810        TSharedPtr<FDialogueSearchResult_CommentNode> TreeCommentNode = MakeShared<FDialogueSearchResult_CommentNode>(Category, OutParentNode);
 
  811        TreeCommentNode->SetCategory(Category);
 
  812        TreeCommentNode->SetCommentNode(InCommentNode);
 
  816            FText::FromString(InCommentNode->NodeComment),
 
  821        OutParentNode->AddChild(TreeCommentNode);
 
 
  830    TSharedPtr<FDialogueSearchResult>& OutParentNode
 
  833    if (SearchFilter.
SearchString.IsEmpty() || !OutParentNode.IsValid() || !IsValid(InDialogue))
 
  838    const UDialogueGraph* Graph = CastChecked<UDialogueGraph>(InDialogue->GetGraph());
 
  839    TSharedPtr<FDialogueSearchResult_DialogueNode> TreeDialogueNode = MakeShared<FDialogueSearchResult_DialogueNode>(
 
  840            FText::FromString(InDialogue->GetPathName()), OutParentNode
 
  842    TreeDialogueNode->SetDialogue(InDialogue);
 
  845    bool bFoundInDialogue = 
false;
 
  849        bool bFoundInNode = 
false;
 
  852            bFoundInNode = 
QueryGraphNode(SearchFilter, GraphNode, TreeDialogueNode);
 
  856            bFoundInNode = 
QueryEdgeNode(SearchFilter, EdgeNode, TreeDialogueNode);
 
  858        else if (UEdGraphNode_Comment* CommentNode = Cast<UEdGraphNode_Comment>(Node))
 
  860            bFoundInNode = 
QueryCommentNode(SearchFilter, CommentNode, TreeDialogueNode);
 
  868        bFoundInDialogue = bFoundInNode || bFoundInDialogue;
 
  877            bFoundInDialogue = 
true;
 
  880                FText::FromString(FoundGUID),
 
  881                LOCTEXT(
"DialogueGUID", 
"Dialogue GUID"),
 
  882                TEXT(
"Dialogue.GUID")
 
  887    if (bFoundInDialogue)
 
  889        OutParentNode->AddChild(TreeDialogueNode);
 
  892    return bFoundInDialogue;
 
 
  897    TSharedPtr<FDialogueSearchResult>& OutParentNode
 
 
  914    int32 NumOpenGlobalFindResultsTabs = 0;
 
  919            NumOpenGlobalFindResultsTabs++;
 
  928    if (NumOpenGlobalFindResultsTabs > 1 || TabIdx > 0)
 
  931        return FText::Format(
 
  932            LOCTEXT(
"GlobalFindResultsTabNameWithIndex", 
"Find in Dialogues {0}"),
 
  933            FText::AsNumber(TabIdx + 1)
 
  938    return LOCTEXT(
"GlobalFindResultsTabName", 
"Find in Dialogues");
 
 
  946        if (FindResultsPtr.Pin() == FindResults)
 
 
  957    TAttribute<FText> Label = TAttribute<FText>::Create(
 
  961    TSharedRef<SDockTab> NewTab = SNew(SDockTab)
 
  962        .TabRole(ETabRole::NomadTab) 
 
  964        .ToolTipText(LOCTEXT(
"GlobalFindResultsTabTooltip", 
"Search for a string in all Dialogue assets."));
 
  967        .bIsSearchWindow(
false)
 
  968        .ContainingTab(NewTab);
 
  970    NewTab->SetContent(FindResults);
 
 
  978    TSet<FName> OpenGlobalTabIDs;
 
  983        TSharedPtr<SFindInDialogues> FindResults = FindResultsPtr.Pin();
 
  984        if (FindResults.IsValid())
 
  986            OpenGlobalTabIDs.Add(FindResults->GetHostTabId());
 
  994        if (!OpenGlobalTabIDs.Contains(GlobalTabId))
 
  998            if (NewTab.IsValid())
 
 1000                return StaticCastSharedRef<SFindInDialogues>(NewTab->GetContent());
 
 1005    return TSharedPtr<SFindInDialogues>();
 
 
 1011    TSharedPtr<SFindInDialogues> FindResultsToUse;
 
 1014        TSharedPtr<SFindInDialogues> FindResults = FindResultsPtr.Pin();
 
 1015        if (FindResults.IsValid())
 
 1017            FindResultsToUse = FindResults;
 
 1022    if (FindResultsToUse.IsValid())
 
 1033    return FindResultsToUse;
 
 
 1038    const TSharedRef<FGlobalTabmanager>& GlobalTabManager = FGlobalTabmanager::Get();
 
 1044    if (!ParentTabCategory.IsValid())
 
 1046        ParentTabCategory = WorkspaceMenu::GetMenuStructure().GetToolsCategory();
 
 1050        LOCTEXT(
"WorkspaceMenu_GlobalFindResultsCategory", 
"Find in Dialogues"),
 
 1051        LOCTEXT(
"GlobalFindResultsMenuTooltipText", 
"Find references to conditions, events, text and variables in all Dialogues."),
 
 1052        GlobalFindResultsIcon,
 
 1062#if ENGINE_MINOR_VERSION >= 23 
 1063        if (!GlobalTabManager->HasTabSpawner(TabID))
 
 1065        if (!GlobalTabManager->CanSpawnTab(TabID))
 
 1069                LOCTEXT(
"GlobalFindResultsDisplayName", 
"Find in Dialogues {0}"),
 
 1070                FText::AsNumber(TabIdx + 1)
 
 1072            GlobalTabManager->RegisterNomadTabSpawner(
 
 1076                .SetIcon(GlobalFindResultsIcon)
 
 
 1085    const TSharedRef<FGlobalTabmanager>& GlobalTabManager = FGlobalTabmanager::Get();
 
 1090        TSharedPtr<SFindInDialogues> FindResults = FindResultsPtr.Pin();
 
 1091        if (FindResults.IsValid())
 
 1093            FindResults->CloseHostTab();
 
 1103#if ENGINE_MINOR_VERSION >= 23 
 1104        if (!GlobalTabManager->HasTabSpawner(TabID))
 
 1106        if (!GlobalTabManager->CanSpawnTab(TabID))
 
 1109            GlobalTabManager->UnregisterNomadTabSpawner(TabID);
 
 
 1209    if (SearchDataPtr != 
nullptr)
 
 1216    if (InAssetData.GetClass() && !InAssetData.GetClass()->IsChildOf<
UDlgDialogue>())
 
 1231    SearchMap.Add(InAssetData.ObjectPath, MoveTemp(SearchData));
 
 
 1260#undef LOCTEXT_NAMESPACE 
 1261#undef NY_ARRAY_COUNT 
static const FName NAME_MODULE_AssetRegistry(TEXT("AssetRegistry"))
 
static void LoadAllDialoguesAndCheckGUIDs()
 
bool QueryEdgeNode(const FDialogueSearchFilter &SearchFilter, const UDialogueGraphNode_Edge *InEdgeNode, const TSharedPtr< FDialogueSearchResult > &OutParentNode)
 
FDelegateHandle OnAssetAddedHandle
 
void HandleOnAssetAdded(const FAssetData &InAssetData)
 
bool SearchForTextLocalizationData(const TSharedPtr< FDialogueSearchResult > &ParentNode, const FString &SearchString, const FText &Text, const FText &NamespaceCategory, const FString &NamespaceCommentString, const FText &KeyCategory, const FString &KeyCommentString)
 
TMap< FName, FDialogueSearchData > SearchMap
 
~FDialogueSearchManager()
 
TSharedPtr< FWorkspaceItem > GlobalFindResultsMenuItem
 
TSharedRef< SDockTab > SpawnGlobalFindResultsTab(const FSpawnTabArgs &SpawnTabArgs, int32 TabIdx)
 
TArray< TWeakPtr< SFindInDialogues > > GlobalFindResultsWidgets
 
TSharedPtr< SFindInDialogues > OpenGlobalFindResultsTab()
 
bool QueryDlgCondition(const FDialogueSearchFilter &SearchFilter, const FDlgCondition &InDlgCondition, const TSharedPtr< FDialogueSearchResult > &OutParentNode, int32 ConditionIndex=INDEX_NONE, FName ConditionMemberName=TEXT("Condition"))
 
bool QueryCommentNode(const FDialogueSearchFilter &SearchFilter, const UEdGraphNode_Comment *InCommentNode, const TSharedPtr< FDialogueSearchResult > &OutParentNode)
 
FText GetGlobalFindResultsTabLabel(int32 TabIdx)
 
FDelegateHandle OnAssetRenamedHandle
 
void HandleOnAssetRemoved(const FAssetData &InAssetData)
 
IAssetRegistry * AssetRegistry
 
bool QuerySingleDialogue(const FDialogueSearchFilter &SearchFilter, const UDlgDialogue *InDialogue, TSharedPtr< FDialogueSearchResult > &OutParentNode)
 
bool QueryGraphNode(const FDialogueSearchFilter &SearchFilter, const UDialogueGraphNode *InGraphNode, const TSharedPtr< FDialogueSearchResult > &OutParentNode)
 
FName GlobalFindResultsTabIDs[MAX_GLOBAL_DIALOGUE_SEARCH_RESULTS]
 
bool QueryDlgTextArgument(const FDialogueSearchFilter &SearchFilter, const FDlgTextArgument &InDlgTextArgument, const TSharedPtr< FDialogueSearchResult > &OutParentNode, int32 ArgumentIndex=INDEX_NONE)
 
FDelegateHandle OnAssetRemovedHandle
 
void HandleOnAssetRenamed(const FAssetData &InAssetData, const FString &InOldName)
 
void QueryAllDialogues(const FDialogueSearchFilter &SearchFilter, TSharedPtr< FDialogueSearchResult > &OutParentNode)
 
bool QueryDlgEdge(const FDialogueSearchFilter &SearchFilter, const FDlgEdge &InDlgEdge, const TSharedPtr< FDialogueSearchResult > &OutParentNode)
 
void Initialize(TSharedPtr< FWorkspaceItem > ParentTabCategory=nullptr)
 
void HandleOnAssetLoaded(UObject *InAsset)
 
void EnableGlobalFindResults(TSharedPtr< FWorkspaceItem > ParentTabCategory=nullptr)
 
FDelegateHandle OnAssetLoadedHandle
 
void HandleOnAssetRegistryFilesLoaded()
 
FDelegateHandle OnFilesLoadedHandle
 
TSharedPtr< FDialogueSearchResult > MakeChildTextNode(const TSharedPtr< FDialogueSearchResult > &ParentNode, const FText &DisplayName, const FText &Category, const FString &CommentString)
 
void DisableGlobalFindResults()
 
bool QueryDlgEvent(const FDialogueSearchFilter &SearchFilter, const FDlgEvent &InDlgEvent, const TSharedPtr< FDialogueSearchResult > &OutParentNode, int32 EventIndex=INDEX_NONE, FName EventMemberName=TEXT("Event"))
 
FDialogueSearchManager Self
 
TSharedPtr< SFindInDialogues > GetGlobalFindResults()
 
void CloseGlobalFindResults(const TSharedRef< SFindInDialogues > &FindResults)
 
static bool DoesGUIDContainString(const FGuid &GUID, const FString &SearchString, FString &OutGUIDString)
 
static bool DoesObjectClassNameContainString(const UObject *Object, const FString &SearchString, FString &OutNameString)
 
static const FName PROPERTY_DialogueSearch_TabIcon
 
static FName GetStyleSetName()
 
static TSharedPtr< SDockTab > InvokeTab(TSharedPtr< FTabManager > TabManager, const FTabId &TabID)
 
const TArray< UEdGraphNode * > & GetAllGraphNodes() const
 
UDialogueGraphNode * GetChildNode() const
 
bool HasChildNode() const
 
const FDlgEdge & GetDialogueEdge() const
 
UDialogueGraphNode * GetParentNode() const
 
bool HasParentNode() const
 
virtual int32 GetDialogueNodeIndex() const
 
const DlgNodeType & GetDialogueNode() const
 
virtual bool IsRootNode() const
 
UCLASS(BlueprintType, Meta = (DisplayThumbnail = "true"))
 
FGuid GetGUID() const
UFUNCTION(BlueprintPure, Category = "Dialogue|GUID")
 
static TArray< UDlgDialogue * > GetAllDialoguesFromMemory()
 
UCLASS(BlueprintType, ClassGroup = "Dialogue")
 
UCLASS(BlueprintType, Abstract, EditInlineNew, ClassGroup = "Dialogue")
 
virtual const TArray< FDlgTextArgument > & GetTextArguments() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
 
FGuid GetGUID() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
 
virtual FName GetNodeParticipantName() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
 
virtual const TArray< FDlgEvent > & GetNodeEnterEvents() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
 
virtual UDlgNodeData * GetNodeData() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
 
virtual FName GetSpeakerState() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
 
virtual const FText & GetNodeUnformattedText() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
 
virtual const TArray< FDlgCondition > & GetNodeEnterConditions() const
UFUNCTION(BlueprintPure, Category = "Dialogue|Node")
 
TWeakObjectPtr< UDlgDialogue > Dialogue
 
bool bIncludeCustomObjectNames
 
bool bIncludeTextLocalizationData
 
bool bIncludeDialogueGUID
 
bool bIncludeNumericalTypes
 
float FloatValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
 
UDlgConditionCustom * CustomCondition
UPROPERTY(Instanced, EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
 
FName OtherParticipantName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
 
FGuid GUID
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
 
int32 IntValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
 
FName OtherVariableName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
 
FName NameValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
 
FName ParticipantName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
 
FName CallbackName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Condition")
 
TArray< FDlgCondition > Conditions
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Edge")
 
const FText & GetUnformattedText() const
 
FName SpeakerState
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Edge")
 
const TArray< FDlgTextArgument > & GetTextArguments() const
 
int32 IntValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
 
FName NameValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
 
FName EventName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
 
UDlgEventCustom * CustomEvent
UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, Category = "Dialogue|Event")
 
float FloatValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
 
FName ParticipantName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Event")
 
FText Text
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Node", Meta = (MultiLine = true))
 
FName Speaker
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Node", Meta = (DisplayName = "Partic...
 
FName SpeakerState
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Node")
 
FText EdgeText
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|Node", Meta = (MultiLine = true))
 
UDlgTextArgumentCustom * CustomTextArgument
UPROPERTY(Instanced, EditAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
 
FString DisplayString
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
 
FName ParticipantName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")
 
FName VariableName
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dialogue|TextArgument")