Files
UnrealEngineUWP/Engine/Source/Developer/LogVisualizer/Private/LogVisualizerModule.cpp

115 lines
3.4 KiB
C++
Raw Normal View History

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "LogVisualizer.h"
#include "LogVisualizerModule.h"
#include "LogVisualizerStyle.h"
#include "SDockTab.h"
#include "VisualLoggerRenderingActor.h"
#include "LogVisualizerSettings.h"
#if WITH_EDITOR
#include "Editor/EditorEngine.h"
#include "ISettingsModule.h"
#include "LevelEditor.h"
#include "WorkspaceMenuStructureModule.h"
#endif // WITH_EDITOR
#define LOCTEXT_NAMESPACE "FLogVisualizerModule"
static const FName VisualLoggerTabName("VisualLogger");
//DEFINE_LOG_CATEGORY(LogLogVisualizer);
void FNewLogVisualizerModule::StartupModule()
{
FLogVisualizerStyle::Initialize();
FVisualLoggerCommands::Register();
IModularFeatures::Get().RegisterModularFeature(VisualLoggerTabName, this);
FGlobalTabmanager::Get()->RegisterNomadTabSpawner(
VisualLoggerTabName,
FOnSpawnTab::CreateRaw(this, &FNewLogVisualizerModule::SpawnLogVisualizerTab))
.SetGroup(WorkspaceMenu::GetMenuStructure().GetDeveloperToolsMiscCategory())
.SetDisplayName(NSLOCTEXT("LogVisualizerApp", "TabTitle", "Visual Logger"))
.SetTooltipText(NSLOCTEXT("LogVisualizerApp", "TooltipText", "Opens Visual Logger tool."))
.SetIcon(FSlateIcon(FLogVisualizerStyle::GetStyleSetName(), "LogVisualizerApp.TabIcon"));
ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings");
if (SettingsModule != nullptr)
{
SettingsModule->RegisterSettings("Editor", "General", "VisualLogger",
LOCTEXT("AIToolsSettingsName", "Visual Logger"),
LOCTEXT("AIToolsSettingsDescription", "General settings for UE4 AI Tools."),
ULogVisualizerSettings::StaticClass()->GetDefaultObject()
);
}
}
void FNewLogVisualizerModule::ShutdownModule()
{
FGlobalTabmanager::Get()->UnregisterTabSpawner(VisualLoggerTabName);
FVisualLoggerCommands::Unregister();
IModularFeatures::Get().UnregisterModularFeature(VisualLoggerTabName, this);
ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings");
if (SettingsModule != nullptr)
{
SettingsModule->UnregisterSettings("Editor", "General", "VisualLogger");
}
FLogVisualizerStyle::Shutdown();
}
TSharedRef<SDockTab> FNewLogVisualizerModule::SpawnLogVisualizerTab(const FSpawnTabArgs& SpawnTabArgs)
{
const TSharedRef<SDockTab> MajorTab = SNew(SDockTab)
.TabRole(ETabRole::MajorTab).OnTabClosed(SDockTab::FOnTabClosedCallback::CreateRaw(this, &FNewLogVisualizerModule::OnTabClosed));
TSharedPtr<SWidget> TabContent;
TabContent = SNew(SVisualLogger, MajorTab, SpawnTabArgs.GetOwnerWindow());
MajorTab->SetContent(TabContent.ToSharedRef());
return MajorTab;
}
void FNewLogVisualizerModule::OnTabClosed(TSharedRef<SDockTab> DockTab)
{
UWorld* World = NULL;
#if WITH_EDITOR
UEditorEngine *EEngine = Cast<UEditorEngine>(GEngine);
if (GIsEditor && EEngine != NULL)
{
// lets use PlayWorld during PIE/Simulate and regular world from editor otherwise, to draw debug information
World = EEngine->PlayWorld != NULL ? EEngine->PlayWorld : EEngine->GetEditorWorldContext().World();
}
else
#endif
if (!GIsEditor)
{
World = GEngine->GetWorld();
}
TSharedRef<SVisualLogger> VisualLoggerTab = StaticCastSharedRef<SVisualLogger>(DockTab->GetContent());
VisualLoggerTab->OnTabLosed();
if (World == NULL)
{
World = GWorld;
}
if (World)
{
for (TActorIterator<AVisualLoggerRenderingActor> It(World); It; ++It)
{
World->DestroyActor(*It);
}
}
}
IMPLEMENT_MODULE(FNewLogVisualizerModule, LogVisualizer);
#undef LOCTEXT_NAMESPACE