// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Widgets/SCompoundWidget.h" #include "Widgets/Input/SComboBox.h" #include "Widgets/Input/SCheckBox.h" #include "SparseVolumeTexture/SparseVolumeTexture.h" struct FOpenVDBGridInfo; struct FOpenVDBImportOptions; struct FOpenVDBGridComponentInfo; struct FOpenVDBSparseVolumeAttributesDesc; enum class ESparseVolumeAttributesFormat : uint8; class SOpenVDBGridInfoTableRow : public SMultiColumnTableRow> { public: SLATE_BEGIN_ARGS(SOpenVDBGridInfoTableRow) {} SLATE_ARGUMENT(TSharedPtr, OpenVDBGridInfo) SLATE_END_ARGS() public: void Construct(const FArguments& InArgs, const TSharedRef& OwnerTableView); TSharedRef GenerateWidgetForColumn(const FName& ColumnName) override; private: TSharedPtr OpenVDBGridInfo; }; class SOpenVDBComponentPicker : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SOpenVDBComponentPicker) {} SLATE_ARGUMENT(FOpenVDBSparseVolumeAttributesDesc*, AttributesDesc) SLATE_ARGUMENT(uint32, ComponentIndex) SLATE_ARGUMENT(const TArray>*, OpenVDBGridComponentInfo) SLATE_END_ARGS() public: void Construct(const FArguments& InArgs); void RefreshUIFromData(); private: FOpenVDBSparseVolumeAttributesDesc* AttributesDesc; uint32 ComponentIndex; const TArray>* OpenVDBGridComponentInfo; TSharedPtr>> GridComboBox; }; class SOpenVDBAttributesConfigurator : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SOpenVDBAttributesConfigurator) {} SLATE_ARGUMENT(FOpenVDBSparseVolumeAttributesDesc*, AttributesDesc) SLATE_ARGUMENT(const TArray>*, OpenVDBGridComponentInfo) SLATE_ARGUMENT(const TArray>*, OpenVDBSupportedTargetFormats) SLATE_ARGUMENT(FText, AttributesName) SLATE_END_ARGS() public: void Construct(const FArguments& InArgs); void RefreshUIFromData(); private: FOpenVDBSparseVolumeAttributesDesc* AttributesDesc; TSharedPtr ComponentPickers[4]; const TArray>* OpenVDBSupportedTargetFormats; TSharedPtr>> FormatComboBox; }; class SOpenVDBImportWindow : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SOpenVDBImportWindow) {} SLATE_ARGUMENT(FOpenVDBImportOptions*, ImportOptions) SLATE_ARGUMENT(const FOpenVDBImportOptions*, DefaultImportOptions) SLATE_ARGUMENT(int32, NumFoundFiles) SLATE_ARGUMENT(const TArray>*, OpenVDBGridInfo) SLATE_ARGUMENT(const TArray>*, OpenVDBGridComponentInfo) SLATE_ARGUMENT(const TArray>*, OpenVDBSupportedTargetFormats) SLATE_ARGUMENT(TSharedPtr, WidgetWindow) SLATE_ARGUMENT(FText, FullPath) SLATE_ARGUMENT(float, MaxWindowHeight) SLATE_ARGUMENT(float, MaxWindowWidth) SLATE_END_ARGS() public: virtual bool SupportsKeyboardFocus() const override { return true; } void Construct(const FArguments& InArgs); FReply OnImport(); FReply OnCancel(); bool ShouldImport() const; bool ShouldImportAsSequence() const; private: FOpenVDBImportOptions* ImportOptions; const FOpenVDBImportOptions* DefaultImportOptions; bool bIsSequence; const TArray>* OpenVDBGridInfo; const TArray>* OpenVDBGridComponentInfo; const TArray>* OpenVDBSupportedTargetFormats; TSharedPtr AttributesAConfigurator; TSharedPtr AttributesBConfigurator; TSharedPtr ImportAsSequenceCheckBox; TSharedPtr ImportButton; TWeakPtr WidgetWindow; bool bShouldImport; EActiveTimerReturnType SetFocusPostConstruct(double InCurrentTime, float InDeltaTime); TSharedRef GenerateGridInfoItemRow(TSharedPtr Item, const TSharedRef& OwnerTable); bool CanImport() const; FReply OnResetToDefaultClick(); FText GetImportTypeDisplayText() const; void SetDefaultGridAssignment(); };