// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. #include "LogVisualizer.h" #include "Misc/CoreMisc.h" #include "LogVisualizerSettings.h" #if WITH_EDITOR #include "Editor/EditorEngine.h" #include "ISettingsModule.h" #include "UnrealEdMisc.h" #endif // WITH_EDITOR FCategoryFiltersManager FCategoryFiltersManager::StaticManager; ULogVisualizerSettings::ULogVisualizerSettings(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) , DebugMeshMaterialFakeLightName(TEXT("/Engine/EngineDebugMaterials/DebugMeshMaterialFakeLight.DebugMeshMaterialFakeLight")) { TrivialLogsThreshold = 1; DefaultCameraDistance = 150; bSearchInsideLogs = true; GraphsBackgroundColor = FColor(0, 0, 0, 70); bResetDataWithNewSession = false; bDrawExtremesOnGraphs = false; bUsePlayersOnlyForPause = true; } class UMaterial* ULogVisualizerSettings::GetDebugMeshMaterial() { if (DebugMeshMaterialFakeLight == nullptr) { DebugMeshMaterialFakeLight = LoadObject(NULL, *DebugMeshMaterialFakeLightName, NULL, LOAD_None, NULL); } return DebugMeshMaterialFakeLight; } #if WITH_EDITOR void ULogVisualizerSettings::PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) { Super::PostEditChangeProperty(PropertyChangedEvent); const FName Name = (PropertyChangedEvent.Property != nullptr) ? PropertyChangedEvent.Property->GetFName() : NAME_None; if (!FUnrealEdMisc::Get().IsDeletePreferences()) { SaveConfig(); } SettingChangedEvent.Broadcast(Name); } #endif bool FCategoryFiltersManager::MatchCategoryFilters(FString String, ELogVerbosity::Type Verbosity) { const ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); bool bFoundFilter = false; for (const FCategoryFilter& Filter : Settings->CurrentFilters.Categories) { bFoundFilter = Filter.CategoryName == String; if (bFoundFilter) { const bool bFineWithSearchString = Settings->bSearchInsideLogs == true || (Settings->bSearchInsideLogs == false && (Settings->CurrentFilters.SearchBoxFilter.Len() == 0 || Filter.CategoryName.Find(Settings->CurrentFilters.SearchBoxFilter) != INDEX_NONE)); return bFineWithSearchString && Verbosity <= Filter.LogVerbosity && Filter.Enabled; } } return bFoundFilter; } bool FCategoryFiltersManager::MatchObjectName(FString String) { const ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); return (Settings->CurrentFilters.SelectedClasses.Num() == 0 || Settings->CurrentFilters.SelectedClasses.Find(String) != INDEX_NONE); } bool FCategoryFiltersManager::MatchSearchString(FString String) { const ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); return Settings->CurrentFilters.SearchBoxFilter == String; } void FCategoryFiltersManager::SetSearchString(FString InString) { ULogVisualizerSettings::StaticClass()->GetDefaultObject()->CurrentFilters.SearchBoxFilter = InString; } FString FCategoryFiltersManager::GetSearchString() { return ULogVisualizerSettings::StaticClass()->GetDefaultObject()->CurrentFilters.SearchBoxFilter; } void FCategoryFiltersManager::SetObjectFilterString(FString InFilterString) { ULogVisualizerSettings::StaticClass()->GetDefaultObject()->CurrentFilters.ObjectNameFilter = InFilterString; } FString FCategoryFiltersManager::GetObjectFilterString() { return ULogVisualizerSettings::StaticClass()->GetDefaultObject()->CurrentFilters.ObjectNameFilter; } void FCategoryFiltersManager::AddCategory(FString InName, ELogVerbosity::Type InVerbosity) { ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); FCategoryFilter Filter; Filter.CategoryName = InName; Filter.LogVerbosity = InVerbosity; Filter.Enabled = true; Settings->CurrentFilters.Categories.Add(Filter); } void FCategoryFiltersManager::RemoveCategory(FString InName) { ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); for (int32 Index = 0; Index < Settings->CurrentFilters.Categories.Num(); ++Index) { const FCategoryFilter& Filter = Settings->CurrentFilters.Categories[Index]; if (Filter.CategoryName == InName) { Settings->CurrentFilters.Categories.RemoveAt(Index); break; } } } bool FCategoryFiltersManager::IsValidCategory(FString InName) { ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); for (const FCategoryFilter& Filter : Settings->CurrentFilters.Categories) { if (Filter.CategoryName == InName) { return true; } } return Settings->CurrentFilters.Categories.Num() == 0; } FCategoryFilter& FCategoryFiltersManager::GetCategory(FString InName) { ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); for (FCategoryFilter& Filter : Settings->CurrentFilters.Categories) { if (Filter.CategoryName == InName) { return Filter; } } static FCategoryFilter NoCategory; return NoCategory; } void FCategoryFiltersManager::SelectObject(FString ObjectName) { ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); Settings->CurrentFilters.SelectedClasses.AddUnique(ObjectName); } void FCategoryFiltersManager::RemoveObjectFromSelection(FString ObjectName) { ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); Settings->CurrentFilters.SelectedClasses.Remove(ObjectName); } const TArray& FCategoryFiltersManager::GetSelectedObjects() { return ULogVisualizerSettings::StaticClass()->GetDefaultObject()->CurrentFilters.SelectedClasses; } void FCategoryFiltersManager::SavePresistentData() { ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); if (Settings->bPresistentFilters) { Settings->PresistentFilters = Settings->CurrentFilters; } else { Settings->PresistentFilters = FVisualLoggerFilters(); } Settings->SaveConfig(); } void FCategoryFiltersManager::ClearPresistentData() { ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); if (Settings->bPresistentFilters) { Settings->PresistentFilters = FVisualLoggerFilters(); } } void FCategoryFiltersManager::LoadPresistentData() { ULogVisualizerSettings* Settings = ULogVisualizerSettings::StaticClass()->GetDefaultObject(); if (Settings->bPresistentFilters) { Settings->CurrentFilters = Settings->PresistentFilters; } else { Settings->CurrentFilters = FVisualLoggerFilters(); } }