ColumnVisibilitySettings

ColumnVisibilitySettings

#Overview

name: ColumnVisibilitySettings

The value of this variable can be defined or overridden in .ini config files. 10 .ini config files referencing this setting variable.

It is referenced in 7 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of ColumnVisibilitySettings is to manage and store the visibility state of columns in various Unreal Engine 5 editor interfaces, particularly in the Sequencer and Stage Monitor systems.

This setting variable is primarily used by two Unreal Engine subsystems:

  1. The Stage Monitoring system, which is part of the Virtual Production toolkit.
  2. The Sequencer system, which is part of the core editor functionality.

The value of this variable is set in different ways depending on the context:

  1. In the Stage Monitor system, it’s stored as a JSON-formatted string and is set via the CaptureColumnVisibilityState function.
  2. In the Sequencer system, it’s stored as an array of FColumnVisibilitySetting objects and is set via the SetOutlinerColumnVisibility function.

This variable interacts with other parts of the system, particularly:

  1. In the Stage Monitor, it’s used in conjunction with the SHeaderRow widget to restore column visibility states.
  2. In the Sequencer, it’s used to update the outliner view columns and is part of the USequencerSettings object.

Developers should be aware of the following when using this variable:

  1. The format of the stored data differs between systems (JSON string vs. array of objects).
  2. Changes to this variable are typically saved to config files, which means they persist between editor sessions.
  3. In the Sequencer, changes to this variable trigger a SaveConfig() call, which might have performance implications if changed frequently.

Best practices when using this variable include:

  1. Only update it when necessary, as it triggers config saves.
  2. Ensure that any manual modifications to the variable maintain the expected format for the system you’re working with.
  3. When adding new columns to interfaces that use this variable, make sure to update the corresponding logic for saving and restoring column visibility states.
  4. Use the provided getter and setter functions (like GetOutlinerColumnSettings and SetOutlinerColumnVisibility in the Sequencer system) instead of accessing the variable directly when possible.

#Setting Variables

#References In INI files

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:892, section: [NiagaraSequenceEditor SequencerSettings]

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:893, section: [NiagaraSequenceEditor SequencerSettings]

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:894, section: [NiagaraSequenceEditor SequencerSettings]

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:895, section: [NiagaraSequenceEditor SequencerSettings]

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:896, section: [NiagaraSequenceEditor SequencerSettings]

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:897, section: [NiagaraSequenceEditor SequencerSettings]

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:898, section: [NiagaraSequenceEditor SequencerSettings]

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:899, section: [NiagaraSequenceEditor SequencerSettings]

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:900, section: [NiagaraSequenceEditor SequencerSettings]

Location: <Workspace>/Engine/Config/BaseEditorPerProjectUserSettings.ini:901, section: [NiagaraSequenceEditor SequencerSettings]

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Plugins/VirtualProduction/StageMonitoring/Source/StageMonitorEditor/Private/StageMonitorEditorSettings.h:22

Scope (from outer to inner):

file
class        class UStageMonitorEditorSettings : public UObject

Source code excerpt:

	/** Stores the state of the visibility settings in JSON format. */
	UPROPERTY(Config)
	FString ColumnVisibilitySettings;
};

#Loc: <Workspace>/Engine/Plugins/VirtualProduction/StageMonitoring/Source/StageMonitorEditor/Private/Widgets/SDataProviderListView.cpp:768

Scope (from outer to inner):

file
namespace    UE::StageMonitor::Private
function     void CaptureColumnVisibilityState

Source code excerpt:


		UStageMonitorEditorSettings* Settings = GetMutableDefault<UStageMonitorEditorSettings>();
		Settings->ColumnVisibilitySettings = Snapshot;
		Settings->SaveConfig();
	}

	TOptional<TPair<FString, bool>> GetColumnData(const TSharedPtr<FJsonValue>& ColumnValue)
	{
		TSharedPtr<FJsonObject>* PossibleColumnObject;

#Loc: <Workspace>/Engine/Plugins/VirtualProduction/StageMonitoring/Source/StageMonitorEditor/Private/Widgets/SDataProviderListView.cpp:796

Scope (from outer to inner):

file
namespace    UE::StageMonitor::Private
function     void RestoreColumnVisibilityState

Source code excerpt:

		const UStageMonitorEditorSettings* Settings = GetDefault<UStageMonitorEditorSettings>();
		TSharedPtr<FJsonObject> JsonObject = MakeShared<FJsonObject>();
		const TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(Settings->ColumnVisibilitySettings);
		const bool bIsValid = FJsonSerializer::Deserialize(Reader, JsonObject);

		if (!bIsValid)
		{
			return;
		}

#Loc: <Workspace>/Engine/Source/Editor/Sequencer/Private/SSequencer.cpp:1089

Scope (from outer to inner):

file
function     void SSequencer::UpdateOutlinerViewColumns

Source code excerpt:


	// Save updated column list in settings
	TArray<FColumnVisibilitySetting> ColumnVisibilitySettings;

	for (FSequencerOutlinerColumnVisibility ColumnVisibility : OutlinerColumnVisibilities)
	{
		ColumnVisibilitySettings.Add(FColumnVisibilitySetting(ColumnVisibility.Column->GetColumnName(), ColumnVisibility.bIsColumnVisible));
	}

	GetSequencerSettings()->SetOutlinerColumnVisibility(ColumnVisibilitySettings);

	// Filter out hidden columns to create a list of visible columns for the outliner views
	TArray<TSharedPtr<IOutlinerColumn>> VisibleColumns;
	for (FSequencerOutlinerColumnVisibility ColumnVisibility : OutlinerColumnVisibilities)
	{
		if (ColumnVisibility.bIsColumnVisible)

#Loc: <Workspace>/Engine/Source/Editor/Sequencer/Private/SequencerSettings.cpp:1032

Scope (from outer to inner):

file
function     void USequencerSettings::SetOutlinerColumnVisibility

Source code excerpt:

void USequencerSettings::SetOutlinerColumnVisibility(const TArray<FColumnVisibilitySetting>& InColumnVisibilitySettings)
{
	if (InColumnVisibilitySettings != ColumnVisibilitySettings)
	{
		ColumnVisibilitySettings = InColumnVisibilitySettings;
		SaveConfig();
	}
}

#Loc: <Workspace>/Engine/Source/Editor/Sequencer/Public/SequencerSettings.h:470

Scope (from outer to inner):

file
class        class USequencerSettings : public UObject
function     TArray<FColumnVisibilitySetting> GetOutlinerColumnSettings

Source code excerpt:


	/** Get outliner column visibility in display order */
	TArray<FColumnVisibilitySetting> GetOutlinerColumnSettings() const { return ColumnVisibilitySettings; }
	/** Sets the visibility of outliner columns in display order */
	void SetOutlinerColumnVisibility(const TArray<FColumnVisibilitySetting>& InColumnVisibilitySettings);

protected:

	/** The auto change mode (auto-key, auto-track or none). */

#Loc: <Workspace>/Engine/Source/Editor/Sequencer/Public/SequencerSettings.h:739

Scope (from outer to inner):

file
class        class USequencerSettings : public UObject

Source code excerpt:

	/** List of all columns and their visibility, in the order to be displayed in the outliner view */
	UPROPERTY(config, EditAnywhere, Category = General)
	TArray<FColumnVisibilitySetting> ColumnVisibilitySettings;

	FOnEvaluateSubSequencesInIsolationChanged OnEvaluateSubSequencesInIsolationChangedEvent;
	FOnShowSelectedNodesOnlyChanged OnShowSelectedNodesOnlyChangedEvent;
	FOnAllowEditsModeChanged OnAllowEditsModeChangedEvent;
	FOnLoopStateChanged OnLoopStateChangedEvent;
	FOnTimeDisplayFormatChanged OnTimeDisplayFormatChangedEvent;