2019-12-26 15:33:43 -05:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
2014-11-07 09:55:57 -05:00
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
2022-08-24 22:45:13 -04:00
|
|
|
#include "Containers/Array.h"
|
|
|
|
|
#include "Containers/Map.h"
|
|
|
|
|
#include "Delegates/Delegate.h"
|
|
|
|
|
#include "Internationalization/Text.h"
|
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
|
|
|
#include "Misc/TextFilter.h"
|
2022-08-24 22:45:13 -04:00
|
|
|
#include "Templates/SharedPointer.h"
|
|
|
|
|
#include "ViewModels/CategoryViewModel.h"
|
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
|
|
|
|
|
|
|
|
class FContentSourceViewModel;
|
2022-08-24 22:45:13 -04:00
|
|
|
class FString;
|
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
|
|
|
class IContentSourceProvider;
|
|
|
|
|
|
2014-11-07 09:55:57 -05:00
|
|
|
/** The view model for the SAddContentWidget. */
|
|
|
|
|
class FAddContentWidgetViewModel : public TSharedFromThis<FAddContentWidgetViewModel>
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
DECLARE_DELEGATE(FOnCategoriesChanged)
|
|
|
|
|
DECLARE_DELEGATE(FOnContentSourcesChanged);
|
|
|
|
|
DECLARE_DELEGATE(FOnSelectedContentSourceChanged);
|
|
|
|
|
|
|
|
|
|
typedef TTextFilter<TSharedPtr<FContentSourceViewModel>> ContentSourceTextFilter;
|
|
|
|
|
|
|
|
|
|
/** Creates a shared reference to a new view model. */
|
|
|
|
|
static TSharedRef<FAddContentWidgetViewModel> CreateShared();
|
|
|
|
|
|
|
|
|
|
/** Gets the view models for the current set of content source categories. */
|
2021-04-14 11:08:21 -04:00
|
|
|
const TArray<FCategoryViewModel>& GetCategories() const;
|
2014-11-07 09:55:57 -05:00
|
|
|
|
|
|
|
|
/** Sets the delegate which should be executed when the set of categories changes. */
|
|
|
|
|
void SetOnCategoriesChanged(FOnCategoriesChanged OnCategoriesChangedIn);
|
|
|
|
|
|
|
|
|
|
/** Gets the view model for the currently selected category. Only content sources which match
|
|
|
|
|
the selected category will be returned by GetContentSources(). */
|
|
|
|
|
FCategoryViewModel GetSelectedCategory();
|
|
|
|
|
|
|
|
|
|
/** Sets the currently selected category view model. Only content sources which match the selected
|
|
|
|
|
category will be returned by GetContentSources(). */
|
|
|
|
|
void SetSelectedCategory(FCategoryViewModel SelectedCategoryIn);
|
|
|
|
|
|
|
|
|
|
/** Sets search text which should be used to filter the content sources. */
|
|
|
|
|
void SetSearchText(FText SearchTextIn);
|
|
|
|
|
|
2015-06-10 13:22:27 -04:00
|
|
|
/** Get any error information that was reported the last time SetSearchText was called. */
|
|
|
|
|
FText GetSearchErrorText() const;
|
|
|
|
|
|
2014-11-07 09:55:57 -05:00
|
|
|
/** Gets a filtered array of content sources which match both the selected category and the search
|
|
|
|
|
text if it has been set. */
|
|
|
|
|
const TArray<TSharedPtr<FContentSourceViewModel>>* GetContentSources();
|
|
|
|
|
|
|
|
|
|
/** Sets the delegate which should be executed when the current set of content sources returned by
|
|
|
|
|
GetContentSources changes. */
|
|
|
|
|
void SetOnContentSourcesChanged(FOnContentSourcesChanged OnContentSourcesChangedIn);
|
|
|
|
|
|
|
|
|
|
/** Gets the currently selected content source. */
|
|
|
|
|
TSharedPtr<FContentSourceViewModel> GetSelectedContentSource();
|
|
|
|
|
|
|
|
|
|
/** Sets the currently selected content source. */
|
|
|
|
|
void SetSelectedContentSource(TSharedPtr<FContentSourceViewModel> SelectedContentSourceIn);
|
|
|
|
|
|
|
|
|
|
/** Sets the delegate which should be executed when the selected content source changes. */
|
|
|
|
|
void SetOnSelectedContentSourceChanged(FOnSelectedContentSourceChanged OnSelectedContentSourceChangedIn);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
FAddContentWidgetViewModel();
|
|
|
|
|
void Initialize();
|
|
|
|
|
|
|
|
|
|
/** Builds view models for all available content sources. */
|
|
|
|
|
void BuildContentSourceViewModels();
|
|
|
|
|
|
2015-02-03 10:41:38 -05:00
|
|
|
/** Filters the current set of content sources based on the selected category and the search text, and updates the selection.
|
|
|
|
|
* @param bAllowEmptySelection Determines whether or not to select the first available item after filtering if the selected item is null, or not in the filtered set. */
|
|
|
|
|
void UpdateFilteredContentSourcesAndSelection(bool bAllowEmptySelection);
|
2014-11-07 09:55:57 -05:00
|
|
|
|
|
|
|
|
/** Converts a content source item to an array of strings for processing by the TTextFilter. */
|
|
|
|
|
void TransformContentSourceToStrings(TSharedPtr<FContentSourceViewModel> Item, OUT TArray< FString >& Array);
|
|
|
|
|
|
|
|
|
|
/** Handles notification from the content source providers when their content source arrays change. */
|
|
|
|
|
void ContentSourcesChanged();
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
/** The array of content source providers who's content sources are being displayed. */
|
|
|
|
|
TArray<TSharedPtr<IContentSourceProvider>> ContentSourceProviders;
|
|
|
|
|
|
|
|
|
|
/** The view models for the available categories. */
|
|
|
|
|
TArray<FCategoryViewModel> Categories;
|
|
|
|
|
|
|
|
|
|
/** A combined array of all content sources from all content source providers. */
|
|
|
|
|
TArray<TSharedPtr<FContentSourceViewModel>> ContentSourceViewModels;
|
|
|
|
|
|
|
|
|
|
/** A filtered array of content sources based on the currently selected category and the search text. */
|
|
|
|
|
TArray<TSharedPtr<FContentSourceViewModel>> FilteredContentSourceViewModels;
|
|
|
|
|
|
|
|
|
|
/** A map which keeps track of the currently selected content source for each category. */
|
|
|
|
|
TMap<FCategoryViewModel, TSharedPtr<FContentSourceViewModel>> CategoryToSelectedContentSourceMap;
|
|
|
|
|
|
|
|
|
|
/** The view model for the currently selected category. */
|
|
|
|
|
FCategoryViewModel SelectedCategory;
|
|
|
|
|
|
|
|
|
|
/** The current search text. */
|
|
|
|
|
FText SearchText;
|
|
|
|
|
|
|
|
|
|
/** The delegate which is executed when the available categories change. */
|
|
|
|
|
FOnCategoriesChanged OnCategoriesChanged;
|
|
|
|
|
|
|
|
|
|
/** The delegate which is executed when the filtered content sources change. */
|
|
|
|
|
FOnContentSourcesChanged OnContentSourcesChanged;
|
|
|
|
|
|
|
|
|
|
/** The delegate which is executed when the currently selected content source changes. */
|
|
|
|
|
FOnSelectedContentSourceChanged OnSelectedContentSourceChanged;
|
|
|
|
|
|
|
|
|
|
/** The filter which is used to filter the content sources based on the search text. */
|
|
|
|
|
TSharedPtr<ContentSourceTextFilter> ContentSourceFilter;
|
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
|
|
|
};
|