Files
UnrealEngineUWP/Engine/Plugins/Runtime/ModelViewViewModel/Source/ModelViewViewModelBlueprint/Private/ViewModel/MVVMViewModelBlueprintCompiler.h
patrick boutot 02c1565203 MVVM: Use a native function to set a property on the viewmodel.
#rb sebastian.nordgren
#preflight 627bcb932d67896030144c3d

#ROBOMERGE-AUTHOR: patrick.boutot
#ROBOMERGE-SOURCE: CL 20167493 via CL 20167503 via CL 20167511
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v943-19904690)

[CL 20168560 by patrick boutot in ue5-main branch]
2022-05-12 14:55:19 -04:00

77 lines
2.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "EngineLogs.h"
#include "Engine/Blueprint.h"
#include "WidgetBlueprint.h"
#include "KismetCompiler.h"
#include "KismetCompilerModule.h"
class UEdGraph;
class UMVVMViewModelBlueprint;
class UMVVMViewModelBlueprintGeneratedClass;
//////////////////////////////////////////////////////////////////////////
// FViewModelBlueprintCompiler
namespace UE::MVVM
{
class FViewModelBlueprintCompiler : public IBlueprintCompiler
{
public:
bool CanCompile(const UBlueprint* Blueprint) override;
void Compile(UBlueprint* Blueprint, const FKismetCompilerOptions& CompileOptions, FCompilerResultsLog& Results) override;
bool GetBlueprintTypesForClass(UClass* ParentClass, UClass*& OutBlueprintClass, UClass*& OutBlueprintGeneratedClass) const override;
};
} //namespace
//////////////////////////////////////////////////////////////////////////
// FViewModelBlueprintCompilerContext
namespace UE::MVVM
{
class FViewModelBlueprintCompilerContext : public FKismetCompilerContext
{
typedef FKismetCompilerContext Super;
public:
using FKismetCompilerContext::FKismetCompilerContext;
private:
UMVVMViewModelBlueprint* GetViewModelBlueprint() const;
FProperty* FindPropertyByNameOnNewClass(FName PropertyName) const;
//~ Begin FKismetCompilerContext Interface
virtual void SaveSubObjectsFromCleanAndSanitizeClass(FSubobjectCollection& SubObjectsToSave, UBlueprintGeneratedClass* ClassToClean) override;
virtual void CleanAndSanitizeClass(UBlueprintGeneratedClass* ClassToClean, UObject*& InOutOldCDO) override;
virtual void CreateFunctionList() override;
virtual void CreateClassVariablesFromBlueprint() override;
virtual void SpawnNewClass(const FString& NewClassName) override;
virtual void OnNewClassSet(UBlueprintGeneratedClass* ClassToUse) override;
virtual void PostcompileFunction(FKismetFunctionContext& Context) override;
virtual void FinishCompilingClass(UClass* Class) override;
//~ End FKismetCompilerContext Interface
private:
struct FGeneratedFunction
{
FName PropertyName;
UEdGraph* SetterFunction = nullptr;
UEdGraph* NetRepFunction = nullptr;
FProperty* Property = nullptr;
FProperty* SkelProperty = nullptr;
};
UMVVMViewModelBlueprintGeneratedClass* NewViewModelBlueprintClass;
TArray<FGeneratedFunction> GeneratedFunctions;
};
} //namespace