Files
UnrealEngineUWP/Engine/Source/Editor/DetailCustomizations/Private/StringClassReferenceCustomization.h
Jaroslaw Palczynski 3fd16f9649 FStringClassReference's customization was accessing internal property of FStringAssetReference and was setting it without checking if path is "None". FStringClassReference is inheriting FStringAssetReference::ImportTextItem, which is checking for that special case. This method is used when customization treats the property as a whole (without accessing internal property). Fixed UE-4538.
Also fixed assert+crash when user tried to use FStringClassReference, without specifying "MetaClass" in UPROPERTY macro. UHT allowed it, but the editor was crashing. Now when it's missing it is assumed it is UClass.

#codereview Robert.Manuszewski

[CL 2385157 by Jaroslaw Palczynski in Main branch]
2014-12-11 02:58:57 -05:00

34 lines
1.3 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#pragma once
/**
* Customizes a string class reference to look like a UClass property
*/
class FStringClassReferenceCustomization : public IPropertyTypeCustomization
{
public:
static TSharedRef<IPropertyTypeCustomization> MakeInstance()
{
return MakeShareable(new FStringClassReferenceCustomization);
}
/** IPropertyTypeCustomization interface */
virtual void CustomizeHeader(TSharedRef<class IPropertyHandle> InPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override;
virtual void CustomizeChildren(TSharedRef<class IPropertyHandle> InPropertyHandle, class IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override;
private:
/** @return The class currently set on this reference */
const UClass* OnGetClass() const;
/** Set the class used by this reference */
void OnSetClass(const UClass* NewClass);
/** Find or load the class associated with the given string */
static const UClass* StringToClass(const FString& ClassName);
/** Handle to the property being customized */
TSharedPtr<IPropertyHandle> PropertyHandle;
/** A cache of the currently resolved value for the class name */
mutable TWeakObjectPtr<UClass> CachedClassPtr;
};