// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. #include "DetailCustomizationsPrivatePCH.h" #include "HierarchicalSimplificationCustomizations.h" #include "Developer/MeshUtilities/Public/MeshUtilities.h" #include "GameFramework/WorldSettings.h" TSharedRef FHierarchicalSimplificationCustomizations::MakeInstance() { return MakeShareable( new FHierarchicalSimplificationCustomizations ); } void FHierarchicalSimplificationCustomizations::CustomizeHeader(TSharedRef StructPropertyHandle, FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) { HeaderRow. NameContent() [ StructPropertyHandle->CreatePropertyNameWidget() ] .ValueContent() [ StructPropertyHandle->CreatePropertyValueWidget() ]; } void FHierarchicalSimplificationCustomizations::CustomizeChildren( TSharedRef StructPropertyHandle, class IDetailChildrenBuilder& ChildBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils ) { uint32 NumChildren; StructPropertyHandle->GetNumChildren( NumChildren ); TMap > PropertyHandles; for( uint32 ChildIndex = 0; ChildIndex < NumChildren; ++ChildIndex ) { TSharedRef ChildHandle = StructPropertyHandle->GetChildHandle( ChildIndex ).ToSharedRef(); const FName PropertyName = ChildHandle->GetProperty()->GetFName(); PropertyHandles.Add(PropertyName, ChildHandle); } TSharedPtr< IPropertyHandle > SimplifyMeshPropertyHandle = PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FHierarchicalSimplification, bSimplifyMesh)); IDetailPropertyRow& SimplifyMeshRow = ChildBuilder.AddChildProperty(SimplifyMeshPropertyHandle.ToSharedRef()); SimplifyMeshRow.Visibility(TAttribute(this, &FHierarchicalSimplificationCustomizations::IsSimplifyMeshVisible)); for( auto Iter(PropertyHandles.CreateConstIterator()); Iter; ++Iter ) { if (Iter.Value() != SimplifyMeshPropertyHandle) { ChildBuilder.AddChildProperty(Iter.Value().ToSharedRef()); } } } EVisibility FHierarchicalSimplificationCustomizations::IsSimplifyMeshVisible() const { IMeshUtilities& MeshUtilities = FModuleManager::Get().LoadModuleChecked("MeshUtilities"); if (MeshUtilities.GetMeshMergingInterface() != nullptr) { return EVisibility::Visible; } return EVisibility::Hidden; }