// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Widgets/SCompoundWidget.h" #include "Tasks/Task.h" #include "AssetRegistry/AssetIdentifier.h" #include "Misc/TextFilter.h" #include "Styling/SlateTypes.h" #include "Widgets/Views/SListView.h" ////////////////////////////////////////////////////////////////////////// // SPluginAuditBrowser class IPlugin; struct FGameFeaturePlugin; class UGameplayTagsManager; struct FGameplayTag; class IMessageLogListing; class IMessageToken; class SFilterSearchBox; class STableViewBase; class ITableRow; class FTokenizedMessage; class SPluginAuditBrowser : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SPluginAuditBrowser) {} SLATE_END_ARGS() public: void Construct(const FArguments& InArgs); private: void CreateLogListing(); void BuildPluginList(); void RebuildAndFilterPluginList(); void RefreshToolBar(); void OnPluginTextFilterChanged(); void SearchBox_OnPluginSearchTextChanged(const FText& NewText); ECheckBoxState GetGlobalDisabledState() const; void OnGlobalDisabledStateChanged(ECheckBoxState State); FText GetPluginCountText() const; TSharedPtr OnContextMenuOpening(); void OnOpenPluginProperties(); void OnOpenPluginReferenceViewer(); void OpenPluginProperties(const FString& PluginName); void OpenPluginReferenceViewer(const TSharedRef& Plugin); class FCookedPlugin { public: FCookedPlugin(const TSharedRef& InPlugin) : Plugin(InPlugin) {} virtual ~FCookedPlugin() = default; TSharedRef Plugin; bool bSimulateDisabled = false; }; void OnListViewDoubleClick(TSharedRef Item); TSharedRef MakeCookedPluginRow(TSharedRef InItem, const TSharedRef& OwnerTable); struct FGameFeaturePlugin { TSharedPtr Plugin; TArray ModuleNames; TArray ScriptPackages; FName ContentRoot; }; enum class EDoesPluginDependOnGameplayTagSource { Yes, No, UnknownTag }; void RefreshViolations(); static TArray> ScanForViolations(TArray> InIncludedGameFeaturePlugins, TArray> InExcludedGameFeaturePlugins); static TArray> GetTagSourcePlugins(const UGameplayTagsManager& Manager, FName TagName); static EDoesPluginDependOnGameplayTagSource DoesPluginDependOnGameplayTagSource(const UGameplayTagsManager& Manager, const TSharedPtr& DependentPlugin, FName TagName, TArray>& OutPossibleSources); static bool IsTagOnlyAvailableFromExcludedSources(const UGameplayTagsManager& Manager, const FGameplayTag& Tag, const TArray& ExcludedPlugins); static void GetGameFeaturePlugins(const TArray>& Plugins, TArray& GameFeaturePlugins); private: typedef TTextFilter FCookedPluginTextFilter; TArray> IncludedGameFeaturePlugins; TArray> ExcludedGameFeaturePlugins; TArray> CookedPlugins; TArray> FilteredCookedPlugins; TSharedPtr LogListing; /** The list view widget for our plugins list */ TSharedPtr>> PluginListView; /** The plugin search box widget */ TSharedPtr SearchBoxPtr; /** Text filter object for typing in filter text to the search box */ TSharedPtr PluginTextFilter; bool bGlobalDisabledState = false; };