2022-10-27 02:52:45 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#include "StrataVisualizationMenuCommands.h"
|
|
|
|
|
|
|
|
|
|
#include "Delegates/Delegate.h"
|
|
|
|
|
#include "EditorViewportClient.h"
|
|
|
|
|
#include "Framework/Commands/InputChord.h"
|
|
|
|
|
#include "Framework/Commands/UIAction.h"
|
|
|
|
|
#include "Framework/Commands/UICommandInfo.h"
|
|
|
|
|
#include "Framework/Commands/UICommandList.h"
|
|
|
|
|
#include "Framework/MultiBox/MultiBoxBuilder.h"
|
|
|
|
|
#include "Internationalization/Internationalization.h"
|
|
|
|
|
#include "Internationalization/Text.h"
|
|
|
|
|
#include "StrataVisualizationData.h"
|
|
|
|
|
#include "Misc/AssertionMacros.h"
|
|
|
|
|
#include "Styling/AppStyle.h"
|
|
|
|
|
#include "UObject/UnrealNames.h"
|
|
|
|
|
|
2023-02-21 16:52:23 -05:00
|
|
|
#define LOCTEXT_NAMESPACE "SubstrateVisualizationMenuCommands"
|
2022-10-27 02:52:45 -04:00
|
|
|
|
|
|
|
|
FStrataVisualizationMenuCommands::FStrataVisualizationMenuCommands()
|
|
|
|
|
: TCommands<FStrataVisualizationMenuCommands>
|
|
|
|
|
(
|
2023-02-21 16:52:23 -05:00
|
|
|
TEXT("SubstrateVisualizationMenu"), // Context name for fast lookup
|
|
|
|
|
NSLOCTEXT("Contexts", "SubstrateVisualizationMenu", "Substrate"), // Localized context name for displaying
|
2022-10-27 02:52:45 -04:00
|
|
|
NAME_None, // Parent context name.
|
|
|
|
|
FAppStyle::GetAppStyleSetName() // Icon Style Set
|
|
|
|
|
),
|
|
|
|
|
CommandMap()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FStrataVisualizationMenuCommands::BuildCommandMap()
|
|
|
|
|
{
|
|
|
|
|
const FStrataVisualizationData& VisualizationData = GetStrataVisualizationData();
|
|
|
|
|
const FStrataVisualizationData::TModeMap& ModeMap = VisualizationData.GetModeMap();
|
|
|
|
|
|
|
|
|
|
CommandMap.Empty();
|
|
|
|
|
for (FStrataVisualizationData::TModeMap::TConstIterator It = ModeMap.CreateConstIterator(); It; ++It)
|
|
|
|
|
{
|
|
|
|
|
const FStrataVisualizationData::FModeRecord& Entry = It.Value();
|
|
|
|
|
FStrataVisualizationRecord& Record = CommandMap.Add(Entry.ModeName, FStrataVisualizationRecord());
|
|
|
|
|
Record.Name = Entry.ModeName;
|
|
|
|
|
Record.Command = FUICommandInfoDecl(
|
|
|
|
|
this->AsShared(),
|
|
|
|
|
Entry.ModeName,
|
|
|
|
|
Entry.ModeText,
|
|
|
|
|
Entry.ModeDesc)
|
|
|
|
|
.UserInterfaceType(EUserInterfaceActionType::RadioButton)
|
|
|
|
|
.DefaultChord(FInputChord()
|
|
|
|
|
);
|
2023-03-16 14:28:59 -04:00
|
|
|
Record.ViewMode = Entry.ViewMode;
|
2022-10-27 02:52:45 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FStrataVisualizationMenuCommands::BuildVisualisationSubMenu(FMenuBuilder& Menu)
|
|
|
|
|
{
|
|
|
|
|
const FStrataVisualizationMenuCommands& Commands = FStrataVisualizationMenuCommands::Get();
|
|
|
|
|
if (Commands.IsPopulated())
|
|
|
|
|
{
|
2023-03-16 14:28:59 -04:00
|
|
|
// General
|
|
|
|
|
{
|
|
|
|
|
Menu.BeginSection("LevelViewportSubstrateVisualizationMode", LOCTEXT("SubstrateVisualizationHeader", "Substrate General View Mode"));
|
|
|
|
|
Commands.AddCommandTypeToMenu(Menu, FStrataViewMode::MaterialProperties);
|
|
|
|
|
Commands.AddCommandTypeToMenu(Menu, FStrataViewMode::MaterialCount);
|
|
|
|
|
Commands.AddCommandTypeToMenu(Menu, FStrataViewMode::MaterialByteCount);
|
|
|
|
|
Commands.AddCommandTypeToMenu(Menu, FStrataViewMode::StrataInfo);
|
|
|
|
|
Menu.EndSection();
|
|
|
|
|
}
|
2022-10-27 02:52:45 -04:00
|
|
|
|
2023-03-16 14:28:59 -04:00
|
|
|
// Advanced
|
|
|
|
|
{
|
|
|
|
|
Menu.BeginSection("LevelViewportSubstrateVisualizationMode", LOCTEXT("SubstrateVisualizationHeader", "Substrate Advanced View Mode"));
|
|
|
|
|
Commands.AddCommandTypeToMenu(Menu, FStrataViewMode::AdvancedMaterialProperties);
|
|
|
|
|
Commands.AddCommandTypeToMenu(Menu, FStrataViewMode::MaterialClassification);
|
|
|
|
|
Commands.AddCommandTypeToMenu(Menu, FStrataViewMode::RoughRefractionClassification);
|
|
|
|
|
Commands.AddCommandTypeToMenu(Menu, FStrataViewMode::DecalClassification);
|
|
|
|
|
Menu.EndSection();
|
|
|
|
|
}
|
2022-10-27 02:52:45 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-16 14:28:59 -04:00
|
|
|
bool FStrataVisualizationMenuCommands::AddCommandTypeToMenu(FMenuBuilder& Menu, const FStrataViewMode ViewMode) const
|
2022-10-27 02:52:45 -04:00
|
|
|
{
|
|
|
|
|
bool bAddedCommands = false;
|
|
|
|
|
|
|
|
|
|
const TStrataVisualizationModeCommandMap& Commands = CommandMap;
|
|
|
|
|
for (TCommandConstIterator It = CreateCommandConstIterator(); It; ++It)
|
|
|
|
|
{
|
|
|
|
|
const FStrataVisualizationRecord& Record = It.Value();
|
2023-03-16 14:28:59 -04:00
|
|
|
if (Record.ViewMode == ViewMode)
|
2022-10-27 02:52:45 -04:00
|
|
|
{
|
|
|
|
|
Menu.AddMenuEntry(Record.Command, NAME_None, Record.Command->GetLabel());
|
|
|
|
|
bAddedCommands = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return bAddedCommands;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FStrataVisualizationMenuCommands::TCommandConstIterator FStrataVisualizationMenuCommands::CreateCommandConstIterator() const
|
|
|
|
|
{
|
|
|
|
|
return CommandMap.CreateConstIterator();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FStrataVisualizationMenuCommands::RegisterCommands()
|
|
|
|
|
{
|
|
|
|
|
BuildCommandMap();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FStrataVisualizationMenuCommands::BindCommands(FUICommandList& CommandList, const TSharedPtr<FEditorViewportClient>& Client) const
|
|
|
|
|
{
|
|
|
|
|
// Map Strata visualization mode actions
|
|
|
|
|
for (FStrataVisualizationMenuCommands::TCommandConstIterator It = FStrataVisualizationMenuCommands::Get().CreateCommandConstIterator(); It; ++It)
|
|
|
|
|
{
|
|
|
|
|
const FStrataVisualizationMenuCommands::FStrataVisualizationRecord& Record = It.Value();
|
|
|
|
|
CommandList.MapAction(
|
|
|
|
|
Record.Command,
|
2022-11-04 01:06:44 -04:00
|
|
|
FExecuteAction::CreateStatic(&FStrataVisualizationMenuCommands::ChangeStrataVisualizationMode, Client.ToWeakPtr(), Record.Name),
|
2022-10-27 02:52:45 -04:00
|
|
|
FCanExecuteAction(),
|
2022-11-04 01:06:44 -04:00
|
|
|
FIsActionChecked::CreateStatic(&FStrataVisualizationMenuCommands::IsStrataVisualizationModeSelected, Client.ToWeakPtr(), Record.Name)
|
2022-10-27 02:52:45 -04:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-04 01:06:44 -04:00
|
|
|
void FStrataVisualizationMenuCommands::ChangeStrataVisualizationMode(TWeakPtr<FEditorViewportClient> WeakClient, FName InName)
|
2022-10-27 02:52:45 -04:00
|
|
|
{
|
2022-11-04 01:06:44 -04:00
|
|
|
if (TSharedPtr<FEditorViewportClient> Client = WeakClient.Pin())
|
|
|
|
|
{
|
|
|
|
|
Client->ChangeStrataVisualizationMode(InName);
|
|
|
|
|
}
|
2022-10-27 02:52:45 -04:00
|
|
|
}
|
|
|
|
|
|
2022-11-04 01:06:44 -04:00
|
|
|
bool FStrataVisualizationMenuCommands::IsStrataVisualizationModeSelected(TWeakPtr<FEditorViewportClient> WeakClient, FName InName)
|
2022-10-27 02:52:45 -04:00
|
|
|
{
|
2022-11-04 01:06:44 -04:00
|
|
|
if (TSharedPtr<FEditorViewportClient> Client = WeakClient.Pin())
|
|
|
|
|
{
|
|
|
|
|
return Client->IsStrataVisualizationModeSelected(InName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
2022-10-27 02:52:45 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#undef LOCTEXT_NAMESPACE
|