FReply FLandscapeEditorDetailCustomization_MiscTools::OnResetMirrorPointButtonClicked() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && IsToolActive(FName("Mirror"))) { LandscapeEdMode->CenterMirrorTool(); } return FReply::Handled(); }
FReply FLandscapeEditorDetailCustomization_MiscTools::OnResetRampButtonClicked() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && IsToolActive(FName("Ramp"))) { LandscapeEdMode->ResetRampTool(); } return FReply::Handled(); }
bool FLandscapeEditorDetailCustomization_MiscTools::GetApplyRampButtonIsEnabled() { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode != NULL && IsToolActive(FName("Ramp"))) { return LandscapeEdMode->CanApplyRampTool(); } return false; }
bool FLandscapeEditorDetails::GetToolSelectorIsVisible() const { FEdModeLandscape* LandscapeEdMode = GetEditorMode(); if (LandscapeEdMode && LandscapeEdMode->CurrentToolSet) { if (!IsToolActive("ToolSet_NewLandscape") || LandscapeEdMode->GetLandscapeList().Num() > 0) { return true; } } return false; }
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION void FLandscapeEditorDetailCustomization_MiscTools::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder) { IDetailCategoryBuilder& ToolsCategory = DetailBuilder.EditCategory("Tool Settings"); if (IsBrushSetActive("BrushSet_Component")) { ToolsCategory.AddCustomRow(LOCTEXT("Component.ClearSelection", "Clear Component Selection")) .Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateStatic(&FLandscapeEditorDetailCustomization_MiscTools::GetClearComponentSelectionVisibility))) [ SNew(SButton) .Text(LOCTEXT("Component.ClearSelection", "Clear Component Selection")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_MiscTools::OnClearComponentSelectionButtonClicked) ]; } //if (IsToolActive("Mask")) { ToolsCategory.AddCustomRow(LOCTEXT("Mask.ClearSelection", "Clear Region Selection")) .Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateStatic(&FLandscapeEditorDetailCustomization_MiscTools::GetClearRegionSelectionVisibility))) [ SNew(SButton) .Text(LOCTEXT("Mask.ClearSelection", "Clear Region Selection")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_MiscTools::OnClearRegionSelectionButtonClicked) ]; } if (IsToolActive("Splines")) { ToolsCategory.AddCustomRow(LOCTEXT("ApplySplinesLabel", "Apply Splines")) [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .Padding(0, 6, 0, 0) [ SNew(STextBlock) .Font(DetailBuilder.GetDetailFont()) .ShadowOffset(FVector2D::UnitVector) .Text(LOCTEXT("Spline.ApplySplines", "Deform Landscape to Splines:")) ] ]; ToolsCategory.AddCustomRow(LOCTEXT("ApplySplinesLabel", "Apply Splines")) [ SNew(SHorizontalBox) + SHorizontalBox::Slot() [ SNew(SButton) .ToolTipText(LOCTEXT("Spline.ApplySplines.All.Tooltip", "Deforms and paints the landscape to fit all the landscape spline segments and controlpoints.")) .Text(LOCTEXT("Spline.ApplySplines.All", "All Splines")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_MiscTools::OnApplyAllSplinesButtonClicked) ] + SHorizontalBox::Slot() [ SNew(SButton) .ToolTipText(LOCTEXT("Spline.ApplySplines.Tooltip", "Deforms and paints the landscape to fit only the selected landscape spline segments and controlpoints.")) .Text(LOCTEXT("Spline.ApplySplines.Selected", "Only Selected")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_MiscTools::OnApplySelectedSplinesButtonClicked) ] ]; ToolsCategory.AddCustomRow(LOCTEXT("Spline.bUseAutoRotateControlPoint.Selected", "Use Auto Rotate Control Point")) [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .Padding(0, 6, 0, 0) [ SNew(SCheckBox) .OnCheckStateChanged(this, &FLandscapeEditorDetailCustomization_MiscTools::OnbUseAutoRotateControlPointChanged) .IsChecked(this, &FLandscapeEditorDetailCustomization_MiscTools::GetbUseAutoRotateControlPoint) .Content() [ SNew(STextBlock).Text(LOCTEXT("Spline.bUseAutoRotateControlPoint.Selected", "Use Auto Rotate Control Point")) ] ] ]; } if (IsToolActive("Ramp")) { ToolsCategory.AddCustomRow(LOCTEXT("RampLabel", "Ramp")) [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .Padding(0, 6, 0, 0) [ SNew(STextBlock) .Font(DetailBuilder.GetDetailFont()) .ShadowOffset(FVector2D::UnitVector) .Text(LOCTEXT("Ramp.Hint", "Click to add ramp points, then press \"Add Ramp\".")) ] ]; ToolsCategory.AddCustomRow(LOCTEXT("ApplyRampLabel", "Apply Ramp")) [ SNew(SBox) .Padding(FMargin(0, 0, 12, 0)) // Line up with the other properties due to having no reset to default button [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .Padding(0, 0, 3, 0) [ SNew(SButton) .Text(LOCTEXT("Ramp.Reset", "Reset")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_MiscTools::OnResetRampButtonClicked) ] + SHorizontalBox::Slot() .Padding(3, 0, 0, 0) [ SNew(SButton) .IsEnabled_Static(&FLandscapeEditorDetailCustomization_MiscTools::GetApplyRampButtonIsEnabled) .Text(LOCTEXT("Ramp.Apply", "Add Ramp")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_MiscTools::OnApplyRampButtonClicked) ] ] ]; } if (IsToolActive("Mirror")) { ToolsCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, MirrorPoint)); ToolsCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, MirrorOp)); ToolsCategory.AddCustomRow(LOCTEXT("ApplyMirrorLabel", "Apply Mirror")) [ SNew(SBox) .Padding(FMargin(0, 0, 12, 0)) // Line up with the other properties due to having no reset to default button [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .Padding(0, 0, 3, 0) [ SNew(SButton) .Text(LOCTEXT("Mirror.Reset", "Recenter")) .HAlign(HAlign_Center) .OnClicked_Lambda(&FLandscapeEditorDetailCustomization_MiscTools::OnResetMirrorPointButtonClicked) ] + SHorizontalBox::Slot() .Padding(3, 0, 0, 0) [ SNew(SButton) //.IsEnabled_Static(&FLandscapeEditorDetailCustomization_MiscTools::GetApplyMirrorButtonIsEnabled) .Text(LOCTEXT("Mirror.Apply", "Apply")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_MiscTools::OnApplyMirrorButtonClicked) ] ] ]; } }
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION void FLandscapeEditorDetailCustomization_CopyPaste::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder) { if (!IsToolActive("ToolSet_CopyPaste")) { return; } IDetailCategoryBuilder& ToolsCategory = DetailBuilder.EditCategory("Tool Settings"); ToolsCategory.AddCustomRow("Copy Data to Gizmo") [ SNew(SButton) .ToolTipText(LOCTEXT("CopyToGizmo.Tooltip", "Copies the data within the gizmo bounds to the gizmo taking into account any masking from selected regions.")) .Text(LOCTEXT("CopyToGizmo", "Copy Data to Gizmo")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_CopyPaste::OnCopyToGizmoButtonClicked) ]; ToolsCategory.AddCustomRow("Fit Gizmo to Selected Regions") [ SNew(SButton) .ToolTipText(LOCTEXT("FitGizmoToSelection.Tooltip", "Positions and resizes the gizmo so that it completely encompasses all region selections.")) .Text(LOCTEXT("FitGizmoToSelection", "Fit Gizmo to Selected Regions")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_CopyPaste::OnFitGizmoToSelectionButtonClicked) ]; ToolsCategory.AddCustomRow("Fit Height Values to Gizmo Size") [ SNew(SButton) .ToolTipText(LOCTEXT("FitHeightsToGizmo.Tooltip", "Scales the data in the gizmo to fit the gizmo's Z size")) .Text(LOCTEXT("FitHeightsToGizmo", "Fit Height Values to Gizmo Size")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_CopyPaste::OnFitHeightsToGizmoButtonClicked) ]; ToolsCategory.AddCustomRow("Clear Gizmo Data") [ SNew(SButton) .ToolTipText(LOCTEXT("ClearGizmoData.Tooltip", "Clears the gizmo of any copied data.")) .Text(LOCTEXT("ClearGizmoData", "Clear Gizmo Data")) .HAlign(HAlign_Center) .OnClicked_Static(&FLandscapeEditorDetailCustomization_CopyPaste::OnClearGizmoDataButtonClicked) ]; IDetailGroup& GizmoImportExportGroup = ToolsCategory.AddGroup("Gizmo Import / Export", LOCTEXT("ImportExportTitle", "Gizmo Import / Export").ToString(), true); TSharedRef<IPropertyHandle> PropertyHandle_Heightmap = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, GizmoHeightmapFilenameString)); DetailBuilder.HideProperty(PropertyHandle_Heightmap); GizmoImportExportGroup.AddPropertyRow(PropertyHandle_Heightmap) .CustomWidget() .NameContent() [ PropertyHandle_Heightmap->CreatePropertyNameWidget() ] .ValueContent() .MinDesiredWidth(250.0f) .MaxDesiredWidth(0) [ SNew(SHorizontalBox) + SHorizontalBox::Slot() [ PropertyHandle_Heightmap->CreatePropertyValueWidget() ] + SHorizontalBox::Slot() .AutoWidth() //.Padding(0,0,12,0) // Line up with the other properties due to having no reset to default button [ SNew(SButton) .ContentPadding(FMargin(4, 0)) .Text(NSLOCTEXT("UnrealEd", "GenericOpenDialog", "...")) .OnClicked_Static(&FLandscapeEditorDetailCustomization_CopyPaste::OnGizmoHeightmapFilenameButtonClicked, PropertyHandle_Heightmap) ] ]; TSharedRef<IPropertyHandle> PropertyHandle_ImportSize = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, GizmoImportSize)); TSharedRef<IPropertyHandle> PropertyHandle_ImportSize_X = PropertyHandle_ImportSize->GetChildHandle("X").ToSharedRef(); TSharedRef<IPropertyHandle> PropertyHandle_ImportSize_Y = PropertyHandle_ImportSize->GetChildHandle("Y").ToSharedRef(); DetailBuilder.HideProperty(PropertyHandle_ImportSize); GizmoImportExportGroup.AddPropertyRow(PropertyHandle_ImportSize) .CustomWidget() .NameContent() [ PropertyHandle_ImportSize->CreatePropertyNameWidget() ] .ValueContent() [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .FillWidth(1) [ SNew(SNumericEntryBox<int32>) .LabelVAlign(VAlign_Center) .Font(DetailBuilder.GetDetailFont()) .MinValue(1) .MaxValue(8192) .MinSliderValue(1) .MaxSliderValue(8192) .AllowSpin(true) .UndeterminedString(NSLOCTEXT("PropertyEditor", "MultipleValues", "Multiple Values")) .Value_Static(&FLandscapeEditorDetailCustomization_Base::OnGetValue, PropertyHandle_ImportSize_X) .OnValueChanged_Static(&FLandscapeEditorDetailCustomization_Base::OnValueChanged, PropertyHandle_ImportSize_X) .OnValueCommitted_Static(&FLandscapeEditorDetailCustomization_Base::OnValueCommitted, PropertyHandle_ImportSize_X) ] + SHorizontalBox::Slot() .AutoWidth() .Padding(2, 0) .VAlign(VAlign_Center) [ SNew(STextBlock) .Font(DetailBuilder.GetDetailFont()) .Text(FString().AppendChar(0xD7)) // Multiply sign ] + SHorizontalBox::Slot() .FillWidth(1) [ SNew(SNumericEntryBox<int32>) .LabelVAlign(VAlign_Center) .Font(DetailBuilder.GetDetailFont()) .MinValue(1) .MaxValue(8192) .MinSliderValue(1) .MaxSliderValue(8192) .AllowSpin(true) .UndeterminedString(NSLOCTEXT("PropertyEditor", "MultipleValues", "Multiple Values")) .Value_Static(&FLandscapeEditorDetailCustomization_Base::OnGetValue, PropertyHandle_ImportSize_Y) .OnValueChanged_Static(&FLandscapeEditorDetailCustomization_Base::OnValueChanged, PropertyHandle_ImportSize_Y) .OnValueCommitted_Static(&FLandscapeEditorDetailCustomization_Base::OnValueCommitted, PropertyHandle_ImportSize_Y) ] ]; TSharedRef<IPropertyHandle> PropertyHandle_ImportLayers = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(ULandscapeEditorObject, GizmoImportLayers)); DetailBuilder.HideProperty(PropertyHandle_ImportLayers); GizmoImportExportGroup.AddPropertyRow(PropertyHandle_ImportLayers); GizmoImportExportGroup.AddWidgetRow() .FilterString("") [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .AutoWidth() [ SNew(SButton) .Text(LOCTEXT("GizmoImport", "Import")) .IsEnabled(this, &FLandscapeEditorDetailCustomization_CopyPaste::GetGizmoImportButtonIsEnabled) .OnClicked(this, &FLandscapeEditorDetailCustomization_CopyPaste::OnGizmoImportButtonClicked) ] + SHorizontalBox::Slot() .AutoWidth() [ SNew(SButton) .Text(LOCTEXT("GizmoExport", "Export")) .OnClicked(this, &FLandscapeEditorDetailCustomization_CopyPaste::OnGizmoExportButtonClicked) ] ]; //GuessGizmoImportSize(); }