mirror of
https://github.com/Ed94/Cog.git
synced 2026-06-13 08:02:23 -07:00
CogWindow: Add shortcuts text for some menu items
This commit is contained in:
@@ -76,8 +76,6 @@ void UCogEngineWindow_DebugSettings::PreSaveConfig()
|
||||
GradientColorIntensity = FCogDebugSettings::GradientColorIntensity;
|
||||
GradientColorSpeed = FCogDebugSettings::GradientColorSpeed;
|
||||
TextSize = FCogDebugSettings::TextSize;
|
||||
|
||||
bIsFilteringBySelection = FCogDebugSettings::GetIsFilteringBySelection();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
@@ -101,79 +99,109 @@ void UCogEngineWindow_DebugSettings::RenderContent()
|
||||
ImGui::EndMenuBar();
|
||||
}
|
||||
|
||||
bIsFilteringBySelection = FCogDebugSettings::GetIsFilteringBySelection();
|
||||
if (ImGui::Checkbox("Filter by selection", &bIsFilteringBySelection))
|
||||
{
|
||||
FCogDebugSettings::SetIsFilteringBySelection(GetWorld(), bIsFilteringBySelection);
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("If checked, only show the debug of the currently selected actor. Otherwise show the debug of all actors.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("If checked, only show the debug of the currently selected actor. Otherwise show the debug of all actors.");
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Persistent", &FCogDebugSettings::Persistent);
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("Make debug draw always persist");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("Make debug draw always persist");
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Text Shadow", &FCogDebugSettings::TextShadow);
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("Show a shadow below debug text.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("Show a shadow below debug text.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::Checkbox("Fade 2D", &FCogDebugSettings::Fade2D);
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("Does the 2D debug is fading out.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("Does the 2D debug is fading out.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragFloat("Duration", &FCogDebugSettings::Duration, 0.01f, 0.0f, 100.0f, "%.1f");
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The duration of debug elements.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The duration of debug elements.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragFloat("Thickness", &FCogDebugSettings::Thickness, 0.05f, 0.0f, 5.0f, "%.1f");
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The thickness of debug lines.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The thickness of debug lines.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragFloat("Server Thickness", &FCogDebugSettings::ServerThickness, 0.05f, 0.0f, 5.0f, "%.1f");
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The thickness the server debug lines.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The thickness the server debug lines.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragFloat("Server Color Mult", &FCogDebugSettings::ServerColorMultiplier, 0.01f, 0.0f, 1.0f, "%.1f");
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The color multiplier applied to the server debug lines.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The color multiplier applied to the server debug lines.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragInt("Depth Priority", &FCogDebugSettings::DepthPriority, 0.1f, 0, 100);
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The depth priority of debug elements.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The depth priority of debug elements.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragInt("Segments", &FCogDebugSettings::Segments, 0.1f, 4, 20.0f);
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The number of segments used for circular shapes.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The number of segments used for circular shapes.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragFloat("Axes Scale", &FCogDebugSettings::AxesScale, 0.1f, 0, 10.0f, "%.1f");
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The scaling debug axis.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The scaling debug axis.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragFloat("Arrow Size", &FCogDebugSettings::ArrowSize, 1.0f, 0.0f, 200.0f, "%.0f");
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The size of debug arrows.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The size of debug arrows.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragFloat("Gradient Intensity", &FCogDebugSettings::GradientColorIntensity, 0.01f, 0.0f, 1.0f, "%.2f");
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("How much the debug elements color should be changed by a gradient color over time.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("How much the debug elements color should be changed by a gradient color over time.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragFloat("Gradient Speed", &FCogDebugSettings::GradientColorSpeed, 0.1f, 0.0f, 10.0f, "%.1f");
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The speed of the gradient color change.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The speed of the gradient color change.");
|
||||
}
|
||||
|
||||
FCogWindowWidgets::SetNextItemToShortWidth();
|
||||
ImGui::DragFloat("Text Size", &FCogDebugSettings::TextSize, 0.1f, 0.1f, 5.0f, "%.1f");
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("The size of the debug texts.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("The size of the debug texts.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,21 +49,38 @@ void UCogEngineWindow_LogCategories::RenderContent()
|
||||
{
|
||||
if (ImGui::BeginMenu("Options"))
|
||||
{
|
||||
if (ImGui::MenuItem("Deactivate All"))
|
||||
{
|
||||
FCogDebugLog::DeactivateAllLogCateories(*World);
|
||||
}
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("Deactivate all log categories. If connected to a server, also deactivate all its log categories.");
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::Checkbox("Show detailed verbosity", &bShowAllVerbosity);
|
||||
ImGui::SameLine();
|
||||
FCogWindowWidgets::HelpMarker("Show the verbosity level of each log category.");
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("Show the verbosity level of each log category.");
|
||||
}
|
||||
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
|
||||
if (ImGui::MenuItem("Reset"))
|
||||
bool bIsFilteringBySelection = FCogDebugSettings::GetIsFilteringBySelection();
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 2);
|
||||
FCogWindowWidgets::PushStyleCompact();
|
||||
if (ImGui::Checkbox("Filter", &bIsFilteringBySelection))
|
||||
{
|
||||
FCogDebugLog::DeactivateAllLogCateories(*World);
|
||||
FCogDebugSettings::SetIsFilteringBySelection(GetWorld(), bIsFilteringBySelection);
|
||||
}
|
||||
FCogWindowWidgets::PopStyleCompact();
|
||||
|
||||
if (ImGui::IsItemHovered())
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("Deactivate all the log categories");
|
||||
ImGui::SetTooltip("If checked, only show the debug of the currently selected actor. Otherwise show the debug of all actors.");
|
||||
}
|
||||
|
||||
if (ImGui::MenuItem("Flush"))
|
||||
@@ -73,7 +90,7 @@ void UCogEngineWindow_LogCategories::RenderContent()
|
||||
GEngine->ClearOnScreenDebugMessages();
|
||||
}
|
||||
|
||||
if (ImGui::IsItemHovered())
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
ImGui::SetTooltip("Clear all the debug drawn on screen");
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "CogDebugSettings.h"
|
||||
#include "CogEngineReplicator.h"
|
||||
#include "CogImguiModule.h"
|
||||
#include "CogImguiInputHelper.h"
|
||||
#include "CogWindowManager.h"
|
||||
#include "CogWindowWidgets.h"
|
||||
#include "EngineUtils.h"
|
||||
@@ -12,6 +13,8 @@
|
||||
#include "imgui.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
FString UCogEngineWindow_Selection::ToggleSelectionModeCommand = TEXT("Cog.ToggleSelectionMode");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void UCogEngineWindow_Selection::RenderHelp()
|
||||
{
|
||||
@@ -30,7 +33,7 @@ UCogEngineWindow_Selection::UCogEngineWindow_Selection()
|
||||
ActorClasses = { AActor::StaticClass(), ACharacter::StaticClass() };
|
||||
|
||||
ConsoleCommands.Add(IConsoleManager::Get().RegisterConsoleCommand(
|
||||
TEXT("Cog.ToggleSelectionMode"),
|
||||
*ToggleSelectionModeCommand,
|
||||
TEXT("Toggle the actor selection mode"),
|
||||
FConsoleCommandWithArgsDelegate::CreateLambda([this](const TArray<FString>& Args) { ToggleSelectionMode(); }),
|
||||
ECVF_Cheat));
|
||||
@@ -198,6 +201,7 @@ void UCogEngineWindow_Selection::RenderContent()
|
||||
ActivateSelectionMode();
|
||||
HackWaitInputRelease();
|
||||
}
|
||||
RenderPickButtonTooltip();
|
||||
|
||||
ImGui::EndMenuBar();
|
||||
}
|
||||
@@ -592,10 +596,7 @@ void UCogEngineWindow_Selection::RenderMainMenuWidget(bool Draw, float& Width)
|
||||
ActivateSelectionMode();
|
||||
HackWaitInputRelease();
|
||||
}
|
||||
if (ImGui::IsItemHovered())
|
||||
{
|
||||
ImGui::SetTooltip("Enter picking mode to select an actor on screen.");
|
||||
}
|
||||
RenderPickButtonTooltip();
|
||||
|
||||
ImGui::PopStyleColor(1);
|
||||
ImGui::PopStyleVar(2);
|
||||
@@ -654,3 +655,13 @@ void UCogEngineWindow_Selection::SetGlobalSelection(AActor* Value) const
|
||||
{
|
||||
FCogDebugSettings::SetSelection(GetWorld(), Value);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void UCogEngineWindow_Selection::RenderPickButtonTooltip()
|
||||
{
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_Stationary))
|
||||
{
|
||||
const FString Shortcut = FCogImguiInputHelper::CommandToString(*GetWorld(), ToggleSelectionModeCommand);
|
||||
ImGui::SetTooltip("Enter picking mode to pick an actor on screen. %s", TCHAR_TO_ANSI(*Shortcut));
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,8 @@ class COGENGINE_API UCogEngineWindow_Selection : public UCogWindow
|
||||
|
||||
public:
|
||||
|
||||
static FString ToggleSelectionModeCommand;
|
||||
|
||||
UCogEngineWindow_Selection();
|
||||
|
||||
bool GetIsSelecting() const { return bSelectionModeActive; }
|
||||
@@ -58,7 +60,7 @@ protected:
|
||||
|
||||
virtual void SetGlobalSelection(AActor* Value) const;
|
||||
|
||||
private:
|
||||
virtual void RenderPickButtonTooltip();
|
||||
|
||||
TSubclassOf<AActor> GetSelectedActorClass() const;
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
TMap<FKey, ImGuiKey> FCogImguiInputHelper::KeyMap;
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
APlayerController* FCogImguiInputHelper::GetFirstLocalPlayerController(UWorld& World)
|
||||
APlayerController* FCogImguiInputHelper::GetFirstLocalPlayerController(const UWorld& World)
|
||||
{
|
||||
for (FConstPlayerControllerIterator Iterator = World.GetPlayerControllerIterator(); Iterator; ++Iterator)
|
||||
{
|
||||
@@ -31,6 +31,19 @@ APlayerController* FCogImguiInputHelper::GetFirstLocalPlayerController(UWorld& W
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
UPlayerInput* FCogImguiInputHelper::GetPlayerInput(const UWorld& World)
|
||||
{
|
||||
APlayerController* PlayerController = GetFirstLocalPlayerController(World);
|
||||
if (PlayerController == nullptr)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
UPlayerInput* PlayerInput = PlayerController->PlayerInput;
|
||||
return PlayerInput;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
bool FCogImguiInputHelper::IsKeyEventHandled(UWorld* World, const FKeyEvent& KeyEvent)
|
||||
{
|
||||
@@ -205,13 +218,7 @@ bool FCogImguiInputHelper::IsKeyBoundToCommand(UWorld* World, const FKeyEvent& K
|
||||
return false;
|
||||
}
|
||||
|
||||
APlayerController* Controller = GetFirstLocalPlayerController(*World);
|
||||
if (Controller == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
UPlayerInput* PlayerInput = Controller->PlayerInput;
|
||||
const UPlayerInput* PlayerInput = GetPlayerInput(*World);
|
||||
if (PlayerInput == nullptr)
|
||||
{
|
||||
return false;
|
||||
@@ -441,3 +448,67 @@ void FCogImguiInputHelper::InitializeKeyMap()
|
||||
//KeyMap.Add(EKeys::RightParantheses, ImGuiKey_None;
|
||||
//KeyMap.Add(EKeys::Quote, ImGuiKey_None;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
FString FCogImguiInputHelper::CommandToString(const UWorld& World, const FString& Command)
|
||||
{
|
||||
const UPlayerInput* PlayerInput = GetPlayerInput(World);
|
||||
if (PlayerInput == nullptr)
|
||||
{
|
||||
return FString();
|
||||
}
|
||||
|
||||
const FKeyBind* Result = PlayerInput->DebugExecBindings.FindByPredicate([&](const FKeyBind& KeyBind) { return KeyBind.Command == Command; });
|
||||
if (Result == nullptr)
|
||||
{
|
||||
return FString();
|
||||
}
|
||||
|
||||
return KeyBindToString(*Result);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
FString FCogImguiInputHelper::CommandToString(const UPlayerInput* PlayerInput, const FString& Command)
|
||||
{
|
||||
if (PlayerInput == nullptr)
|
||||
{
|
||||
return FString();
|
||||
}
|
||||
|
||||
const FKeyBind* Result = PlayerInput->DebugExecBindings.FindByPredicate([&](const FKeyBind& KeyBind) { return KeyBind.Command == Command; });
|
||||
if (Result == nullptr)
|
||||
{
|
||||
return FString();
|
||||
}
|
||||
|
||||
return KeyBindToString(*Result);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
FString FCogImguiInputHelper::KeyBindToString(const FKeyBind& KeyBind)
|
||||
{
|
||||
FString Result;
|
||||
if (KeyBind.Alt)
|
||||
{
|
||||
Result = Result.Append("Alt ");
|
||||
}
|
||||
|
||||
if (KeyBind.Shift)
|
||||
{
|
||||
Result = Result.Append("Shift ");
|
||||
}
|
||||
|
||||
if (KeyBind.Control)
|
||||
{
|
||||
Result = Result.Append("Ctrl ");
|
||||
}
|
||||
|
||||
if (KeyBind.Cmd)
|
||||
{
|
||||
Result = Result.Append("Cmd ");
|
||||
}
|
||||
|
||||
Result = Result.Printf(TEXT("[%s]"), *KeyBind.Key.ToString());
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,9 @@ class COGIMGUI_API FCogImguiInputHelper
|
||||
{
|
||||
public:
|
||||
|
||||
static APlayerController* GetFirstLocalPlayerController(UWorld& World);
|
||||
static APlayerController* GetFirstLocalPlayerController(const UWorld& World);
|
||||
|
||||
static UPlayerInput* GetPlayerInput(const UWorld& World);
|
||||
|
||||
static bool IsKeyEventHandled(UWorld* World, const FKeyEvent& KeyEvent);
|
||||
|
||||
@@ -42,6 +44,12 @@ public:
|
||||
|
||||
static EMouseCursor::Type ToSlateMouseCursor(ImGuiMouseCursor MouseCursor);
|
||||
|
||||
static FString CommandToString(const UWorld& World, const FString& Command);
|
||||
|
||||
static FString CommandToString(const UPlayerInput* PlayerInput, const FString& Command);
|
||||
|
||||
static FString KeyBindToString(const FKeyBind& KeyBind);
|
||||
|
||||
template<typename T, std::enable_if_t<(sizeof(T) <= sizeof(ImWchar)), T>* = nullptr>
|
||||
static ImWchar CastInputChar(T Char)
|
||||
{
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
#include "HAL/IConsoleManager.h"
|
||||
#include "imgui_internal.h"
|
||||
|
||||
FString UCogWindowManager::ToggleInputCommand = TEXT("Cog.ToggleInput");
|
||||
FString UCogWindowManager::LoadLayoutCommand = TEXT("Cog.LoadLayout");
|
||||
FString UCogWindowManager::SaveLayoutCommand = TEXT("Cog.SaveLayout");
|
||||
FString UCogWindowManager::ResetLayoutCommand = TEXT("Cog.ResetLayout");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
UCogWindowManager::UCogWindowManager()
|
||||
{
|
||||
@@ -54,19 +59,25 @@ void UCogWindowManager::InitializeInternal()
|
||||
SettingsWindow = CreateWindow<UCogWindow_Settings>("Window.Settings", false);
|
||||
|
||||
ConsoleCommands.Add(IConsoleManager::Get().RegisterConsoleCommand(
|
||||
TEXT("Cog.ToggleInput"),
|
||||
*ToggleInputCommand,
|
||||
TEXT("Toggle the input focus between the Game and ImGui"),
|
||||
FConsoleCommandWithArgsDelegate::CreateLambda([](const TArray<FString>& Args) { FCogImguiModule::Get().ToggleEnableInput(); }),
|
||||
ECVF_Cheat));
|
||||
|
||||
ConsoleCommands.Add(IConsoleManager::Get().RegisterConsoleCommand(
|
||||
TEXT("Cog.LoadLayout"),
|
||||
*ResetLayoutCommand,
|
||||
TEXT("Reset the layout."),
|
||||
FConsoleCommandWithArgsDelegate::CreateLambda([this](const TArray<FString>& Args) { if (Args.Num() > 0) { ResetLayout(); }}),
|
||||
ECVF_Cheat));
|
||||
|
||||
ConsoleCommands.Add(IConsoleManager::Get().RegisterConsoleCommand(
|
||||
*LoadLayoutCommand,
|
||||
TEXT("Load the layout. Cog.LoadLayout <Index>"),
|
||||
FConsoleCommandWithArgsDelegate::CreateLambda([this](const TArray<FString>& Args) { if (Args.Num() > 0) { LoadLayout(FCString::Atoi(*Args[0])); }}),
|
||||
ECVF_Cheat));
|
||||
|
||||
ConsoleCommands.Add(IConsoleManager::Get().RegisterConsoleCommand(
|
||||
TEXT("Cog.SaveLayout"),
|
||||
*SaveLayoutCommand,
|
||||
TEXT("Save the layout. Cog.SaveLayout <Index>"),
|
||||
FConsoleCommandWithArgsDelegate::CreateLambda([this](const TArray<FString>& Args) { if (Args.Num() > 0) { SaveLayout(FCString::Atoi(*Args[0])); }}),
|
||||
ECVF_Cheat));
|
||||
@@ -295,6 +306,8 @@ UCogWindowManager::FMenu* UCogWindowManager::AddMenu(const FString& Name)
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void UCogWindowManager::RenderMainMenu()
|
||||
{
|
||||
const UPlayerInput* PlayerInput = FCogImguiInputHelper::GetPlayerInput(*GetWorld());
|
||||
|
||||
if (ImGui::BeginMainMenuBar())
|
||||
{
|
||||
for (UCogWindowManager::FMenu& Menu : MainMenu.SubMenus)
|
||||
@@ -304,6 +317,13 @@ void UCogWindowManager::RenderMainMenu()
|
||||
|
||||
if (ImGui::BeginMenu("Window"))
|
||||
{
|
||||
if (ImGui::MenuItem("Toggle Input", TCHAR_TO_ANSI(*FCogImguiInputHelper::CommandToString(PlayerInput, ToggleInputCommand))))
|
||||
{
|
||||
FCogImguiModule::Get().ToggleEnableInput();
|
||||
}
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
if (ImGui::MenuItem("Close All Windows"))
|
||||
{
|
||||
CloseAllWindows();
|
||||
@@ -318,10 +338,7 @@ void UCogWindowManager::RenderMainMenu()
|
||||
{
|
||||
for (int32 i = 1; i <= 4; ++i)
|
||||
{
|
||||
if (ImGui::MenuItem(TCHAR_TO_ANSI(*FString::Printf(TEXT("Load Layout %d"), i))))
|
||||
{
|
||||
LoadLayout(i);
|
||||
}
|
||||
RenderLoadLayoutMenuItem(PlayerInput, i);
|
||||
}
|
||||
|
||||
ImGui::EndMenu();
|
||||
@@ -331,10 +348,7 @@ void UCogWindowManager::RenderMainMenu()
|
||||
{
|
||||
for (int32 i = 1; i <= 4; ++i)
|
||||
{
|
||||
if (ImGui::MenuItem(TCHAR_TO_ANSI(*FString::Printf(TEXT("Save Layout %d"), i))))
|
||||
{
|
||||
SaveLayout(i);
|
||||
}
|
||||
RenderSaveLayoutMenuItem(PlayerInput, i);
|
||||
}
|
||||
|
||||
ImGui::EndMenu();
|
||||
@@ -390,6 +404,28 @@ void UCogWindowManager::RenderMainMenu()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void UCogWindowManager::RenderLoadLayoutMenuItem(const UPlayerInput* PlayerInput, int LayoutIndex)
|
||||
{
|
||||
FString Command = FString::Printf(TEXT("%s %d"), *LoadLayoutCommand, LayoutIndex);
|
||||
FString Shortcut = FCogImguiInputHelper::CommandToString(PlayerInput, Command);
|
||||
if (ImGui::MenuItem(TCHAR_TO_ANSI(*FString::Printf(TEXT("Load Layout %d"), LayoutIndex)), TCHAR_TO_ANSI(*Shortcut)))
|
||||
{
|
||||
LoadLayout(LayoutIndex);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void UCogWindowManager::RenderSaveLayoutMenuItem(const UPlayerInput* PlayerInput, int LayoutIndex)
|
||||
{
|
||||
FString Command = FString::Printf(TEXT("%s %d"), *SaveLayoutCommand, LayoutIndex);
|
||||
FString Shortcut = FCogImguiInputHelper::CommandToString(PlayerInput, Command);
|
||||
if (ImGui::MenuItem(TCHAR_TO_ANSI(*FString::Printf(TEXT("Save Layout %d"), LayoutIndex)), TCHAR_TO_ANSI(*Shortcut)))
|
||||
{
|
||||
SaveLayout(LayoutIndex);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
void UCogWindowManager::RenderOptionMenu(UCogWindowManager::FMenu& Menu)
|
||||
{
|
||||
@@ -535,23 +571,12 @@ void UCogWindowManager::ResetAllWindowsConfig()
|
||||
//--------------------------------------------------------------------------------------------------------------------------
|
||||
bool UCogWindowManager::RegisterDefaultCommands()
|
||||
{
|
||||
UWorld* World = GetWorld();
|
||||
if (World == nullptr)
|
||||
if (GetWorld() == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
APlayerController* PlayerController = FCogImguiInputHelper::GetFirstLocalPlayerController(*World);
|
||||
if (PlayerController == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
UPlayerInput* PlayerInput = PlayerController->PlayerInput;
|
||||
if (PlayerInput == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
UPlayerInput* PlayerInput = FCogImguiInputHelper::GetPlayerInput(*GetWorld());
|
||||
|
||||
AddCommand(PlayerInput, "Cog.ToggleInput", EKeys::Tab);
|
||||
AddCommand(PlayerInput, "Cog.LoadLayout 1", EKeys::F1);
|
||||
@@ -609,4 +634,4 @@ void UCogWindowManager::SortCommands(UPlayerInput* PlayerInput)
|
||||
{
|
||||
return Key1.Command.Compare(Key2.Command) < 0;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ class IConsoleObject;
|
||||
class SCogImguiWidget;
|
||||
class UCogWindow;
|
||||
class UCogWindow_Settings;
|
||||
class UPlayerInput;
|
||||
class UWorld;
|
||||
struct ImGuiSettingsHandler;
|
||||
struct ImGuiTextBuffer;
|
||||
@@ -19,6 +20,12 @@ class COGWINDOW_API UCogWindowManager : public UObject
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
static FString ToggleInputCommand;
|
||||
static FString LoadLayoutCommand;
|
||||
static FString SaveLayoutCommand;
|
||||
static FString ResetLayoutCommand;
|
||||
|
||||
UCogWindowManager();
|
||||
|
||||
virtual void PostInitProperties() override;
|
||||
@@ -106,6 +113,10 @@ protected:
|
||||
|
||||
virtual void RenderMenuItem(UCogWindow& Window, const char* MenuItemName);
|
||||
|
||||
virtual void RenderLoadLayoutMenuItem(const UPlayerInput* PlayerInput, int LayoutIndex);
|
||||
|
||||
virtual void RenderSaveLayoutMenuItem(const UPlayerInput* PlayerInput, int LayoutIndex);
|
||||
|
||||
static void SettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettingsHandler*);
|
||||
|
||||
static void SettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettingsHandler*);
|
||||
|
||||
Reference in New Issue
Block a user