Refactored ProjectManagerSettings, added tests, changed project built successful to be tracked by project path, added project ids, changed project settings path to use project id and name
Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com>
This commit is contained in:
@@ -10,8 +10,6 @@
|
||||
#include <LinkWidget.h>
|
||||
#include <ProjectManagerSettings.h>
|
||||
|
||||
#include <AzCore/Settings/SettingsRegistry.h>
|
||||
|
||||
#include <QDialogButtonBox>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
@@ -87,12 +85,6 @@ namespace O3DE::ProjectManager
|
||||
|
||||
void ExternalLinkDialog::SetSkipDialogSetting(bool state)
|
||||
{
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
QString settingsKey = GetExternalLinkWarningKey();
|
||||
settingsRegistry->Set(settingsKey.toStdString().c_str(), state);
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
PMSettings::SetProjectManagerKey(PMSettings::GetExternalLinkWarningKey(), state);
|
||||
}
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#pragma once
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
#include <AzCore/Math/Uuid.h>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QVector>
|
||||
|
||||
@@ -33,13 +33,7 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
// Check if user request not to be shown external link warning dialog
|
||||
bool skipDialog = false;
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
|
||||
if (settingsRegistry)
|
||||
{
|
||||
QString settingsKey = GetExternalLinkWarningKey();
|
||||
settingsRegistry->Get(skipDialog, settingsKey.toStdString().c_str());
|
||||
}
|
||||
PMSettings::GetProjectManagerKey(skipDialog, PMSettings::GetExternalLinkWarningKey());
|
||||
|
||||
if (!skipDialog)
|
||||
{
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
#include <EngineInfo.h>
|
||||
#include <CreateProjectCtrl.h>
|
||||
#include <TagWidget.h>
|
||||
|
||||
#include <AzCore/Math/Uuid.h>
|
||||
#include <AzQtComponents/Components/FlowLayout.h>
|
||||
|
||||
#include <QVBoxLayout>
|
||||
@@ -41,9 +43,11 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
const QString defaultName = GetDefaultProjectName();
|
||||
const QString defaultPath = QDir::toNativeSeparators(GetDefaultProjectPath() + "/" + defaultName);
|
||||
const QString randomUuid = GenerateNewProjectId();
|
||||
|
||||
m_projectName->lineEdit()->setText(defaultName);
|
||||
m_projectPath->lineEdit()->setText(defaultPath);
|
||||
m_projectId->lineEdit()->setText(randomUuid);
|
||||
|
||||
// if we don't use a QFrame we cannot "contain" the widgets inside and move them around
|
||||
// as a group
|
||||
@@ -173,6 +177,14 @@ namespace O3DE::ProjectManager
|
||||
return QDir::toNativeSeparators(GetDefaultProjectPath() + "/" + projectName);
|
||||
}
|
||||
|
||||
QString NewProjectSettingsScreen::GenerateNewProjectId()
|
||||
{
|
||||
AZStd::string uuid;
|
||||
AZ::Uuid::CreateRandom().ToString(uuid);
|
||||
|
||||
return QString(uuid.c_str());
|
||||
}
|
||||
|
||||
ProjectManagerScreen NewProjectSettingsScreen::GetScreenEnum()
|
||||
{
|
||||
return ProjectManagerScreen::NewProjectSettings;
|
||||
@@ -225,7 +237,7 @@ namespace O3DE::ProjectManager
|
||||
moreGemsLabel->setObjectName("moreGems");
|
||||
templateDetailsLayout->addWidget(moreGemsLabel);
|
||||
|
||||
QLabel* browseCatalogLabel = new QLabel(tr("Browse the Gems Catalog to further customize your project."), this);
|
||||
QLabel* browseCatalogLabel = new QLabel(tr("Browse the Gems Catalog to further customize your project."), this);
|
||||
browseCatalogLabel->setObjectName("browseCatalog");
|
||||
browseCatalogLabel->setWordWrap(true);
|
||||
templateDetailsLayout->addWidget(browseCatalogLabel);
|
||||
|
||||
@@ -47,6 +47,7 @@ namespace O3DE::ProjectManager
|
||||
private:
|
||||
QString GetDefaultProjectName();
|
||||
QString GetDefaultProjectPath();
|
||||
QString GenerateNewProjectId();
|
||||
QString GetProjectAutoPath();
|
||||
QFrame* CreateTemplateDetails(int margin);
|
||||
void UpdateTemplateDetails(const ProjectTemplateInfo& templateInfo);
|
||||
|
||||
@@ -29,14 +29,8 @@ namespace O3DE::ProjectManager
|
||||
m_worker = new ProjectBuilderWorker(m_projectInfo);
|
||||
m_worker->moveToThread(&m_workerThread);
|
||||
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
// Remove key here in case Project Manager crashing while building that causes HandleResults to not be called
|
||||
QString settingsKey = GetProjectBuiltSuccessfullyKey(m_projectInfo.m_projectName);
|
||||
settingsRegistry->Remove(settingsKey.toStdString().c_str());
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
// Remove key here in case Project Manager crashing while building that causes HandleResults to not be called
|
||||
PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, false);
|
||||
|
||||
connect(&m_workerThread, &QThread::finished, m_worker, &ProjectBuilderWorker::deleteLater);
|
||||
connect(&m_workerThread, &QThread::started, m_worker, &ProjectBuilderWorker::BuildProject);
|
||||
@@ -91,8 +85,6 @@ namespace O3DE::ProjectManager
|
||||
|
||||
void ProjectBuilderController::HandleResults(const QString& result)
|
||||
{
|
||||
QString settingsKey = GetProjectBuiltSuccessfullyKey(m_projectInfo.m_projectName);
|
||||
|
||||
if (!result.isEmpty())
|
||||
{
|
||||
if (result.contains(tr("log")))
|
||||
@@ -122,12 +114,7 @@ namespace O3DE::ProjectManager
|
||||
emit NotifyBuildProject(m_projectInfo);
|
||||
}
|
||||
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
settingsRegistry->Remove(settingsKey.toStdString().c_str());
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, false);
|
||||
|
||||
emit Done(false);
|
||||
return;
|
||||
@@ -136,12 +123,7 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
m_projectInfo.m_buildFailed = false;
|
||||
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
settingsRegistry->Set(settingsKey.toStdString().c_str(), true);
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
PMSettings::SetProjectBuiltSuccessfully(m_projectInfo, true);
|
||||
}
|
||||
|
||||
emit Done(true);
|
||||
|
||||
@@ -9,14 +9,13 @@
|
||||
#include <ProjectInfo.h>
|
||||
#include <ProjectManagerDefs.h>
|
||||
|
||||
#include <QDir>
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
ProjectInfo::ProjectInfo(
|
||||
const QString& path,
|
||||
const QString& projectName,
|
||||
const QString& displayName,
|
||||
const QString& id,
|
||||
const QString& origin,
|
||||
const QString& summary,
|
||||
const QString& iconPath,
|
||||
@@ -26,6 +25,7 @@ namespace O3DE::ProjectManager
|
||||
: m_path(path)
|
||||
, m_projectName(projectName)
|
||||
, m_displayName(displayName)
|
||||
, m_id(id)
|
||||
, m_origin(origin)
|
||||
, m_summary(summary)
|
||||
, m_iconPath(iconPath)
|
||||
@@ -49,6 +49,10 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (m_id != rhs.m_id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (m_origin != rhs.m_origin)
|
||||
{
|
||||
return false;
|
||||
@@ -80,7 +84,7 @@ namespace O3DE::ProjectManager
|
||||
|
||||
bool ProjectInfo::IsValid() const
|
||||
{
|
||||
return !m_path.isEmpty() && !m_projectName.isEmpty();
|
||||
return !m_path.isEmpty() && !m_projectName.isEmpty() && !m_id.isEmpty();
|
||||
}
|
||||
|
||||
const QString& ProjectInfo::GetProjectDisplayName() const
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#pragma once
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
#include <AzCore/Math/Uuid.h>
|
||||
#include <QUrl>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
@@ -26,6 +25,7 @@ namespace O3DE::ProjectManager
|
||||
const QString& path,
|
||||
const QString& projectName,
|
||||
const QString& displayName,
|
||||
const QString& id,
|
||||
const QString& origin,
|
||||
const QString& summary,
|
||||
const QString& iconPath,
|
||||
@@ -45,6 +45,7 @@ namespace O3DE::ProjectManager
|
||||
// From project.json
|
||||
QString m_projectName;
|
||||
QString m_displayName;
|
||||
QString m_id;
|
||||
QString m_origin;
|
||||
QString m_summary;
|
||||
QString m_iconPath;
|
||||
|
||||
@@ -14,46 +14,235 @@
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
void SaveProjectManagerSettings()
|
||||
namespace PMSettings
|
||||
{
|
||||
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))
|
||||
bool SaveProjectManagerSettings()
|
||||
{
|
||||
AZ_Warning("ProjectManager", false, "Could not save Project Manager settings to stream");
|
||||
return;
|
||||
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;
|
||||
}
|
||||
|
||||
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))
|
||||
bool GetProjectManagerKey(QString& result, const QString& settingsKey)
|
||||
{
|
||||
saved = outputFile.Write(stringBuffer.data(), stringBuffer.size()) == stringBuffer.size();
|
||||
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;
|
||||
}
|
||||
|
||||
AZ_Warning("ProjectManager", saved, "Unable to save Project Manager registry file to path: %s", o3deUserPath.c_str());
|
||||
}
|
||||
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());
|
||||
}
|
||||
|
||||
QString GetProjectBuiltSuccessfullyKey(const QString& projectName)
|
||||
{
|
||||
return QString("%1/Projects/%2/BuiltSuccessfully").arg(ProjectManagerKeyPrefix).arg(projectName);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
QString GetExternalLinkWarningKey()
|
||||
{
|
||||
return QString("%1/SkipExternalLinkWarning").arg(ProjectManagerKeyPrefix);
|
||||
}
|
||||
}
|
||||
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<AZStd::string>& result)
|
||||
{
|
||||
bool success = false;
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
if (settingsRegistry)
|
||||
{
|
||||
QString builtKey = GetProjectsBuiltSuccessfullyKey();
|
||||
success = settingsRegistry->GetObject<AZStd::set<AZStd::string>>(result, builtKey.toStdString().c_str());
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
bool GetProjectBuiltSuccessfully(bool& result, const ProjectInfo& projectInfo)
|
||||
{
|
||||
AZStd::set<AZStd::string> 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<AZStd::string> 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<AZStd::set<AZStd::string>>(builtKey.toStdString().c_str(), builtPathsResult);
|
||||
|
||||
if (saveToDisk)
|
||||
{
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
} // namespace PMSettings
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -9,14 +9,29 @@
|
||||
#pragma once
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <ProjectInfo.h>
|
||||
#endif
|
||||
|
||||
namespace O3DE::ProjectManager
|
||||
{
|
||||
static constexpr char ProjectManagerKeyPrefix[] = "/O3DE/ProjectManager";
|
||||
namespace PMSettings
|
||||
{
|
||||
static constexpr char ProjectManagerKeyPrefix[] = "/O3DE/ProjectManager";
|
||||
|
||||
void SaveProjectManagerSettings();
|
||||
QString GetProjectBuiltSuccessfullyKey(const QString& projectName);
|
||||
QString GetExternalLinkWarningKey();
|
||||
}
|
||||
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
|
||||
|
||||
@@ -60,6 +60,10 @@ namespace O3DE::ProjectManager
|
||||
connect(m_projectPath->lineEdit(), &QLineEdit::textChanged, this, &ProjectSettingsScreen::OnProjectPathUpdated);
|
||||
m_verticalLayout->addWidget(m_projectPath);
|
||||
|
||||
m_projectId = new FormLineEditWidget(tr("Project ID"), "", this);
|
||||
connect(m_projectId->lineEdit(), &QLineEdit::textChanged, this, &ProjectSettingsScreen::OnProjectIdUpdated);
|
||||
m_verticalLayout->addWidget(m_projectId);
|
||||
|
||||
projectSettingsFrame->setLayout(m_verticalLayout);
|
||||
|
||||
m_horizontalLayout->addWidget(projectSettingsFrame);
|
||||
@@ -94,6 +98,7 @@ namespace O3DE::ProjectManager
|
||||
// currently we don't have separate fields for changing the project name and display name
|
||||
projectInfo.m_displayName = projectInfo.m_projectName;
|
||||
projectInfo.m_path = m_projectPath->lineEdit()->text();
|
||||
projectInfo.m_id = m_projectId->lineEdit()->text();
|
||||
return projectInfo;
|
||||
}
|
||||
|
||||
@@ -142,6 +147,19 @@ namespace O3DE::ProjectManager
|
||||
return projectPathIsValid;
|
||||
}
|
||||
|
||||
bool ProjectSettingsScreen::ValidateProjectId()
|
||||
{
|
||||
bool projectIdIsValid = true;
|
||||
if (m_projectId->lineEdit()->text().isEmpty())
|
||||
{
|
||||
projectIdIsValid = false;
|
||||
m_projectId->setErrorLabelText(tr("Project ID cannot be empty."));
|
||||
}
|
||||
|
||||
m_projectId->setErrorLabelVisible(!projectIdIsValid);
|
||||
return projectIdIsValid;
|
||||
}
|
||||
|
||||
void ProjectSettingsScreen::OnProjectNameUpdated()
|
||||
{
|
||||
ValidateProjectName();
|
||||
@@ -149,11 +167,16 @@ namespace O3DE::ProjectManager
|
||||
|
||||
void ProjectSettingsScreen::OnProjectPathUpdated()
|
||||
{
|
||||
Validate();
|
||||
ValidateProjectName() && ValidateProjectPath();
|
||||
}
|
||||
|
||||
void ProjectSettingsScreen::OnProjectIdUpdated()
|
||||
{
|
||||
ValidateProjectId();
|
||||
}
|
||||
|
||||
bool ProjectSettingsScreen::Validate()
|
||||
{
|
||||
return ValidateProjectName() && ValidateProjectPath();
|
||||
return ValidateProjectName() && ValidateProjectPath() && ValidateProjectId();
|
||||
}
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -35,10 +35,12 @@ namespace O3DE::ProjectManager
|
||||
protected slots:
|
||||
virtual void OnProjectNameUpdated();
|
||||
virtual void OnProjectPathUpdated();
|
||||
virtual void OnProjectIdUpdated();
|
||||
|
||||
protected:
|
||||
bool ValidateProjectName();
|
||||
virtual bool ValidateProjectPath();
|
||||
bool ValidateProjectId();
|
||||
|
||||
QString GetDefaultProjectPath();
|
||||
|
||||
@@ -46,6 +48,7 @@ namespace O3DE::ProjectManager
|
||||
QVBoxLayout* m_verticalLayout;
|
||||
FormLineEditWidget* m_projectName;
|
||||
FormBrowseEditWidget* m_projectPath;
|
||||
FormLineEditWidget* m_projectId;
|
||||
};
|
||||
|
||||
} // namespace O3DE::ProjectManager
|
||||
|
||||
@@ -291,13 +291,9 @@ namespace O3DE::ProjectManager
|
||||
// Check whether project manager has successfully built the project
|
||||
if (currentButton)
|
||||
{
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
bool projectBuiltSuccessfully = false;
|
||||
if (settingsRegistry)
|
||||
{
|
||||
QString settingsKey = GetProjectBuiltSuccessfullyKey(project.m_projectName);
|
||||
settingsRegistry->Get(projectBuiltSuccessfully, settingsKey.toStdString().c_str());
|
||||
}
|
||||
PMSettings::GetProjectBuiltSuccessfully(projectBuiltSuccessfully, project);
|
||||
|
||||
if (!projectBuiltSuccessfully)
|
||||
{
|
||||
currentButton->ShowBuildRequired();
|
||||
|
||||
@@ -687,8 +687,24 @@ namespace O3DE::ProjectManager
|
||||
|
||||
auto createProjectResult = m_engineTemplate.attr("create_project")(
|
||||
projectPath,
|
||||
QString_To_Py_String(projectInfo.m_projectName),
|
||||
QString_To_Py_Path(projectTemplatePath)
|
||||
QString_To_Py_String(projectInfo.m_projectName), // project_path
|
||||
QString_To_Py_Path(projectTemplatePath), // template_path
|
||||
pybind11::none(), // template_name
|
||||
pybind11::none(), // project_restricted_path
|
||||
pybind11::none(), // project_restricted_name
|
||||
pybind11::none(), // template_restricted_path
|
||||
pybind11::none(), // template_restricted_name
|
||||
pybind11::none(), // project_restricted_platform_relative_path
|
||||
pybind11::none(), // template_restricted_platform_relative_path
|
||||
pybind11::none(), // keep_restricted_in_project
|
||||
pybind11::none(), // keep_license_text
|
||||
pybind11::none(), // replace
|
||||
pybind11::none(), // force
|
||||
pybind11::none(), // no_register
|
||||
pybind11::none(), // system_component_class_id
|
||||
pybind11::none(), // editor_system_component_class_id
|
||||
pybind11::none(), // module_id
|
||||
QString_To_Py_String(projectInfo.m_id) // project_id
|
||||
);
|
||||
if (createProjectResult.cast<int>() == 0)
|
||||
{
|
||||
@@ -822,6 +838,7 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
projectInfo.m_projectName = Py_To_String(projectData["project_name"]);
|
||||
projectInfo.m_displayName = Py_To_String_Optional(projectData, "display_name", projectInfo.m_projectName);
|
||||
projectInfo.m_id = Py_To_String_Optional(projectData, "project_id", projectInfo.m_id);
|
||||
projectInfo.m_origin = Py_To_String_Optional(projectData, "origin", projectInfo.m_origin);
|
||||
projectInfo.m_summary = Py_To_String_Optional(projectData, "summary", projectInfo.m_summary);
|
||||
projectInfo.m_iconPath = Py_To_String_Optional(projectData, "icon", ProjectPreviewImagePath);
|
||||
@@ -926,6 +943,7 @@ namespace O3DE::ProjectManager
|
||||
QString_To_Py_Path(projectInfo.m_path),
|
||||
pybind11::none(), // proj_name not used
|
||||
QString_To_Py_String(projectInfo.m_projectName),
|
||||
QString_To_Py_String(projectInfo.m_id),
|
||||
QString_To_Py_String(projectInfo.m_origin),
|
||||
QString_To_Py_String(projectInfo.m_displayName),
|
||||
QString_To_Py_String(projectInfo.m_summary),
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <ProjectUtils.h>
|
||||
#include <DownloadController.h>
|
||||
#include <ProjectManagerSettings.h>
|
||||
#include <AzCore/Settings/SettingsRegistry.h>
|
||||
|
||||
#include <QDialogButtonBox>
|
||||
#include <QMessageBox>
|
||||
@@ -306,17 +305,10 @@ namespace O3DE::ProjectManager
|
||||
|
||||
if (newProjectSettings.m_projectName != m_projectInfo.m_projectName)
|
||||
{
|
||||
// update reg key
|
||||
QString oldSettingsKey = GetProjectBuiltSuccessfullyKey(m_projectInfo.m_projectName);
|
||||
QString newSettingsKey = GetProjectBuiltSuccessfullyKey(newProjectSettings.m_projectName);
|
||||
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
bool projectBuiltSuccessfully = false;
|
||||
if (settingsRegistry && settingsRegistry->Get(projectBuiltSuccessfully, oldSettingsKey.toStdString().c_str()))
|
||||
{
|
||||
settingsRegistry->Set(newSettingsKey.toStdString().c_str(), projectBuiltSuccessfully);
|
||||
SaveProjectManagerSettings();
|
||||
}
|
||||
// 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);
|
||||
}
|
||||
|
||||
if (!newProjectSettings.m_newPreviewImagePath.isEmpty())
|
||||
|
||||
@@ -56,6 +56,7 @@ namespace O3DE::ProjectManager
|
||||
{
|
||||
m_projectInfo.m_displayName = m_projectName->lineEdit()->text();
|
||||
m_projectInfo.m_path = m_projectPath->lineEdit()->text();
|
||||
m_projectInfo.m_id = m_projectId->lineEdit()->text();
|
||||
|
||||
if (m_userChangedPreview)
|
||||
{
|
||||
@@ -70,8 +71,9 @@ namespace O3DE::ProjectManager
|
||||
m_projectInfo = projectInfo;
|
||||
|
||||
m_projectName->lineEdit()->setText(projectInfo.GetProjectDisplayName());
|
||||
|
||||
m_projectPath->lineEdit()->setText(projectInfo.m_path);
|
||||
m_projectId->lineEdit()->setText(projectInfo.m_id);
|
||||
|
||||
UpdateProjectPreviewPath();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user