You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Find-in-Blueprints now uses the same search data for both Find-in-all-Blueprints and Find-in-Blueprint. That searchdata is no longer stored in the asset registry, it is stored in the DDC and is managed by a new class. Searching is multithreaded to reduce overhead on the main thread during long searches in large projects. virtual UEdGraphNode::AddSearchMetaDataInfo which sets base find-in-blueprints metadata and can be overriden with more detailed search data. #change UEdGraphPin::GetDefaultAsString will return the text value as string if set Added FBlueprintEditorUtils::GetEntryAndResultNode, moving most of the functionality from FBlueprintGraphActionDetails::SetEntryAndResultNodes to the new function Added FBlueprintEditorUtils::GetGraphDescription to get graph descriptions from their metadata Added FBlueprintEditorUtils::GetNodeByGUID to find nodes using their Guid Blueprints now cache their search metadata on compile, this is a CPU intensive process and can no longer occur every time the Asset Registry queries for the Blueprint's tags #change Fixed an issue with finding a pin type's icon (UK2Node_Variable::GetVarIconFromPinType) where we would search for a class we already had available. Added an overridable function to UEdGraphNode to collect Blueprint search metadata. #change FJsonObjectConverter::UPropertyToJsonValue is now available outside of the .cpp #change Rewrote how Find-in-Blueprints works both for local and global searches, now uses Json to resolve a variety of format issues and also to make it much more extensible. #ttp 290376 - K2: Ability to search (find in blueprints) important pin values #ttp 298599 - ROCKET: TASK: K2: Search results should indicate where the instance is located in the results page (construction script, event graph, custom graph) #ttp 304819 - Blueprints: Editor: L10N: "Find in Blueprint" needs to work with other languages #ttp 308572 - UE4: ANIM: K2: Searching doesn't work for anim nodes right now #ttp 316678 - UE4: BLUEPRINTS: SHADOW: Default values are not searchable #ttp 318180 - UE4: K2: Cannot search for spawnactor using find in blueprints #ttp 320141 - UE4: K2: Find in blueprints does not find functions declared in another blueprint (if the function isn't called in that BP) [CL 2110494 by Michael Schoell in Main branch]
188 lines
7.3 KiB
C++
188 lines
7.3 KiB
C++
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
|
|
#define LOCTEXT_NAMESPACE "FMainFrameTranslationEditorMenu"
|
|
|
|
|
|
/**
|
|
* Static helper class for populating the "Cook Content" menu.
|
|
*/
|
|
class FMainFrameTranslationEditorMenu
|
|
{
|
|
public:
|
|
|
|
/**
|
|
* Creates the main frame translation editor sub menu.
|
|
*
|
|
* @param MenuBuilder The builder for the menu that owns this menu.
|
|
*/
|
|
static void MakeMainFrameTranslationEditorSubMenu( FMenuBuilder& MenuBuilder )
|
|
{
|
|
// Directories to search for localization
|
|
// Directory Structure should look like this:
|
|
// ProjectRootFolder/Content/Localization/ <-- This is the directory to add to the array below
|
|
// ProjectRootFolder/Content/Localization/LocalizationProjectName/
|
|
// ProjectRootFolder/Content/Localization/LocalizationProjectName/LocalizationProjectName.manifest
|
|
// ProjectRootFolder/Content/Localization/LocalizationProjectName/en/LocalizationProjectName.archive
|
|
// ProjectRootFolder/Content/Localization/LocalizationProjectName/jp/LocalizationProjectName.archive
|
|
// ProjectRootFolder/Content/Localization/LocalizationProjectName/ko/LocalizationProjectName.archive
|
|
// ...
|
|
|
|
// Add some specific directories
|
|
TArray<FString> DirectoriesToSearch;
|
|
DirectoriesToSearch.Add(FPaths::EngineContentDir() / TEXT("Localization"));
|
|
DirectoriesToSearch.Add(FPaths::GameContentDir() / TEXT("Localization"));
|
|
DirectoriesToSearch.Add(FPaths::EngineDir() / "Programs/NoRedist/UnrealEngineLauncher/Content/Localization");
|
|
|
|
// Also check any of these .ini specified localization paths
|
|
TArray < TArray<FString> > LocalizationPathArrays;
|
|
LocalizationPathArrays.Add(FPaths::GetGameLocalizationPaths());
|
|
LocalizationPathArrays.Add(FPaths::GetEditorLocalizationPaths());
|
|
LocalizationPathArrays.Add(FPaths::GetEngineLocalizationPaths());
|
|
LocalizationPathArrays.Add(FPaths::GetPropertyNameLocalizationPaths());
|
|
LocalizationPathArrays.Add(FPaths::GetToolTipLocalizationPaths());
|
|
for (TArray<FString> LocalizationPathArray : LocalizationPathArrays)
|
|
{
|
|
for (FString LocalizationPath : LocalizationPathArray)
|
|
{
|
|
DirectoriesToSearch.AddUnique(LocalizationPath);
|
|
}
|
|
}
|
|
|
|
// Find Manifest files
|
|
TArray<FString> ManifestFileNames;
|
|
for (FString DirectoryToSearch : DirectoriesToSearch)
|
|
{
|
|
// Search for .manifest files in this directory
|
|
const FString ManifestExtension = TEXT("manifest");
|
|
const FString TopFolderManifestFileWildcard = FString::Printf(TEXT("%s/*.%s"), *DirectoryToSearch, *ManifestExtension);
|
|
|
|
TArray<FString> TopFolderManifestFileNames;
|
|
IFileManager::Get().FindFiles(TopFolderManifestFileNames, *TopFolderManifestFileWildcard, true, false);
|
|
|
|
for (FString& CurrentTopFolderManifestFileName : TopFolderManifestFileNames)
|
|
{
|
|
// Add root back on
|
|
CurrentTopFolderManifestFileName = DirectoryToSearch / CurrentTopFolderManifestFileName;
|
|
ManifestFileNames.AddUnique(CurrentTopFolderManifestFileName);
|
|
}
|
|
|
|
// Search for .manifest files 1 directory deep
|
|
const FString DirectoryToSearchWildcard = FString::Printf(TEXT("%s/*"), *DirectoryToSearch);
|
|
TArray<FString> ProjectFolders;
|
|
IFileManager::Get().FindFiles(ProjectFolders, *DirectoryToSearchWildcard, false, true);
|
|
|
|
for (FString ProjectFolder : ProjectFolders)
|
|
{
|
|
// Add root back on
|
|
ProjectFolder = DirectoryToSearch / ProjectFolder;
|
|
const FString ProjectFolderManifestFileWildcard = FString::Printf(TEXT("%s/*.%s"), *ProjectFolder, *ManifestExtension);
|
|
|
|
TArray<FString> CurrentFolderManifestFileNames;
|
|
IFileManager::Get().FindFiles(CurrentFolderManifestFileNames, *ProjectFolderManifestFileWildcard, true, false);
|
|
|
|
for (FString& CurrentFolderManifestFileName : CurrentFolderManifestFileNames)
|
|
{
|
|
// Add root back on
|
|
CurrentFolderManifestFileName = ProjectFolder / CurrentFolderManifestFileName;
|
|
ManifestFileNames.AddUnique(CurrentFolderManifestFileName);
|
|
}
|
|
}
|
|
}
|
|
|
|
MenuBuilder.BeginSection("Project", LOCTEXT("Translation_ChooseProject", "Choose Project:"));
|
|
{
|
|
for (FString ManifestFileName : ManifestFileNames)
|
|
{
|
|
FString ManifestName = FPaths::GetBaseFilename(ManifestFileName);
|
|
|
|
FFormatNamedArguments Arguments;
|
|
Arguments.Add(TEXT("ManifestName"), FText::FromString(ManifestName));
|
|
MenuBuilder.AddSubMenu(
|
|
FText::Format(LOCTEXT("TranslationEditorSubMenuProjectLabel", "{ManifestName} Translations"), Arguments),
|
|
FText::Format(LOCTEXT("TranslationEditorSubMenuProjectToolTip", "Edit Translations for {ManifestName} Strings"), Arguments),
|
|
FNewMenuDelegate::CreateStatic(&FMainFrameTranslationEditorMenu::MakeMainFrameTranslationEditorSubMenuEditorProject, ManifestFileName)
|
|
);
|
|
}
|
|
}
|
|
|
|
MenuBuilder.EndSection();
|
|
}
|
|
|
|
/**
|
|
* Creates the main frame translation editor sub menu for editor translations.
|
|
*
|
|
* @param MenuBuilder The builder for the menu that owns this menu.
|
|
*/
|
|
static void MakeMainFrameTranslationEditorSubMenuEditorProject( FMenuBuilder& MenuBuilder, const FString ManifestFileName )
|
|
{
|
|
const FString ManifestFolder = FPaths::GetPath(ManifestFileName);
|
|
const FString ManifestFolderWildcard = FString::Printf(TEXT("%s/*"), *ManifestFolder);
|
|
|
|
TArray<FString> ArchiveFolders;
|
|
IFileManager::Get().FindFiles(ArchiveFolders, *ManifestFolderWildcard, false, true);
|
|
|
|
TArray<FString> ArchiveFileNames;
|
|
for (FString ArchiveFolder : ArchiveFolders)
|
|
{
|
|
// Add root back on
|
|
ArchiveFolder = ManifestFolder / ArchiveFolder;
|
|
|
|
const FString ArchiveExtension = TEXT("archive");
|
|
const FString ArchiveFileWildcard = FString::Printf(TEXT("%s/*.%s"), *ArchiveFolder, *ArchiveExtension);
|
|
|
|
TArray<FString> CurrentFolderArchiveFileNames;
|
|
IFileManager::Get().FindFiles(CurrentFolderArchiveFileNames, *ArchiveFileWildcard, true, false);
|
|
|
|
for (FString& CurrentFolderArchiveFileName : CurrentFolderArchiveFileNames)
|
|
{
|
|
// Add root back on
|
|
CurrentFolderArchiveFileName = ArchiveFolder / CurrentFolderArchiveFileName;
|
|
}
|
|
|
|
ArchiveFileNames.Append(CurrentFolderArchiveFileNames);
|
|
}
|
|
|
|
MenuBuilder.BeginSection("Language", LOCTEXT("Translation_ChooseLanguage", "Choose Language:"));
|
|
{
|
|
for (FString ArchiveFileName : ArchiveFileNames)
|
|
{
|
|
FString ArchiveName = FPaths::GetBaseFilename(FPaths::GetPath(ArchiveFileName));
|
|
FString ManifestName = FPaths::GetBaseFilename(ManifestFileName);
|
|
|
|
TSharedPtr<FCulture, ESPMode::ThreadSafe> Culture = FInternationalization::Get().GetCulture(ArchiveName);
|
|
if (Culture.IsValid())
|
|
{
|
|
ArchiveName = Culture->GetDisplayName();
|
|
}
|
|
|
|
FFormatNamedArguments Arguments;
|
|
Arguments.Add(TEXT("ArchiveName"), FText::FromString(ArchiveName));
|
|
Arguments.Add(TEXT("ManifestName"), FText::FromString(ManifestName));
|
|
|
|
MenuBuilder.AddMenuEntry(
|
|
FText::Format(LOCTEXT("TranslationEditorSubMenuLanguageLabel", "{ArchiveName} Translations"), Arguments),
|
|
FText::Format(LOCTEXT("TranslationEditorSubMenuLanguageToolTip", "Edit the {ArchiveName} Translations for the {ManifestName} Project"), Arguments),
|
|
FSlateIcon(),
|
|
FUIAction(FExecuteAction::CreateStatic(&FMainFrameTranslationEditorMenu::HandleMenuEntryExecute, ManifestFileName, ArchiveFileName))
|
|
);
|
|
}
|
|
}
|
|
|
|
MenuBuilder.EndSection();
|
|
}
|
|
|
|
private:
|
|
|
|
// Handles clicking a menu entry.
|
|
static void HandleMenuEntryExecute( FString ProjectName, FString Language)
|
|
{
|
|
FModuleManager::LoadModuleChecked<ITranslationEditor>("TranslationEditor").OpenTranslationEditor(ProjectName, Language);
|
|
}
|
|
};
|
|
|
|
|
|
#undef LOCTEXT_NAMESPACE
|