// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "InputCoreTypes.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Input/Reply.h" #include "Widgets/SCompoundWidget.h" #include "Widgets/SWindow.h" #include "Widgets/Views/STableViewBase.h" #include "Widgets/Views/STableRow.h" #include "Widgets/Views/STreeView.h" #include "Widgets/SNullWidget.h" #include "Styling/AppStyle.h" #include "FbxCompareWindow.h" #include "FbxImporter.h" class FMaterialConflictData : public FCompareRowData { public: FMaterialConflictData(TArray& InSourceMaterials, TArray& InResultMaterials, TArray& InRemapMaterials, TArray& InAutoRemapMaterials, TArray& InCustomRemapMaterials, bool InbIsPreviewConflict) : SourceMaterialIndex(INDEX_NONE) , ResultMaterialIndex(INDEX_NONE) , SourceMaterials(InSourceMaterials) , ResultMaterials(InResultMaterials) , RemapMaterials(InRemapMaterials) , AutoRemapMaterials(InAutoRemapMaterials) , CustomRemapMaterials(InCustomRemapMaterials) , bIsPreviewConflict(InbIsPreviewConflict) {} virtual ~FMaterialConflictData() {} int32 SourceMaterialIndex; int32 ResultMaterialIndex; virtual TSharedRef ConstructCellCurrent() override; virtual TSharedRef ConstructCellFbx() override; FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent, bool IsResultData); void AssignMaterialMatch(int32 InMatchMaterialIndex); FText GetCellString(bool IsResultData) const; FText GetCellTooltipString(bool IsResultData) const; FSlateColor GetCellColor(bool IsResultData) const; TSharedPtr ParentContextMenu; TArray& SourceMaterials; TArray& ResultMaterials; TArray& RemapMaterials; TArray& AutoRemapMaterials; TArray& CustomRemapMaterials; bool bIsPreviewConflict; }; class SFbxMaterialConflictWindow : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SFbxMaterialConflictWindow) : _WidgetWindow() , _SourceMaterials(nullptr) , _ResultMaterials(nullptr) , _RemapMaterials(nullptr) , _AutoRemapMaterials(nullptr) , _bIsPreviewConflict(false) {} SLATE_ARGUMENT( TSharedPtr, WidgetWindow ) SLATE_ARGUMENT( TArray*, SourceMaterials) SLATE_ARGUMENT( TArray*, ResultMaterials) SLATE_ARGUMENT( TArray*, RemapMaterials) SLATE_ARGUMENT( TArray*, AutoRemapMaterials ) SLATE_ARGUMENT( bool, bIsPreviewConflict ) SLATE_END_ARGS() public: UnFbx::EFBXReimportDialogReturnOption GetReturnOption() { return ReturnOption; } void Construct(const FArguments& InArgs); virtual bool SupportsKeyboardFocus() const override { return true; } FReply OnDone(); FReply OnReset(); FReply OnCancel(); EVisibility CollapsePreviewVisibility() { return bIsPreviewConflict ? EVisibility::Collapsed : EVisibility::Visible; } virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) override { if( InKeyEvent.GetKey() == EKeys::Escape ) { return OnReset(); } return FReply::Unhandled(); } SFbxMaterialConflictWindow() { ReturnOption = UnFbx::EFBXReimportDialogReturnOption::FBXRDRO_Cancel; } private: TWeakPtr< SWindow > WidgetWindow; UnFbx::EFBXReimportDialogReturnOption ReturnOption; TArray *SourceMaterials; TArray *ResultMaterials; TArray* RemapMaterials; TArray* AutoRemapMaterials; TArray CustomRemapMaterials; bool bIsPreviewConflict; TArray> ConflictMaterialListItem; TSharedPtr ConstructMaterialComparison(); void FillMaterialListItem(); //Slate events TSharedRef OnGenerateRowForCompareMaterialList(TSharedPtr RowData, const TSharedRef& Table); };