// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/Array.h" #include "Containers/ArrayView.h" #include "Containers/MRUArray.h" #include "Containers/UnrealString.h" #include "ContentBrowserDataMenuContexts.h" #include "ContentBrowserDataSubsystem.h" #include "ContentBrowserDelegates.h" #include "Filters/CustomTextFilters.h" #include "HAL/Platform.h" #include "HistoryManager.h" #include "IAssetTypeActions.h" #include "IContentBrowserSingleton.h" #include "Input/Reply.h" #include "Internationalization/Text.h" #include "Layout/Visibility.h" #include "Misc/Optional.h" #include "Templates/SharedPointer.h" #include "Templates/UnrealTemplate.h" #include "Types/SlateEnums.h" #include "UObject/NameTypes.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/Docking/SDockTab.h" #include "Widgets/Layout/SSplitter.h" #include "Widgets/Navigation/SBreadcrumbTrail.h" #include "Widgets/SCompoundWidget.h" #include "Widgets/ParentWidgetSwitcher.h" #include "Widgets/WidgetSizeSwitcher.h" namespace UE::Editor::ContentBrowser { class SContentSourcesView; class SLegacyContentSource; namespace Private { class SContentBrowserSourceTree; class FContentBrowserSourceTreeEntry; class SContentBrowserSourceTreeArea; } } class FContentBrowserItemDataTemporaryContext; class FContentBrowserItemDataUpdate; class FExtender; class FAssetTextFilter; class FSourcesSearch; class FTabManager; class FUICommandList; class ICollectionContainer; class SAssetSearchBox; class SAssetView; class SBorder; class SComboButton; class SExpandableArea; class SFavoritePathView; class SFilterList; class SNavigationBar; class SPathView; class SSearchToggleButton; class SWidget; class SWidgetSwitcher; class UClass; class UContentBrowserToolbarMenuContext; class UFactory; class UToolMenu; struct FAssetData; struct FAssetSearchBoxSuggestion; struct FCollectionNameType; struct FContentBrowserInstanceConfig; struct FContentBrowserItem; struct FContentBrowserItemPath; struct FGeometry; struct FKeyEvent; struct FPointerEvent; struct FSlateBrush; struct FToolMenuContext; enum class EFilterBarLayout : uint8; enum class EContentBrowserViewContext : uint8 { AssetView, PathView, FavoriteView, }; /** * A widget to display and work with all game and engine content */ class SContentBrowser : public SCompoundWidget { using Super = SCompoundWidget; public: SLATE_BEGIN_ARGS( SContentBrowser ) : _ContainingTab() , _InitiallyLocked(false) , _IsDrawer(false) {} /** The tab in which the content browser resides */ SLATE_ARGUMENT(TSharedPtr, ContainingTab) /** If true, this content browser will not sync from external sources. */ SLATE_ARGUMENT(bool, InitiallyLocked ) SLATE_ARGUMENT(bool, IsDrawer) SLATE_END_ARGS() SContentBrowser(); ~SContentBrowser(); bool ShouldShowRedirectors() const; /** Constructs this widget with InArgs */ void Construct( const FArguments& InArgs, const FName& InstanceName, const FContentBrowserConfig* Config ); virtual void OnDragLeave(const FDragDropEvent& DragDropEvent) override; /** Sets up an inline-name for the creation of a new asset using the specified path and the specified class and/or factory */ void CreateNewAsset(const FString& DefaultAssetName, const FString& PackagePath, UClass* AssetClass, UFactory* Factory); /** * Changes sources to show the specified assets and selects them in the asset view * * @param AssetDataList - A list of assets to sync the view to * * @param bAllowImplicitSync - true to allow the view to sync to parent folders if they are already selected, * false to force the view to select the explicit Parent folders of each asset */ void SyncToAssets( TArrayView AssetDataList, const bool bAllowImplicitSync = false, const bool bDisableFiltersThatHideAssets = true ); /** * Changes sources to show the specified folders and selects them in the asset view * * @param FolderList - A list of folders to sync the view to * * @param bAllowImplicitSync - true to allow the view to sync to parent folders if they are already selected, * false to force the view to select the explicit Parent folders of each asset */ void SyncToFolders( TArrayView FolderList, const bool bAllowImplicitSync = false ); /** * Changes sources to show the specified items and selects them in the asset view * * @param ItemsToSync - A list of items to sync the view to * * @param bAllowImplicitSync - true to allow the view to sync to parent folders if they are already selected, * false to force the view to select the explicit Parent folders of each asset */ void SyncToItems( TArrayView ItemsToSync, const bool bAllowImplicitSync = false, const bool bDisableFiltersThatHideAssets = true ); /** * Changes sources to show the specified items and selects them in the asset view * * @param VirtualPathsToSync - A list of virtual paths to sync the view to * * @param bAllowImplicitSync - true to allow the view to sync to parent folders if they are already selected, * false to force the view to select the explicit Parent folders of each asset */ void SyncToVirtualPaths( TArrayView VirtualPathsToSync, const bool bAllowImplicitSync = false, const bool bDisableFiltersThatHideAssets = true ); /** * Changes sources to show the specified assets and folders and selects them in the asset view * * @param AssetDataList - A list of assets to sync the view to * @param FolderList - A list of folders to sync the view to * * @param bAllowImplicitSync - true to allow the view to sync to parent folders if they are already selected, * false to force the view to select the explicit Parent folders of each asset */ void SyncToLegacy( TArrayView AssetDataList, TArrayView FolderList, const bool bAllowImplicitSync = false, const bool bDisableFiltersThatHideAssets = true ); /** * Changes sources to show the specified items and selects them in the asset view * * @param AssetDataList - A list of assets to sync the view to * * @param bAllowImplicitSync - true to allow the view to sync to parent folders if they are already selected, * false to force the view to select the explicit Parent folders of each asset */ void SyncTo( const FContentBrowserSelection& ItemSelection, const bool bAllowImplicitSync = false, const bool bDisableFiltersThatHideAssets = true ); /** Sets this content browser as the primary browser. The primary browser is the target for asset syncs and contributes to the global selection set. */ void SetIsPrimaryContentBrowser(bool NewIsPrimary); /** Returns if this browser can be used as the primary browser. */ bool CanSetAsPrimaryContentBrowser() const; /** Gets the tab manager for the tab containing this browser */ TSharedPtr GetTabManager() const; /** Loads all selected assets if unloaded */ void LoadSelectedObjectsIfNeeded(); /** Returns all the assets that are selected in the asset view */ void GetSelectedAssets(TArray& SelectedAssets); /** Returns all the folders that are selected in the asset view */ void GetSelectedFolders(TArray& SelectedFolders); /** Returns the folders that are selected in the path view */ TArray GetSelectedPathViewFolders(); /** Saves all persistent settings to config and returns a string identifier */ void SaveSettings() const; /** Sets the content browser to show the specified paths */ void SetSelectedPaths(const TArray& FolderPaths, bool bNeedsRefresh = false); /** Gets the current path if one exists, otherwise returns empty string. */ FString GetCurrentPath(const EContentBrowserPathType PathType) const; /** * Forces the content browser to show plugin content * * @param bEnginePlugin If true, the content browser will also be forced to show engine content */ void ForceShowPluginContent(bool bEnginePlugin); /** Get the unique name of this content browser's in */ const FName GetInstanceName() const; /** Returns true if this content browser does not accept syncing from an external source */ bool IsLocked() const; /** Gives keyboard focus to the asset search box */ void SetKeyboardFocusOnSearch() const; /** * Copies settings from a different browser to this browser * Note this overrides any settings already saved for this browser */ void CopySettingsFromBrowser(TSharedPtr OtherBrowser); /** SWidget interface */ virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) override; virtual FReply OnMouseButtonDown( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) override; virtual FReply OnPreviewMouseButtonDown( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) override; virtual FReply OnMouseButtonDoubleClick( const FGeometry& InMyGeometry, const FPointerEvent& InMouseEvent ) override; /** Returns true if current path can be written to */ bool CanWriteToCurrentPath() const; /** Returns true if path can be written to */ bool CanWriteToPath(const FContentBrowserItemPath InPath) const; /** Adds a new Custom Text Filter to the Filter List */ void AddCustomTextFilter(const FCustomTextFilterData& FilterData, bool bApplyFilter); /** Deletes the specified Custom Text Filter */ void DeleteCustomTextFilterByLabel(const FText& FilterLabel); /** Modifies the specified Custom Text Filter */ void ModifyCustomTextFilterByLabel(const FCustomTextFilterData& NewFilterData, const FText& FilterLabel); /** Gets whether the AssetView in the Content Browser is done filtering */ bool IsAssetViewDoneFiltering(); /** Sets the actual text in the Search Box */ void SetSearchText(const FText& InSearchText); /** Called by the editable text control when the user commits a text change */ void OnSearchBoxCommitted(const FText& InSearchText, ETextCommit::Type CommitInfo); /** Toggles the favorite status of an array of folders*/ void ToggleFolderFavorite(const TArray& FolderPaths); /** Sets the Content Browser filter layout to either vertical or horizontal */ void SetFilterLayout(EFilterBarLayout InFilterBarLayout) const; /** Gets the current Content Browser filter layout */ EFilterBarLayout GetFilterLayout() const; /** Gets a pointer to the active filter container widget (Horizontal or Vertical), nullptr if neither is active */ TSharedPtr GetActiveFilterContainer() const; private: class FCollectionSource; /** Called prior to syncing the selection in this Content Browser */ void PrepareToSyncItems(TArrayView ItemsToSync, const bool bDisableFiltersThatHideAssets); /** Called prior to syncing the selection in this Content Browser */ void PrepareToSyncVirtualPaths(TArrayView VirtualPathsToSync, const bool bDisableFiltersThatHideAssets); /** Called prior to syncing the selection in this Content Browser */ void PrepareToSyncLegacy(TArrayView AssetDataList, TArrayView FolderPaths, const bool bDisableFiltersThatHideAssets); /** Called to retrieve the text that should be highlighted on assets */ FText GetHighlightedText() const; /** Called when a containing tab is closing, if there is one */ void OnContainingTabSavingVisualState() const; /** Called when a containing tab is closed, if there is one */ void OnContainingTabClosed(TSharedRef DockTab); /** Called when a containing tab is activated, if there is one */ void OnContainingTabActivated(TSharedRef DockTab, ETabActivationCause InActivationCause); /** Gets the key and ini file used to store the settings for each splitter slot */ void GetSourceTreeSplitterSlotSizeSettingKeyAndFilename(int32 SlotIndex, FString& OutKey, FString& OutFilename) const; /** Loads settings from config based on the browser's InstanceName*/ void LoadSettings(const FName& InstanceName); /** Handler for when the sources were changed */ void SourcesChanged(const TArray& SelectedPaths, const TArray& SelectedCollections); /** Handler for when a folder has been entered in the asset view */ void FolderEntered(const FContentBrowserItem& Folder); /** Handler for when a path has been selected in the path view */ void PathSelected(const FString& FolderPath); /** Handler for when a path has been selected in the favorite path view */ void FavoritePathSelected(const FString& FolderPath); /** Get the asset tree context menu */ TSharedRef GetPathContextMenuExtender(const TArray& SelectedPaths) const; /** Handler for when a collection has been selected in the collection view */ void CollectionSelected(const TSharedPtr& CollectionContainer, const FCollectionNameType& SelectedCollection); /** Sets the state of the browser to the one described by the supplied history data */ void OnApplyHistoryData(const FHistoryData& History); /** Updates the supplied history data with current information */ void OnUpdateHistoryData(FHistoryData& History) const; /** Handler for when the path context menu requests a folder creation */ void NewFolderRequested(const FString& SelectedPath); /** Handler for when a data source requests file item creation */ void NewFileItemRequested(const FContentBrowserItemDataTemporaryContext& NewItemContext); /** Called when the editable text needs to be set or cleared */ void SetSearchBoxText(const FText& InSearchText); /** Called by the editable text control when the search text is changed by the user */ void OnSearchBoxChanged(const FText& InSearchText); /** Called by the editable text control to allow the content browser to handle specific key presses without it resulting in typing into the search box */ FReply OnSearchKeyDown(const FGeometry& Geometry, const FKeyEvent& InKeyEvent); /** Should the "Save Search" button be enabled? */ bool IsSaveSearchButtonEnabled() const; /** Open the menu to let you save the current search text as a filter or dynamic collection */ void OnSaveSearchButtonClicked(const FText& InSearchText); /** Save the current search as a filter pill */ void SaveSearchAsFilter(); /** Binding for begining to edit text in the location bar */ void EditPathCommand(); /** Called when a crumb in the path breadcrumb trail or menu is clicked */ void OnPathClicked(const FString& VirtualPath); /** Called when item in the path delimiter arrow menu is clicked */ void OnPathMenuItemClicked(FString ClickedPath); /** * Populates the delimiter arrow with a menu of directories under the current directory that can be navigated to * * @param CrumbData The current directory path * @return The directory menu */ TSharedRef OnGetCrumbDelimiterContent(const FString& CrumbData) const; bool ParseCollectionCrumbData(const FString& CrumbData, FCollectionSource*& OutCollectionSource, FCollectionNameType& OutCollection) const; /** Return a list of recently visited locations which can be used with OnNavigateToPath to return to those locations */ TArray GetRecentPaths() const; /** Navigate to a location by text identifier. E.g. a virtual path such as /All/Game/MyFolder */ void OnNavigateToPath(const FString& Path); /** * Returns whether the currently shown location should be presented to the user as a string when beginning to edit the path, * Otherwise the text box will be initially empty. */ bool OnCanEditPathAsText(const FString& Text) const; /** Returns a list of valid paths starting with Prefix which can be navigated to with OnNavigateToPath */ TArray OnCompletePathPrefix(const FString& Prefix) const; /** Register the context objects needed for the "Add New" menu */ void AppendNewMenuContextObjects(const EContentBrowserDataMenuContext_AddNewMenuDomain InDomain, const TArray& InSelectedPaths, FToolMenuContext& InOutMenuContext, UContentBrowserToolbarMenuContext* CommonContext, bool bCanBeModified); /** Handle creating a context menu for the "Add New" button */ TSharedRef MakeAddNewContextMenu(const EContentBrowserDataMenuContext_AddNewMenuDomain InDomain, UContentBrowserToolbarMenuContext* CommonContext); /** Handle populating a context menu for the "Add New" button */ void PopulateAddNewContextMenu(class UToolMenu* Menu); /** Called to work out whether the import button should be enabled */ bool IsAddNewEnabled() const; /** Gets the tool tip for the "Add New" button */ FText GetAddNewToolTipText() const; /** Saves dirty content. */ FReply OnSaveClicked(); /** Opens the add content dialog. */ void OnAddContentRequested(); /** Handler for when a new item is requested in the asset view */ void OnNewItemRequested(const FContentBrowserItem& NewItem); /** Handler for when the selection set in any view has changed. */ void OnItemSelectionChanged(const FContentBrowserItem& SelectedItem, ESelectInfo::Type SelectInfo, EContentBrowserViewContext ViewContext); /** Handler for when the user double clicks, presses enter, or presses space on a Content Browser item */ void OnItemsActivated(TArrayView ActivatedItems, EAssetTypeActivationMethod::Type ActivationMethod); /** Handler for clicking the lock button */ FReply ToggleLockClicked(); /** Handler for clicking the dock drawer in layout button */ FReply DockInLayoutClicked(); /** Gets the menu text */ FText GetLockMenuText() const; /** Gets icon for the lock button */ FSlateIcon GetLockIcon() const; /** Gets brush for the lock button */ const FSlateBrush* GetLockIconBrush() const; /** Gets the visibility state of the asset tree */ EVisibility GetSourcesViewVisibility() const; /** Set whether or not we the sources view is expanded. */ void SetSourcesViewExpanded(bool bExpanded); /** Handler for clicking the tree expand/collapse button */ FReply SourcesViewExpandClicked(); /** Called to handle the Content Browser settings changing */ void OnContentBrowserSettingsChanged(FName PropertyName); /** * Called when engine Cvars change to update content browser settings * e.g. private content feature */ void OnConsoleVariableChanged(); /** Handler for clicking the history back button */ FReply BackClicked(); /** Handler for clicking the history forward button */ FReply ForwardClicked(); /** Handler to check to see if a rename command is allowed */ bool HandleRenameCommandCanExecute() const; /** Handler for Rename */ void HandleRenameCommand(); /** Handler to check to see if a save asset command is allowed */ bool HandleSaveAssetCommandCanExecute() const; /** Handler for save asset */ void HandleSaveAssetCommand(); /** Handler for SaveAll in folder */ void HandleSaveAllCurrentFolderCommand() const; /** Handler for Resave on a folder */ void HandleResaveAllCurrentFolderCommand() const; /** Handler for Copy path on an asset*/ void CopySelectedAssetPathCommand() const; /** Handler to check to see if a delete command is allowed */ bool HandleDeleteCommandCanExecute() const; /** Handler for Delete */ void HandleDeleteCommandExecute(); /** Handler for deleting a favorite using a keybind. */ void HandleDeleteFavorite(TSharedPtr ParentWidget); /** Handler for opening assets or folders */ void HandleOpenAssetsOrFoldersCommandExecute(); /** Handler for previewing assets */ void HandlePreviewAssetsCommandExecute(); /** Handler for creating new folder */ void HandleCreateNewFolderCommandExecute(); /** Handler for navigating up to the parent folder of the one currently open */ void HandleGoUpToParentFolder(); /** True if the user may navigate from the currently selected folder to its parent */ bool HandleCanGoUpToParentFolder() const; /** True if the user may use the history back button */ bool IsBackEnabled() const; /** True if the user may use the history forward button */ bool IsForwardEnabled() const; /** Gets the tool tip text for the history back button */ FText GetHistoryBackTooltip() const; /** Gets the tool tip text for the history forward button */ FText GetHistoryForwardTooltip() const; /** Sets the global selection set to the asset view's selected items */ void SyncGlobalSelectionSet(); /** Updates the breadcrumb trail to the current path */ void UpdatePath(); /** Handler for when a filter in the filter list has changed */ void OnFilterChanged(); /** Gets the text for the path label */ FText GetPathText() const; /** Returns true if currently filtering by a source */ bool IsFilteredBySource() const; /** Handler for when the context menu or asset view requests to find items in the paths view */ void OnShowInPathsViewRequested(TArrayView ItemsToFind); /** Handler for when the user has committed a rename of an item */ void OnItemRenameCommitted(TArrayView Items); /** Handler for when the asset context menu requests to rename an item */ void OnRenameRequested(const FContentBrowserItem& Item, EContentBrowserViewContext ViewContext); /** Handler for when the path context menu has successfully deleted a folder */ void OnOpenedFolderDeleted(); /** Handler for when the asset context menu requests to duplicate an item */ void OnDuplicateRequested(TArrayView OriginalItems); /** Handler for when the asset context menu requests to refresh the asset view */ void OnAssetViewRefreshRequested(); /** Handles an on collection container created event */ void HandleCollectionContainerAdded(const TSharedRef& CollectionContainer); void ShowCollectionContainer(const TSharedRef& CollectionContainer); /** Handles an on collection container destroyed event */ void HandleCollectionContainerRemoved(const TSharedRef& CollectionContainer); void HideCollectionContainer(const TSharedRef& CollectionContainer); /** Handles an on collection container is hidden changed event */ void HandleIsHiddenChanged(ICollectionContainer& CollectionContainer, bool bIsHidden); /** Handles an on collection destroyed event */ void HandleCollectionRemoved(ICollectionContainer& CollectionContainer, const FCollectionNameType& Collection); /** Handles an on collection renamed event */ void HandleCollectionRenamed(ICollectionContainer& CollectionContainer, const FCollectionNameType& OriginalCollection, const FCollectionNameType& NewCollection); /** Handles an on collection updated event */ void HandleCollectionUpdated(ICollectionContainer& CollectionContainer, const FCollectionNameType& Collection); /** Handles a path removed event */ void HandlePathRemoved(const FName Path); /** Handles content items being updated */ void HandleItemDataUpdated(TArrayView InUpdatedItems); /** Gets all suggestions for the asset search box */ void OnAssetSearchSuggestionFilter(const FText& SearchText, TArray& PossibleSuggestions, FText& SuggestionHighlightText) const; /** Combines the chosen suggestion with the active search text */ FText OnAssetSearchSuggestionChosen(const FText& SearchText, const FString& Suggestion) const; /** Gets the dynamic hint text for the "Search Assets" search text box */ FText GetSearchAssetsHintText() const; /** Delegate called when generating the context menu for an item */ TSharedPtr GetItemContextMenu(TArrayView SelectedItems, EContentBrowserViewContext ViewContext); /** Populate the context menu for a folder */ void PopulateFolderContextMenu(UToolMenu* Menu); /** Delegate called to get the current selection state */ void GetSelectionState(TArray& SelectedAssets, TArray& SelectedPaths); /** Sets up an inline-name for the creation of a default-named folder the specified path */ void CreateNewFolder(FString FolderPath, FOnCreateNewFolder OnCreateNewFolder); /** Handler for when "Open in new Content Browser" is selected */ void OpenNewContentBrowser(); /** Bind our UI commands */ void BindCommands(); /** Unbind our UI commands */ void UnbindCommands(); /** Gets the visibility of the favorites view */ EVisibility GetFavoriteFolderVisibility() const; /** Get the visibility of the lock button */ EVisibility GetLockButtonVisibility() const; /** Set favorite status of an array of folders unless they're already favorited */ void AddFolderFavorite(const TArray& FolderPaths); /** Save the favorite paths to settings and optionally select and show the paths passed in */ void SaveAndShowNewFolderFavorites(const TArray& FolderPaths); /* Toggles the private show private content state of an array of folders*/ void TogglePrivateContentEdit(const TArray& FolderPaths); /** Called when Asset View Options "Search" options change */ void HandleAssetViewSearchOptionsChanged(); /** Fill menu for filtering path view with items */ void PopulatePathViewFiltersMenu(UToolMenu* Menu); /** Add data so that menus can access content browser */ void ExtendAssetViewButtonMenuContext(FToolMenuContext& InMenuContext); /** Creates various widgets for the content browser main view */ TSharedRef CreateToolBar(const FContentBrowserConfig* Config); TSharedRef CreateNavigationToolBar(const FContentBrowserConfig* Config); TSharedRef CreateLockButton(const FContentBrowserConfig* Config); TSharedRef CreateAssetView(const FContentBrowserConfig* Config); TSharedRef CreateFavoritesView(const FContentBrowserConfig* Config); TSharedRef CreatePathView(const FContentBrowserConfig* Config); TSharedRef CreateCollectionsView(FCollectionSource& CollectionSource); TSharedRef CreateDrawerDockButton(const FContentBrowserConfig* Config); FCollectionSource& AddSlotForCollectionContainer(int32 Index, const TSharedRef& CollectionContainer); void RemoveSlotForCollectionContainer(const TSharedRef& CollectionContainer); void SetFavoritesExpanded(bool bExpanded); void SetPathViewExpanded(bool bExpanded); /** Adds menu options to the view menu */ void ExtendViewOptionsMenu(const FContentBrowserConfig* Config); /** Gets the size rule for various areas. When areas are a collapsed the splitter slot becomes auto sized, otherwise it is user sized */ SSplitter::ESizeRule GetFavoritesAreaSizeRule() const; SSplitter::ESizeRule GetPathAreaSizeRule() const; /** Called when the Splitter containing the PathView Box gets resized */ void OnPathViewBoxColumnResized(float InSize); /** Returns the PathView Box width */ FOptionalSize GetPathViewBoxWidthOverride() const; /** Called when the Splitter containing the filters Box gets resized */ void OnFilterBoxColumnResized(float InSize); /** Returns the filters Box width */ FOptionalSize GetFilterViewBoxWidthOverride() const; /** Gets the min size for various areas. When areas are not visible the min size is 0, otherwise there is a minimum size to prevent overlap */ float GetFavoritesAreaMinSize() const; /** Called when the layout of the SFilterList is changing */ void OnFilterBarLayoutChanging(EFilterBarLayout NewLayout); /** Fetch the const config for this content browser instance. */ const FContentBrowserInstanceConfig* GetConstInstanceConfig() const; /** Fetch the mutable config for this content browser instance. */ FContentBrowserInstanceConfig* GetMutableInstanceConfig(); /** Initialize an editor config for this instance if one does not exist. */ FContentBrowserInstanceConfig* CreateEditorConfigIfRequired(); void UpdatePrivateContentFeatureEnabled(bool bUpdateFilterIfChanged); /** Executed when the legacy content source is enabled. */ void OnLegacyContentSourceEnabled(); /** Executed when the legacy content source is enabled. */ void OnLegacyContentSourceDisabled(); /** Create the content browser widgets (SPathView, SAssetView, search and filter bars etc) */ TSharedRef CreateLegacyAssetViewWidgets(); private: /** Struct that contains the widgets used by content browser's default layout (i.e Legacy Content Source) */ struct FLegacyContentSourceWidgets { /** The context menu manager for the path view */ TSharedPtr PathContextMenu; /** The asset view widget */ TSharedPtr AssetViewPtr; /** The border that holds the content in AssetView */ TSharedPtr AssetViewBorder; /** A helper class to manage asset context menu options */ TSharedPtr AssetContextMenu; /** The filter list */ TSharedPtr FilterListPtr; /** The text box used to search for assets */ TSharedPtr SearchBoxPtr; /** Handles the search box sizing within the toolbar */ TSharedPtr> SearchBoxSizeSwitcher; /** Combine breadcrumb/text-box widget for showing & changing location */ TSharedPtr NavigationBar; /** The favorites tree widget */ TSharedPtr FavoritePathViewPtr; /** The asset tree widget */ TSharedPtr PathViewPtr; TSharedPtr SourceTreePtr; /** The generated navigation toolbar widget */ TSharedPtr NavigationToolBarWidget; /** The splitter between the path & asset view */ TSharedPtr PathAssetSplitterPtr; /** The splitter between the path, favorite and collection views */ TSharedPtr PathFavoriteSplitterPtr; /** The number of fixed slots in the splitter, slots after this number are collection view slots */ int32 SourceTreeSplitterNumFixedSlots = 0; /** The containing widget for the vertical filter view */ TSharedPtr VerticalFilterViewContainer; }; TSharedPtr LegacyContentSourceWidgets; /** The tab that contains this browser */ TWeakPtr ContainingTab; /** The manager that keeps track of history data for this browser */ FHistoryManager HistoryManager; /** A list of locations "jumped" to for populating a dropdown of such locations. * As a general rule, simple up/down navigation should not populate this list and only direct entries such as * "find in content browser" or typing in a path should populate it */ TMRUArray JumpMRU; /** The sources search for favorites */ TSharedPtr FavoritesSearch; /** The sources search for paths */ TSharedPtr SourcesSearch; /** The Combo Button used to summon the filter dropdown */ TSharedPtr FilterComboButton; /** Favorites area widget */ TSharedPtr FavoritesArea; /** Path area widget */ TSharedPtr PathArea; /** Widgets for each collection container */ TArray> CollectionSources; /** The expanded state of the asset tree */ bool bSourcesViewExpanded = true; /** True if this browser is the primary content browser */ bool bIsPrimaryBrowser = false; /** True if this content browser can be set to the primary browser. */ bool bCanSetAsPrimaryBrowser = true; /** True if this content browser is an a drawer */ bool bIsDrawer = false; /** True if source should not be changed from an outside source */ bool bIsLocked = false; /** True if bShouldEnablePrivateContentFilter was true and we are filtering this->AssetView. */ bool bPrivateContentFilterEnabled = false; /** Starting width of the PathView Box */ float PathViewBoxWidth = 230.f; /** Starting width of the Filter Box */ float FilterBoxWidth = 180.f; /** Cached result of CanWriteToPath to avoid recalculating it every frame */ mutable bool bCachedCanWriteToCurrentPath = false; /** Unique name for this Content Browser. */ FName InstanceName; /** Path that was last used to determine bCachedCanWriteToCurrentPath */ mutable TOptional CachedCanWriteToCurrentPath; /** The list of FrontendFilters currently applied to the asset view */ TSharedPtr FrontendFilters; /** The text filter to use on the assets, separate from FrontendFilters so it can be specifically optimized */ TSharedPtr TextFilter; /** Commands handled by this widget */ TSharedPtr< FUICommandList > Commands; /** Delegate used to create a new folder */ FOnCreateNewFolder OnCreateNewFolder; /** The list of plugin filters currently applied to the path view */ TSharedPtr PluginPathFilters; /** When viewing a dynamic collection, the active search query will be stashed in this variable so that it can be restored again later */ TOptional StashedSearchBoxText; /** Handle to a callback for when CVars change */ FConsoleVariableSinkHandle CVarSinkHandle; /** Widget that contains the content sources selector (if enabled) and the currently enabled content source */ TSharedPtr ContentSourcesContainer; /** A legacy content source, which when enabled displays the default content browser widgets */ TSharedPtr LegacyContentSource; /** A copy of the init params used by the content browser so we can re-create the widgets dynamically * If no init params were provided, the default values will be used. */ FContentBrowserConfig InitConfig; /** Whether this content browser was specified an init config */ bool bHasInitConfig = false; /** Registers the "Add New" drop-down menu */ static FDelayedAutoRegisterHelper AddNewContextMenuRegistration; /** Registers the bottom navigation bar */ static FDelayedAutoRegisterHelper NavigationBarMenuRegistration; /** Registers the context menu for folders */ static FDelayedAutoRegisterHelper FolderContextMenuRegistration; /** Registers a sub-menu within the settings button menu */ static FDelayedAutoRegisterHelper PathViewFiltersMenuRegistration; /** Registers the top toolbar */ static FDelayedAutoRegisterHelper ToolBarMenuRegistration; public: /** The section of EditorPerProjectUserSettings in which to save content browser settings */ static const FString SettingsIniSection; };