33
44#include " Details/Collections/PCGExAssetCollectionEditor.h"
55
6+ #include " PCGExGlobalEditorSettings.h"
67#include " ToolMenus.h"
78#include " Widgets/Input/SButton.h"
89#include " Framework/MultiBox/MultiBoxBuilder.h"
@@ -20,6 +21,13 @@ namespace PCGExCollectionEditor
2021{
2122}
2223
24+ TMap<FName, PCGExAssetCollectionEditor::FilterInfos> FPCGExAssetCollectionEditor::FilterInfos;
25+
26+ FPCGExAssetCollectionEditor::FPCGExAssetCollectionEditor ()
27+ {
28+ RegisterPropertyNameMapping (GetMutableDefault<UPCGExGlobalEditorSettings>()->PropertyNamesMap );
29+ }
30+
2331void FPCGExAssetCollectionEditor::InitEditor (UPCGExAssetCollection* InCollection, const EToolkitMode::Type Mode, const TSharedPtr<IToolkitHost>& InitToolkitHost)
2432{
2533 EditedCollection = InCollection;
@@ -61,14 +69,45 @@ void FPCGExAssetCollectionEditor::InitEditor(UPCGExAssetCollection* InCollection
6169
6270 AddToolbarExtender (ToolbarExtender);
6371 RegenerateMenusAndToolbars ();
72+
73+ // Assuming DetailsView is already created.
74+ UPCGExGlobalEditorSettings::OnHiddenAssetPropertyNamesChanged.AddRaw (this , &FPCGExAssetCollectionEditor::ForceRefreshTabs);
6475}
6576
6677UPCGExAssetCollection* FPCGExAssetCollectionEditor::GetEditedCollection () const
6778{
6879 return EditedCollection.Get ();
6980}
7081
71- void FPCGExAssetCollectionEditor::CreateTabs (TArray<FPCGExDetailsTabInfos>& OutTabs)
82+ void FPCGExAssetCollectionEditor::RegisterPropertyNameMapping (TMap<FName, FName>& Mapping)
83+ {
84+ #define PCGEX_DECL_ASSET_FILTER (_NAME, _ID, _LABEL, _TOOLTIP )PCGExAssetCollectionEditor::FilterInfos& _NAME = FilterInfos.Emplace(FName(_ID), PCGExAssetCollectionEditor::FilterInfos(FName(_ID),FTEXT(_LABEL), FTEXT(_TOOLTIP)));
85+
86+ PCGEX_DECL_ASSET_FILTER (Variations, " AssetEditor.Variations" , " Variations" , " Show/hide Variations" )
87+ Mapping.Add (FName (" VariationMode" ), Variations.Id );
88+ Mapping.Add (FName (" Variations" ), Variations.Id );
89+
90+ PCGEX_DECL_ASSET_FILTER (Tags, " AssetEditor.Tags" , " Tags" , " Show/hide Tags" )
91+ Mapping.Add (FName (" Tags" ), Tags.Id );
92+
93+ PCGEX_DECL_ASSET_FILTER (Staging, " AssetEditor.Staging" , " Staging" , " Show/hide Staging" )
94+ Mapping.Add (FName (" Staging" ), Staging.Id );
95+
96+ PCGEX_DECL_ASSET_FILTER (Materials, " AssetEditor.Materials" , " Materials" , " Show/hide Materials" )
97+ Mapping.Add (FName (" MaterialVariants" ), Materials.Id );
98+ Mapping.Add (FName (" SlotIndex" ), Materials.Id );
99+ Mapping.Add (FName (" MaterialOverrideVariants" ), Materials.Id );
100+ Mapping.Add (FName (" MaterialOverrideVariantsList" ), Materials.Id );
101+
102+ PCGEX_DECL_ASSET_FILTER (Descriptors, " AssetEditor.Descriptors" , " Descriptors" , " Show/hide Descriptors" )
103+ Mapping.Add (FName (" DescriptorSource" ), Descriptors.Id );
104+ Mapping.Add (FName (" ISMDescriptor" ), Descriptors.Id );
105+ Mapping.Add (FName (" SMDescriptor" ), Descriptors.Id );
106+
107+ #undef PCGEX_DECL_ASSET_FILTER
108+ }
109+
110+ void FPCGExAssetCollectionEditor::CreateTabs (TArray<PCGExAssetCollectionEditor::TabInfos>& OutTabs)
72111{
73112 // Property editor module
74113 FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked<FPropertyEditorModule>(" PropertyEditor" );
@@ -94,7 +133,7 @@ void FPCGExAssetCollectionEditor::CreateTabs(TArray<FPCGExDetailsTabInfos>& OutT
94133 // Set the asset to display
95134 DetailsView->SetObject (EditedCollection.Get ());
96135
97- FPCGExDetailsTabInfos & Infos = OutTabs.Emplace_GetRef (FName (" Collection" ), DetailsView, FName (" Collection Settings" ));
136+ PCGExAssetCollectionEditor::TabInfos & Infos = OutTabs.Emplace_GetRef (FName (" Collection" ), DetailsView, FName (" Collection Settings" ));
98137 Infos.Icon = TEXT (" Settings" );
99138}
100139
@@ -296,7 +335,7 @@ void FPCGExAssetCollectionEditor::BuildAssetHeaderToolbar(FToolBarBuilder& Toolb
296335 ToolbarBuilder.BeginSection (" SortingSection" );
297336 {
298337 PCGEX_SECTION_HEADER (" Sort" )
299-
338+
300339 ToolbarBuilder.AddWidget (
301340 SNew (SUniformGridPanel)
302341 .SlotPadding (FMargin (1 , 2 ))
@@ -331,6 +370,49 @@ void FPCGExAssetCollectionEditor::BuildAssetHeaderToolbar(FToolBarBuilder& Toolb
331370#pragma endregion
332371}
333372
373+ void FPCGExAssetCollectionEditor::BuildAssetFooterToolbar (FToolBarBuilder& ToolbarBuilder)
374+ {
375+ ToolbarBuilder.BeginSection (" FilterSection" );
376+ {
377+ PCGEX_SECTION_HEADER (" Filters" )
378+
379+ TSharedRef<SUniformGridPanel> Grid =
380+ SNew (SUniformGridPanel)
381+ .SlotPadding (FMargin (2 , 2 ));
382+
383+ int32 Index = 0 ;
384+ for (const TPair<FName, PCGExAssetCollectionEditor::FilterInfos>& Infos : FilterInfos)
385+ {
386+ const PCGExAssetCollectionEditor::FilterInfos& Filter = Infos.Value ;
387+
388+ Grid->AddSlot (Index / 2 , Index % 2 )
389+ [
390+ SNew (SButton)
391+ .Text (Filter.Label )
392+ .ButtonStyle (FAppStyle::Get (), " PCGEx.ActionIcon" )
393+ .OnClicked_Lambda (
394+ [Filter]()
395+ {
396+ UPCGExGlobalEditorSettings* MutableSettings = GetMutableDefault<UPCGExGlobalEditorSettings>();
397+ MutableSettings->ToggleHiddenAssetPropertyName (Filter.Id , MutableSettings->GetIsPropertyVisible (Filter.Id ));
398+ return FReply::Handled ();
399+ })
400+ .ButtonColorAndOpacity_Lambda (
401+ [Filter]
402+ {
403+ return GetMutableDefault<UPCGExGlobalEditorSettings>()->GetIsPropertyVisible (Filter.Id ) ? FLinearColor (0.005 , 0.005 , 0.005 , 0.8 ) : FLinearColor::Transparent;
404+ })
405+ .ToolTipText (Filter.ToolTip )
406+ ];
407+
408+ Index++;
409+ }
410+
411+ ToolbarBuilder.AddWidget (Grid);
412+ }
413+ ToolbarBuilder.EndSection ();
414+ }
415+
334416#undef PCGEX_SLATE_ICON
335417#undef PCGEX_CURRENT_COLLECTION
336418#undef PCGEX_SECTION_HEADER
@@ -339,7 +421,7 @@ void FPCGExAssetCollectionEditor::RegisterTabSpawners(const TSharedRef<FTabManag
339421{
340422 TabManager->SetCanDoDragOperation (false );
341423
342- for (const FPCGExDetailsTabInfos & Tab : Tabs)
424+ for (const PCGExAssetCollectionEditor::TabInfos & Tab : Tabs)
343425 {
344426 // Register tab spawner with out layout Id
345427 FTabSpawnerEntry& Entry =
@@ -383,4 +465,15 @@ void FPCGExAssetCollectionEditor::RegisterTabSpawners(const TSharedRef<FTabManag
383465 if (!Tabs.IsEmpty ()) { TabManager->SetMainTab (Tabs[0 ].Id ); }
384466
385467 FAssetEditorToolkit::RegisterTabSpawners (InTabManager);
386- }
468+ }
469+
470+ void FPCGExAssetCollectionEditor::ForceRefreshTabs ()
471+ {
472+ for (const PCGExAssetCollectionEditor::TabInfos& Tab : Tabs)
473+ {
474+ if (TSharedPtr<IDetailsView> DetailsView = StaticCastSharedPtr<IDetailsView>(Tab.View ))
475+ {
476+ DetailsView->ForceRefresh ();
477+ }
478+ }
479+ }
0 commit comments