2015-03-05 00:08:26 -05:00
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
# include "LocalizationDashboardPrivatePCH.h"
# include "LocalizationTargetSetDetailCustomization.h"
# include "DetailLayoutBuilder.h"
2015-03-28 19:17:15 -04:00
# include "LocalizationTargetTypes.h"
2015-03-05 00:08:26 -05:00
# include "DetailWidgetRow.h"
# include "SLocalizationDashboardTargetRow.h"
2015-03-05 06:15:45 -05:00
# include "DetailCategoryBuilder.h"
# include "IDetailsView.h"
# include "LocalizationCommandletTasks.h"
2015-03-06 17:12:46 -05:00
# include "ObjectEditorUtils.h"
2015-05-26 07:13:31 -04:00
# include "ILocalizationServiceProvider.h"
# include "ILocalizationServiceModule.h"
# include "ILocalizationDashboardModule.h"
2015-03-05 00:08:26 -05:00
# define LOCTEXT_NAMESPACE "LocalizationDashboard"
FLocalizationTargetSetDetailCustomization : : FLocalizationTargetSetDetailCustomization ( )
: DetailLayoutBuilder ( nullptr )
2015-05-26 07:13:31 -04:00
, ServiceProviderCategoryBuilder ( nullptr )
2015-03-05 00:08:26 -05:00
, NewEntryIndexToBeInitialized ( INDEX_NONE )
{
2015-05-26 07:13:31 -04:00
TArray < ILocalizationServiceProvider * > ActualProviders = ILocalizationDashboardModule : : Get ( ) . GetLocalizationServiceProviders ( ) ;
for ( ILocalizationServiceProvider * ActualProvider : ActualProviders )
{
TSharedPtr < FLocalizationServiceProviderWrapper > Provider = MakeShareable ( new FLocalizationServiceProviderWrapper ( ActualProvider ) ) ;
Providers . Add ( Provider ) ;
}
2015-03-05 00:08:26 -05:00
}
2015-05-26 07:13:31 -04:00
class FindProviderPredicate
{
public :
FindProviderPredicate ( ILocalizationServiceProvider * const InActualProvider )
: ActualProvider ( InActualProvider )
{
}
2015-03-05 00:08:26 -05:00
2015-05-26 07:13:31 -04:00
bool operator ( ) ( const TSharedPtr < FLocalizationServiceProviderWrapper > & Provider )
{
return Provider - > Provider = = ActualProvider ;
}
2015-03-05 00:08:26 -05:00
2015-05-26 07:13:31 -04:00
private :
ILocalizationServiceProvider * ActualProvider ;
} ;
2015-03-05 00:08:26 -05:00
namespace
{
class FLocalizationDashboardCommands : public TCommands < FLocalizationDashboardCommands >
{
public :
FLocalizationDashboardCommands ( )
: TCommands < FLocalizationDashboardCommands > ( " LocalizationDashboard " , NSLOCTEXT ( " Contexts " , " LocalizationDashboard " , " Localization Dashboard " ) , NAME_None , FEditorStyle : : GetStyleSetName ( ) )
{
}
TSharedPtr < FUICommandInfo > GatherAllTargets ;
TSharedPtr < FUICommandInfo > ImportAllTargets ;
TSharedPtr < FUICommandInfo > ExportAllTargets ;
2015-05-21 22:15:36 -04:00
TSharedPtr < FUICommandInfo > CountWordsForAllTargets ;
2015-03-05 00:08:26 -05:00
TSharedPtr < FUICommandInfo > CompileAllTargets ;
/** Initialize commands */
virtual void RegisterCommands ( ) override ;
} ;
void FLocalizationDashboardCommands : : RegisterCommands ( )
{
2015-03-17 11:36:28 -04:00
UI_COMMAND ( GatherAllTargets , " Gather All " , " Gathers text for all targets in the project. " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
UI_COMMAND ( ImportAllTargets , " Import All " , " Imports translations for all cultures of all targets in the project. " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
UI_COMMAND ( ExportAllTargets , " Export All " , " Exports translations for all cultures of all targets in the project. " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2015-05-21 22:15:36 -04:00
UI_COMMAND ( CountWordsForAllTargets , " Count Words All " , " Counts translations for all targets in the project. " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2015-03-17 11:36:28 -04:00
UI_COMMAND ( CompileAllTargets , " Compile All " , " Compiles translations for all targets in the project. " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2015-03-05 00:08:26 -05:00
}
}
void FLocalizationTargetSetDetailCustomization : : CustomizeDetails ( IDetailLayoutBuilder & DetailBuilder )
{
DetailLayoutBuilder = & DetailBuilder ;
{
TArray < TWeakObjectPtr < UObject > > ObjectsBeingCustomized ;
DetailLayoutBuilder - > GetObjectsBeingCustomized ( ObjectsBeingCustomized ) ;
TargetSet = CastChecked < ULocalizationTargetSet > ( ObjectsBeingCustomized . Top ( ) . Get ( ) ) ;
}
{
2015-07-15 09:19:20 -04:00
const ILocalizationServiceProvider & LSP = ILocalizationServiceModule : : Get ( ) . GetProvider ( ) ;
2015-03-05 00:08:26 -05:00
TargetObjectsPropertyHandle = DetailBuilder . GetProperty ( GET_MEMBER_NAME_CHECKED ( ULocalizationTargetSet , TargetObjects ) ) ;
if ( TargetObjectsPropertyHandle - > IsValidHandle ( ) )
{
2015-03-06 17:12:46 -05:00
const FName CategoryName = FObjectEditorUtils : : GetCategoryFName ( TargetObjectsPropertyHandle - > GetProperty ( ) ) ;
IDetailCategoryBuilder & DetailCategoryBuilder = DetailBuilder . EditCategory ( CategoryName ) ;
2015-03-05 00:08:26 -05:00
TargetObjectsPropertyHandle - > MarkHiddenByCustomization ( ) ;
TargetsArrayPropertyHandle_OnNumElementsChanged = FSimpleDelegate : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : RebuildTargetsList ) ;
TargetObjectsPropertyHandle - > AsArray ( ) - > SetOnNumElementsChanged ( TargetsArrayPropertyHandle_OnNumElementsChanged ) ;
FLocalizationDashboardCommands : : Register ( ) ;
const TSharedRef < FUICommandList > CommandList = MakeShareable ( new FUICommandList ) ;
2015-07-15 09:19:20 -04:00
// Let the localization service extend this toolbar
TSharedRef < FExtender > LocalizationServiceExtender = MakeShareable ( new FExtender ) ;
if ( TargetSet . IsValid ( ) & & ILocalizationServiceModule : : Get ( ) . IsEnabled ( ) )
{
LSP . CustomizeTargetSetToolbar ( LocalizationServiceExtender , TargetSet ) ;
}
FToolBarBuilder ToolBarBuilder ( CommandList , FMultiBoxCustomization : : AllowCustomization ( " LocalizationDashboard " ) , LocalizationServiceExtender ) ;
2015-03-05 00:08:26 -05:00
2015-05-21 22:15:36 -04:00
TAttribute < FText > GatherAllTargetsToolTipTextAttribute = TAttribute < FText > : : Create ( TAttribute < FText > : : FGetter : : CreateLambda ( [ this ] ( ) - > FText
{
return CanGatherAllTargets ( ) ? FLocalizationDashboardCommands : : Get ( ) . GatherAllTargets - > GetDescription ( ) : LOCTEXT ( " GatherAllTargetsDisabledToolTip " , " At least one target must have a native culture specified in order to gather. " ) ;
} ) ) ;
CommandList - > MapAction ( FLocalizationDashboardCommands : : Get ( ) . GatherAllTargets , FExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : GatherAllTargets ) , FCanExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : CanGatherAllTargets ) ) ;
ToolBarBuilder . AddToolBarButton ( FLocalizationDashboardCommands : : Get ( ) . GatherAllTargets , NAME_None , TAttribute < FText > ( ) , GatherAllTargetsToolTipTextAttribute , FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " LocalizationDashboard.GatherAllTargets " ) ) ;
2015-03-05 00:08:26 -05:00
2015-05-21 22:15:36 -04:00
CommandList - > MapAction ( FLocalizationDashboardCommands : : Get ( ) . ImportAllTargets , FExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : ImportAllTargets ) , FCanExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : CanImportAllTargets ) ) ;
ToolBarBuilder . AddToolBarButton ( FLocalizationDashboardCommands : : Get ( ) . ImportAllTargets , NAME_None , TAttribute < FText > ( ) , TAttribute < FText > ( ) , FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " LocalizationDashboard.ImportAllTargetsAllCultures " ) ) ;
2015-03-05 00:08:26 -05:00
2015-05-21 22:15:36 -04:00
CommandList - > MapAction ( FLocalizationDashboardCommands : : Get ( ) . ExportAllTargets , FExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : ExportAllTargets ) , FCanExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : CanExportAllTargets ) ) ;
ToolBarBuilder . AddToolBarButton ( FLocalizationDashboardCommands : : Get ( ) . ExportAllTargets , NAME_None , TAttribute < FText > ( ) , TAttribute < FText > ( ) , FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " LocalizationDashboard.ExportAllTargetsAllCultures " ) ) ;
2015-03-05 00:08:26 -05:00
2015-05-21 22:15:36 -04:00
CommandList - > MapAction ( FLocalizationDashboardCommands : : Get ( ) . CountWordsForAllTargets , FExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : CountWordsForAllTargets ) , FCanExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : CanCountWordsForAllTargets ) ) ;
ToolBarBuilder . AddToolBarButton ( FLocalizationDashboardCommands : : Get ( ) . CountWordsForAllTargets , NAME_None , TAttribute < FText > ( ) , TAttribute < FText > ( ) , FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " LocalizationDashboard.CountWordsForAllTargets " ) ) ;
CommandList - > MapAction ( FLocalizationDashboardCommands : : Get ( ) . CompileAllTargets , FExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : CompileAllTargets ) , FCanExecuteAction : : CreateSP ( this , & FLocalizationTargetSetDetailCustomization : : CanCompileAllTargets ) ) ;
ToolBarBuilder . AddToolBarButton ( FLocalizationDashboardCommands : : Get ( ) . CompileAllTargets , NAME_None , TAttribute < FText > ( ) , TAttribute < FText > ( ) , FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " LocalizationDashboard.CompileAllTargetsAllCultures " ) ) ;
2015-03-05 00:08:26 -05:00
2015-07-15 09:19:20 -04:00
if ( ILocalizationServiceModule : : Get ( ) . IsEnabled ( ) )
{
ToolBarBuilder . BeginSection ( " LocalizationService " ) ;
ToolBarBuilder . EndSection ( ) ;
}
2015-03-05 00:08:26 -05:00
BuildTargetsList ( ) ;
2015-03-06 17:12:46 -05:00
DetailCategoryBuilder . AddCustomRow ( TargetObjectsPropertyHandle - > GetPropertyDisplayName ( ) )
2015-03-05 00:08:26 -05:00
. WholeRowContent ( )
[
SNew ( SVerticalBox )
+ SVerticalBox : : Slot ( )
. AutoHeight ( )
[
ToolBarBuilder . MakeWidget ( )
]
+ SVerticalBox : : Slot ( )
. AutoHeight ( )
[
SAssignNew ( TargetsListView , SListView < TSharedPtr < IPropertyHandle > > )
. OnGenerateRow ( this , & FLocalizationTargetSetDetailCustomization : : OnGenerateRow )
. ListItemsSource ( & TargetsList )
. SelectionMode ( ESelectionMode : : None )
. HeaderRow
(
SNew ( SHeaderRow )
+ SHeaderRow : : Column ( " Target " )
. DefaultLabel ( LOCTEXT ( " TargetColumnLabel " , " Target " ) )
. HAlignHeader ( HAlign_Left )
. HAlignCell ( HAlign_Left )
. VAlignCell ( VAlign_Center )
+ SHeaderRow : : Column ( " Status " )
2015-03-18 19:14:43 -04:00
. DefaultLabel ( LOCTEXT ( " StatusColumnLabel " , " Conflict Status " ) )
2015-03-05 00:08:26 -05:00
. HAlignHeader ( HAlign_Center )
. HAlignCell ( HAlign_Center )
. VAlignCell ( VAlign_Center )
+ SHeaderRow : : Column ( " Cultures " )
. DefaultLabel ( LOCTEXT ( " CulturesColumnLabel " , " Cultures " ) )
. HAlignHeader ( HAlign_Fill )
. HAlignCell ( HAlign_Fill )
. VAlignCell ( VAlign_Center )
+ SHeaderRow : : Column ( " WordCount " )
. DefaultLabel ( LOCTEXT ( " WordCountColumnLabel " , " Word Count " ) )
. HAlignHeader ( HAlign_Center )
. HAlignCell ( HAlign_Center )
. VAlignCell ( VAlign_Center )
+ SHeaderRow : : Column ( " Actions " )
. DefaultLabel ( LOCTEXT ( " ActionsColumnLabel " , " Actions " ) )
. HAlignHeader ( HAlign_Center )
. HAlignCell ( HAlign_Center )
. VAlignCell ( VAlign_Center )
)
]
+ SVerticalBox : : Slot ( )
. AutoHeight ( )
. VAlign ( VAlign_Center )
[
SNew ( SButton )
. Text ( LOCTEXT ( " AddNewTargetButtonLabel " , " Add New Target " ) )
. OnClicked ( this , & FLocalizationTargetSetDetailCustomization : : OnNewTargetButtonClicked )
]
] ;
}
}
2015-05-26 07:13:31 -04:00
ServiceProviderCategoryBuilder = & ( DetailLayoutBuilder - > EditCategory ( " ServiceProvider " , LOCTEXT ( " LocalizationServiceProvider " , " Localization Service Provider " ) , ECategoryPriority : : Important ) ) ;
FDetailWidgetRow & DetailWidgetRow = ServiceProviderCategoryBuilder - > AddCustomRow ( LOCTEXT ( " Selected LocalizationServiceProvider " , " Selected Localization Service Provider " ) ) ;
int32 CurrentlySelectedProviderIndex = 0 ;
for ( int ProviderIndex = 0 ; ProviderIndex < Providers . Num ( ) ; + + ProviderIndex )
{
FName CurrentlySelectedProviderName = ILocalizationServiceModule : : Get ( ) . GetProvider ( ) . GetName ( ) ;
if ( Providers [ ProviderIndex ] . IsValid ( ) & & Providers [ ProviderIndex ] - > Provider & & Providers [ ProviderIndex ] - > Provider - > GetName ( ) = = CurrentlySelectedProviderName )
{
CurrentlySelectedProviderIndex = ProviderIndex ;
break ;
}
}
DetailWidgetRow . NameContent ( )
[
SNew ( STextBlock )
. Text ( LOCTEXT ( " LocalizationServiceProvider " , " Localization Service Provider " ) )
] ;
DetailWidgetRow . ValueContent ( )
[
SNew ( SComboBox < TSharedPtr < FLocalizationServiceProviderWrapper > > )
. OptionsSource ( & ( Providers ) )
. OnSelectionChanged ( this , & FLocalizationTargetSetDetailCustomization : : ServiceProviderComboBox_OnSelectionChanged )
. OnGenerateWidget ( this , & FLocalizationTargetSetDetailCustomization : : ServiceProviderComboBox_OnGenerateWidget )
. InitiallySelectedItem ( Providers [ CurrentlySelectedProviderIndex ] )
. Content ( )
[
SNew ( STextBlock )
. Text_Lambda ( [ ] ( )
{
return ILocalizationServiceModule : : Get ( ) . GetProvider ( ) . GetDisplayName ( ) ;
} )
]
] ;
const ILocalizationServiceProvider & LSP = ILocalizationServiceModule : : Get ( ) . GetProvider ( ) ;
if ( ServiceProviderCategoryBuilder ! = nullptr )
{
LSP . CustomizeSettingsDetails ( * ServiceProviderCategoryBuilder ) ;
}
2015-03-05 00:08:26 -05:00
}
void FLocalizationTargetSetDetailCustomization : : BuildTargetsList ( )
{
const TSharedPtr < IPropertyHandleArray > TargetObjectsArrayPropertyHandle = TargetObjectsPropertyHandle - > AsArray ( ) ;
if ( TargetObjectsArrayPropertyHandle . IsValid ( ) )
{
uint32 ElementCount = 0 ;
TargetObjectsArrayPropertyHandle - > GetNumElements ( ElementCount ) ;
for ( uint32 i = 0 ; i < ElementCount ; + + i )
{
const TSharedPtr < IPropertyHandle > TargetObjectPropertyHandle = TargetObjectsArrayPropertyHandle - > GetElement ( i ) ;
TargetsList . Add ( TargetObjectPropertyHandle ) ;
}
}
}
void FLocalizationTargetSetDetailCustomization : : RebuildTargetsList ( )
{
const TSharedPtr < IPropertyHandleArray > TargetObjectsArrayPropertyHandle = TargetObjectsPropertyHandle - > AsArray ( ) ;
if ( TargetObjectsArrayPropertyHandle . IsValid ( ) & & NewEntryIndexToBeInitialized ! = INDEX_NONE )
{
const TSharedPtr < IPropertyHandle > TargetObjectPropertyHandle = TargetObjectsArrayPropertyHandle - > GetElement ( NewEntryIndexToBeInitialized ) ;
if ( TargetObjectPropertyHandle . IsValid ( ) & & TargetObjectPropertyHandle - > IsValidHandle ( ) )
{
ULocalizationTarget * const NewTarget = NewObject < ULocalizationTarget > ( TargetSet . Get ( ) ) ;
TArray < void * > RawData ;
TargetObjectsPropertyHandle - > AccessRawData ( RawData ) ;
void * RawDatum = RawData . Top ( ) ;
TArray < ULocalizationTarget * > & TargetObjectsArray = * ( reinterpret_cast < TArray < ULocalizationTarget * > * > ( RawDatum ) ) ;
FString NewTargetName = " NewTarget " ;
auto TargetNameIsIdentical = [ & ] ( ULocalizationTarget * Target ) - > bool
{
return ( Target ! = NewTarget ) & & Target & & ( Target - > Settings . Name = = NewTargetName ) ;
} ;
for ( uint32 i = 0 ; TargetObjectsArray . ContainsByPredicate ( TargetNameIsIdentical ) ; + + i )
{
NewTargetName = FString : : Printf ( TEXT ( " NewTarget%u " ) , i ) ;
}
NewTarget - > Settings . Name = NewTargetName ;
2015-04-22 16:39:20 -04:00
const int32 NativeCultureIndex = NewTarget - > Settings . SupportedCulturesStatistics . Add ( FCultureStatistics ( FInternationalization : : Get ( ) . GetCurrentCulture ( ) - > GetName ( ) ) ) ;
NewTarget - > Settings . NativeCultureIndex = NativeCultureIndex ;
2015-03-05 00:08:26 -05:00
const UObject * SetValue = NewTarget ;
TargetObjectPropertyHandle - > SetValue ( SetValue ) ;
NewEntryIndexToBeInitialized = INDEX_NONE ;
}
}
TargetsList . Empty ( ) ;
BuildTargetsList ( ) ;
if ( TargetsListView . IsValid ( ) )
{
TargetsListView - > RequestListRefresh ( ) ;
}
}
2015-05-26 07:13:31 -04:00
FText FLocalizationTargetSetDetailCustomization : : GetCurrentServiceProviderDisplayName ( ) const
{
const ILocalizationServiceProvider & LSP = ILocalizationServiceModule : : Get ( ) . GetProvider ( ) ;
return LSP . GetDisplayName ( ) ;
}
TSharedRef < SWidget > FLocalizationTargetSetDetailCustomization : : ServiceProviderComboBox_OnGenerateWidget ( TSharedPtr < FLocalizationServiceProviderWrapper > LSPWrapper ) const
{
ILocalizationServiceProvider * LSP = LSPWrapper . IsValid ( ) ? LSPWrapper - > Provider : nullptr ;
return SNew ( STextBlock )
. Text ( LSP ? LSP - > GetDisplayName ( ) : LOCTEXT ( " NoServiceProviderName " , " None " ) ) ;
}
void FLocalizationTargetSetDetailCustomization : : ServiceProviderComboBox_OnSelectionChanged ( TSharedPtr < FLocalizationServiceProviderWrapper > LSPWrapper , ESelectInfo : : Type SelectInfo )
{
ILocalizationServiceProvider * LSP = LSPWrapper . IsValid ( ) ? LSPWrapper - > Provider : nullptr ;
FName ServiceProviderName = LSP ? LSP - > GetName ( ) : FName ( TEXT ( " None " ) ) ;
ILocalizationServiceModule : : Get ( ) . SetProvider ( ServiceProviderName ) ;
if ( LSP & & ServiceProviderCategoryBuilder )
{
LSP - > CustomizeSettingsDetails ( * ServiceProviderCategoryBuilder ) ;
}
DetailLayoutBuilder - > ForceRefreshDetails ( ) ;
}
2015-03-05 00:08:26 -05:00
2015-05-21 22:15:36 -04:00
bool FLocalizationTargetSetDetailCustomization : : CanGatherAllTargets ( ) const
2015-03-05 00:08:26 -05:00
{
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
{
2015-05-21 22:15:36 -04:00
// If any target can be gathered, then gathering all can be executed.
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 & & LocalizationTarget - > Settings . SupportedCulturesStatistics . IsValidIndex ( LocalizationTarget - > Settings . NativeCultureIndex ) )
2015-03-05 00:08:26 -05:00
{
2015-05-21 22:15:36 -04:00
return true ;
2015-03-05 00:08:26 -05:00
}
2015-05-21 22:15:36 -04:00
}
2015-03-05 00:08:26 -05:00
2015-05-21 22:15:36 -04:00
return false ;
}
void FLocalizationTargetSetDetailCustomization : : GatherAllTargets ( )
{
// Save unsaved packages.
const bool bPromptUserToSave = true ;
const bool bSaveMapPackages = true ;
const bool bSaveContentPackages = true ;
const bool bFastSave = false ;
const bool bNotifyNoPackagesSaved = false ;
const bool bCanBeDeclined = true ;
bool DidPackagesNeedSaving ;
const bool WerePackagesSaved = FEditorFileUtils : : SaveDirtyPackages ( bPromptUserToSave , bSaveMapPackages , bSaveContentPackages , bFastSave , bNotifyNoPackagesSaved , bCanBeDeclined , & DidPackagesNeedSaving ) ;
if ( DidPackagesNeedSaving & & ! WerePackagesSaved )
{
// Give warning dialog.
const FText MessageText = NSLOCTEXT ( " LocalizationCultureActions " , " UnsavedPackagesWarningDialogMessage " , " There are unsaved changes. These changes may not be gathered from correctly. " ) ;
const FText TitleText = NSLOCTEXT ( " LocalizationCultureActions " , " UnsavedPackagesWarningDialogTitle " , " Unsaved Changes Before Gather " ) ;
switch ( FMessageDialog : : Open ( EAppMsgType : : OkCancel , MessageText , & TitleText ) )
{
case EAppReturnType : : Cancel :
{
return ;
}
break ;
}
}
TArray < ULocalizationTarget * > TargetObjectsToProcess ;
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
{
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 & & LocalizationTarget - > Settings . SupportedCulturesStatistics . IsValidIndex ( LocalizationTarget - > Settings . NativeCultureIndex ) )
{
TargetObjectsToProcess . Add ( LocalizationTarget ) ;
}
2015-03-05 00:08:26 -05:00
}
// Execute gather.
const TSharedPtr < SWindow > ParentWindow = FSlateApplication : : Get ( ) . FindWidgetWindow ( DetailLayoutBuilder - > GetDetailsView ( ) . AsShared ( ) ) ;
2015-05-21 22:15:36 -04:00
LocalizationCommandletTasks : : GatherTargets ( ParentWindow . ToSharedRef ( ) , TargetObjectsToProcess ) ;
2015-03-05 00:08:26 -05:00
2015-05-21 22:15:36 -04:00
for ( ULocalizationTarget * const LocalizationTarget : TargetObjectsToProcess )
2015-03-05 00:08:26 -05:00
{
UpdateTargetFromReports ( LocalizationTarget ) ;
}
}
2015-05-21 22:15:36 -04:00
bool FLocalizationTargetSetDetailCustomization : : CanImportAllTargets ( ) const
{
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
{
// If any target can be imported, then importing all can be executed.
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 )
{
return true ;
}
}
return false ;
}
2015-03-05 00:08:26 -05:00
void FLocalizationTargetSetDetailCustomization : : ImportAllTargets ( )
{
IDesktopPlatform * DesktopPlatform = FDesktopPlatformModule : : Get ( ) ;
if ( DesktopPlatform )
{
void * ParentWindowWindowHandle = NULL ;
const TSharedPtr < SWindow > ParentWindow = FSlateApplication : : Get ( ) . FindWidgetWindow ( DetailLayoutBuilder - > GetDetailsView ( ) . AsShared ( ) ) ;
if ( ParentWindow . IsValid ( ) & & ParentWindow - > GetNativeWindow ( ) . IsValid ( ) )
{
ParentWindowWindowHandle = ParentWindow - > GetNativeWindow ( ) - > GetOSWindowHandle ( ) ;
}
const FString DefaultPath = FPaths : : ConvertRelativePathToFull ( FPaths : : GameContentDir ( ) / TEXT ( " Localization " ) ) ;
// Prompt the user for the directory
FString OutputDirectory ;
if ( DesktopPlatform - > OpenDirectoryDialog ( ParentWindowWindowHandle , LOCTEXT ( " ImportAllTranslationsDialogTitle " , " Import All Translations from Directory " ) . ToString ( ) , DefaultPath , OutputDirectory ) )
{
2015-05-21 22:15:36 -04:00
TArray < ULocalizationTarget * > TargetObjectsToProcess ;
2015-03-05 00:08:26 -05:00
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
2015-05-21 22:15:36 -04:00
{
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 )
{
TargetObjectsToProcess . Add ( LocalizationTarget ) ;
}
}
LocalizationCommandletTasks : : ImportTargets ( ParentWindow . ToSharedRef ( ) , TargetObjectsToProcess , TOptional < FString > ( OutputDirectory ) ) ;
for ( ULocalizationTarget * const LocalizationTarget : TargetObjectsToProcess )
2015-03-05 00:08:26 -05:00
{
UpdateTargetFromReports ( LocalizationTarget ) ;
}
}
}
}
2015-05-21 22:15:36 -04:00
bool FLocalizationTargetSetDetailCustomization : : CanExportAllTargets ( ) const
{
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
{
// If any target can be imported, then exporting all can be executed.
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 )
{
return true ;
}
}
return false ;
}
2015-03-05 00:08:26 -05:00
void FLocalizationTargetSetDetailCustomization : : ExportAllTargets ( )
{
IDesktopPlatform * DesktopPlatform = FDesktopPlatformModule : : Get ( ) ;
if ( DesktopPlatform )
{
void * ParentWindowWindowHandle = NULL ;
const TSharedPtr < SWindow > ParentWindow = FSlateApplication : : Get ( ) . FindWidgetWindow ( DetailLayoutBuilder - > GetDetailsView ( ) . AsShared ( ) ) ;
if ( ParentWindow . IsValid ( ) & & ParentWindow - > GetNativeWindow ( ) . IsValid ( ) )
{
ParentWindowWindowHandle = ParentWindow - > GetNativeWindow ( ) - > GetOSWindowHandle ( ) ;
}
const FString DefaultPath = FPaths : : ConvertRelativePathToFull ( FPaths : : GameContentDir ( ) / TEXT ( " Localization " ) ) ;
// Prompt the user for the directory
FString OutputDirectory ;
if ( DesktopPlatform - > OpenDirectoryDialog ( ParentWindowWindowHandle , LOCTEXT ( " ExportAllTranslationsDialogTitle " , " Export All Translations to Directory " ) . ToString ( ) , DefaultPath , OutputDirectory ) )
{
2015-05-21 22:15:36 -04:00
TArray < ULocalizationTarget * > TargetObjectsToProcess ;
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
{
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 )
{
TargetObjectsToProcess . Add ( LocalizationTarget ) ;
}
}
LocalizationCommandletTasks : : ExportTargets ( ParentWindow . ToSharedRef ( ) , TargetObjectsToProcess , TOptional < FString > ( OutputDirectory ) ) ;
2015-03-05 00:08:26 -05:00
}
}
}
2015-05-21 22:15:36 -04:00
bool FLocalizationTargetSetDetailCustomization : : CanCountWordsForAllTargets ( ) const
{
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
{
// If any target can be imported, then counting words for all can be executed.
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 )
{
return true ;
}
}
return false ;
}
void FLocalizationTargetSetDetailCustomization : : CountWordsForAllTargets ( )
{
TArray < ULocalizationTarget * > TargetObjectsToProcess ;
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
{
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 )
{
TargetObjectsToProcess . Add ( LocalizationTarget ) ;
}
}
// Execute compile.
const TSharedPtr < SWindow > ParentWindow = FSlateApplication : : Get ( ) . FindWidgetWindow ( DetailLayoutBuilder - > GetDetailsView ( ) . AsShared ( ) ) ;
LocalizationCommandletTasks : : GenerateWordCountReportsForTargets ( ParentWindow . ToSharedRef ( ) , TargetObjectsToProcess ) ;
}
bool FLocalizationTargetSetDetailCustomization : : CanCompileAllTargets ( ) const
{
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
{
// If any target can be imported, then compiling all can be executed.
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 )
{
return true ;
}
}
return false ;
}
void FLocalizationTargetSetDetailCustomization : : CompileAllTargets ( )
{
TArray < ULocalizationTarget * > TargetObjectsToProcess ;
for ( ULocalizationTarget * const LocalizationTarget : TargetSet - > TargetObjects )
{
if ( LocalizationTarget & & LocalizationTarget - > Settings . SupportedCulturesStatistics . Num ( ) > 0 )
{
TargetObjectsToProcess . Add ( LocalizationTarget ) ;
}
}
// Execute compile.
const TSharedPtr < SWindow > ParentWindow = FSlateApplication : : Get ( ) . FindWidgetWindow ( DetailLayoutBuilder - > GetDetailsView ( ) . AsShared ( ) ) ;
LocalizationCommandletTasks : : CompileTargets ( ParentWindow . ToSharedRef ( ) , TargetObjectsToProcess ) ;
}
2015-03-05 00:08:26 -05:00
void FLocalizationTargetSetDetailCustomization : : UpdateTargetFromReports ( ULocalizationTarget * const LocalizationTarget )
{
//TArray< TSharedPtr<IPropertyHandle> > WordCountPropertyHandles;
//const TSharedPtr<IPropertyHandle> TargetSettingsPropertyHandle = TargetEditor->GetTargetSettingsPropertyHandle();
//if (TargetSettingsPropertyHandle.IsValid() && TargetSettingsPropertyHandle->IsValidHandle())
//{
// const TSharedPtr<IPropertyHandle> NativeCultureStatisticsPropertyHandle = TargetSettingsPropertyHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FLocalizationTargetSettings, NativeCultureStatistics));
// if (NativeCultureStatisticsPropertyHandle.IsValid() && NativeCultureStatisticsPropertyHandle->IsValidHandle())
// {
// const TSharedPtr<IPropertyHandle> WordCountPropertyHandle = NativeCultureStatisticsPropertyHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FCultureStatistics, WordCount));
// if (WordCountPropertyHandle.IsValid() && WordCountPropertyHandle->IsValidHandle())
// {
// WordCountPropertyHandles.Add(WordCountPropertyHandle);
// }
// }
// const TSharedPtr<IPropertyHandle> SupportedCulturesStatisticsPropertyHandle = TargetSettingsPropertyHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FLocalizationTargetSettings, SupportedCulturesStatistics));
// if (SupportedCulturesStatisticsPropertyHandle.IsValid() && SupportedCulturesStatisticsPropertyHandle->IsValidHandle())
// {
// uint32 SupportedCultureCount = 0;
// SupportedCulturesStatisticsPropertyHandle->GetNumChildren(SupportedCultureCount);
// for (uint32 i = 0; i < SupportedCultureCount; ++i)
// {
// const TSharedPtr<IPropertyHandle> ElementPropertyHandle = SupportedCulturesStatisticsPropertyHandle->GetChildHandle(i);
// if (ElementPropertyHandle.IsValid() && ElementPropertyHandle->IsValidHandle())
// {
// const TSharedPtr<IPropertyHandle> WordCountPropertyHandle = SupportedCulturesStatisticsPropertyHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FCultureStatistics, WordCount));
// if (WordCountPropertyHandle.IsValid() && WordCountPropertyHandle->IsValidHandle())
// {
// WordCountPropertyHandles.Add(WordCountPropertyHandle);
// }
// }
// }
// }
//}
//for (const TSharedPtr<IPropertyHandle>& WordCountPropertyHandle : WordCountPropertyHandles)
//{
// WordCountPropertyHandle->NotifyPreChange();
//}
2015-03-09 15:09:46 -04:00
LocalizationTarget - > UpdateWordCountsFromCSV ( ) ;
LocalizationTarget - > UpdateStatusFromConflictReport ( ) ;
2015-03-05 00:08:26 -05:00
//for (const TSharedPtr<IPropertyHandle>& WordCountPropertyHandle : WordCountPropertyHandles)
//{
// WordCountPropertyHandle->NotifyPostChange();
//}
}
TSharedRef < ITableRow > FLocalizationTargetSetDetailCustomization : : OnGenerateRow ( TSharedPtr < IPropertyHandle > TargetObjectPropertyHandle , const TSharedRef < STableViewBase > & Table )
{
return SNew ( SLocalizationDashboardTargetRow , Table , DetailLayoutBuilder - > GetPropertyUtilities ( ) , TargetObjectPropertyHandle . ToSharedRef ( ) ) ;
}
FReply FLocalizationTargetSetDetailCustomization : : OnNewTargetButtonClicked ( )
{
if ( TargetObjectsPropertyHandle . IsValid ( ) & & TargetObjectsPropertyHandle - > IsValidHandle ( ) )
{
uint32 NewElementIndex ;
TargetObjectsPropertyHandle - > AsArray ( ) - > GetNumElements ( NewElementIndex ) ;
TargetObjectsPropertyHandle - > AsArray ( ) - > AddItem ( ) ;
NewEntryIndexToBeInitialized = NewElementIndex ;
}
return FReply : : Handled ( ) ;
}
# undef LOCTEXT_NAMESPACE