// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "InputCoreTypes.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Styling/SlateColor.h" #include "Input/Reply.h" #include "Widgets/SCompoundWidget.h" #include "Fbx/SSceneBaseMeshListView.h" #include "Framework/Docking/TabManager.h" #include "Fbx/SSceneMaterialsListView.h" class IDetailsView; class SFbxReimportSceneTreeView; class SFbxSceneSkeletalMeshListView; class SFbxSceneSkeletalMeshReimportListView; class SFbxSceneStaticMeshListView; class SFbxSceneStaticMeshReimportListView; class SFbxSceneTreeView; struct FPropertyChangedEvent; class SFbxSceneOptionWindow : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SFbxSceneOptionWindow) : _SceneInfo(nullptr) , _SceneInfoOriginal(nullptr) , _MeshStatusMap(nullptr) , _CanReimportHierarchy(false) , _NodeStatusMap(nullptr) , _GlobalImportSettings(nullptr) , _SceneImportOptionsDisplay(nullptr) , _SceneImportOptionsStaticMeshDisplay(nullptr) , _OverrideNameOptionsMap(nullptr) , _SceneImportOptionsSkeletalMeshDisplay(nullptr) , _OwnerWindow() , _FullPath(TEXT("")) {} SLATE_ARGUMENT( TSharedPtr, SceneInfo ) SLATE_ARGUMENT( TSharedPtr, SceneInfoOriginal) SLATE_ARGUMENT( FbxSceneReimportStatusMapPtr, MeshStatusMap) SLATE_ARGUMENT( bool, CanReimportHierarchy) SLATE_ARGUMENT( FbxSceneReimportStatusMapPtr, NodeStatusMap) SLATE_ARGUMENT( UnFbx::FBXImportOptions*, GlobalImportSettings) SLATE_ARGUMENT( class UFbxSceneImportOptions*, SceneImportOptionsDisplay) SLATE_ARGUMENT( class UFbxSceneImportOptionsStaticMesh*, SceneImportOptionsStaticMeshDisplay) SLATE_ARGUMENT( ImportOptionsNameMapPtr, OverrideNameOptionsMap) SLATE_ARGUMENT( class UFbxSceneImportOptionsSkeletalMesh*, SceneImportOptionsSkeletalMeshDisplay) SLATE_ARGUMENT( TWeakPtr, OwnerWindow) SLATE_ARGUMENT( FString, FullPath ) SLATE_END_ARGS() public: SFbxSceneOptionWindow(); ~SFbxSceneOptionWindow(); void Construct(const FArguments& InArgs); virtual bool SupportsKeyboardFocus() const override { return true; } void CloseFbxSceneOption(); FReply OnImport() { bShouldImport = true; CloseFbxSceneOption(); return FReply::Handled(); } FReply OnCancel() { bShouldImport = false; CloseFbxSceneOption(); return FReply::Handled(); } virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) override { if( InKeyEvent.GetKey() == EKeys::Escape ) { return OnCancel(); } return FReply::Unhandled(); } bool ShouldImport() const { return bShouldImport; } void OnToggleReimportHierarchy(ECheckBoxState CheckType); ECheckBoxState IsReimportHierarchyChecked() const; void OnToggleBakePivotInVertex(ECheckBoxState CheckType); ECheckBoxState IsBakePivotInVertexChecked() const; //Material UI FText GetMaterialBasePath() const; void OnMaterialBasePathCommited(const FText& InText, ETextCommit::Type InCommitType); FReply OnMaterialBasePathBrowse(); FSlateColor GetMaterialBasePathTextColor() const; static void CopyFbxOptionsToFbxOptions(UnFbx::FBXImportOptions *SourceOptions, UnFbx::FBXImportOptions *DestinationOptions); static void CopyStaticMeshOptionsToFbxOptions(UnFbx::FBXImportOptions *ImportSettings, class UFbxSceneImportOptionsStaticMesh* StaticMeshOptions); static void CopyFbxOptionsToStaticMeshOptions(UnFbx::FBXImportOptions *ImportSettings, class UFbxSceneImportOptionsStaticMesh* StaticMeshOptions); static void CopySkeletalMeshOptionsToFbxOptions(UnFbx::FBXImportOptions *ImportSettings, class UFbxSceneImportOptionsSkeletalMesh* SkeletalMeshOptions); static void CopyFbxOptionsToSkeletalMeshOptions(UnFbx::FBXImportOptions *ImportSettings, class UFbxSceneImportOptionsSkeletalMesh* SkeletalMeshOptions); void OnFinishedChangingPropertiesSceneTabDetailView(const FPropertyChangedEvent& PropertyChangedEvent); private: bool CanCloseTab(); bool CanImport() const; void InitAllTabs(); TSharedPtr SpawnDockTab(); TSharedRef SpawnSceneTab(const FSpawnTabArgs& Args); TSharedRef SpawnStaticMeshTab(const FSpawnTabArgs& Args); TSharedRef SpawnSkeletalMeshTab(const FSpawnTabArgs& Args); TSharedRef SpawnMaterialTab(const FSpawnTabArgs& Args); TSharedRef SpawnSceneReimportTab(const FSpawnTabArgs& Args); TSharedRef SpawnStaticMeshReimportTab(const FSpawnTabArgs& Args); TSharedRef SpawnSkeletalMeshReimportTab(const FSpawnTabArgs& Args); private: //SFbxSceneOptionWindow Arguments TSharedPtr< FFbxSceneInfo > SceneInfo; TSharedPtr< FFbxSceneInfo > SceneInfoOriginal; FbxSceneReimportStatusMapPtr MeshStatusMap; FbxSceneReimportStatusMapPtr NodeStatusMap; UnFbx::FBXImportOptions *GlobalImportSettings; class UFbxSceneImportOptions* SceneImportOptionsDisplay; class UFbxSceneImportOptionsStaticMesh* SceneImportOptionsStaticMeshDisplay; ImportOptionsNameMapPtr OverrideNameOptionsMap; class UFbxSceneImportOptionsSkeletalMesh* SceneImportOptionsSkeletalMeshDisplay; TWeakPtr< SWindow > OwnerWindow; FString FullPath; bool bCanReimportHierarchy; //Variables TSharedPtr FbxSceneImportTabManager; TSharedPtr Layout; bool bShouldImport; //Scene tab variables TSharedPtr SceneTabTreeview; TSharedPtr SceneTabDetailsView; //Material tab Variables TSharedPtr MaterialsTabListView; FbxTextureInfoArray TexturesArray; FString MaterialBasePath; //Shared the options name between staticmesh and skeletalmesh FbxOverrideNameOptionsArray OverrideNameOptions; //StaticMesh tab Variables TSharedPtr StaticMeshTabListView; TSharedPtr StaticMeshTabDetailsView; //SkeletalMesh tab Variables TSharedPtr SkeletalMeshTabListView; TSharedPtr SkeletalMeshTabDetailsView; //Scene Reimport tab variables TSharedPtr SceneReimportTreeview; TSharedPtr SceneReimportTabDetailsView; //StaticMesh Reimport tab variables TSharedPtr StaticMeshReimportListView; TSharedPtr StaticMeshReimportDetailsView; //SkeletalMesh tab Variables TSharedPtr SkeletalMeshReimportListView; TSharedPtr SkeletalMeshReimportDetailsView; };