forked from qt-creator/qt-creator
Utils: inline projectintropage.ui
Change-Id: I10f1b76b8bc88c56dfe6d215345d9b92a6832074 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -24,13 +24,23 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "projectintropage.h"
|
||||
#include "ui_projectintropage.h"
|
||||
|
||||
#include "fancylineedit.h"
|
||||
#include "filenamevalidatinglineedit.h"
|
||||
#include "fileutils.h"
|
||||
#include "infolabel.h"
|
||||
#include "layoutbuilder.h"
|
||||
#include "pathchooser.h"
|
||||
#include "wizard.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QCheckBox>
|
||||
#include <QComboBox>
|
||||
#include <QDir>
|
||||
#include <QFormLayout>
|
||||
#include <QFrame>
|
||||
#include <QLabel>
|
||||
#include <QSpacerItem>
|
||||
|
||||
/*!
|
||||
\class Utils::ProjectIntroPage
|
||||
@@ -59,50 +69,93 @@ namespace Utils {
|
||||
class ProjectIntroPagePrivate
|
||||
{
|
||||
public:
|
||||
Ui::ProjectIntroPage m_ui;
|
||||
bool m_complete = false;
|
||||
QRegularExpressionValidator m_projectNameValidator;
|
||||
QString m_projectNameValidatorUserMessage;
|
||||
bool m_forceSubProject = false;
|
||||
FilePaths m_projectDirectories;
|
||||
|
||||
QLabel *m_descriptionLabel;
|
||||
FancyLineEdit *m_nameLineEdit;
|
||||
PathChooser *m_pathChooser;
|
||||
QCheckBox *m_projectsDirectoryCheckBox;
|
||||
QLabel *m_projectLabel;
|
||||
QComboBox *m_projectComboBox;
|
||||
InfoLabel *m_stateLabel;
|
||||
};
|
||||
|
||||
ProjectIntroPage::ProjectIntroPage(QWidget *parent) :
|
||||
WizardPage(parent),
|
||||
d(new ProjectIntroPagePrivate)
|
||||
{
|
||||
d->m_ui.setupUi(this);
|
||||
d->m_ui.stateLabel->setFilled(true);
|
||||
resize(355, 289);
|
||||
setTitle(tr("Introduction and Project Location"));
|
||||
|
||||
d->m_descriptionLabel = new QLabel(this);
|
||||
d->m_descriptionLabel->setWordWrap(true);
|
||||
|
||||
auto frame = new QFrame(this);
|
||||
frame->setFrameShape(QFrame::StyledPanel);
|
||||
frame->setFrameShadow(QFrame::Raised);
|
||||
|
||||
d->m_nameLineEdit = new Utils::FancyLineEdit(frame);
|
||||
|
||||
d->m_pathChooser = new Utils::PathChooser(frame);
|
||||
d->m_pathChooser->setDisabled(d->m_forceSubProject);
|
||||
|
||||
d->m_projectsDirectoryCheckBox = new QCheckBox(tr("Use as default project location"));
|
||||
d->m_projectsDirectoryCheckBox->setDisabled(d->m_forceSubProject);
|
||||
|
||||
d->m_projectComboBox = new QComboBox;
|
||||
d->m_projectComboBox->setVisible(d->m_forceSubProject);
|
||||
|
||||
d->m_stateLabel = new Utils::InfoLabel(this);
|
||||
d->m_stateLabel->setWordWrap(true);
|
||||
d->m_stateLabel->setFilled(true);
|
||||
hideStatusLabel();
|
||||
d->m_ui.nameLineEdit->setPlaceholderText(tr("Enter project name"));
|
||||
d->m_ui.nameLineEdit->setFocus();
|
||||
d->m_ui.nameLineEdit->setValidationFunction([this](FancyLineEdit *edit, QString *errorString) {
|
||||
|
||||
d->m_nameLineEdit->setPlaceholderText(tr("Enter project name"));
|
||||
d->m_nameLineEdit->setFocus();
|
||||
d->m_nameLineEdit->setValidationFunction([this](FancyLineEdit *edit, QString *errorString) {
|
||||
return validateProjectName(edit->text(), errorString);
|
||||
});
|
||||
d->m_ui.projectLabel->setVisible(d->m_forceSubProject);
|
||||
d->m_ui.projectComboBox->setVisible(d->m_forceSubProject);
|
||||
d->m_ui.pathChooser->setDisabled(d->m_forceSubProject);
|
||||
d->m_ui.projectsDirectoryCheckBox->setDisabled(d->m_forceSubProject);
|
||||
connect(d->m_ui.pathChooser, &PathChooser::filePathChanged, this, &ProjectIntroPage::slotChanged);
|
||||
connect(d->m_ui.nameLineEdit, &QLineEdit::textChanged,
|
||||
|
||||
d->m_projectLabel = new QLabel("Project:");
|
||||
d->m_projectLabel->setVisible(d->m_forceSubProject);
|
||||
|
||||
using namespace Layouting;
|
||||
const Break br;
|
||||
|
||||
Form {
|
||||
tr("Name:"), d->m_nameLineEdit, br,
|
||||
d->m_projectLabel, d->m_projectComboBox, br,
|
||||
Column { Space(12) }, br,
|
||||
tr("Create in:"), d->m_pathChooser, br,
|
||||
Span(2, d->m_projectsDirectoryCheckBox)
|
||||
}.attachTo(frame);
|
||||
|
||||
Column {
|
||||
d->m_descriptionLabel,
|
||||
Stretch(),
|
||||
frame,
|
||||
d->m_stateLabel
|
||||
}.attachTo(this);
|
||||
|
||||
connect(d->m_pathChooser, &PathChooser::filePathChanged, this, &ProjectIntroPage::slotChanged);
|
||||
connect(d->m_nameLineEdit, &QLineEdit::textChanged,
|
||||
this, &ProjectIntroPage::slotChanged);
|
||||
connect(d->m_ui.pathChooser, &PathChooser::validChanged,
|
||||
connect(d->m_pathChooser, &PathChooser::validChanged,
|
||||
this, &ProjectIntroPage::slotChanged);
|
||||
connect(d->m_ui.pathChooser, &PathChooser::returnPressed,
|
||||
connect(d->m_pathChooser, &PathChooser::returnPressed,
|
||||
this, &ProjectIntroPage::slotActivated);
|
||||
connect(d->m_ui.nameLineEdit, &FancyLineEdit::validReturnPressed,
|
||||
connect(d->m_nameLineEdit, &FancyLineEdit::validReturnPressed,
|
||||
this, &ProjectIntroPage::slotActivated);
|
||||
connect(d->m_ui.projectComboBox, &QComboBox::currentIndexChanged,
|
||||
connect(d->m_projectComboBox, &QComboBox::currentIndexChanged,
|
||||
this, &ProjectIntroPage::slotChanged);
|
||||
|
||||
setProperty(SHORT_TITLE_PROPERTY, tr("Location"));
|
||||
registerFieldWithName(QLatin1String("Path"), d->m_ui.pathChooser, "path", SIGNAL(pathChanged(QString)));
|
||||
registerFieldWithName(QLatin1String("ProjectName"), d->m_ui.nameLineEdit);
|
||||
}
|
||||
|
||||
void ProjectIntroPage::insertControl(int row, QWidget *label, QWidget *control)
|
||||
{
|
||||
d->m_ui.formLayout->insertRow(row, label, control);
|
||||
registerFieldWithName(QLatin1String("Path"), d->m_pathChooser, "path", SIGNAL(pathChanged(QString)));
|
||||
registerFieldWithName(QLatin1String("ProjectName"), d->m_nameLineEdit);
|
||||
}
|
||||
|
||||
ProjectIntroPage::~ProjectIntroPage()
|
||||
@@ -112,17 +165,17 @@ ProjectIntroPage::~ProjectIntroPage()
|
||||
|
||||
QString ProjectIntroPage::projectName() const
|
||||
{
|
||||
return d->m_ui.nameLineEdit->text();
|
||||
return d->m_nameLineEdit->text();
|
||||
}
|
||||
|
||||
FilePath ProjectIntroPage::filePath() const
|
||||
{
|
||||
return d->m_ui.pathChooser->filePath();
|
||||
return d->m_pathChooser->filePath();
|
||||
}
|
||||
|
||||
void ProjectIntroPage::setFilePath(const FilePath &path)
|
||||
{
|
||||
d->m_ui.pathChooser->setFilePath(path);
|
||||
d->m_pathChooser->setFilePath(path);
|
||||
}
|
||||
|
||||
void ProjectIntroPage::setProjectNameRegularExpression(const QRegularExpression ®Ex, const QString &userErrorMessage)
|
||||
@@ -134,18 +187,18 @@ void ProjectIntroPage::setProjectNameRegularExpression(const QRegularExpression
|
||||
|
||||
void ProjectIntroPage::setProjectName(const QString &name)
|
||||
{
|
||||
d->m_ui.nameLineEdit->setText(name);
|
||||
d->m_ui.nameLineEdit->selectAll();
|
||||
d->m_nameLineEdit->setText(name);
|
||||
d->m_nameLineEdit->selectAll();
|
||||
}
|
||||
|
||||
QString ProjectIntroPage::description() const
|
||||
{
|
||||
return d->m_ui.descriptionLabel->text();
|
||||
return d->m_descriptionLabel->text();
|
||||
}
|
||||
|
||||
void ProjectIntroPage::setDescription(const QString &description)
|
||||
{
|
||||
d->m_ui.descriptionLabel->setText(description);
|
||||
d->m_descriptionLabel->setText(description);
|
||||
}
|
||||
|
||||
bool ProjectIntroPage::isComplete() const
|
||||
@@ -156,21 +209,21 @@ bool ProjectIntroPage::isComplete() const
|
||||
bool ProjectIntroPage::validate()
|
||||
{
|
||||
if (d->m_forceSubProject) {
|
||||
int index = d->m_ui.projectComboBox->currentIndex();
|
||||
int index = d->m_projectComboBox->currentIndex();
|
||||
if (index == 0)
|
||||
return false;
|
||||
d->m_ui.pathChooser->setFilePath(d->m_projectDirectories.at(index));
|
||||
d->m_pathChooser->setFilePath(d->m_projectDirectories.at(index));
|
||||
}
|
||||
// Validate and display status
|
||||
if (!d->m_ui.pathChooser->isValid()) {
|
||||
displayStatusMessage(InfoLabel::Error, d->m_ui.pathChooser->errorMessage());
|
||||
if (!d->m_pathChooser->isValid()) {
|
||||
displayStatusMessage(InfoLabel::Error, d->m_pathChooser->errorMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Name valid?
|
||||
switch (d->m_ui.nameLineEdit->state()) {
|
||||
switch (d->m_nameLineEdit->state()) {
|
||||
case FancyLineEdit::Invalid:
|
||||
displayStatusMessage(InfoLabel::Error, d->m_ui.nameLineEdit->errorMessage());
|
||||
displayStatusMessage(InfoLabel::Error, d->m_nameLineEdit->errorMessage());
|
||||
return false;
|
||||
case FancyLineEdit::DisplayingPlaceholderText:
|
||||
displayStatusMessage(InfoLabel::Error, tr("Name is empty."));
|
||||
@@ -181,7 +234,7 @@ bool ProjectIntroPage::validate()
|
||||
|
||||
// Check existence of the directory
|
||||
const FilePath projectDir =
|
||||
filePath().pathAppended(QDir::fromNativeSeparators(d->m_ui.nameLineEdit->text()));
|
||||
filePath().pathAppended(QDir::fromNativeSeparators(d->m_nameLineEdit->text()));
|
||||
|
||||
if (!projectDir.exists()) { // All happy
|
||||
hideStatusLabel();
|
||||
@@ -225,16 +278,16 @@ bool ProjectIntroPage::forceSubProject() const
|
||||
void ProjectIntroPage::setForceSubProject(bool force)
|
||||
{
|
||||
d->m_forceSubProject = force;
|
||||
d->m_ui.projectLabel->setVisible(d->m_forceSubProject);
|
||||
d->m_ui.projectComboBox->setVisible(d->m_forceSubProject);
|
||||
d->m_ui.pathChooser->setDisabled(d->m_forceSubProject);
|
||||
d->m_ui.projectsDirectoryCheckBox->setDisabled(d->m_forceSubProject);
|
||||
d->m_projectLabel->setVisible(d->m_forceSubProject);
|
||||
d->m_projectComboBox->setVisible(d->m_forceSubProject);
|
||||
d->m_pathChooser->setDisabled(d->m_forceSubProject);
|
||||
d->m_projectsDirectoryCheckBox->setDisabled(d->m_forceSubProject);
|
||||
}
|
||||
|
||||
void ProjectIntroPage::setProjectList(const QStringList &projectList)
|
||||
{
|
||||
d->m_ui.projectComboBox->clear();
|
||||
d->m_ui.projectComboBox->addItems(projectList);
|
||||
d->m_projectComboBox->clear();
|
||||
d->m_projectComboBox->addItems(projectList);
|
||||
}
|
||||
|
||||
void ProjectIntroPage::setProjectDirectories(const FilePaths &directoryList)
|
||||
@@ -244,7 +297,7 @@ void ProjectIntroPage::setProjectDirectories(const FilePaths &directoryList)
|
||||
|
||||
int ProjectIntroPage::projectIndex() const
|
||||
{
|
||||
return d->m_ui.projectComboBox->currentIndex();
|
||||
return d->m_projectComboBox->currentIndex();
|
||||
}
|
||||
|
||||
bool ProjectIntroPage::validateProjectName(const QString &name, QString *errorMessage)
|
||||
@@ -293,8 +346,8 @@ bool ProjectIntroPage::validateProjectName(const QString &name, QString *errorMe
|
||||
|
||||
void ProjectIntroPage::displayStatusMessage(InfoLabel::InfoType t, const QString &s)
|
||||
{
|
||||
d->m_ui.stateLabel->setType(t);
|
||||
d->m_ui.stateLabel->setText(s);
|
||||
d->m_stateLabel->setType(t);
|
||||
d->m_stateLabel->setText(s);
|
||||
|
||||
emit statusMessageChanged(t, s);
|
||||
}
|
||||
@@ -306,12 +359,12 @@ void ProjectIntroPage::hideStatusLabel()
|
||||
|
||||
bool ProjectIntroPage::useAsDefaultPath() const
|
||||
{
|
||||
return d->m_ui.projectsDirectoryCheckBox->isChecked();
|
||||
return d->m_projectsDirectoryCheckBox->isChecked();
|
||||
}
|
||||
|
||||
void ProjectIntroPage::setUseAsDefaultPath(bool u)
|
||||
{
|
||||
d->m_ui.projectsDirectoryCheckBox->setChecked(u);
|
||||
d->m_projectsDirectoryCheckBox->setChecked(u);
|
||||
}
|
||||
|
||||
} // namespace Utils
|
||||
|
||||
Reference in New Issue
Block a user