void FLandscapeToolKit::Init(const TSharedPtr<IToolkitHost>& InitToolkitHost) { auto NameToCommandMap = FLandscapeEditorCommands::Get().NameToCommandMap; FEdModeLandscape* LandscapeEdMode = GetEditorMode(); TSharedRef<FUICommandList> CommandList = LandscapeEdMode->GetUICommandList(); #define MAP_MODE(ModeName) CommandList->MapAction(NameToCommandMap.FindChecked(ModeName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeToolKit::OnChangeMode, FName(ModeName)), FCanExecuteAction::CreateSP(this, &FLandscapeToolKit::IsModeEnabled, FName(ModeName)), FIsActionChecked::CreateSP(this, &FLandscapeToolKit::IsModeActive, FName(ModeName)))); MAP_MODE("ToolMode_Manage"); MAP_MODE("ToolMode_Sculpt"); MAP_MODE("ToolMode_Paint"); #undef MAP_MODE #define MAP_TOOL(ToolName) CommandList->MapAction(NameToCommandMap.FindChecked("Tool_" ToolName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeToolKit::OnChangeTool, FName(ToolName)), FCanExecuteAction::CreateSP(this, &FLandscapeToolKit::IsToolEnabled, FName(ToolName)), FIsActionChecked::CreateSP(this, &FLandscapeToolKit::IsToolActive, FName(ToolName)))); MAP_TOOL("NewLandscape"); MAP_TOOL("ResizeLandscape"); MAP_TOOL("Sculpt"); MAP_TOOL("Paint"); MAP_TOOL("Smooth"); MAP_TOOL("Flatten"); MAP_TOOL("Ramp"); MAP_TOOL("Erosion"); MAP_TOOL("HydraErosion"); MAP_TOOL("Noise"); MAP_TOOL("Retopologize"); MAP_TOOL("Visibility"); MAP_TOOL("Select"); MAP_TOOL("AddComponent"); MAP_TOOL("DeleteComponent"); MAP_TOOL("MoveToLevel"); MAP_TOOL("Mask"); MAP_TOOL("CopyPaste"); MAP_TOOL("Mirror"); MAP_TOOL("Splines"); #undef MAP_TOOL #define MAP_BRUSH_SET(BrushSetName) CommandList->MapAction(NameToCommandMap.FindChecked(BrushSetName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeToolKit::OnChangeBrushSet, FName(BrushSetName)), FCanExecuteAction::CreateSP(this, &FLandscapeToolKit::IsBrushSetEnabled, FName(BrushSetName)), FIsActionChecked::CreateSP(this, &FLandscapeToolKit::IsBrushSetActive, FName(BrushSetName)))); MAP_BRUSH_SET("BrushSet_Circle"); MAP_BRUSH_SET("BrushSet_Alpha"); MAP_BRUSH_SET("BrushSet_Pattern"); MAP_BRUSH_SET("BrushSet_Component"); MAP_BRUSH_SET("BrushSet_Gizmo"); #undef MAP_BRUSH_SET #define MAP_BRUSH(BrushName) CommandList->MapAction(NameToCommandMap.FindChecked(BrushName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeToolKit::OnChangeBrush, FName(BrushName)), FCanExecuteAction(), FIsActionChecked::CreateSP(this, &FLandscapeToolKit::IsBrushActive, FName(BrushName)))); MAP_BRUSH("Circle_Smooth"); MAP_BRUSH("Circle_Linear"); MAP_BRUSH("Circle_Spherical"); MAP_BRUSH("Circle_Tip"); #undef MAP_BRUSH LandscapeEditorWidgets = SNew(SLandscapeEditor, SharedThis(this)); FModeToolkit::Init(InitToolkitHost); }
void FLandscapeEditorDetails::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder) { //FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor"); //TSharedPtr<SLevelEditor> LevelEditor = StaticCastSharedPtr<SLevelEditor>(LevelEditorModule.GetFirstLevelEditor()); //CommandList = LevelEditor->GetLevelEditorActions(); check(!CommandList.IsValid()); CommandList = MakeShareable(new FUICommandList); auto NameToCommandMap = FLandscapeEditorCommands::Get().NameToCommandMap; #define MAP_TOOL(ToolSetName) CommandList->MapAction(NameToCommandMap.FindChecked(ToolSetName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeEditorDetails::OnChangeTool, FName(ToolSetName)), FCanExecuteAction::CreateSP(this, &FLandscapeEditorDetails::IsToolEnabled, FName(ToolSetName)), FIsActionChecked::CreateStatic(&FLandscapeEditorDetails::IsToolActive, FName(ToolSetName)))); MAP_TOOL("ToolSet_NewLandscape"); MAP_TOOL("ToolSet_ResizeLandscape"); MAP_TOOL("ToolSet_Sculpt"); MAP_TOOL("ToolSet_Paint"); MAP_TOOL("ToolSet_Smooth"); MAP_TOOL("ToolSet_Flatten"); MAP_TOOL("ToolSet_Ramp"); MAP_TOOL("ToolSet_Erosion"); MAP_TOOL("ToolSet_HydraErosion"); MAP_TOOL("ToolSet_Noise"); MAP_TOOL("ToolSet_Retopologize"); MAP_TOOL("ToolSet_Visibility"); MAP_TOOL("ToolSet_Select"); MAP_TOOL("ToolSet_AddComponent"); MAP_TOOL("ToolSet_DeleteComponent"); MAP_TOOL("ToolSet_MoveToLevel"); MAP_TOOL("ToolSet_Mask"); MAP_TOOL("ToolSet_CopyPaste"); MAP_TOOL("ToolSet_Splines"); #undef MAP_TOOL #define MAP_BRUSH_SET(BrushSetName) CommandList->MapAction(NameToCommandMap.FindChecked(BrushSetName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeEditorDetails::OnChangeBrushSet, FName(BrushSetName)), FCanExecuteAction::CreateSP(this, &FLandscapeEditorDetails::IsBrushSetEnabled, FName(BrushSetName)), FIsActionChecked::CreateStatic(&FLandscapeEditorDetails::IsBrushSetActive, FName(BrushSetName)))); MAP_BRUSH_SET("BrushSet_Circle"); MAP_BRUSH_SET("BrushSet_Alpha"); MAP_BRUSH_SET("BrushSet_Pattern"); MAP_BRUSH_SET("BrushSet_Component"); MAP_BRUSH_SET("BrushSet_Gizmo"); #undef MAP_BRUSH_SET #define MAP_BRUSH(BrushName) CommandList->MapAction(NameToCommandMap.FindChecked(BrushName), FUIAction(FExecuteAction::CreateSP(this, &FLandscapeEditorDetails::OnChangeBrush, FName(BrushName)), FCanExecuteAction(), FIsActionChecked::CreateSP(this, &FLandscapeEditorDetails::IsBrushActive, FName(BrushName)))); MAP_BRUSH("Circle_Smooth"); MAP_BRUSH("Circle_Linear"); MAP_BRUSH("Circle_Spherical"); MAP_BRUSH("Circle_Tip"); #undef MAP_BRUSH static const FLinearColor BorderColor = FLinearColor(0.2f, 0.2f, 0.2f, 0.2f); static const FSlateBrush* BorderStyle = FEditorStyle::GetBrush("DetailsView.GroupSection"); IDetailCategoryBuilder& LandscapeEditorCategory = DetailBuilder.EditCategory("LandscapeEditor", TEXT(""), ECategoryPriority::TypeSpecific); LandscapeEditorCategory.AddCustomRow("") .Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateStatic(&FLandscapeEditorDetails::GetTargetLandscapeSelectorVisibility))) [ SNew(SComboButton) .OnGetMenuContent_Static(&FLandscapeEditorDetails::GetTargetLandscapeMenu) .ButtonContent() [ SNew(STextBlock) .Text(GetTargetLandscapeName()) ] ]; FToolSelectorBuilder ToolBrushSelectorButtons(CommandList, FMultiBoxCustomization::None); { FUIAction ToolSelectorUIAction; //ToolSelectorUIAction.IsActionVisibleDelegate.BindSP(this, &FLandscapeEditorDetails::GetToolSelectorIsVisible); ToolBrushSelectorButtons.AddComboButton( ToolSelectorUIAction, FOnGetContent::CreateSP(this, &FLandscapeEditorDetails::GetToolSelector), LOCTEXT("ToolSelector", "Tool"), TAttribute<FText>(this, &FLandscapeEditorDetails::GetCurrentToolName), LOCTEXT("ToolSelector.Tooltip", "Select Tool"), TAttribute<FSlateIcon>(this, &FLandscapeEditorDetails::GetCurrentToolIcon) ); FUIAction BrushSelectorUIAction; BrushSelectorUIAction.IsActionVisibleDelegate.BindSP(this, &FLandscapeEditorDetails::GetBrushSelectorIsVisible); ToolBrushSelectorButtons.AddComboButton( BrushSelectorUIAction, FOnGetContent::CreateSP(this, &FLandscapeEditorDetails::GetBrushSelector), LOCTEXT("BrushSelector", "Brush"), TAttribute<FText>(this, &FLandscapeEditorDetails::GetCurrentBrushName), LOCTEXT("BrushSelector.Tooltip", "Select Brush"), TAttribute<FSlateIcon>(this, &FLandscapeEditorDetails::GetCurrentBrushIcon) ); FUIAction BrushFalloffSelectorUIAction; BrushFalloffSelectorUIAction.IsActionVisibleDelegate.BindSP(this, &FLandscapeEditorDetails::GetBrushFalloffSelectorIsVisible); ToolBrushSelectorButtons.AddComboButton( BrushFalloffSelectorUIAction, FOnGetContent::CreateSP(this, &FLandscapeEditorDetails::GetBrushFalloffSelector), LOCTEXT("BrushFalloffSelector", "Falloff"), TAttribute<FText>(this, &FLandscapeEditorDetails::GetCurrentBrushFalloffName), LOCTEXT("BrushFalloffSelector.Tooltip", "Select Brush Falloff Type"), TAttribute<FSlateIcon>(this, &FLandscapeEditorDetails::GetCurrentBrushFalloffIcon) ); } LandscapeEditorCategory.AddCustomRow("") .Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, &FLandscapeEditorDetails::GetToolSelectorVisibility))) [ ToolBrushSelectorButtons.MakeWidget() ]; // Tools: Customization_NewLandscape = MakeShareable(new FLandscapeEditorDetailCustomization_NewLandscape); Customization_NewLandscape->CustomizeDetails(DetailBuilder); Customization_ResizeLandscape = MakeShareable(new FLandscapeEditorDetailCustomization_ResizeLandscape); Customization_ResizeLandscape->CustomizeDetails(DetailBuilder); Customization_CopyPaste = MakeShareable(new FLandscapeEditorDetailCustomization_CopyPaste); Customization_CopyPaste->CustomizeDetails(DetailBuilder); Customization_MiscTools = MakeShareable(new FLandscapeEditorDetailCustomization_MiscTools); Customization_MiscTools->CustomizeDetails(DetailBuilder); // Brushes: Customization_AlphaBrush = MakeShareable(new FLandscapeEditorDetailCustomization_AlphaBrush); Customization_AlphaBrush->CustomizeDetails(DetailBuilder); // Target Layers: Customization_TargetLayers = MakeShareable(new FLandscapeEditorDetailCustomization_TargetLayers); Customization_TargetLayers->CustomizeDetails(DetailBuilder); }