Version:

IN THIS ARTICLE

Data Classes

Note:
This information is for developers of the Project Manager tool. If you’re a user working with Project Manager, please refer to the Project Manager User Guide.
Note:
This contains brief summaries of various class’s functionality and role. If available, there are additional links in the table of contents, either with expanded information, or github links. All documentation reflects code as of commit (b79bd3df1f)

Overview

ClassSource CodeDescription
TemplateInfoheader cpp file Describes data fields to encapsulate a generic Template.
ProjectTemplateInfoheader Subclass of Template specific to Projects. Only difference is that this one includes Gems.
SettingsInterfaceheader Interface for interacting with the O3DE Settings Registry.
Settingsheader cpp file Implementation for SettingsInterface to interact with O3DE Settings Registry.
ProjectInfoheader cpp file Contains data structure to describe a project, as recorded in project.json, inside ProjectManager. Also contains metadata for remote projects, or for checking if a project needs to be rebuilt.
EngineInfoheader cpp file Contains data structure to describe the current engine, as recorded in engine.json, inside ProjectManager. Also contains metadata for engine registration.
ProjectManagerDefsheader Contains various constants and preset strings.

Settings

We specify the SettingsInterface as a contract to ensure we implement the proper methods, and to enable global access to settings from a clean interface ( one example ). It also acts as a singleton interface for accessing Project Manager settings.

SettingsInterface specifies the following functions as the contract to interact with O3DE Settings Registry:

FunctionDescriptionImplementation
SettingsInterface::Get Using a QString key, can either return the string or bool value.code
SettingsInterface::Set Using a QString key, can either set a string or bool value for an entry.code
SettingsInterface::Remove Removes a entry with QString key from the registry.code
SettingsInterface::Copy Copies the value from one key to another. Can also optionally remove the original entry, acting as a “Move” command.code
SettingsInterface::GetProjectKey Given a ProjectInfo instance, provides a key prefix for where that project should be in settings registry.code
SettingsInterface::GetProjectBuiltSuccessfully Queries the latest build status of a given project, if successful or not.code
SettingsInterface::SetProjectBuiltSuccessfully Sets the latest build status of a given project, if successful or not.code

All of these functions are pure virtual functions, which require implementation in a base implementation class, otherwise it results in a compilation error, thereby enforcing the contract.

The Settings class inherits SettingsInterface which uses AZ::SettingsRegistryInterface under the hood to interact with the O3DE Settings Registry.

This mirrors JSON so that values can be retrieved by key paths. For example, take a .setreg like:

{
    "key":{
        "subkey":{
            "subsubkey":"value"
        }
    }
}

Then the value can be retrieved using the string key key/subkey/subsubkey.

The ProjectManager::SettingsInterface is similar to AZ::SettingsRegistryInterface, except it overrides some of the behavior to look for configuration specific to Project Manager, instead of O3DE as a whole. It’s also modified to work with QString, which the AZ counterpart does not handle.

The Settings class inherits from SettingsInterface::Registrar. The Registrar is part of the AZ::Interface in AzCore.

The implementation of Registrar registers the interface globally, which indicates the singleton pattern.

Here are the remaining functions that Settings also provides:

FunctionDescription
Settings::Save Dumps the settings registry into a string stream. Then tries to open the ProjectManager.setreg file in the O3DE user path, and write the stream data into that file.
Settings::GetBuiltSuccessfullyPaths For each project path requested, fetches the build status. Returns the result as a set.

Back to Overview