UnrealImGui/Source/ImGui/Private/Editor/ImGuiEditor.cpp
Sebastian c5f3759664 Moved console variables and commands to wrapper objects:
- Moved property variables to ImGui Module Properties.
- Moved console command to ImGui Module Commands (one for now but more will be added).
- ImGui Module Commands is created by ImGui Module Manager, what means that commands are registered after module is loaded and unregistered when it is unloaded.
- Updated settings to allow more convenient use: Added global pointer to default object and event raised when it is loaded.
2018-11-24 19:54:01 +00:00

134 lines
2.8 KiB
C++

// Distributed under the MIT License (MIT) (see accompanying LICENSE file)
#include "ImGuiPrivatePCH.h"
#if WITH_EDITOR
#include "ImGuiEditor.h"
#include "ImGuiKeyInfoCustomization.h"
#include "ImGuiSettings.h"
#include <ISettingsModule.h>
#define LOCTEXT_NAMESPACE "ImGuiEditor"
#define SETTINGS_CONTAINER TEXT("Project"), TEXT("Plugins"), TEXT("ImGui")
namespace
{
ISettingsModule* GetSettingsModule()
{
return FModuleManager::GetModulePtr<ISettingsModule>("Settings");
}
FPropertyEditorModule* GetPropertyEditorModule()
{
return FModuleManager::GetModulePtr<FPropertyEditorModule>("PropertyEditor");
}
}
FImGuiEditor::FImGuiEditor()
{
Register();
// As a side effect of being part of the ImGui module, we need to support deferred registration (only executed if
// module is loaded manually at the very early stage).
if (!IsRegistrationCompleted())
{
CreateRegistrator();
}
}
FImGuiEditor::~FImGuiEditor()
{
Unregister();
}
void FImGuiEditor::Register()
{
// Only register after UImGuiSettings class is initialized (necessary to check in early loading stages).
if (!bSettingsRegistered && GImGuiSettings)
{
if (ISettingsModule* SettingsModule = GetSettingsModule())
{
bSettingsRegistered = true;
SettingsModule->RegisterSettings(SETTINGS_CONTAINER,
LOCTEXT("ImGuiSettingsName", "ImGui"),
LOCTEXT("ImGuiSettingsDescription", "Configure the Unreal ImGui plugin."),
GImGuiSettings);
}
}
if (!bCustomPropertyTypeLayoutsRegistered)
{
if (FPropertyEditorModule* PropertyModule = GetPropertyEditorModule())
{
bCustomPropertyTypeLayoutsRegistered = true;
PropertyModule->RegisterCustomPropertyTypeLayout("ImGuiKeyInfo",
FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FImGuiKeyInfoCustomization::MakeInstance));
}
}
}
void FImGuiEditor::Unregister()
{
if (bSettingsRegistered)
{
bSettingsRegistered = false;
if (ISettingsModule* SettingsModule = GetSettingsModule())
{
SettingsModule->UnregisterSettings(SETTINGS_CONTAINER);
}
}
if (bCustomPropertyTypeLayoutsRegistered)
{
bCustomPropertyTypeLayoutsRegistered = false;
if (FPropertyEditorModule* PropertyModule = GetPropertyEditorModule())
{
PropertyModule->UnregisterCustomPropertyTypeLayout("ImGuiKeyInfo");
}
}
}
void FImGuiEditor::CreateRegistrator()
{
if (!RegistratorHandle.IsValid())
{
RegistratorHandle = FModuleManager::Get().OnModulesChanged().AddLambda([this](FName Name, EModuleChangeReason Reason)
{
if (Reason == EModuleChangeReason::ModuleLoaded)
{
Register();
}
if (IsRegistrationCompleted())
{
ReleaseRegistrator();
}
});
}
}
void FImGuiEditor::ReleaseRegistrator()
{
if (RegistratorHandle.IsValid())
{
FModuleManager::Get().OnModulesChanged().Remove(RegistratorHandle);
RegistratorHandle.Reset();
}
}
#undef SETTINGS_CONTAINER
#undef LOCTEXT_NAMESPACE
#endif // WITH_EDITOR