ExtContentBrowserSingleton.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // Copyright 2017-2021 marynate. All Rights Reserved.
  2. #pragma once
  3. #include "IExtContentBrowserSingleton.h"
  4. #include "ExtAssetData.h"
  5. #include "ExtContentBrowserSettings.h"
  6. #include "ExtAssetThumbnail.h"
  7. #include "AssetRegistry/AssetData.h"
  8. class SExtContentBrowser;
  9. class FSpawnTabArgs;
  10. class FTabManager;
  11. class FViewport;
  12. class UFactory;
  13. struct FExtContentBrowserPluginInfo;
  14. #if ECB_WIP_MULTI_INSTANCES
  15. #define MAX_EXT_CONTENT_BROWSERS 4
  16. #else
  17. #define MAX_EXT_CONTENT_BROWSERS 1
  18. #endif
  19. /**
  20. * Plugin related info
  21. */
  22. struct FExtContentBrowserPluginInfo
  23. {
  24. FExtContentBrowserPluginInfo();
  25. FText FriendlyName;
  26. FText VersionName;
  27. FText CreatedBy;
  28. FString ResourcesDir;
  29. };
  30. /**
  31. * External content browser module singleton implementation class
  32. */
  33. class FExtContentBrowserSingleton : public IExtContentBrowserSingleton
  34. {
  35. public:
  36. /** Constructor, Destructor */
  37. FExtContentBrowserSingleton();
  38. virtual ~FExtContentBrowserSingleton();
  39. // IExtContentBrowserSingleton interface
  40. virtual TSharedRef<class SWidget> CreateContentBrowser( const FName InstanceName, TSharedPtr<SDockTab> ContainingTab) override;
  41. #if ECB_LEGACY
  42. virtual TSharedRef<class SWidget> CreateAssetPicker(const FAssetPickerConfig& AssetPickerConfig) override;
  43. virtual TSharedRef<class SWidget> CreatePathPicker(const FPathPickerConfig& PathPickerConfig) override;
  44. virtual TSharedRef<class SWidget> CreateCollectionPicker(const FCollectionPickerConfig& CollectionPickerConfig) override;
  45. virtual void CreateOpenAssetDialog(const FOpenAssetDialogConfig& OpenAssetConfig, const FOnAssetsChosenForOpen& OnAssetsChosenForOpen, const FOnAssetDialogCancelled& OnAssetDialogCancelled) override;
  46. virtual TArray<FAssetData> CreateModalOpenAssetDialog(const FOpenAssetDialogConfig& InConfig) override;
  47. virtual void CreateSaveAssetDialog(const FSaveAssetDialogConfig& SaveAssetConfig, const FOnObjectPathChosenForSave& OnAssetNameChosenForSave, const FOnAssetDialogCancelled& OnAssetDialogCancelled) override;
  48. virtual FString CreateModalSaveAssetDialog(const FSaveAssetDialogConfig& SaveAssetConfig) override;
  49. virtual bool HasPrimaryContentBrowser() const override;
  50. virtual void FocusPrimaryContentBrowser(bool bFocusSearch) override;
  51. virtual void CreateNewAsset(const FString& DefaultAssetName, const FString& PackagePath, UClass* AssetClass, UFactory* Factory) override;
  52. virtual void SyncBrowserToAssets(const TArray<struct FAssetData>& AssetDataList, bool bAllowLockedBrowsers = false, bool bFocuSExtContentBrowser = true, const FName& InstanceName = FName(), bool bNewSpawnBrowser = false) override;
  53. virtual void SyncBrowserToAssets(const TArray<UObject*>& AssetList, bool bAllowLockedBrowsers = false, bool bFocuSExtContentBrowser = true, const FName& InstanceName = FName(), bool bNewSpawnBrowser = false) override;
  54. virtual void SyncBrowserToFolders(const TArray<FString>& FolderList, bool bAllowLockedBrowsers = false, bool bFocuSExtContentBrowser = true, const FName& InstanceName = FName(), bool bNewSpawnBrowser = false) override;
  55. virtual void SyncBrowserTo(const FExtContentBrowserSelection& ItemSelection, bool bAllowLockedBrowsers = false, bool bFocuSExtContentBrowser = true, const FName& InstanceName = FName(), bool bNewSpawnBrowser = false) override;
  56. #endif
  57. virtual void GetSelectedAssets(TArray<FExtAssetData>& SelectedAssets) override;
  58. #if ECB_LEGACY
  59. virtual void GetSelectedFolders(TArray<FString>& SelectedFolders) override;
  60. virtual void GetSelectedPathViewFolders(TArray<FString>& SelectedFolders) override;
  61. virtual void CaptureThumbnailFromViewport(FViewport* InViewport, TArray<FAssetData>& SelectedAssets) override;
  62. #endif
  63. #if ECB_WIP_MULTI_INSTANCES
  64. virtual void SetSelectedPaths(const TArray<FString>& FolderPaths, bool bNeedsRefresh = false) override;
  65. #endif
  66. /** Gets the content browser singleton as a FContentBrowserSingleton */
  67. static FExtContentBrowserSingleton& Get();
  68. /** Gets the content browser singleton as a FContentBrowserSingleton */
  69. static FExtAssetRegistry& GetAssetRegistry();
  70. static FExtObjectThumbnailPool& GetThumbnailPool();
  71. static FString GetPluginResourcesDir();
  72. static FText GetPluginVersionText();
  73. void ToggleShowToolbarButton();
  74. /** Sets the current primary content browser. */
  75. void SetPrimaryContentBrowser(const TSharedRef<SExtContentBrowser>& NewPrimaryBrowser);
  76. #if ECB_WIP_MULTI_INSTANCES
  77. /** Notifies the singleton that a browser was closed */
  78. void ContentBrowserClosed(const TSharedRef<SExtContentBrowser>& ClosedBrowser);
  79. #endif
  80. /** Single storage location for content browser favorites */
  81. TArray<FString> FavoriteFolderPaths;
  82. public:
  83. static FExtAssetRegistry ExtAssetRegistry;
  84. FExtObjectThumbnailPool ThumbnailPool;
  85. private:
  86. private:
  87. void RegisterEditorDelegates();
  88. void UnregisterEditorDelegates();
  89. void OnBeginPIE(const bool bIsSimulating);
  90. void OnEndPIE(const bool bIsSimulating);
  91. void MountSandbox();
  92. void UnMountSandbox();
  93. void RegisterMenuAndTabSpawner();
  94. void RegisterCommands();
  95. void AddToolbarExtension(FToolBarBuilder& Builder);
  96. void OpenUAssetBrowserButtonClicked() const;
  97. #if ECB_LEGACY
  98. /** Util to get or create the content browser that should be used by the various Sync functions */
  99. TSharedPtr<SExtContentBrowser> FindContentBrowserToSync(bool bAllowLockedBrowsers, const FName& InstanceName = FName(), bool bNewSpawnBrowser = false);
  100. /** Shared code to open an asset dialog window with a config */
  101. void SharedCreateAssetDialogWindow(const TSharedRef<class SAssetDialog>& AssetDialog, const FSharedAssetDialogConfig& InConfig, bool bModal) const;
  102. /**
  103. * Delegate handlers
  104. **/
  105. /** Sets the primary content browser to the next valid browser in the list of all browsers */
  106. void ChooseNewPrimaryBrowser();
  107. /** Gives focus to the specified content browser */
  108. void FocuSExtContentBrowser(const TSharedPtr<SExtContentBrowser>& BrowserToFocus);
  109. /** Summons a new content browser */
  110. FName SummonNewBrowser(bool bAllowLockedBrowsers = false);
  111. #endif
  112. /** Handler for a request to spawn a new content browser tab */
  113. TSharedRef<SDockTab> SpawnContentBrowserTab(const FSpawnTabArgs& SpawnTabArgs, int32 BrowserIdx );
  114. /** Handler for a request to spawn a new content browser tab */
  115. FText GetContentBrowserTabLabel(int32 BrowserIdx);
  116. #if ECB_WIP_LOCK
  117. /** Returns true if this content browser is locked (can be used even when closed) */
  118. bool IsLocked(const FName& InstanceName) const;
  119. #endif
  120. /** Returns a localized name for the tab/menu entry with index */
  121. static FText GetContentBrowserLabelWithIndex( int32 BrowserIdx );
  122. public:
  123. /** The tab identifier/instance name for content browser tabs */
  124. FName ContentBrowserTabIDs[MAX_EXT_CONTENT_BROWSERS];
  125. #if ECB_WIP_MULTI_INSTANCES
  126. private:
  127. TArray<TWeakPtr<SExtContentBrowser>> AllContentBrowsers;
  128. TMap<FName, TWeakPtr<FTabManager>> BrowserToLastKnownTabManagerMap;
  129. #endif
  130. TWeakPtr<SExtContentBrowser> PrimaryContentBrowser;
  131. private:
  132. TSharedPtr<class FExtender> ToolbarExtender;
  133. TSharedPtr<const class FExtensionBase> ToolbarExtension;
  134. TSharedPtr<class FUICommandList> ExtContentBrowserCommands;
  135. TSharedPtr<class FExtDependencyGraphPanelNodeFactory> ExtDependencyGraphPanelNodeFactory;
  136. FExtContentBrowserPluginInfo PluginInfo;
  137. };