You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
5.9 KiB
C++
161 lines
5.9 KiB
C++
/*
|
|
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
|
* its licensors.
|
|
*
|
|
* For complete copyright and license terms please see the LICENSE at the root of this
|
|
* distribution (the "License"). All use of this software is governed by the License,
|
|
* or, if provided, by the license below or the license accompanying this file. Do not
|
|
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
*
|
|
*/
|
|
|
|
#include <UpdateProjectSettingsScreen.h>
|
|
#include <ProjectManagerDefs.h>
|
|
#include <FormImageBrowseEditWidget.h>
|
|
#include <FormLineEditWidget.h>
|
|
|
|
#include <QVBoxLayout>
|
|
#include <QLineEdit>
|
|
#include <QDir>
|
|
#include <QLabel>
|
|
#include <QFileInfo>
|
|
|
|
namespace O3DE::ProjectManager
|
|
{
|
|
UpdateProjectSettingsScreen::UpdateProjectSettingsScreen(QWidget* parent)
|
|
: ProjectSettingsScreen(parent)
|
|
, m_userChangedPreview(false)
|
|
{
|
|
m_projectPreview = new FormImageBrowseEditWidget(tr("Project Preview"), "", this);
|
|
m_projectPreview->lineEdit()->setReadOnly(true);
|
|
connect(m_projectPreview->lineEdit(), &QLineEdit::textChanged, this, &ProjectSettingsScreen::Validate);
|
|
connect(m_projectPreview->lineEdit(), &QLineEdit::textChanged, this, &UpdateProjectSettingsScreen::PreviewPathChanged);
|
|
connect(m_projectPath->lineEdit(), &QLineEdit::textChanged, this, &UpdateProjectSettingsScreen::UpdateProjectPreviewPath);
|
|
m_verticalLayout->addWidget(m_projectPreview);
|
|
|
|
QVBoxLayout* previewExtrasLayout = new QVBoxLayout(this);
|
|
previewExtrasLayout->setAlignment(Qt::AlignLeft);
|
|
previewExtrasLayout->setContentsMargins(50, 0, 0, 0);
|
|
|
|
QLabel* projectPreviewLabel = new QLabel(tr("Select an image (PNG). Minimum %1 x %2 pixels.")
|
|
.arg(QString::number(ProjectPreviewImageWidth), QString::number(ProjectPreviewImageHeight)));
|
|
previewExtrasLayout->addWidget(projectPreviewLabel);
|
|
|
|
m_projectPreviewImage = new QLabel(this);
|
|
m_projectPreviewImage->setFixedSize(ProjectPreviewImageWidth, ProjectPreviewImageHeight);
|
|
m_projectPreviewImage->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
|
previewExtrasLayout->addWidget(m_projectPreviewImage);
|
|
|
|
m_verticalLayout->addLayout(previewExtrasLayout);
|
|
}
|
|
|
|
ProjectManagerScreen UpdateProjectSettingsScreen::GetScreenEnum()
|
|
{
|
|
return ProjectManagerScreen::UpdateProjectSettings;
|
|
}
|
|
|
|
ProjectInfo UpdateProjectSettingsScreen::GetProjectInfo()
|
|
{
|
|
m_projectInfo.m_displayName = m_projectName->lineEdit()->text();
|
|
m_projectInfo.m_path = m_projectPath->lineEdit()->text();
|
|
|
|
if (m_userChangedPreview)
|
|
{
|
|
m_projectInfo.m_iconPath = ProjectPreviewImagePath;
|
|
m_projectInfo.m_newPreviewImagePath = m_projectPreview->lineEdit()->text();
|
|
}
|
|
return m_projectInfo;
|
|
}
|
|
|
|
void UpdateProjectSettingsScreen::SetProjectInfo(const ProjectInfo& projectInfo)
|
|
{
|
|
m_projectInfo = projectInfo;
|
|
|
|
m_projectName->lineEdit()->setText(projectInfo.GetProjectDisplayName());
|
|
|
|
m_projectPath->lineEdit()->setText(projectInfo.m_path);
|
|
UpdateProjectPreviewPath();
|
|
}
|
|
|
|
void UpdateProjectSettingsScreen::UpdateProjectPreviewPath()
|
|
{
|
|
if (!m_userChangedPreview)
|
|
{
|
|
m_projectPreview->lineEdit()->setText(QDir(m_projectPath->lineEdit()->text()).filePath(m_projectInfo.m_iconPath));
|
|
// Setting the text sets m_userChangedPreview to true
|
|
// Set it back to false because it should only be true when changed by user
|
|
m_userChangedPreview = false;
|
|
}
|
|
}
|
|
|
|
bool UpdateProjectSettingsScreen::Validate()
|
|
{
|
|
return ProjectSettingsScreen::Validate() && ValidateProjectPreview();
|
|
}
|
|
|
|
void UpdateProjectSettingsScreen::ResetProjectPreviewPath()
|
|
{
|
|
m_userChangedPreview = false;
|
|
UpdateProjectPreviewPath();
|
|
}
|
|
|
|
void UpdateProjectSettingsScreen::PreviewPathChanged()
|
|
{
|
|
m_userChangedPreview = true;
|
|
|
|
// Update with latest image
|
|
m_projectPreviewImage->setPixmap(
|
|
QPixmap(m_projectPreview->lineEdit()->text()).scaled(m_projectPreviewImage->size(), Qt::KeepAspectRatioByExpanding));
|
|
}
|
|
|
|
bool UpdateProjectSettingsScreen::ValidateProjectPath()
|
|
{
|
|
bool projectPathIsValid = true;
|
|
if (m_projectPath->lineEdit()->text().isEmpty())
|
|
{
|
|
projectPathIsValid = false;
|
|
m_projectPath->setErrorLabelText(tr("Please provide a valid location."));
|
|
}
|
|
|
|
m_projectPath->setErrorLabelVisible(!projectPathIsValid);
|
|
return projectPathIsValid;
|
|
}
|
|
|
|
bool UpdateProjectSettingsScreen::ValidateProjectPreview()
|
|
{
|
|
bool projectPreviewIsValid = true;
|
|
|
|
if (m_projectPreview->lineEdit()->text().isEmpty())
|
|
{
|
|
projectPreviewIsValid = false;
|
|
m_projectPreview->setErrorLabelText(tr("Please select a file."));
|
|
}
|
|
else
|
|
{
|
|
if (m_userChangedPreview)
|
|
{
|
|
QFileInfo previewFile(m_projectPreview->lineEdit()->text());
|
|
if (!previewFile.exists() || !previewFile.isFile())
|
|
{
|
|
projectPreviewIsValid = false;
|
|
m_projectPreview->setErrorLabelText(tr("Please select a valid png file."));
|
|
}
|
|
else
|
|
{
|
|
QString fileType = previewFile.completeSuffix().toLower();
|
|
if (fileType != "png")
|
|
{
|
|
projectPreviewIsValid = false;
|
|
m_projectPreview->setErrorLabelText(tr("Please select a png image."));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
m_projectPreview->setErrorLabelVisible(!projectPreviewIsValid);
|
|
return projectPreviewIsValid;
|
|
}
|
|
|
|
} // namespace O3DE::ProjectManager
|