// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "SlateFwd.h" #include "UObject/Object.h" #include "Layout/Visibility.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Input/Reply.h" #include "Styling/AppStyle.h" #include "Layout/Visibility.h" #include "Widgets/SWidget.h" #include "Widgets/SCompoundWidget.h" #include "Widgets/Views/STableViewBase.h" #include "Widgets/Views/STableRow.h" #include "Widgets/Views/STreeView.h" #include "GameplayTagsManager.h" #include "VirtualTextureConversionWorker.h" class UTexture2D; struct FConversionStatus { bool UserSelected = true; // Originally selected by the user bool UnderSized = false; // Too small to convert according to user settings bool NonPowerOf2 = false; // Not a power of 2, can't convert bool InvalidMaterialUsage = false; }; /** * FConvertToVTDlg * * Wrapper class for SConvertToVTDlg. This class creates and launches a dialog then awaits the * result to return to the user. */ class FConvertToVTDlg { public: enum EResult { Cancel = 0, // No/Cancel, normal usage would stop the current action Confirm = 1, // Yes/Ok/Etc, normal usage would continue with action }; FConvertToVTDlg(const TArray& Textures, bool bBackwards); /** Shows the dialog box and waits for the user to respond. */ EResult ShowModal(); private: TSharedPtr DialogWindow; TSharedPtr DialogWidget; }; struct FMaterialItem { FName Name; }; class SConvertToVirtualTexture : public SCompoundWidget { public: static void ConvertVTTexture(TArray Objects, bool backwards); public: SLATE_BEGIN_ARGS(SConvertToVirtualTexture) {} /** Window in which this widget resides */ SLATE_ATTRIBUTE(TSharedPtr, ParentWindow) SLATE_END_ARGS() void Construct(const FArguments& InArgs, bool bBackwards); void SetBackwards(bool bSetBackwards); void SetUserTextures(const TArray &Textures); FConvertToVTDlg::EResult GetUserResponse() const; private: /** * Creates a single line showing an asset and it's status related to VT conversion */ TSharedRef CreateAssetLine(int index, const FAssetData &Asset, const FConversionStatus &Status); TSharedRef GetAuditTrailText(const FAssetData &Asset, int32 index); void UpdateList(); FReply OnButtonClick(FConvertToVTDlg::EResult ButtonID); void OnThresholdChanged(TSharedPtr InSelectedItem, ESelectInfo::Type SelectInfo); FText GetThresholdText() const; TSharedRef OnGenerateThresholdWidget(TSharedPtr InItem); bool GetFilterButtonEnabled() const; FReply OnFilterButtonClicked(); FReply OnExpanderClicked(int index); bool GetOkButtonEnabled() const; EVisibility GetDetailVisibility(int index) const; const FSlateBrush* GetExpanderImage(int index) const; EVisibility GetIntroMessageVisibility() const; EVisibility GetErrorMessageVisibility() const; EVisibility GetThresholdVisibility() const; FText GetIntroMessage() const; FText GetErrorMessage() const; TArray ExpandedIndexes; bool bBackwards; FText IntroMessage; FText ErrorMessage; FConvertToVTDlg::EResult UserResponse; TSharedPtr AssetListContainer; //TSharedPtr MessageTextBlock; //TSharedPtr ThresholdContainer; //TSharedPtr ErrorContainer; //TSharedPtr OkButton; /** Pointer to the window which holds this Widget, required for modal control */ TSharedPtr ParentWindow; FVirtualTextureConversionWorker Worker; TArray AssetList; TArray AssetStatus; int ThresholdValue; bool bThresholdVisible; TArray> TextureSizes; };