Files
UnrealEngineUWP/Engine/Plugins/Runtime/ModelViewViewModel/Source/ModelViewViewModelBlueprint/Public/Extensions/MVVMViewBlueprintPanelWidgetExtension.h
graham lewis d582333dac Add designer preview entries to MVVM panel extension.
UMVVMBlueprintViewExtension:
- Added virtual OnPreviewContentChanged function.

UMVVMWidgetBlueprintExtension_View:
- Added GetAllBlueprintExtensions function.

FBlueprintViewDesignerExtension:
- New designer extension which overrides PreviewContentChanged and calls OnPreviewContentChanged on each UMVVMBlueprintViewExtension.

FBlueprintViewDesignerExtensionFactory:
- New designer extension factory which creates a FBlueprintViewDesignerExtension.

UMVVMBlueprintViewExtension_PanelWidget:
- Added NumDesignerPreviewEntries property.
- Added static CreateDesignerPreviewEntries function which clears panels children then adds specified number of entries.
- Overrides OnPreviewContentChanged which calls CreateDesignerPreviewEntries using the preview panel widget.

FModelViewViewModelEditorModule:
- Adds PanelWidgetExtensionFactory on module startup and removes on shutdown.

FMVVMPanelWidgetExtensionCustomizationExtender:
- Added "Num Designer Preview Entries" property row.
- Calls UMVVMBlueprintViewExtension_PanelWidget::CreateDesignerPreviewEntries when entry class, slot template or "Num Designer Preview Entries" properties change.

#jira UE-213718
[REVIEW] [at]zahra.nikbakht, [at]editor-ui-systems, [at]chris.gagnon
#rb Vincent.Gauthier, zahra.nikbakht

[CL 34032917 by graham lewis in ue5-main branch]
2024-05-31 11:11:52 -04:00

80 lines
2.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Blueprint/UserWidget.h"
#include "Bindings/MVVMCompiledBindingLibraryCompiler.h"
#include "MVVMBlueprintViewExtension.h"
#include "Components/PanelSlot.h"
#include "MVVMViewBlueprintPanelWidgetExtension.generated.h"
class UMVVMBlueprintView;
class UMVVMViewClass;
class UMVVMViewPanelWidgetClassExtension;
class UUserWidget;
class UWidgetBlueprintGeneratedClass;
namespace UE::MVVM
{
class FMVVMPanelWidgetExtensionCustomizationExtender;
}
namespace UE::MVVM::Compiler
{
class IMVVMBlueprintViewPrecompile;
class IMVVMBlueprintViewCompile;
struct FBlueprintViewUserWidgetProperty;
}
UCLASS()
class MODELVIEWVIEWMODELBLUEPRINT_API UMVVMBlueprintViewExtension_PanelWidget : public UMVVMBlueprintViewExtension
{
GENERATED_BODY()
public:
//~ Begin UMVVMBlueprintViewExtension overrides
virtual TArray<UE::MVVM::Compiler::FBlueprintViewUserWidgetProperty> AddProperties() override;
virtual TArray<UE::MVVM::Compiler::FBlueprintViewUserWidgetWidgetProperty> AddWidgetProperties() override;
virtual void Precompile(UE::MVVM::Compiler::IMVVMBlueprintViewPrecompile* Compiler, UWidgetBlueprintGeneratedClass* Class) override;
virtual void Compile(UE::MVVM::Compiler::IMVVMBlueprintViewCompile* Compiler, UWidgetBlueprintGeneratedClass* Class, UMVVMViewClass* ViewExtension) override;
virtual bool WidgetRenamed(FName OldName, FName NewName) override;
virtual void OnPreviewContentChanged(TSharedRef<SWidget> NewContent) override;
//~ End UMVVMBlueprintViewExtension overrides
FGuid GetEntryViewModelId() const
{
return EntryViewModelId;
}
private:
const UMVVMBlueprintView* GetEntryWidgetBlueprintView(const UUserWidget* EntryUserWidget) const;
static void RefreshDesignerPreviewEntries(UPanelWidget* PanelWidget, TSubclassOf<UUserWidget> EntryWidgetClass, UPanelSlot* SlotTemplate, int32 NumDesignerPreviewEntries, bool bFullRebuild);
private:
UPROPERTY()
FName WidgetName;
UPROPERTY()
FGuid EntryViewModelId;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EntryClass", meta = (AllowPrivateAccess = "true"))
TSubclassOf<UUserWidget> EntryWidgetClass;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, Category = "Slot", meta = (AllowPrivateAccess = "true"))
TObjectPtr<UPanelSlot> SlotObj;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "NumDesignerPreviewEntries", meta = (AllowPrivateAccess = "true", ClampMin = 0, ClampMax = 20))
int32 NumDesignerPreviewEntries = 3;
UPROPERTY()
FName PanelPropertyName;
UPROPERTY()
TObjectPtr<UMVVMViewPanelWidgetClassExtension> ExtensionObj;
UE::MVVM::FCompiledBindingLibraryCompiler::FFieldPathHandle WidgetPathHandle;
friend UE::MVVM::FMVVMPanelWidgetExtensionCustomizationExtender;
};