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.
127 lines
3.8 KiB
C++
127 lines
3.8 KiB
C++
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
|
|
#include <FormLineEditWidget.h>
|
|
#include <AzQtComponents/Components/StyledLineEdit.h>
|
|
#include <AzQtComponents/Components/Widgets/LineEdit.h>
|
|
#include <QVBoxLayout>
|
|
#include <QHBoxLayout>
|
|
#include <QLineEdit>
|
|
#include <QLabel>
|
|
#include <QFrame>
|
|
#include <QValidator>
|
|
#include <QStyle>
|
|
|
|
namespace O3DE::ProjectManager
|
|
{
|
|
FormLineEditWidget::FormLineEditWidget(const QString& labelText, const QString& valueText, QWidget* parent)
|
|
: QWidget(parent)
|
|
{
|
|
setObjectName("formLineEditWidget");
|
|
|
|
QVBoxLayout* mainLayout = new QVBoxLayout();
|
|
mainLayout->setAlignment(Qt::AlignTop);
|
|
{
|
|
m_frame = new QFrame(this);
|
|
m_frame->setObjectName("formFrame");
|
|
|
|
// use a horizontal box layout so buttons can be added to the right of the field
|
|
m_frameLayout = new QHBoxLayout();
|
|
{
|
|
QVBoxLayout* fieldLayout = new QVBoxLayout();
|
|
|
|
QLabel* label = new QLabel(labelText, this);
|
|
fieldLayout->addWidget(label);
|
|
|
|
m_lineEdit = new AzQtComponents::StyledLineEdit(this);
|
|
m_lineEdit->setFlavor(AzQtComponents::StyledLineEdit::Question);
|
|
AzQtComponents::LineEdit::setErrorIconEnabled(m_lineEdit, false);
|
|
m_lineEdit->setText(valueText);
|
|
|
|
connect(m_lineEdit, &AzQtComponents::StyledLineEdit::flavorChanged, this, &FormLineEditWidget::flavorChanged);
|
|
connect(m_lineEdit, &AzQtComponents::StyledLineEdit::onFocus, this, &FormLineEditWidget::onFocus);
|
|
connect(m_lineEdit, &AzQtComponents::StyledLineEdit::onFocusOut, this, &FormLineEditWidget::onFocusOut);
|
|
|
|
m_lineEdit->setFrame(false);
|
|
fieldLayout->addWidget(m_lineEdit);
|
|
|
|
m_frameLayout->addLayout(fieldLayout);
|
|
|
|
QWidget* emptyWidget = new QWidget(this);
|
|
m_frameLayout->addWidget(emptyWidget);
|
|
}
|
|
|
|
m_frame->setLayout(m_frameLayout);
|
|
|
|
mainLayout->addWidget(m_frame);
|
|
|
|
m_errorLabel = new QLabel(this);
|
|
m_errorLabel->setObjectName("formErrorLabel");
|
|
m_errorLabel->setVisible(false);
|
|
mainLayout->addWidget(m_errorLabel);
|
|
}
|
|
|
|
setLayout(mainLayout);
|
|
}
|
|
|
|
void FormLineEditWidget::setErrorLabelText(const QString& labelText)
|
|
{
|
|
m_errorLabel->setText(labelText);
|
|
}
|
|
|
|
void FormLineEditWidget::setErrorLabelVisible(bool visible)
|
|
{
|
|
m_errorLabel->setVisible(visible);
|
|
m_frame->setProperty("Valid", !visible);
|
|
|
|
refreshStyle();
|
|
}
|
|
|
|
QLineEdit* FormLineEditWidget::lineEdit() const
|
|
{
|
|
return m_lineEdit;
|
|
}
|
|
|
|
void FormLineEditWidget::flavorChanged()
|
|
{
|
|
if (m_lineEdit->flavor() == AzQtComponents::StyledLineEdit::Flavor::Invalid)
|
|
{
|
|
m_frame->setProperty("Valid", false);
|
|
m_errorLabel->setVisible(true);
|
|
}
|
|
else
|
|
{
|
|
m_frame->setProperty("Valid", true);
|
|
m_errorLabel->setVisible(false);
|
|
}
|
|
refreshStyle();
|
|
}
|
|
|
|
void FormLineEditWidget::onFocus()
|
|
{
|
|
m_frame->setProperty("Focus", true);
|
|
refreshStyle();
|
|
}
|
|
|
|
void FormLineEditWidget::onFocusOut()
|
|
{
|
|
m_frame->setProperty("Focus", false);
|
|
refreshStyle();
|
|
}
|
|
|
|
void FormLineEditWidget::refreshStyle()
|
|
{
|
|
// we must unpolish/polish every child after changing a property
|
|
// or else they won't use the correct stylesheet selector
|
|
for (auto child : findChildren<QWidget*>())
|
|
{
|
|
child->style()->unpolish(child);
|
|
child->style()->polish(child);
|
|
}
|
|
}
|
|
} // namespace O3DE::ProjectManager
|