// 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 "EditorStyleSet.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::All; } 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 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); };