/** Generates a lighting density sub-menu */ static void MakeLightingDensityMenu( FMenuBuilder& InMenuBuilder ) { InMenuBuilder.BeginSection("LevelEditorBuildLightingDensity", LOCTEXT( "LightingDensityHeading", "Density Rendering" ) ); { TSharedRef<SWidget> Ideal = SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 27.0f, 0.0f, 0.0f, 0.0f ) ) .FillWidth(1.0f) [ SNew(SSpinBox<float>) .MinValue(0.f) .MaxValue(100.f) .Value(FLevelEditorActionCallbacks::GetLightingDensityIdeal()) .OnValueChanged_Static(&FLevelEditorActionCallbacks::SetLightingDensityIdeal) ]; InMenuBuilder.AddWidget(Ideal, LOCTEXT("LightingDensity_Ideal","Ideal Density")); TSharedRef<SWidget> Maximum = SNew(SHorizontalBox) +SHorizontalBox::Slot() .FillWidth(1.0f) [ SNew(SSpinBox<float>) .MinValue(0.01f) .MaxValue(100.01f) .Value(FLevelEditorActionCallbacks::GetLightingDensityMaximum()) .OnValueChanged_Static(&FLevelEditorActionCallbacks::SetLightingDensityMaximum) ]; InMenuBuilder.AddWidget(Maximum, LOCTEXT("LightingDensity_Maximum","Maximum Density")); TSharedRef<SWidget> ClrScale = SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 35.0f, 0.0f, 0.0f, 0.0f ) ) .FillWidth(1.0f) [ SNew(SSpinBox<float>) .MinValue(0.f) .MaxValue(10.f) .Value(FLevelEditorActionCallbacks::GetLightingDensityColorScale()) .OnValueChanged_Static(&FLevelEditorActionCallbacks::SetLightingDensityColorScale) ]; InMenuBuilder.AddWidget(ClrScale, LOCTEXT("LightingDensity_ColorScale","Color Scale")); TSharedRef<SWidget> GrayScale = SNew(SHorizontalBox) +SHorizontalBox::Slot() .Padding( FMargin( 11.0f, 0.0f, 0.0f, 0.0f ) ) .FillWidth(1.0f) [ SNew(SSpinBox<float>) .MinValue(0.f) .MaxValue(10.f) .Value(FLevelEditorActionCallbacks::GetLightingDensityGrayscaleScale()) .OnValueChanged_Static(&FLevelEditorActionCallbacks::SetLightingDensityGrayscaleScale) ]; InMenuBuilder.AddWidget(GrayScale, LOCTEXT("LightingDensity_GrayscaleScale","Grayscale Scale")); InMenuBuilder.AddMenuEntry( FLevelEditorCommands::Get().LightingDensity_RenderGrayscale ); } InMenuBuilder.EndSection(); }
/** Generates 'eopn blueprint' sub-menu */ static void MakeOpenClassBPMenu(FMenuBuilder& InMenuBuilder) { FContentBrowserModule& ContentBrowserModule = FModuleManager::Get().LoadModuleChecked<FContentBrowserModule>(TEXT("ContentBrowser")); // Configure filter for asset picker FAssetPickerConfig Config; Config.Filter.ClassNames.Add(UBlueprint::StaticClass()->GetFName()); Config.InitialAssetViewType = EAssetViewType::List; Config.ThumbnailScale = 0; // make thumbnails as small as possible Config.OnAssetSelected = FOnAssetSelected::CreateStatic(&FBlueprintMenus::OnBPSelected); Config.bAllowDragging = false; // Don't show stuff in Engine Config.Filter.PackagePaths.Add("/Game"); Config.Filter.bRecursivePaths = true; TSharedRef<SWidget> Widget = SNew(SBox) .WidthOverride(300.f) .HeightOverride(300.f) [ ContentBrowserModule.Get().CreateAssetPicker(Config) ]; InMenuBuilder.BeginSection(NAME_None, LOCTEXT("BrowseHeader", "Browse")); { InMenuBuilder.AddWidget(Widget, FText::GetEmpty()); } InMenuBuilder.EndSection(); }
void FCollectionContextMenu::MakeSetColorSubMenu(FMenuBuilder& MenuBuilder) { // New Color MenuBuilder.AddMenuEntry( LOCTEXT("NewColor", "New Color"), LOCTEXT("NewCollectionColorTooltip", "Changes the color this collection should appear as."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FCollectionContextMenu::ExecutePickColor ) ) ); // Clear Color (only required if any of the selection has one) if ( SelectedHasCustomColors() ) { MenuBuilder.AddMenuEntry( LOCTEXT("ClearColor", "Clear Color"), LOCTEXT("ClearCollectionColorTooltip", "Resets the color this collection appears as."), FSlateIcon(), FUIAction( FExecuteAction::CreateSP( this, &FCollectionContextMenu::ExecuteResetColor ) ) ); } // Add all the custom colors the user has chosen so far TArray< FLinearColor > CustomColors; if ( CollectionViewUtils::HasCustomColors( &CustomColors ) ) { MenuBuilder.BeginSection("PathContextCustomColors", LOCTEXT("CustomColorsExistingColors", "Existing Colors") ); { for ( int32 ColorIndex = 0; ColorIndex < CustomColors.Num(); ColorIndex++ ) { const FLinearColor& Color = CustomColors[ ColorIndex ]; MenuBuilder.AddWidget( SNew(SHorizontalBox) +SHorizontalBox::Slot() .AutoWidth() .Padding(2, 0, 0, 0) [ SNew(SButton) .ButtonStyle( FEditorStyle::Get(), "Menu.Button" ) .OnClicked( this, &FCollectionContextMenu::OnColorClicked, Color ) [ SNew(SColorBlock) .Color( Color ) .Size( FVector2D(77,16) ) ] ], LOCTEXT("CustomColor", ""), /*bNoIndent=*/true ); } } MenuBuilder.EndSection(); } }
void FFrontendFilter_ArbitraryComparisonOperation::ModifyContextMenu(FMenuBuilder& MenuBuilder) { FUIAction Action; MenuBuilder.BeginSection(TEXT("ComparsionSection"), LOCTEXT("ComparisonSectionHeading", "AssetRegistrySearchable Comparison")); TSharedRef<SWidget> KeyWidget = SNew(SEditableTextBox) .Text_Raw(this, &FFrontendFilter_ArbitraryComparisonOperation::GetKeyValueAsText) .OnTextCommitted_Raw(this, &FFrontendFilter_ArbitraryComparisonOperation::OnKeyValueTextCommitted) .MinDesiredWidth(100.0f); TSharedRef<SWidget> ValueWidget = SNew(SEditableTextBox) .Text_Raw(this, &FFrontendFilter_ArbitraryComparisonOperation::GetTargetValueAsText) .OnTextCommitted_Raw(this, &FFrontendFilter_ArbitraryComparisonOperation::OnTargetValueTextCommitted) .MinDesiredWidth(100.0f); MenuBuilder.AddWidget(KeyWidget, LOCTEXT("KeyMenuDesc", "Tag")); MenuBuilder.AddWidget(ValueWidget, LOCTEXT("ValueMenuDesc", "Target Value")); #define UE_SET_COMP_OP(Operation) \ MenuBuilder.AddMenuEntry(FText::AsCultureInvariant(ConvertOperationToString(Operation)), \ LOCTEXT("SwitchOpsTooltip", "Switch comparsion type"), \ FSlateIcon(), \ FUIAction(FExecuteAction::CreateRaw(this, &FFrontendFilter_ArbitraryComparisonOperation::SetComparisonOperation, Operation), FCanExecuteAction(), FIsActionChecked::CreateRaw(this, &FFrontendFilter_ArbitraryComparisonOperation::IsComparisonOperationEqualTo, Operation)), \ NAME_None, \ EUserInterfaceActionType::RadioButton); UE_SET_COMP_OP(ETextFilterComparisonOperation::Equal); UE_SET_COMP_OP(ETextFilterComparisonOperation::NotEqual); UE_SET_COMP_OP(ETextFilterComparisonOperation::Less); UE_SET_COMP_OP(ETextFilterComparisonOperation::LessOrEqual); UE_SET_COMP_OP(ETextFilterComparisonOperation::Greater); UE_SET_COMP_OP(ETextFilterComparisonOperation::GreaterOrEqual); #undef UE_SET_COMP_OP MenuBuilder.EndSection(); }
void FAssetTypeActions_SoundWave::FillVoiceMenu(FMenuBuilder& MenuBuilder, TArray<TWeakObjectPtr<USoundWave>> Objects) { TArray<const UClass*> AllowedClasses; AllowedClasses.Add(UDialogueVoice::StaticClass()); TSharedRef<SWidget> VoicePicker = PropertyCustomizationHelpers::MakeAssetPickerWithMenu( FAssetData(), false, AllowedClasses, PropertyCustomizationHelpers::GetNewAssetFactoriesForClasses(AllowedClasses), FOnShouldFilterAsset(), FOnAssetSelected::CreateSP(this, &FAssetTypeActions_SoundWave::ExecuteCreateDialogueWave, Objects), FSimpleDelegate()); MenuBuilder.AddWidget(VoicePicker, FText::GetEmpty(), false); }
void FFrontendFilter_GameplayTags::ModifyContextMenu(FMenuBuilder& MenuBuilder) { FUIAction Action; MenuBuilder.BeginSection(TEXT("ComparsionSection"), LOCTEXT("ComparisonSectionHeading", "Gameplay Tag(s) to search for")); TSharedRef<SWidget> TagWidget = SNew(SVerticalBox) +SVerticalBox::Slot() .AutoHeight() .MaxHeight(300) [ SNew(SGameplayTagWidget, EditableContainers) .MultiSelect(true) .OnTagChanged_Raw(this, &FFrontendFilter_GameplayTags::OnTagWidgetChanged) ]; MenuBuilder.AddWidget(TagWidget, FText::GetEmpty(), /*bNoIndent=*/ false); }
void FSequencerObjectBindingNode::HandleLabelsSubMenuCreate(FMenuBuilder& MenuBuilder) { const TSet< TSharedRef<FSequencerDisplayNode> >& SelectedNodes = GetSequencer().GetSelection().GetSelectedOutlinerNodes(); TArray<FGuid> ObjectBindingIds; for (TSharedRef<const FSequencerDisplayNode> SelectedNode : SelectedNodes ) { if (SelectedNode->GetType() == ESequencerNode::Object) { TSharedRef<const FSequencerObjectBindingNode> ObjectBindingNode = StaticCastSharedRef<const FSequencerObjectBindingNode>(SelectedNode); FGuid ObjectBindingId = ObjectBindingNode->GetObjectBinding(); if (ObjectBindingId.IsValid()) { ObjectBindingIds.Add(ObjectBindingId); } } } MenuBuilder.AddWidget(SNew(SSequencerLabelEditor, GetSequencer(), ObjectBindingIds), FText::GetEmpty(), true); }
void SFlipbookKeyframeWidget::OpenSpritePickerMenu(FMenuBuilder& MenuBuilder) { const bool bAllowClear = true; TArray<const UClass*> AllowedClasses; AllowedClasses.Add(UPaperSprite::StaticClass()); FAssetData CurrentAssetData; if (const FPaperFlipbookKeyFrame* KeyFrame = GetKeyFrameData()) { CurrentAssetData = FAssetData(KeyFrame->Sprite); } TSharedRef<SWidget> AssetPickerWidget = PropertyCustomizationHelpers::MakeAssetPickerWithMenu(CurrentAssetData, bAllowClear, AllowedClasses, PropertyCustomizationHelpers::GetNewAssetFactoriesForClasses(AllowedClasses), FOnShouldFilterAsset(), FOnAssetSelected::CreateSP(this, &SFlipbookKeyframeWidget::OnAssetSelected), FSimpleDelegate::CreateSP(this, &SFlipbookKeyframeWidget::CloseMenu)); MenuBuilder.AddWidget(AssetPickerWidget, FText::GetEmpty(), /*bNoIndent=*/ true); }
void FWidgetBlock::CreateMenuEntry(FMenuBuilder& MenuBuilder) const { FText EntryLabel = (!Label.IsEmpty()) ? Label : NSLOCTEXT("WidgetBlock", "CustomControl", "Custom Control"); MenuBuilder.AddWidget(ContentWidget, FText::GetEmpty(), true); }
static void MakeScalabilityMenu( FMenuBuilder& MenuBuilder ) { MenuBuilder.AddWidget(SNew(SScalabilitySettings), FText(), true); }
/** Generates a lighting resolution sub-menu */ static void MakeLightingResolutionMenu( FMenuBuilder& InMenuBuilder ) { InMenuBuilder.BeginSection("LevelEditorBuildLightingResolution1", LOCTEXT( "LightingResolutionHeading1", "Primitive Types" ) ); { TSharedRef<SWidget> Meshes = SNew(SHorizontalBox) +SHorizontalBox::Slot() .AutoWidth() [ SNew( SCheckBox ) .Style( FEditorStyle::Get(), "Menu.CheckBox" ) .ToolTipText(LOCTEXT( "StaticMeshesToolTip", "Static Meshes will be adjusted if checked." )) .IsChecked_Static(&FLevelEditorActionCallbacks::IsLightingResolutionStaticMeshesChecked) .OnCheckStateChanged_Static(&FLevelEditorActionCallbacks::SetLightingResolutionStaticMeshes) .Content() [ SNew( STextBlock ) .Text( LOCTEXT("StaticMeshes", "Static Meshes") ) ] ] +SHorizontalBox::Slot() .AutoWidth() .Padding( FMargin( 4.0f, 0.0f, 11.0f, 0.0f ) ) [ SNew(SSpinBox<float>) .MinValue(4.f) .MaxValue(4096.f) .ToolTipText(LOCTEXT( "LightingResolutionStaticMeshesMinToolTip", "The minimum lightmap resolution for static mesh adjustments. Anything outside of Min/Max range will not be touched when adjusting." )) .Value(FLevelEditorActionCallbacks::GetLightingResolutionMinSMs()) .OnValueChanged_Static(&FLevelEditorActionCallbacks::SetLightingResolutionMinSMs) ] +SHorizontalBox::Slot() .AutoWidth() [ SNew(SSpinBox<float>) .MinValue(4.f) .MaxValue(4096.f) .ToolTipText(LOCTEXT( "LightingResolutionStaticMeshesMaxToolTip", "The maximum lightmap resolution for static mesh adjustments. Anything outside of Min/Max range will not be touched when adjusting." )) .Value(FLevelEditorActionCallbacks::GetLightingResolutionMaxSMs()) .OnValueChanged_Static(&FLevelEditorActionCallbacks::SetLightingResolutionMaxSMs) ]; InMenuBuilder.AddWidget(Meshes, FText::GetEmpty(), true); TSharedRef<SWidget> BSPs = SNew(SHorizontalBox) +SHorizontalBox::Slot() .AutoWidth() [ SNew( SCheckBox ) .Style(FEditorStyle::Get(), "Menu.CheckBox") .ToolTipText(LOCTEXT( "BSPSurfacesToolTip", "BSP Surfaces will be adjusted if checked." )) .IsChecked_Static(&FLevelEditorActionCallbacks::IsLightingResolutionBSPSurfacesChecked) .OnCheckStateChanged_Static(&FLevelEditorActionCallbacks::SetLightingResolutionBSPSurfaces) .Content() [ SNew( STextBlock ) .Text( LOCTEXT("BSPSurfaces", "BSP Surfaces") ) ] ] +SHorizontalBox::Slot() .AutoWidth() .Padding( FMargin( 6.0f, 0.0f, 4.0f, 0.0f ) ) [ SNew(SSpinBox<float>) .MinValue(1.f) .MaxValue(63556.f) .ToolTipText(LOCTEXT( "LightingResolutionBSPsMinToolTip", "The minimum lightmap resolution of a BSP surface to adjust. When outside of the Min/Max range, the BSP surface will no be altered." )) .Value(FLevelEditorActionCallbacks::GetLightingResolutionMinBSPs()) .OnValueChanged_Static(&FLevelEditorActionCallbacks::SetLightingResolutionMinBSPs) ] +SHorizontalBox::Slot() .AutoWidth() [ SNew(SSpinBox<float>) .MinValue(1.f) .MaxValue(63556.f) .ToolTipText(LOCTEXT( "LightingResolutionBSPsMaxToolTip", "The maximum lightmap resolution of a BSP surface to adjust. When outside of the Min/Max range, the BSP surface will no be altered." )) .Value(FLevelEditorActionCallbacks::GetLightingResolutionMaxBSPs()) .OnValueChanged_Static(&FLevelEditorActionCallbacks::SetLightingResolutionMaxBSPs) ]; InMenuBuilder.AddWidget(BSPs, FText::GetEmpty(), true); } InMenuBuilder.EndSection(); //LevelEditorBuildLightingResolution1 InMenuBuilder.BeginSection("LevelEditorBuildLightingResolution2", LOCTEXT( "LightingResolutionHeading2", "Select Options" ) ); { InMenuBuilder.AddMenuEntry( FLevelEditorCommands::Get().LightingResolution_CurrentLevel ); InMenuBuilder.AddMenuEntry( FLevelEditorCommands::Get().LightingResolution_SelectedLevels ); InMenuBuilder.AddMenuEntry( FLevelEditorCommands::Get().LightingResolution_AllLoadedLevels ); InMenuBuilder.AddMenuEntry( FLevelEditorCommands::Get().LightingResolution_SelectedObjectsOnly ); } InMenuBuilder.EndSection(); InMenuBuilder.BeginSection("LevelEditorBuildLightingResolution3", LOCTEXT( "LightingResolutionHeading3", "Ratio" ) ); { TSharedRef<SWidget> Ratio = SNew(SSpinBox<int32>) .MinValue(0) .MaxValue(400) .ToolTipText(LOCTEXT( "LightingResolutionRatioToolTip", "Ratio to apply (New Resolution = Ratio / 100.0f * CurrentResolution)." )) .Value(FLevelEditorActionCallbacks::GetLightingResolutionRatio()) .OnEndSliderMovement_Static(&FLevelEditorActionCallbacks::SetLightingResolutionRatio) .OnValueCommitted_Static(&FLevelEditorActionCallbacks::SetLightingResolutionRatioCommit); InMenuBuilder.AddWidget(Ratio, LOCTEXT( "LightingResolutionRatio", "Ratio" )); } InMenuBuilder.EndSection(); }