// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "IDetailCustomization.h" #include "UObject/WeakObjectPtr.h" class ULiveLinkComponentController; class ULiveLinkRole; struct EVisibility; template class TSubclassOf; class IDetailLayoutBuilder; class IPropertyHandle; class SWidget; /** * Customizes a ULiveLinkComponentController details */ class FLiveLinkComponentDetailCustomization : public IDetailCustomization { public: static TSharedRef MakeInstance() { return MakeShared(); } // IDetailCustomization interface virtual void CustomizeDetails(class IDetailLayoutBuilder& DetailBuilder) override; // End IDetailCustomization interface protected: void OnSubjectRepresentationPropertyChanged(); TSharedRef HandleControllerComboButton(TSubclassOf RoleClass) const; void HandleControllerSelection(TSubclassOf RoleClass, TWeakObjectPtr SelectedControllerClass) const; bool IsControllerItemSelected(FName Item, TSubclassOf RoleClass) const; EVisibility HandleControllerWarningVisibility(TSubclassOf RoleClassEntry) const; TSharedRef BuildControllerNameWidget(TSharedPtr ControllersProperty, TSubclassOf RoleClass) const; TSharedRef BuildControllerValueWidget(TSubclassOf RoleClass, const FText& ControllerName) const; void ForceRefreshDetails(); protected: /** LiveLinkComponent on which we're acting */ TWeakObjectPtr EditedObject; /** Keep a reference to force refresh the layout */ IDetailLayoutBuilder* DetailLayout = nullptr; };