Files
UnrealEngineUWP/Engine/Source/Editor/DetailCustomizations/Private/LandscapeSplineDetails.cpp
Sangwoo Lee ec564fc5cf Landscape Spline : Fixed MoveToCurrentLevel (Relative3D scale)
- Disable button when there is no landscape proxy for current level

[CL 2057520 by Sangwoo Lee in Main branch]
2014-04-28 02:52:54 -04:00

110 lines
3.2 KiB
C++

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#include "DetailCustomizationsPrivatePCH.h"
#include "LandscapeSplineDetails.h"
#include "LandscapeEdMode.h"
#define LOCTEXT_NAMESPACE "LandscapeSplineDetails"
TSharedRef<IDetailCustomization> FLandscapeSplineDetails::MakeInstance()
{
return MakeShareable( new FLandscapeSplineDetails );
}
void FLandscapeSplineDetails::CustomizeDetails( IDetailLayoutBuilder& DetailBuilder )
{
IDetailCategoryBuilder& LandscapeSplineCategory = DetailBuilder.EditCategory( "LandscapeSpline", TEXT(""), ECategoryPriority::Transform );
LandscapeSplineCategory.AddCustomRow( TEXT("") )
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.Padding(0, 0, 2, 0)
.VAlign(VAlign_Center)
.FillWidth(1)
[
SNew(STextBlock)
.Text(LOCTEXT("SelectAll", "Select all connected:"))
]
+ SHorizontalBox::Slot()
.FillWidth(1)
[
SNew(SButton)
.Text(LOCTEXT("ControlPoints", "Control Points"))
.HAlign(HAlign_Center)
.OnClicked(this, &FLandscapeSplineDetails::OnSelectConnectedControlPointsButtonClicked)
]
+ SHorizontalBox::Slot()
.FillWidth(1)
[
SNew(SButton)
.Text(LOCTEXT("Segments", "Segments"))
.HAlign(HAlign_Center)
.OnClicked(this, &FLandscapeSplineDetails::OnSelectConnectedSegmentsButtonClicked)
]
];
LandscapeSplineCategory.AddCustomRow( TEXT("") )
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.Padding(0, 0, 2, 0)
.VAlign(VAlign_Center)
.FillWidth(1)
[
SNew(SButton)
.Text(LOCTEXT("Move Selected ControlPnts+Segs to Current level", "Move to current level"))
.HAlign(HAlign_Center)
.OnClicked(this, &FLandscapeSplineDetails::OnMoveToCurrentLevelButtonClicked)
.IsEnabled(this, &FLandscapeSplineDetails::IsMoveToCurrentLevelButtonEnabled)
]
];
}
class FEdModeLandscape* FLandscapeSplineDetails::GetEditorMode() const
{
return (FEdModeLandscape*)GEditorModeTools().GetActiveMode(FBuiltinEditorModes::EM_Landscape);
}
FReply FLandscapeSplineDetails::OnSelectConnectedControlPointsButtonClicked()
{
FEdModeLandscape* LandscapeEdMode = GetEditorMode();
if (LandscapeEdMode && LandscapeEdMode->CurrentToolTarget.LandscapeInfo.IsValid())
{
LandscapeEdMode->SelectAllConnectedSplineControlPoints();
}
return FReply::Handled();
}
FReply FLandscapeSplineDetails::OnSelectConnectedSegmentsButtonClicked()
{
FEdModeLandscape* LandscapeEdMode = GetEditorMode();
if (LandscapeEdMode && LandscapeEdMode->CurrentToolTarget.LandscapeInfo.IsValid())
{
LandscapeEdMode->SelectAllConnectedSplineSegments();
}
return FReply::Handled();
}
FReply FLandscapeSplineDetails::OnMoveToCurrentLevelButtonClicked()
{
FEdModeLandscape* LandscapeEdMode = GetEditorMode();
if (LandscapeEdMode && LandscapeEdMode->CurrentToolTarget.LandscapeInfo.IsValid() && LandscapeEdMode->CurrentToolTarget.LandscapeInfo->GetCurrentLevelLandscapeProxy(true))
{
LandscapeEdMode->SplineMoveToCurrentLevel();
}
return FReply::Handled();
}
bool FLandscapeSplineDetails::IsMoveToCurrentLevelButtonEnabled() const
{
FEdModeLandscape* LandscapeEdMode = GetEditorMode();
return (LandscapeEdMode && LandscapeEdMode->CurrentToolTarget.LandscapeInfo.IsValid() && LandscapeEdMode->CurrentToolTarget.LandscapeInfo->GetCurrentLevelLandscapeProxy(true));
}
#undef LOCTEXT_NAMESPACE