// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "UObject/WeakObjectPtr.h" DECLARE_LOG_CATEGORY_EXTERN(LogEditCondition, Log, All); class UFunction; class IEditConditionContext { public: virtual FName GetContextName() const = 0; virtual TOptional GetBoolValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const = 0; virtual TOptional GetIntegerValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const = 0; virtual TOptional GetNumericValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const = 0; virtual TOptional GetEnumValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const = 0; virtual TOptional GetPointerValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const = 0; virtual TOptional GetTypeName(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const = 0; virtual TOptional GetIntegerValueOfEnum(const FString& EnumType, const FString& EnumValue) const = 0; /** * Get field as a function, avoiding multiple function searches * * @TODO: Get property in general, not just for functions. See: UE-175891. * * @param FieldName Name of the field to try to interpret as a function * @return Function if found or already cached, else */ virtual const TWeakObjectPtr GetFunction(const FString& FieldName) const = 0; }; class FProperty; class FPropertyNode; class FComplexPropertyNode; class FEditConditionExpression; class FEditConditionContext : public IEditConditionContext { public: FEditConditionContext(FPropertyNode& InPropertyNode); virtual ~FEditConditionContext() {} virtual FName GetContextName() const override; virtual TOptional GetBoolValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const override; virtual TOptional GetIntegerValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const override; virtual TOptional GetNumericValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const override; virtual TOptional GetEnumValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const override; virtual TOptional GetPointerValue(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const override; virtual TOptional GetTypeName(const FString& PropertyName, TWeakObjectPtr CachedFunction = nullptr) const override; virtual TOptional GetIntegerValueOfEnum(const FString& EnumType, const FString& EnumValue) const override; virtual const TWeakObjectPtr GetFunction(const FString& FieldName) const override; /** * Fetch the single boolean property referenced. * Returns nullptr if more than one property is referenced. */ const FBoolProperty* GetSingleBoolProperty(const TSharedPtr& Expression) const; private: TWeakPtr PropertyNode; };