// Copyright 1998-2014 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 MakeInstance() { return MakeShareable(new FStringClassReferenceCustomization); } /** IPropertyTypeCustomization interface */ virtual void CustomizeHeader(TSharedRef InStructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils) OVERRIDE; virtual void CustomizeChildren(TSharedRef InStructPropertyHandle, 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 struct property being customized */ TSharedPtr StructPropertyHandle; /** Handle to the class name property we're editing */ TSharedPtr ClassNamePropertyHandle; /** A cache of the currently resolved value for the class name */ mutable TWeakObjectPtr CachedClassPtr; };