// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. #include "LocalizationDashboardPrivatePCH.h" #include "ILocalizationDashboardModule.h" #include "LocalizationDashboard.h" #include "LocalizationTarget.h" #include "SDockTab.h" #include "Features/IModularFeatures.h" #include "ILocalizationServiceProvider.h" #include "LocalizationTargetSetDetailCustomization.h" #include "LocalizationTargetDetailCustomization.h" #define LOCTEXT_NAMESPACE "LocalizationDashboard" class FLocalizationDashboardModule : public ILocalizationDashboardModule { public: FLocalizationDashboardModule() : Settings(GetMutableDefault(ULocalizationTargetSet::StaticClass())) { for (ULocalizationTarget*& Target : Settings->TargetObjects) { Target->UpdateStatusFromConflictReport(); Target->UpdateWordCountsFromCSV(); } } // Begin IModuleInterface interface virtual void StartupModule() override { ServiceProviders = IModularFeatures::Get().GetModularFeatureImplementations("LocalizationService"); ServiceProviders.Insert(nullptr, 0); // "None" FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); PropertyModule.RegisterCustomClassLayout("LocalizationTargetSet", FOnGetDetailCustomizationInstance::CreateLambda( []() -> TSharedRef { return MakeShareable( new FLocalizationTargetSetDetailCustomization()); }) ); PropertyModule.RegisterCustomClassLayout("LocalizationTarget", FOnGetDetailCustomizationInstance::CreateLambda( []() -> TSharedRef { return MakeShareable( new FLocalizationTargetDetailCustomization()); }) ); FLocalizationDashboard::Initialize(); } virtual void ShutdownModule() override { FLocalizationDashboard::Terminate(); FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); PropertyModule.UnregisterCustomClassLayout("LocalizationTarget"); PropertyModule.UnregisterCustomClassLayout("LocalizationTargetSet"); } // End IModuleInterface interface virtual void Show() { FLocalizationDashboard* const LocalizationDashboard = FLocalizationDashboard::Get(); if (LocalizationDashboard) { LocalizationDashboard->Show(); } } virtual const TArray& GetLocalizationServiceProviders() const { return ServiceProviders; } virtual ILocalizationServiceProvider* GetCurrentLocalizationServiceProvider() const { if(CurrentServiceProviderName == NAME_None) { return nullptr; } auto ServiceProviderNameComparator = [this](ILocalizationServiceProvider* const LSP) -> bool { return LSP ? LSP->GetName() == CurrentServiceProviderName : false; }; ILocalizationServiceProvider* const * LSP = ServiceProviders.FindByPredicate(ServiceProviderNameComparator); return LSP ? *LSP : nullptr; } private: TWeakObjectPtr Settings; TArray ServiceProviders; FName CurrentServiceProviderName; }; IMPLEMENT_MODULE(FLocalizationDashboardModule, "LocalizationDashboard"); #undef LOCTEXT_NAMESPACE