diff --git a/Code/Tools/ProjectManager/Source/Application.cpp b/Code/Tools/ProjectManager/Source/Application.cpp index 29e0df3c3a..8ce8075988 100644 --- a/Code/Tools/ProjectManager/Source/Application.cpp +++ b/Code/Tools/ProjectManager/Source/Application.cpp @@ -111,6 +111,14 @@ namespace O3DE::ProjectManager } } + m_settings = AZStd::make_unique(); + AZ_Assert(m_settings, "Failed to create Settings"); + + if (!m_settings->IsInitialized()) + { + return false; + } + const AZ::CommandLine* commandLine = GetCommandLine(); AZ_Assert(commandLine, "Failed to get command line"); diff --git a/Code/Tools/ProjectManager/Source/Application.h b/Code/Tools/ProjectManager/Source/Application.h index ad55694b18..e95645d500 100644 --- a/Code/Tools/ProjectManager/Source/Application.h +++ b/Code/Tools/ProjectManager/Source/Application.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #endif @@ -36,6 +37,7 @@ namespace O3DE::ProjectManager bool InitLog(const char* logName); AZStd::unique_ptr m_pythonBindings; + AZStd::unique_ptr m_settings; QSharedPointer m_app; QSharedPointer m_mainWindow; diff --git a/Code/Tools/ProjectManager/Source/ExternalLinkDialog.cpp b/Code/Tools/ProjectManager/Source/ExternalLinkDialog.cpp index 2f3d615863..eada467b6a 100644 --- a/Code/Tools/ProjectManager/Source/ExternalLinkDialog.cpp +++ b/Code/Tools/ProjectManager/Source/ExternalLinkDialog.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include @@ -85,6 +85,7 @@ namespace O3DE::ProjectManager void ExternalLinkDialog::SetSkipDialogSetting(bool state) { - PMSettings::SetProjectManagerKey(PMSettings::GetExternalLinkWarningKey(), state); + auto settings = SettingsInterface::Get(); + settings->Set(QString(settings->ExternalLinkWarningKey), state); } } // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/LinkWidget.cpp b/Code/Tools/ProjectManager/Source/LinkWidget.cpp index 87ccdb9aed..7a940e135b 100644 --- a/Code/Tools/ProjectManager/Source/LinkWidget.cpp +++ b/Code/Tools/ProjectManager/Source/LinkWidget.cpp @@ -8,9 +8,7 @@ #include #include -#include - -#include +#include #include #include @@ -33,7 +31,8 @@ namespace O3DE::ProjectManager { // Check if user request not to be shown external link warning dialog bool skipDialog = false; - PMSettings::GetProjectManagerKey(skipDialog, PMSettings::GetExternalLinkWarningKey()); + auto settings = SettingsInterface::Get(); + settings->Get(skipDialog, QString(settings->ExternalLinkWarningKey)); if (!skipDialog) { diff --git a/Code/Tools/ProjectManager/Source/ProjectBuilderController.cpp b/Code/Tools/ProjectManager/Source/ProjectBuilderController.cpp index 4fc188b289..0af3bfc503 100644 --- a/Code/Tools/ProjectManager/Source/ProjectBuilderController.cpp +++ b/Code/Tools/ProjectManager/Source/ProjectBuilderController.cpp @@ -9,9 +9,7 @@ #include #include #include -#include - -#include +#include #include #include @@ -30,7 +28,7 @@ namespace O3DE::ProjectManager m_worker->moveToThread(&m_workerThread); // Remove key here in case Project Manager crashing while building that causes HandleResults to not be called - PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, false); + SettingsInterface::Get()->SetProjectBuiltSuccessfully(m_projectInfo, false); connect(&m_workerThread, &QThread::finished, m_worker, &ProjectBuilderWorker::deleteLater); connect(&m_workerThread, &QThread::started, m_worker, &ProjectBuilderWorker::BuildProject); @@ -114,7 +112,7 @@ namespace O3DE::ProjectManager emit NotifyBuildProject(m_projectInfo); } - PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, false); + SettingsInterface::Get()->SetProjectBuiltSuccessfully(m_projectInfo, false); emit Done(false); return; @@ -123,7 +121,7 @@ namespace O3DE::ProjectManager { m_projectInfo.m_buildFailed = false; - PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, true); + SettingsInterface::Get()->SetProjectBuiltSuccessfully(m_projectInfo, true); } emit Done(true); diff --git a/Code/Tools/ProjectManager/Source/ProjectManagerSettings.cpp b/Code/Tools/ProjectManager/Source/ProjectManagerSettings.cpp deleted file mode 100644 index 12dd569ad5..0000000000 --- a/Code/Tools/ProjectManager/Source/ProjectManagerSettings.cpp +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include - -#include -#include -#include - -namespace O3DE::ProjectManager -{ - namespace PMSettings - { - bool SaveProjectManagerSettings() - { - auto settingsRegistry = AZ::SettingsRegistry::Get(); - AZ::SettingsRegistryMergeUtils::DumperSettings dumperSettings; - dumperSettings.m_prettifyOutput = true; - dumperSettings.m_jsonPointerPrefix = ProjectManagerKeyPrefix; - - AZStd::string stringBuffer; - AZ::IO::ByteContainerStream stringStream(&stringBuffer); - if (!AZ::SettingsRegistryMergeUtils::DumpSettingsRegistryToStream( - *settingsRegistry, ProjectManagerKeyPrefix, stringStream, dumperSettings)) - { - AZ_Warning("ProjectManager", false, "Could not save Project Manager settings to stream"); - return false; - } - - AZ::IO::FixedMaxPath o3deUserPath = AZ::Utils::GetO3deManifestDirectory(); - o3deUserPath /= AZ::SettingsRegistryInterface::RegistryFolder; - o3deUserPath /= "ProjectManager.setreg"; - - bool saved = false; - constexpr auto configurationMode = - AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_CREATE_PATH | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY; - - AZ::IO::SystemFile outputFile; - if (outputFile.Open(o3deUserPath.c_str(), configurationMode)) - { - saved = outputFile.Write(stringBuffer.data(), stringBuffer.size()) == stringBuffer.size(); - } - - AZ_Warning("ProjectManager", saved, "Unable to save Project Manager registry file to path: %s", o3deUserPath.c_str()); - return saved; - } - - bool GetProjectManagerKey(QString& result, const QString& settingsKey) - { - bool success = false; - auto settingsRegistry = AZ::SettingsRegistry::Get(); - if (settingsRegistry) - { - AZStd::string settingsValue; - success = settingsRegistry->Get(settingsValue, settingsKey.toStdString().c_str()); - - result = settingsValue.c_str(); - } - - return success; - } - - bool GetProjectManagerKey(bool& result, const QString& settingsKey) - { - bool success = false; - auto settingsRegistry = AZ::SettingsRegistry::Get(); - if (settingsRegistry) - { - success = settingsRegistry->Get(result, settingsKey.toStdString().c_str()); - } - - return success; - } - - bool SetProjectManagerKey(const QString& settingsKey, const QString& settingsValue, bool saveToDisk) - { - bool success = false; - auto settingsRegistry = AZ::SettingsRegistry::Get(); - if (settingsRegistry) - { - success = settingsRegistry->Set(settingsKey.toStdString().c_str(), settingsValue.toStdString().c_str()); - - if (saveToDisk) - { - SaveProjectManagerSettings(); - } - } - - return success; - } - - bool SetProjectManagerKey(const QString& settingsKey, bool settingsValue, bool saveToDisk) - { - bool success = false; - auto settingsRegistry = AZ::SettingsRegistry::Get(); - if (settingsRegistry) - { - success = settingsRegistry->Set(settingsKey.toStdString().c_str(), settingsValue); - - if (saveToDisk) - { - SaveProjectManagerSettings(); - } - } - - return success; - } - - bool RemoveProjectManagerKey(const QString& settingsKey, bool saveToDisk) - { - bool success = false; - auto settingsRegistry = AZ::SettingsRegistry::Get(); - if (settingsRegistry) - { - success = settingsRegistry->Remove(settingsKey.toStdString().c_str()); - - if (saveToDisk) - { - SaveProjectManagerSettings(); - } - } - - return success; - } - - bool CopyProjectManagerKeyString(const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig, bool saveToDisk) - { - bool success = false; - auto settingsRegistry = AZ::SettingsRegistry::Get(); - if (settingsRegistry) - { - AZStd::string settingsValue; - success = settingsRegistry->Get(settingsValue, settingsKeyOrig.toStdString().c_str()); - - if (success) - { - success = settingsRegistry->Set(settingsKeyDest.toStdString().c_str(), settingsValue); - if (success) - { - if (removeOrig) - { - success = settingsRegistry->Remove(settingsKeyOrig.toStdString().c_str()); - } - - if (saveToDisk) - { - SaveProjectManagerSettings(); - } - } - } - } - - return success; - } - - QString GetProjectKey(const ProjectInfo& projectInfo) - { - return QString("%1/Projects/%2/%3").arg(ProjectManagerKeyPrefix, projectInfo.m_id, projectInfo.m_projectName); - } - - QString GetExternalLinkWarningKey() - { - return QString("%1/SkipExternalLinkWarning").arg(ProjectManagerKeyPrefix); - } - - QString GetProjectsBuiltSuccessfullyKey() - { - return QString("%1/SuccessfulBuildPaths").arg(ProjectManagerKeyPrefix); - } - - bool GetBuiltSuccessfullyPaths(AZStd::set& result) - { - bool success = false; - auto settingsRegistry = AZ::SettingsRegistry::Get(); - if (settingsRegistry) - { - QString builtKey = GetProjectsBuiltSuccessfullyKey(); - success = settingsRegistry->GetObject>(result, builtKey.toStdString().c_str()); - } - - return success; - } - - bool GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo) - { - AZStd::set builtPathsResult; - bool success = GetBuiltSuccessfullyPaths(builtPathsResult); - if (success) - { - // Check if buildPath is listed as successfully built - AZStd::string projectPath = projectInfo.m_path.toStdString().c_str(); - if (builtPathsResult.contains(projectPath)) - { - result = true; - } - } - // No project built statuses known - else - { - result = false; - } - - return success; - } - - bool SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt, bool saveToDisk) - { - AZStd::set builtPathsResult; - bool success = GetBuiltSuccessfullyPaths(builtPathsResult); - - AZStd::string projectPath = projectInfo.m_path.toStdString().c_str(); - if (successfullyBuilt) - { - //Add successfully built path to set - builtPathsResult.insert(projectPath); - } - else - { - // Remove unsuccessfully built path from set - builtPathsResult.erase(projectPath); - } - - auto settingsRegistry = AZ::SettingsRegistry::Get(); - if (settingsRegistry) - { - QString builtKey = GetProjectsBuiltSuccessfullyKey(); - success = settingsRegistry->SetObject>(builtKey.toStdString().c_str(), builtPathsResult); - - if (saveToDisk) - { - SaveProjectManagerSettings(); - } - } - else - { - success = false; - } - - return success; - } - - } // namespace PMSettings -} // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/ProjectManagerSettings.h b/Code/Tools/ProjectManager/Source/ProjectManagerSettings.h deleted file mode 100644 index 2a92fcab0f..0000000000 --- a/Code/Tools/ProjectManager/Source/ProjectManagerSettings.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#if !defined(Q_MOC_RUN) -#include -#include -#endif - -namespace O3DE::ProjectManager -{ - namespace PMSettings - { - static constexpr char ProjectManagerKeyPrefix[] = "/O3DE/ProjectManager"; - - bool SaveProjectManagerSettings(); - bool GetProjectManagerKey(QString& result, const QString& settingsKey); - bool GetProjectManagerKey(bool& result, const QString& settingsKey); - bool SetProjectManagerKey(const QString& settingsKey, const QString& settingsValue, bool saveToDisk = true); - bool SetProjectManagerKey(const QString& settingsKey, bool settingsValue, bool saveToDisk = true); - bool RemoveProjectManagerKey(const QString& settingsKey, bool saveToDisk = true); - bool CopyProjectManagerKeyString( - const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig = false, bool saveToDisk = true); - - QString GetProjectKey(const ProjectInfo& projectInfo); - QString GetExternalLinkWarningKey(); - - bool GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo); - bool SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt, bool saveToDisk = true); - } // namespace PMSettings -} // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp b/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp index 9816595548..90ded37991 100644 --- a/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp +++ b/Code/Tools/ProjectManager/Source/ProjectsScreen.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include @@ -292,7 +292,7 @@ namespace O3DE::ProjectManager if (currentButton) { bool projectBuiltSuccessfully = false; - PMSettings::GetProjectBuiltSuccessfully(projectBuiltSuccessfully, project); + SettingsInterface::Get()->GetProjectBuiltSuccessfully(projectBuiltSuccessfully, project); if (!projectBuiltSuccessfully) { diff --git a/Code/Tools/ProjectManager/Source/Settings.cpp b/Code/Tools/ProjectManager/Source/Settings.cpp new file mode 100644 index 0000000000..50081fbff3 --- /dev/null +++ b/Code/Tools/ProjectManager/Source/Settings.cpp @@ -0,0 +1,201 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +#include +#include +#include + +namespace O3DE::ProjectManager +{ + Settings::Settings(bool saveToDisk) + : m_saveToDisk(saveToDisk) + { + m_settingsRegistry = AZ::SettingsRegistry::Get(); + + AZ_Assert(m_settingsRegistry, "Failed to create Settings"); + } + + bool Settings::IsInitialized() + { + // Settings intialized correctly if it successfuly got the SettingsRegistry + return m_settingsRegistry; + } + + bool Settings::Save() + { + AZ::SettingsRegistryMergeUtils::DumperSettings dumperSettings; + dumperSettings.m_prettifyOutput = true; + dumperSettings.m_jsonPointerPrefix = ProjectManagerKeyPrefix; + + AZStd::string stringBuffer; + AZ::IO::ByteContainerStream stringStream(&stringBuffer); + if (!AZ::SettingsRegistryMergeUtils::DumpSettingsRegistryToStream( + *m_settingsRegistry, ProjectManagerKeyPrefix, stringStream, dumperSettings)) + { + AZ_Warning("ProjectManager", false, "Could not save Project Manager settings to stream"); + return false; + } + + AZ::IO::FixedMaxPath o3deUserPath = AZ::Utils::GetO3deManifestDirectory(); + o3deUserPath /= AZ::SettingsRegistryInterface::RegistryFolder; + o3deUserPath /= "ProjectManager.setreg"; + + bool saved = false; + constexpr auto configurationMode = + AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_CREATE_PATH | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY; + + AZ::IO::SystemFile outputFile; + if (outputFile.Open(o3deUserPath.c_str(), configurationMode)) + { + saved = outputFile.Write(stringBuffer.data(), stringBuffer.size()) == stringBuffer.size(); + } + + AZ_Warning("ProjectManager", saved, "Unable to save Project Manager registry file to path: %s", o3deUserPath.c_str()); + return saved; + } + + bool Settings::Get(QString& result, const QString& settingsKey) + { + bool success = false; + + AZStd::string settingsValue; + success = m_settingsRegistry->Get(settingsValue, settingsKey.toStdString().c_str()); + + result = settingsValue.c_str(); + return success; + } + + bool Settings::Get(bool& result, const QString& settingsKey) + { + return m_settingsRegistry->Get(result, settingsKey.toStdString().c_str()); + } + + bool Settings::Set(const QString& settingsKey, const QString& settingsValue) + { + bool success = false; + + success = m_settingsRegistry->Set(settingsKey.toStdString().c_str(), settingsValue.toStdString().c_str()); + if (m_saveToDisk) + { + Save(); + } + + return success; + } + + bool Settings::Set(const QString& settingsKey, bool settingsValue) + { + bool success = false; + + success = m_settingsRegistry->Set(settingsKey.toStdString().c_str(), settingsValue); + if (m_saveToDisk) + { + Save(); + } + + return success; + } + + bool Settings::Remove(const QString& settingsKey) + { + bool success = false; + + success = m_settingsRegistry->Remove(settingsKey.toStdString().c_str()); + if (m_saveToDisk) + { + Save(); + } + + return success; + } + + bool Settings::Copy(const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig) + { + bool success = false; + AZStd::string settingsValue; + + success = m_settingsRegistry->Get(settingsValue, settingsKeyOrig.toStdString().c_str()); + + if (success) + { + success = m_settingsRegistry->Set(settingsKeyDest.toStdString().c_str(), settingsValue); + if (success) + { + if (removeOrig) + { + success = m_settingsRegistry->Remove(settingsKeyOrig.toStdString().c_str()); + } + if (m_saveToDisk) + { + Save(); + } + } + } + + return success; + } + + QString Settings::GetProjectKey(const ProjectInfo& projectInfo) + { + return QString("%1/Projects/%2/%3").arg(ProjectManagerKeyPrefix, projectInfo.m_id, projectInfo.m_projectName); + } + + bool Settings::GetBuiltSuccessfullyPaths(AZStd::set& result) + { + return m_settingsRegistry->GetObject>(result, ProjectsBuiltSuccessfullyKey); + } + + bool Settings::GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo) + { + AZStd::set builtPathsResult; + bool success = GetBuiltSuccessfullyPaths(builtPathsResult); + + // Check if buildPath is listed as successfully built + AZStd::string projectPath = projectInfo.m_path.toStdString().c_str(); + if (builtPathsResult.contains(projectPath)) + { + result = true; + } + // No project built statuses known + else + { + result = false; + } + + return success; + } + + bool Settings::SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt) + { + AZStd::set builtPathsResult; + bool success = GetBuiltSuccessfullyPaths(builtPathsResult); + + AZStd::string projectPath = projectInfo.m_path.toStdString().c_str(); + if (successfullyBuilt) + { + //Add successfully built path to set + builtPathsResult.insert(projectPath); + } + else + { + // Remove unsuccessfully built path from set + builtPathsResult.erase(projectPath); + } + + success = m_settingsRegistry->SetObject>(ProjectsBuiltSuccessfullyKey, builtPathsResult); + if (m_saveToDisk) + { + Save(); + } + + return success; + } + +} // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/Settings.h b/Code/Tools/ProjectManager/Source/Settings.h new file mode 100644 index 0000000000..f30715dba9 --- /dev/null +++ b/Code/Tools/ProjectManager/Source/Settings.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +#include + +namespace AZ +{ + class SettingsRegistryInterface; +} + +namespace O3DE::ProjectManager +{ + class Settings + : public SettingsInterface::Registrar + { + public: + Settings(bool saveToDisk = true); + + bool IsInitialized() override; + + bool Get(QString& result, const QString& settingsKey) override; + bool Get(bool& result, const QString& settingsKey) override; + bool Set(const QString& settingsKey, const QString& settingsValue) override; + bool Set(const QString& settingsKey, bool settingsValue) override; + bool Remove(const QString& settingsKey) override; + bool Copy(const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig = false) override; + + QString GetProjectKey(const ProjectInfo& projectInfo) override; + + bool GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo) override; + bool SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt) override; + + private: + bool Save(); + + bool GetBuiltSuccessfullyPaths(AZStd::set& result); + + bool m_saveToDisk; + AZ::SettingsRegistryInterface* m_settingsRegistry = nullptr; + }; +} // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/SettingsInterface.h b/Code/Tools/ProjectManager/Source/SettingsInterface.h new file mode 100644 index 0000000000..a106dedefd --- /dev/null +++ b/Code/Tools/ProjectManager/Source/SettingsInterface.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ +#pragma once + +#include + +#include +#include + +namespace O3DE::ProjectManager +{ + //! Interface used to interact with the settings functions + class ISettings + { + public: + AZ_RTTI(O3DE::ProjectManager::ISettings, "{95D87D95-0E04-462F-8B0B-ED15C0A9F090}"); + AZ_DISABLE_COPY_MOVE(ISettings); + + static constexpr char ProjectManagerKeyPrefix[] = "/O3DE/ProjectManager"; + static constexpr char ExternalLinkWarningKey[] = "/O3DE/ProjectManager/SkipExternalLinkWarning"; + static constexpr char ProjectsBuiltSuccessfullyKey[] = "/O3DE/ProjectManager/SkipExternalLinkWarning"; + + ISettings() = default; + virtual ~ISettings() = default; + + /** + * This checks if Settings is in a usable state + * @return true Settings is ready to be used, false otherwise + */ + virtual bool IsInitialized() = 0; + + /** + * Get info about a Gem. + * @param path The absolute path to the Gem + * @param projectPath (Optional) The absolute path to the Gem project + * @return an outcome with GemInfo on success + */ + virtual bool Get(QString& result, const QString& settingsKey) = 0; + virtual bool Get(bool& result, const QString& settingsKey) = 0; + virtual bool Set(const QString& settingsKey, const QString& settingsValue) = 0; + virtual bool Set(const QString& settingsKey, bool settingsValue) = 0; + virtual bool Remove(const QString& settingsKey) = 0; + virtual bool Copy(const QString& settingsKeyOrig, const QString& settingsKeyDest, bool removeOrig = false) = 0; + + virtual QString GetProjectKey(const ProjectInfo& projectInfo) = 0; + + virtual bool GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo) = 0; + virtual bool SetProjectBuiltSuccessfully(const ProjectInfo& projectInfo, bool successfullyBuilt) = 0; + }; + + using SettingsInterface = AZ::Interface; +} // namespace O3DE::ProjectManager diff --git a/Code/Tools/ProjectManager/Source/UpdateProjectCtrl.cpp b/Code/Tools/ProjectManager/Source/UpdateProjectCtrl.cpp index 71dae91a81..0e5f6f3ca5 100644 --- a/Code/Tools/ProjectManager/Source/UpdateProjectCtrl.cpp +++ b/Code/Tools/ProjectManager/Source/UpdateProjectCtrl.cpp @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include #include @@ -307,8 +307,9 @@ namespace O3DE::ProjectManager { // Remove project build successfully paths for both old and new project names // because a full rebuild is required when moving projects - PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, false); - PMSettings::SetProjectBuiltSuccessfully(newProjectSettings, false); + auto settings = SettingsInterface::Get(); + settings->SetProjectBuiltSuccessfully(m_projectInfo, false); + settings->SetProjectBuiltSuccessfully(newProjectSettings, false); } if (!newProjectSettings.m_newPreviewImagePath.isEmpty()) diff --git a/Code/Tools/ProjectManager/project_manager_files.cmake b/Code/Tools/ProjectManager/project_manager_files.cmake index 468e8dcbc5..915b1a072f 100644 --- a/Code/Tools/ProjectManager/project_manager_files.cmake +++ b/Code/Tools/ProjectManager/project_manager_files.cmake @@ -58,8 +58,6 @@ set(FILES Source/CreateProjectCtrl.cpp Source/UpdateProjectCtrl.h Source/UpdateProjectCtrl.cpp - Source/ProjectManagerSettings.h - Source/ProjectManagerSettings.cpp Source/ProjectsScreen.h Source/ProjectsScreen.cpp Source/ProjectSettingsScreen.h @@ -72,6 +70,9 @@ set(FILES Source/ProjectButtonWidget.cpp Source/ScreenHeaderWidget.h Source/ScreenHeaderWidget.cpp + Source/Settings.h + Source/Settings.cpp + Source/SettingsInterface.h Source/LinkWidget.h Source/LinkWidget.cpp Source/TagWidget.h diff --git a/Code/Tools/ProjectManager/project_manager_tests_files.cmake b/Code/Tools/ProjectManager/project_manager_tests_files.cmake index df9a0070a1..012a27d13a 100644 --- a/Code/Tools/ProjectManager/project_manager_tests_files.cmake +++ b/Code/Tools/ProjectManager/project_manager_tests_files.cmake @@ -11,7 +11,7 @@ set(FILES Resources/ProjectManager.qss tests/ApplicationTests.cpp tests/GemCatalogTests.cpp - tests/ProjectManagerSettingsTests.cpp + tests/SettingsTests.cpp tests/PythonBindingsTests.cpp tests/main.cpp tests/UtilsTests.cpp diff --git a/Code/Tools/ProjectManager/tests/ProjectManagerSettingsTests.cpp b/Code/Tools/ProjectManager/tests/SettingsTests.cpp similarity index 57% rename from Code/Tools/ProjectManager/tests/ProjectManagerSettingsTests.cpp rename to Code/Tools/ProjectManager/tests/SettingsTests.cpp index ba0cebd035..6ced8ddc8e 100644 --- a/Code/Tools/ProjectManager/tests/ProjectManagerSettingsTests.cpp +++ b/Code/Tools/ProjectManager/tests/SettingsTests.cpp @@ -13,15 +13,15 @@ #include #include -#include +#include namespace O3DE::ProjectManager { - class ProjectManagerSettingsTests + class SettingsTests : public ::UnitTest::ScopedAllocatorSetupFixture { public: - ~ProjectManagerSettingsTests() override = default; + ~SettingsTests() override = default; void SetUp() override { UnitTest::ScopedAllocatorSetupFixture::SetUp(); @@ -45,11 +45,15 @@ namespace O3DE::ProjectManager m_serializeContext->RegisterGenericType>(); + m_settings = AZStd::make_unique(/*saveToDisk*/ false); + m_projectInfo.m_path = "Z:/ProjectTestPath"; } void TearDown() override { + m_settings.reset(); + m_registrationContext->EnableRemoveReflection(); AZ::JsonSystemComponent::Reflect(m_registrationContext.get()); m_registrationContext->DisableRemoveReflection(); @@ -70,6 +74,7 @@ namespace O3DE::ProjectManager } protected: + AZStd::unique_ptr m_settings; const QString m_settingsPath = "/Testing/TestKey"; const QString m_newSettingsPath = "/Testing/NewTestKey"; ProjectInfo m_projectInfo; @@ -81,105 +86,110 @@ namespace O3DE::ProjectManager AZStd::unique_ptr m_registrationContext; }; - TEST_F(ProjectManagerSettingsTests, PMSettings_GetUnsetPathBool_ReturnsFalse) + TEST_F(SettingsTests, Settings_IsIntialized_Success) + { + EXPECT_TRUE(m_settings->IsInitialized()); + } + + TEST_F(SettingsTests, Settings_GetUnsetPathBool_ReturnsFalse) { bool settingsResult = false; - EXPECT_FALSE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_FALSE(m_settings->Get(settingsResult, m_settingsPath)); EXPECT_FALSE(settingsResult); } - TEST_F(ProjectManagerSettingsTests, PMSettings_SetAndGetValueBool_Success) + TEST_F(SettingsTests, Settings_SetAndGetValueBool_Success) { bool settingsResult = false; - EXPECT_FALSE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_FALSE(m_settings->Get(settingsResult, m_settingsPath)); // Don't save to disk in test - EXPECT_TRUE(PMSettings::SetProjectManagerKey(m_settingsPath, true, /*saveToDisk*/ false)); + EXPECT_TRUE(m_settings->Set(m_settingsPath, true)); settingsResult = false; - EXPECT_TRUE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_TRUE(m_settings->Get(settingsResult, m_settingsPath)); EXPECT_TRUE(settingsResult); } - TEST_F(ProjectManagerSettingsTests, PMSettings_GetUnsetPathString_ReturnsFalse) + TEST_F(SettingsTests, Settings_GetUnsetPathString_ReturnsFalse) { QString settingsResult; - EXPECT_FALSE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_FALSE(m_settings->Get(settingsResult, m_settingsPath)); EXPECT_TRUE(settingsResult.isEmpty()); } - TEST_F(ProjectManagerSettingsTests, PMSettings_SetAndGetValueString_Success) + TEST_F(SettingsTests, Settings_SetAndGetValueString_Success) { QString settingsResult; - EXPECT_FALSE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_FALSE(m_settings->Get(settingsResult, m_settingsPath)); QString settingsValue = "TestValue"; // Don't save to disk in test - EXPECT_TRUE(PMSettings::SetProjectManagerKey(m_settingsPath, settingsValue, /*saveToDisk*/ false)); + EXPECT_TRUE(m_settings->Set(m_settingsPath, settingsValue)); - EXPECT_TRUE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_TRUE(m_settings->Get(settingsResult, m_settingsPath)); EXPECT_TRUE(settingsResult == settingsValue); } - TEST_F(ProjectManagerSettingsTests, PMSettings_CopyStringRemoveOriginal_SuccessAndRemovesOriginal) + TEST_F(SettingsTests, Settings_CopyStringRemoveOriginal_SuccessAndRemovesOriginal) { QString settingsResult; - EXPECT_FALSE(PMSettings::GetProjectManagerKey(settingsResult, m_newSettingsPath)); + EXPECT_FALSE(m_settings->Get(settingsResult, m_newSettingsPath)); QString settingsValue = "TestValue"; // Don't save to disk in test - EXPECT_TRUE(PMSettings::SetProjectManagerKey(m_settingsPath, settingsValue, /*saveToDisk*/ false)); + EXPECT_TRUE(m_settings->Set(m_settingsPath, settingsValue)); - EXPECT_TRUE(PMSettings::CopyProjectManagerKeyString(m_settingsPath, m_newSettingsPath, /*removeOrig*/ true, /*saveToDisk*/ false)); + EXPECT_TRUE(m_settings->Copy(m_settingsPath, m_newSettingsPath, /*removeOrig*/ true)); // Check that old path value is removed - EXPECT_FALSE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_FALSE(m_settings->Get(settingsResult, m_settingsPath)); - EXPECT_TRUE(PMSettings::GetProjectManagerKey(settingsResult, m_newSettingsPath)); + EXPECT_TRUE(m_settings->Get(settingsResult, m_newSettingsPath)); EXPECT_TRUE(settingsResult == settingsValue); } - TEST_F(ProjectManagerSettingsTests, PMSettings_RemoveProjectManagerKey_RemovesKey) + TEST_F(SettingsTests, Settings_RemoveProjectManagerKey_RemovesKey) { QString settingsResult; - EXPECT_FALSE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_FALSE(m_settings->Get(settingsResult, m_settingsPath)); QString settingsValue = "TestValue"; // Don't save to disk in test - EXPECT_TRUE(PMSettings::SetProjectManagerKey(m_settingsPath, settingsValue, /*saveToDisk*/ false)); - EXPECT_TRUE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_TRUE(m_settings->Set(m_settingsPath, settingsValue)); + EXPECT_TRUE(m_settings->Get(settingsResult, m_settingsPath)); - EXPECT_TRUE(PMSettings::RemoveProjectManagerKey(m_settingsPath, /*saveToDisk*/ false)); - EXPECT_FALSE(PMSettings::GetProjectManagerKey(settingsResult, m_settingsPath)); + EXPECT_TRUE(m_settings->Remove(m_settingsPath)); + EXPECT_FALSE(m_settings->Get(settingsResult, m_settingsPath)); } - TEST_F(ProjectManagerSettingsTests, PMSettings_GetUnsetBuildPath_ReturnsFalse) + TEST_F(SettingsTests, Settings_GetUnsetBuildPath_ReturnsFalse) { bool buildResult = true; - EXPECT_FALSE(PMSettings::GetProjectBuiltSuccessfully(buildResult, m_projectInfo)); + EXPECT_FALSE(m_settings->GetProjectBuiltSuccessfully(buildResult, m_projectInfo)); EXPECT_FALSE(buildResult); } - TEST_F(ProjectManagerSettingsTests, PMSettings_SetProjectBuiltSuccessfully_ReturnsTrue) + TEST_F(SettingsTests, Settings_SetProjectBuiltSuccessfully_ReturnsTrue) { // Don't save to disk in test - EXPECT_TRUE(PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, true, /*saveToDisk*/ false)); + EXPECT_TRUE(m_settings->SetProjectBuiltSuccessfully(m_projectInfo, true)); bool buildResult = false; - EXPECT_TRUE(PMSettings::GetProjectBuiltSuccessfully(buildResult, m_projectInfo)); + EXPECT_TRUE(m_settings->GetProjectBuiltSuccessfully(buildResult, m_projectInfo)); EXPECT_TRUE(buildResult); } - TEST_F(ProjectManagerSettingsTests, PMSettings_SetProjectBuiltUnsuccessfully_ReturnsFalse) + TEST_F(SettingsTests, Settings_SetProjectBuiltUnsuccessfully_ReturnsFalse) { // Don't save to disk in test - EXPECT_TRUE(PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, false, /*saveToDisk*/ false)); + EXPECT_TRUE(m_settings->SetProjectBuiltSuccessfully(m_projectInfo, false)); bool buildResult = false; - EXPECT_TRUE(PMSettings::GetProjectBuiltSuccessfully(buildResult, m_projectInfo)); + EXPECT_TRUE(m_settings->GetProjectBuiltSuccessfully(buildResult, m_projectInfo)); EXPECT_FALSE(buildResult); } }