void FInternationalizationSettingsModelDetails::CustomizeDetails( IDetailLayoutBuilder& DetailBuilder ) { FInternationalization& I18N = FInternationalization::Get(); TArray< TWeakObjectPtr<UObject> > ObjectsBeingCustomized; DetailBuilder.GetObjectsBeingCustomized(ObjectsBeingCustomized); check(ObjectsBeingCustomized.Num() == 1); if(ObjectsBeingCustomized[0].IsValid()) { Model = Cast<UInternationalizationSettingsModel>(ObjectsBeingCustomized[0].Get()); } check(Model.IsValid()); Model->OnSettingChanged().AddRaw(this, &FInternationalizationSettingsModelDetails::OnSettingsChanged); // If the saved culture is not the same as the actual current culture, a restart is needed to sync them fully and properly. FString SavedCultureName = Model->GetCultureName(); if ( !SavedCultureName.IsEmpty() && SavedCultureName != I18N.GetCurrentCulture()->GetName() ) { SelectedCulture = I18N.GetCulture(SavedCultureName); RequiresRestart = true; } else { SelectedCulture = I18N.GetCurrentCulture(); RequiresRestart = false; } // Populate all our cultures RefreshAvailableCultures(); IDetailCategoryBuilder& CategoryBuilder = DetailBuilder.EditCategory("Internationalization"); const FText LanguageToolTipText = LOCTEXT("EditorLanguageTooltip", "Change the Editor language (requires restart to take effect)"); // For use in the Slate macros below, the type must be typedef'd to compile. typedef FCulturePtr ThreadSafeCulturePtr; CategoryBuilder.AddCustomRow("Language") .NameContent() [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 0, 1, 0, 1 ) ) .FillWidth(1.0f) [ SNew(STextBlock) .Text(LOCTEXT("EditorLanguageLabel", "Language")) .Font(DetailBuilder.GetDetailFont()) .ToolTipText(LanguageToolTipText) ] ] .ValueContent() .MaxDesiredWidth(300.0f) [ SAssignNew(LanguageComboBox, SComboBox< ThreadSafeCulturePtr > ) .OptionsSource( &AvailableLanguages ) .InitiallySelectedItem(SelectedLanguage) .OnGenerateWidget(this, &FInternationalizationSettingsModelDetails::OnLanguageGenerateWidget, &DetailBuilder) .ToolTipText(LanguageToolTipText) .OnSelectionChanged(this, &FInternationalizationSettingsModelDetails::OnLanguageSelectionChanged) .Content() [ SNew(STextBlock) .Text(this, &FInternationalizationSettingsModelDetails::GetCurrentLanguageText) .Font(DetailBuilder.GetDetailFont()) ] ]; const FText RegionToolTipText = LOCTEXT("EditorRegionTooltip", "Change the Editor region (requires restart to take effect)"); CategoryBuilder.AddCustomRow("Region") .NameContent() [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 0, 1, 0, 1 ) ) .FillWidth(1.0f) [ SNew(STextBlock) .Text(LOCTEXT("EditorRegionLabel", "Region")) .Font(DetailBuilder.GetDetailFont()) .ToolTipText(RegionToolTipText) ] ] .ValueContent() .MaxDesiredWidth(300.0f) [ SAssignNew(RegionComboBox, SComboBox< ThreadSafeCulturePtr > ) .OptionsSource( &AvailableRegions ) .InitiallySelectedItem(SelectedCulture) .OnGenerateWidget(this, &FInternationalizationSettingsModelDetails::OnRegionGenerateWidget, &DetailBuilder) .ToolTipText(RegionToolTipText) .OnSelectionChanged(this, &FInternationalizationSettingsModelDetails::OnRegionSelectionChanged) .IsEnabled(this, &FInternationalizationSettingsModelDetails::IsRegionSelectionAllowed) .Content() [ SNew(STextBlock) .Text(this, &FInternationalizationSettingsModelDetails::GetCurrentRegionText) .Font(DetailBuilder.GetDetailFont()) ] ]; const FText FieldNamesToolTipText = LOCTEXT("EditorFieldNamesTooltip", "Toggle showing localized field names (requires restart to take effect)"); CategoryBuilder.AddCustomRow("FieldNames") .NameContent() [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 0, 1, 0, 1 ) ) .FillWidth(1.0f) [ SNew(STextBlock) .Text(LOCTEXT("EditorFieldNamesLabel", "Use Localized Field Names")) .Font(DetailBuilder.GetDetailFont()) .ToolTipText(FieldNamesToolTipText) ] ] .ValueContent() .MaxDesiredWidth(300.0f) [ SAssignNew(FieldNamesCheckBox, SCheckBox) .IsChecked(Model->ShouldLoadLocalizedPropertyNames() ? ESlateCheckBoxState::Checked : ESlateCheckBoxState::Unchecked) .ToolTipText(FieldNamesToolTipText) .OnCheckStateChanged(this, &FInternationalizationSettingsModelDetails::ShoudLoadLocalizedFieldNamesCheckChanged) ]; CategoryBuilder.AddCustomRow("RestartWarning") .Visibility( TAttribute<EVisibility>(this, &FInternationalizationSettingsModelDetails::GetInternationalizationRestartRowVisibility) ) .WholeRowContent() .HAlign(HAlign_Center) [ SNew( SHorizontalBox ) +SHorizontalBox::Slot() .AutoWidth() .VAlign(VAlign_Center) .Padding(2.0f, 0.0f) [ SNew( SImage ) .Image( FCoreStyle::Get().GetBrush("Icons.Warning") ) ] +SHorizontalBox::Slot() .FillWidth(1.0f) .VAlign(VAlign_Center) [ SNew( STextBlock ) .Text( LOCTEXT("RestartWarningText", "Changes require restart to take effect.") ) .Font(DetailBuilder.GetDetailFont()) ] ]; }
void FEditorStyleSettingsDetails::CustomizeDetails( IDetailLayoutBuilder& DetailBuilder ) { // Take a note of the culture we start out with OriginalCulture = FInternationalization::GetCurrentCulture(); FString SavedCultureName; if ( GConfig->GetString( TEXT("Internationalization"), TEXT("Culture"), SavedCultureName, GEngineIni ) ) { // If we have another language pended restart, change our original choice to that TSharedPtr<FCulture> SavedCulture = FInternationalization::GetCulture( SavedCultureName ); if ( SavedCulture.IsValid() ) { OriginalCulture = SavedCulture; } } // Populate all our cultures RefreshAvailableCultures(); IDetailCategoryBuilder& CategoryBuilder = DetailBuilder.EditCategory("Internationalization"); const FText LanguageToolTipText = LOCTEXT("EditorLanguageTooltip", "Change the Editor language (requires restart to take affect)"); CategoryBuilder.AddCustomRow("Language") .NameContent() [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 0, 1, 0, 1 ) ) .FillWidth(1.0f) [ SNew(STextBlock) .Text(LOCTEXT("EditorLanguageLabel", "Language")) .Font(DetailBuilder.GetDetailFont()) .ToolTipText(LanguageToolTipText) ] ] .ValueContent() .MaxDesiredWidth(300.0f) [ SNew(SComboBox< TSharedPtr<FCulture> >) .OptionsSource( &AvailableLanguages ) .InitiallySelectedItem(SelectedLanguage) .OnGenerateWidget(this, &FEditorStyleSettingsDetails::OnLanguageGenerateWidget, &DetailBuilder) .ToolTipText(LanguageToolTipText) .OnSelectionChanged(this, &FEditorStyleSettingsDetails::OnLanguageSelectionChanged) .Content() [ SNew(STextBlock) .Text(this, &FEditorStyleSettingsDetails::GetCurrentLanguageText) .Font(DetailBuilder.GetDetailFont()) ] ]; const FText RegionToolTipText = LOCTEXT("EditorRegionTooltip", "Change the Editor region (requires restart to take affect)"); CategoryBuilder.AddCustomRow("Region") .NameContent() [ SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 0, 1, 0, 1 ) ) .FillWidth(1.0f) [ SNew(STextBlock) .Text(LOCTEXT("EditorRegionLabel", "Region")) .Font(DetailBuilder.GetDetailFont()) .ToolTipText(RegionToolTipText) ] ] .ValueContent() .MaxDesiredWidth(300.0f) [ SAssignNew(RegionComboBox, SComboBox< TSharedPtr<FCulture> >) .OptionsSource( &AvailableRegions ) .InitiallySelectedItem(SelectedCulture) .OnGenerateWidget(this, &FEditorStyleSettingsDetails::OnRegionGenerateWidget, &DetailBuilder) .ToolTipText(RegionToolTipText) .OnSelectionChanged(this, &FEditorStyleSettingsDetails::OnRegionSelectionChanged) .IsEnabled(this, &FEditorStyleSettingsDetails::IsRegionSelectionAllowed) .Content() [ SNew(STextBlock) .Text(this, &FEditorStyleSettingsDetails::GetCurrentRegionText) .Font(DetailBuilder.GetDetailFont()) ] ]; }