Files
UnrealEngineUWP/Engine/Source/Editor/DetailCustomizations/Private/MeshMergingSettingsCustomization.cpp
Joe Conley c12a880a0c Unshelved from pending changelist '4791207':
Source=CL 4772220 in //UE4/Main/...
Acknowledger=joe.conley (Thu Jan 24 2019 00:26:59 GMT+0000 (Coordinated Universal Time))
ShelfCl=4791207
Target=Dev-VR
Merge conflict:
/src/ROBOMERGE_DEVVR_Dev_VR/Engine/Plugins/Lumin/MagicLeap/Source/MagicLeapController/Private/MagicLeapController.cpp - merging //UE4/Main/Engine/Plugins/Lumin/MagicLeap/Source/MagicLeapController/Private/MagicLeapController.cpp#5

#rb Ryan.Vance

[CL 4792243 by Joe Conley in Dev-VR branch]
2019-01-23 19:56:41 -05:00

96 lines
3.9 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#include "MeshMergingSettingsCustomization.h"
#include "Engine/MeshMerging.h"
#include "Misc/Attribute.h"
#include "UObject/UnrealType.h"
#include "PropertyHandle.h"
#include "DetailLayoutBuilder.h"
#include "IDetailPropertyRow.h"
#include "DetailCategoryBuilder.h"
#include "PropertyRestriction.h"
#define LOCTEXT_NAMESPACE "FMeshMergingSettingCustomization"
FMeshMergingSettingsObjectCustomization::~FMeshMergingSettingsObjectCustomization()
{
}
void FMeshMergingSettingsObjectCustomization::CustomizeDetails(IDetailLayoutBuilder& LayoutBuilder)
{
TSharedRef<IPropertyHandle> SettingsHandle = LayoutBuilder.GetProperty(FName("UMeshMergingSettingsObject.Settings"));
FName MeshCategory("MeshSettings");
IDetailCategoryBuilder& MeshCategoryBuilder = LayoutBuilder.EditCategory(MeshCategory);
TArray<TSharedRef<IPropertyHandle>> SimpleDefaultProperties;
MeshCategoryBuilder.GetDefaultProperties(SimpleDefaultProperties, true, true);
MeshCategoryBuilder.AddProperty(SettingsHandle);
FName CategoryMetaData("Category");
for (TSharedRef<IPropertyHandle> Property: SimpleDefaultProperties)
{
const FString& CategoryName = Property->GetMetaData(CategoryMetaData);
IDetailCategoryBuilder& CategoryBuilder = LayoutBuilder.EditCategory(*CategoryName);
IDetailPropertyRow& PropertyRow = CategoryBuilder.AddProperty(Property);
if (Property->GetProperty()->GetFName() == GET_MEMBER_NAME_CHECKED(FMeshMergingSettings, SpecificLOD))
{
static const FName EditConditionName = "EnumCondition";
int32 EnumCondition = Property->GetINTMetaData(EditConditionName);
PropertyRow.Visibility(TAttribute<EVisibility>::Create(TAttribute<EVisibility>::FGetter::CreateSP(this, &FMeshMergingSettingsObjectCustomization::ArePropertiesVisible, EnumCondition)));
}
else if (Property->GetProperty()->GetFName() == GET_MEMBER_NAME_CHECKED(FMeshMergingSettings, LODSelectionType))
{
EnumProperty = Property;
TSharedPtr<FPropertyRestriction> EnumRestriction = MakeShareable(new FPropertyRestriction(LOCTEXT("NoSupport","Unable to support this option in Merge Actor")));
const UEnum* const MeshLODSelectionTypeEnum = StaticEnum<EMeshLODSelectionType>();
EnumRestriction->AddDisabledValue(MeshLODSelectionTypeEnum->GetNameStringByValue((uint8)EMeshLODSelectionType::CalculateLOD));
EnumProperty->AddRestriction(EnumRestriction.ToSharedRef());
}
}
FName MaterialCategory("MaterialSettings");
IDetailCategoryBuilder& MaterialCategoryBuilder = LayoutBuilder.EditCategory(MaterialCategory);
SimpleDefaultProperties.Empty();
MaterialCategoryBuilder.GetDefaultProperties(SimpleDefaultProperties, true, true);
for (TSharedRef<IPropertyHandle> Property : SimpleDefaultProperties)
{
const FString& CategoryName = Property->GetMetaData(CategoryMetaData);
IDetailCategoryBuilder& CategoryBuilder = LayoutBuilder.EditCategory(*CategoryName);
IDetailPropertyRow& PropertyRow = CategoryBuilder.AddProperty(Property);
// Disable material settings if we are exporting all LODs (no support for material baking in this case)
if (CategoryName.Compare("MaterialSettings") == 0)
{
PropertyRow.IsEnabled(TAttribute<bool>::Create(TAttribute<bool>::FGetter::CreateSP(this, &FMeshMergingSettingsObjectCustomization::AreMaterialPropertiesEnabled)));
}
}
}
TSharedRef<IDetailCustomization> FMeshMergingSettingsObjectCustomization::MakeInstance()
{
return MakeShareable(new FMeshMergingSettingsObjectCustomization);
}
EVisibility FMeshMergingSettingsObjectCustomization::ArePropertiesVisible(const int32 VisibleType) const
{
uint8 CurrentEnumValue = 0;
EnumProperty->GetValue(CurrentEnumValue);
return (CurrentEnumValue == VisibleType) ? EVisibility::Visible : EVisibility::Collapsed;
}
bool FMeshMergingSettingsObjectCustomization::AreMaterialPropertiesEnabled() const
{
uint8 CurrentEnumValue = 0;
EnumProperty->GetValue(CurrentEnumValue);
return !(CurrentEnumValue == (uint8)EMeshLODSelectionType::AllLODs);
}
#undef LOCTEXT_NAMESPACE