// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "IDetailCustomization.h" #include "EditorUndoClient.h" #include "IPropertyTypeCustomization.h" class ACompositingElement; class FReply; class ICompElementManager; class SComboButton; class SToolTip; class SWidget; class UMaterialInterface; enum class EParamType : uint8; namespace ESelectInfo { enum Type : int; } namespace ETextCommit { enum Type : int; } struct EVisibility; struct FCompositingMaterial; struct FMaterialParameterInfo; template struct TOptional; /* FCompElementDetailsCustomization *****************************************************************************/ class IDetailLayoutBuilder; class FCompElementDetailsCustomization : public IDetailCustomization { public: static TSharedRef MakeInstance(); public: //~ IDetailCustomization interface virtual void CustomizeDetails(IDetailLayoutBuilder& DetailBuilder) override; private: void ForceRefreshLayout(); void GetInstanceCameraSourceComboStrings(TArray>& OutComboBoxStrings, TArray>& OutToolTips, TArray& OutRestrictedItems); FString GetInstanceCameraSourceValueStr(TSharedPtr PropertyHandle); void OnCameraSourceSelected(const FString& Selection, TSharedPtr PropertyHandle); IDetailLayoutBuilder* MyLayout = nullptr; }; /* FCompositingMaterialPassCustomization *****************************************************************************/ class ITableRow; class STableViewBase; typedef FCompositingMaterial FCompositingMaterialType; class FCompositingMaterialPassCustomization : public IPropertyTypeCustomization, public FEditorUndoClient { public: static TSharedRef MakeInstance(); FCompositingMaterialPassCustomization(); ~FCompositingMaterialPassCustomization(); /** Begin IPropertyTypeCustomization interface */ virtual void CustomizeHeader(TSharedRef PropertyHandle, FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& CustomizationUtils) override; virtual void CustomizeChildren(TSharedRef StructPropertyHandle, IDetailChildrenBuilder& StructBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils) override; /** End IPropertyTypeCustomization interface */ // Begin FEditorUndoClient virtual void PostUndo(bool bSuccess) override; virtual void PostRedo(bool bSuccess) override { PostUndo(bSuccess); } // End of FEditorUndoClient protected: TSharedPtr CompElementManager; TWeakPtr CachedPropertyHandle; TSharedPtr CachedVectorProxies; TSharedPtr CachedMaterialParamMappings; TSharedPtr CachedUtils; TSharedPtr MaterialHandle; TWeakObjectPtr MaterialReference; FName* MaterialPassName; private: /** Overrides for vector param reset to default*/ void VectorResetToDefault(TSharedPtr PropertyHandle); bool VectorShouldShowResetToDefault(TSharedPtr PropertyHandle); void OnVectorOverrideChanged(TSharedPtr PropertyHandle); void TextureResetToDefault(TSharedPtr PropertyHandle, TSharedPtr ComboBoxHandle); bool TextureShouldShowResetToDefault(TSharedPtr PropertyHandle); TOptional GetScalarParameterSliderMin(FMaterialParameterInfo ScalarParam) const; TOptional GetScalarParameterSliderMax(FMaterialParameterInfo ScalarParam) const; void OnScalarParameterSlideBegin(FMaterialParameterInfo ScalarParam); void OnScalarParameterSlideEnd(const float NewValue, FMaterialParameterInfo ScalarParam); void OnScalarParameterCommitted(const float NewValue, ETextCommit::Type CommitType, FMaterialParameterInfo ScalarParam); TOptional GetScalarParameterValue(FMaterialParameterInfo ScalarParam) const; void SetScalarParameterValue(const float NewValue, FMaterialParameterInfo ScalarParam); EVisibility IsResetScalarParameterVisible(FMaterialParameterInfo ScalarParam) const; FReply OnResetScalarParameterClicked(FMaterialParameterInfo ScalarParam); void HandleRequiredParamComboChanged(TSharedPtr Item, ESelectInfo::Type SelectInfo, TWeakPtr ComboButtonHandle, FName ParamName); FText GetRequiredParamComboText(FName TexName) const; void OnRequiredParamComboTextCommitted(const FText& NewText, ETextCommit::Type InTextCommit, FName ParamName); TSharedRef GetRequiredParamComboMenu(TWeakPtr ComboButtonHandle, FName ParamName, EParamType ParamType); void RebuildRequiredParamSources(); TSharedRef GenerateComboItem(TSharedPtr InItem, const TSharedRef& OwnerTable); void HandleComboChanged(TSharedPtr Item, ESelectInfo::Type SelectInfo, TWeakPtr ComboButtonHandle, FName TexName); FText GetComboText(FName TexName) const; void OnComboTextCommitted(const FText& NewText, ETextCommit::Type InTextCommit, FName TexName); TSharedRef GetPassComboMenu(TWeakPtr ComboButtonHandle, FName TexName); void RebuildTextureSourceList(); static TArray> GetPassNamesRecursive(ACompositingElement* Element, const FString& Prefix = FString()); void ResetParameterOverrides(); void OnRedrawViewports(); FCompositingMaterialType* GetMaterialPass() const; TArray> TextureComboSource; TArray> RequiredParamComboSourceScalar; TArray> RequiredParamComboSourceVector; TArray> RequiredParamComboSourceTexture; TArray> RequiredParamComboSourceMedia; TArray> RequiredParamComboSourceUnknown; }; /* FCompositingPassCustomization *****************************************************************************/ class FCompositingPassCustomization : public IPropertyTypeCustomization { public: static TSharedRef MakeInstance(); public: //~ Begin IPropertyTypeCustomization interface virtual void CustomizeHeader(TSharedRef PropertyHandle, FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& CustomizationUtils) override; virtual void CustomizeChildren(TSharedRef PropertyHandle, IDetailChildrenBuilder& ChildBuilder, IPropertyTypeCustomizationUtils& CustomizationUtils) override; //~ End IPropertyTypeCustomization interface private: TSharedPtr GetInstancedObjectHandle(TSharedRef PropertyHandle); TSharedPtr ConditionallyCreatePreviewButton(TSharedRef PropertyHandle, TSharedPtr ParentWidget); TWeakPtr HeaderValueWidget; };