Qbs: Inline qbsbuildstepwidget.ui

In preparation of aspectification.

Change-Id: I9461045db9f997d7ce74cf0c99e0a9159a682e1c
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-06-27 12:10:04 +02:00
parent 1a416840a1
commit 725ed099b7
5 changed files with 162 additions and 378 deletions

View File

@@ -31,8 +31,6 @@
#include "qbsprojectmanagerconstants.h"
#include "qbsprojectmanagersettings.h"
#include "ui_qbsbuildstepconfigwidget.h"
#include <coreplugin/icore.h>
#include <coreplugin/variablechooser.h>
#include <projectexplorer/buildsteplist.h>
@@ -41,24 +39,36 @@
#include <projectexplorer/target.h>
#include <qtsupport/qtversionmanager.h>
#include <utils/macroexpander.h>
#include <utils/pathchooser.h>
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <utils/utilsicons.h>
#include <qbs.h>
#include <QBoxLayout>
#include <QCheckBox>
#include <QComboBox>
#include <QFormLayout>
#include <QLabel>
#include <QPlainTextEdit>
#include <QSpinBox>
static const char QBS_CONFIG[] = "Qbs.Configuration";
static const char QBS_DRY_RUN[] = "Qbs.DryRun";
static const char QBS_KEEP_GOING[] = "Qbs.DryKeepGoing";
static const char QBS_MAXJOBCOUNT[] = "Qbs.MaxJobs";
static const char QBS_SHOWCOMMANDLINES[] = "Qbs.ShowCommandLines";
static const char QBS_INSTALL[] = "Qbs.Install";
static const char QBS_CLEAN_INSTALL_ROOT[] = "Qbs.CleanInstallRoot";
#include <qbs.h>
// --------------------------------------------------------------------
// Constants:
// --------------------------------------------------------------------
const char QBS_CONFIG[] = "Qbs.Configuration";
const char QBS_DRY_RUN[] = "Qbs.DryRun";
const char QBS_KEEP_GOING[] = "Qbs.DryKeepGoing";
const char QBS_MAXJOBCOUNT[] = "Qbs.MaxJobs";
const char QBS_SHOWCOMMANDLINES[] = "Qbs.ShowCommandLines";
const char QBS_INSTALL[] = "Qbs.Install";
const char QBS_CLEAN_INSTALL_ROOT[] = "Qbs.CleanInstallRoot";
using namespace ProjectExplorer;
using namespace Utils;
namespace QbsProjectManager {
namespace Internal {
@@ -67,7 +77,6 @@ class QbsBuildStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
Q_OBJECT
public:
QbsBuildStepConfigWidget(QbsBuildStep *step);
~QbsBuildStepConfigWidget() override;
private:
void updateState();
@@ -92,8 +101,6 @@ private:
bool validateProperties(Utils::FancyLineEdit *edit, QString *errorMessage);
Ui::QbsBuildStepConfigWidget *m_ui;
class Property
{
public:
@@ -114,7 +121,22 @@ private:
};
QList<Property> m_propertyCache;
bool m_ignoreChange;
bool m_ignoreChange = false;
QComboBox *buildVariantComboBox;
QSpinBox *jobSpinBox;
QCheckBox *qmlDebuggingLibraryCheckBox;
FancyLineEdit *propertyEdit;
PathChooser *installDirChooser;
QLabel *qmlDebuggingWarningIcon;
QLabel *qmlDebuggingWarningText;
QCheckBox *keepGoingCheckBox;
QCheckBox *showCommandLinesCheckBox;
QCheckBox *forceProbesCheckBox;
QCheckBox *installCheckBox;
QCheckBox *cleanInstallRootCheckBox;
QCheckBox *defaultInstallDirCheckBox;
QPlainTextEdit *commandLineTextEdit;
};
// --------------------------------------------------------------------
@@ -526,7 +548,7 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
BuildStepConfigWidget(step),
m_ignoreChange(false)
{
connect(step, &ProjectExplorer::ProjectConfiguration::displayNameChanged,
connect(step, &ProjectConfiguration::displayNameChanged,
this, &QbsBuildStepConfigWidget::updateState);
connect(step, &QbsBuildStep::qbsConfigurationChanged,
this, &QbsBuildStepConfigWidget::updateState);
@@ -542,68 +564,153 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
setContentsMargins(0, 0, 0, 0);
m_ui = new Ui::QbsBuildStepConfigWidget;
m_ui->setupUi(this);
m_ui->installDirChooser->setExpectedKind(Utils::PathChooser::Directory);
buildVariantComboBox = new QComboBox(this);
buildVariantComboBox->addItem(tr("Debug"));
buildVariantComboBox->addItem(tr("Release"));
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(buildVariantComboBox->sizePolicy().hasHeightForWidth());
buildVariantComboBox->setSizePolicy(sizePolicy);
auto horizontalLayout_5 = new QHBoxLayout();
horizontalLayout_5->addWidget(buildVariantComboBox);
horizontalLayout_5->addItem(new QSpacerItem(70, 13, QSizePolicy::Expanding, QSizePolicy::Minimum));
jobSpinBox = new QSpinBox(this);
auto horizontalLayout_6 = new QHBoxLayout();
horizontalLayout_6->addWidget(jobSpinBox);
horizontalLayout_6->addItem(new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
qmlDebuggingLibraryCheckBox = new QCheckBox(this);
qmlDebuggingWarningIcon = new QLabel(this);
qmlDebuggingWarningText = new QLabel(this);
auto qmlDebuggingLayout = new QHBoxLayout();
qmlDebuggingLayout->addWidget(qmlDebuggingLibraryCheckBox);
qmlDebuggingLayout->addWidget(qmlDebuggingWarningIcon);
qmlDebuggingLayout->addWidget(qmlDebuggingWarningText);
qmlDebuggingLayout->addItem(new QSpacerItem(40, 5, QSizePolicy::Expanding, QSizePolicy::Minimum));
propertyEdit = new FancyLineEdit(this);
keepGoingCheckBox = new QCheckBox(this);
showCommandLinesCheckBox = new QCheckBox(this);
forceProbesCheckBox = new QCheckBox(this);
auto flagsLayout = new QHBoxLayout();
flagsLayout->addWidget(keepGoingCheckBox);
flagsLayout->addWidget(showCommandLinesCheckBox);
flagsLayout->addWidget(forceProbesCheckBox);
flagsLayout->addItem(new QSpacerItem(40, 13, QSizePolicy::Expanding, QSizePolicy::Minimum));
installCheckBox = new QCheckBox(this);
cleanInstallRootCheckBox = new QCheckBox(this);
defaultInstallDirCheckBox = new QCheckBox(this);
auto installLayout = new QHBoxLayout();
installLayout->addWidget(installCheckBox);
installLayout->addWidget(cleanInstallRootCheckBox);
installLayout->addWidget(defaultInstallDirCheckBox);
installLayout->addItem(new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
installDirChooser = new PathChooser(this);
installDirChooser->setExpectedKind(PathChooser::Directory);
commandLineTextEdit = new QPlainTextEdit(this);
commandLineTextEdit->setUndoRedoEnabled(false);
commandLineTextEdit->setReadOnly(true);
commandLineTextEdit->setTextInteractionFlags(Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse);
auto formLayout = new QFormLayout(this);
formLayout->addRow(tr("Build variant:"), horizontalLayout_5);
formLayout->addRow(tr("Parallel jobs:"), horizontalLayout_6);
formLayout->addRow(tr("Enable QML debugging:"), qmlDebuggingLayout);
formLayout->addRow(tr("Properties:"), propertyEdit);
formLayout->addRow(tr("Flags:"), flagsLayout);
formLayout->addRow(tr("Installation flags:"), installLayout);
formLayout->addRow(tr("Installation directory:"), installDirChooser);
formLayout->addRow(tr("Equivalent command line:"), commandLineTextEdit);
QWidget::setTabOrder(buildVariantComboBox, jobSpinBox);
QWidget::setTabOrder(jobSpinBox, qmlDebuggingLibraryCheckBox);
QWidget::setTabOrder(qmlDebuggingLibraryCheckBox, propertyEdit);
QWidget::setTabOrder(propertyEdit, keepGoingCheckBox);
QWidget::setTabOrder(keepGoingCheckBox, showCommandLinesCheckBox);
QWidget::setTabOrder(showCommandLinesCheckBox, forceProbesCheckBox);
QWidget::setTabOrder(forceProbesCheckBox, installCheckBox);
QWidget::setTabOrder(installCheckBox, cleanInstallRootCheckBox);
QWidget::setTabOrder(cleanInstallRootCheckBox, commandLineTextEdit);
jobSpinBox->setToolTip(tr("Number of concurrent build jobs."));
propertyEdit->setToolTip(tr("Properties to pass to the project."));
keepGoingCheckBox->setToolTip(tr("Keep going when errors occur (if at all possible)."));
keepGoingCheckBox->setText(tr("Keep going"));
showCommandLinesCheckBox->setText(tr("Show command lines"));
forceProbesCheckBox->setText(tr("Force probes"));
installCheckBox->setText(tr("Install"));
cleanInstallRootCheckBox->setText(tr("Clean install root"));
defaultInstallDirCheckBox->setText(tr("Use default location"));
auto chooser = new Core::VariableChooser(this);
chooser->addSupportedWidget(m_ui->propertyEdit);
chooser->addSupportedWidget(m_ui->installDirChooser->lineEdit());
m_ui->propertyEdit->setValidationFunction([this](Utils::FancyLineEdit *edit,
QString *errorMessage) {
chooser->addSupportedWidget(propertyEdit);
chooser->addSupportedWidget(installDirChooser->lineEdit());
propertyEdit->setValidationFunction([this](FancyLineEdit *edit, QString *errorMessage) {
return validateProperties(edit, errorMessage);
});
m_ui->qmlDebuggingWarningIcon->setPixmap(Utils::Icons::WARNING.pixmap());
connect(m_ui->buildVariantComboBox,
qmlDebuggingWarningIcon->setPixmap(Utils::Icons::WARNING.pixmap());
connect(buildVariantComboBox,
QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &QbsBuildStepConfigWidget::changeBuildVariant);
connect(m_ui->keepGoingCheckBox, &QAbstractButton::toggled,
connect(keepGoingCheckBox, &QAbstractButton::toggled,
this, &QbsBuildStepConfigWidget::changeKeepGoing);
connect(m_ui->jobSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
connect(jobSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
this, &QbsBuildStepConfigWidget::changeJobCount);
connect(m_ui->showCommandLinesCheckBox, &QCheckBox::toggled, this,
connect(showCommandLinesCheckBox, &QCheckBox::toggled, this,
&QbsBuildStepConfigWidget::changeShowCommandLines);
connect(m_ui->installCheckBox, &QCheckBox::toggled, this,
connect(installCheckBox, &QCheckBox::toggled, this,
&QbsBuildStepConfigWidget::changeInstall);
connect(m_ui->cleanInstallRootCheckBox, &QCheckBox::toggled, this,
connect(cleanInstallRootCheckBox, &QCheckBox::toggled, this,
&QbsBuildStepConfigWidget::changeCleanInstallRoot);
connect(m_ui->defaultInstallDirCheckBox, &QCheckBox::toggled, this,
connect(defaultInstallDirCheckBox, &QCheckBox::toggled, this,
&QbsBuildStepConfigWidget::changeUseDefaultInstallDir);
connect(m_ui->installDirChooser, &Utils::PathChooser::rawPathChanged, this,
connect(installDirChooser, &Utils::PathChooser::rawPathChanged, this,
&QbsBuildStepConfigWidget::changeInstallDir);
connect(m_ui->forceProbesCheckBox, &QCheckBox::toggled, this,
connect(forceProbesCheckBox, &QCheckBox::toggled, this,
&QbsBuildStepConfigWidget::changeForceProbes);
connect(m_ui->qmlDebuggingLibraryCheckBox, &QAbstractButton::toggled,
connect(qmlDebuggingLibraryCheckBox, &QAbstractButton::toggled,
this, &QbsBuildStepConfigWidget::linkQmlDebuggingLibraryChecked);
updateState();
}
QbsBuildStepConfigWidget::~QbsBuildStepConfigWidget()
{
delete m_ui;
}
void QbsBuildStepConfigWidget::updateState()
{
if (!m_ignoreChange) {
m_ui->keepGoingCheckBox->setChecked(qbsStep()->keepGoing());
m_ui->jobSpinBox->setValue(qbsStep()->maxJobs());
m_ui->showCommandLinesCheckBox->setChecked(qbsStep()->showCommandLines());
m_ui->installCheckBox->setChecked(qbsStep()->install());
m_ui->cleanInstallRootCheckBox->setChecked(qbsStep()->cleanInstallRoot());
m_ui->forceProbesCheckBox->setChecked(qbsStep()->forceProbes());
keepGoingCheckBox->setChecked(qbsStep()->keepGoing());
jobSpinBox->setValue(qbsStep()->maxJobs());
showCommandLinesCheckBox->setChecked(qbsStep()->showCommandLines());
installCheckBox->setChecked(qbsStep()->install());
cleanInstallRootCheckBox->setChecked(qbsStep()->cleanInstallRoot());
forceProbesCheckBox->setChecked(qbsStep()->forceProbes());
updatePropertyEdit(qbsStep()->qbsConfiguration(QbsBuildStep::PreserveVariables));
m_ui->qmlDebuggingLibraryCheckBox->setChecked(qbsStep()->isQmlDebuggingEnabled());
m_ui->installDirChooser->setFileName(qbsStep()->installRoot(QbsBuildStep::PreserveVariables));
m_ui->defaultInstallDirCheckBox->setChecked(!qbsStep()->hasCustomInstallRoot());
qmlDebuggingLibraryCheckBox->setChecked(qbsStep()->isQmlDebuggingEnabled());
installDirChooser->setFileName(qbsStep()->installRoot(QbsBuildStep::PreserveVariables));
defaultInstallDirCheckBox->setChecked(!qbsStep()->hasCustomInstallRoot());
}
updateQmlDebuggingOption();
const QString buildVariant = qbsStep()->buildVariant();
const int idx = (buildVariant == Constants::QBS_VARIANT_DEBUG) ? 0 : 1;
m_ui->buildVariantComboBox->setCurrentIndex(idx);
buildVariantComboBox->setCurrentIndex(idx);
QString command = static_cast<QbsBuildConfiguration *>(step()->buildConfiguration())
->equivalentCommandLine(qbsStep());
@@ -613,7 +720,7 @@ void QbsBuildStepConfigWidget::updateState()
if (qbsStep()->isQmlDebuggingEnabled())
command.append(' ').append(Constants::QBS_CONFIG_QUICK_DEBUG_KEY).append(":true");
m_ui->commandLineTextEdit->setPlainText(command);
commandLineTextEdit->setPlainText(command);
setSummaryText(tr("<b>Qbs:</b> %1").arg(command));
}
@@ -623,16 +730,15 @@ void QbsBuildStepConfigWidget::updateQmlDebuggingOption()
QString warningText;
bool supported = QtSupport::BaseQtVersion::isQmlDebuggingSupported(step()->target()->kit(),
&warningText);
m_ui->qmlDebuggingLibraryCheckBox->setEnabled(supported);
qmlDebuggingLibraryCheckBox->setEnabled(supported);
if (supported && qbsStep()->isQmlDebuggingEnabled())
warningText = tr("Might make your application vulnerable. Only use in a safe environment.");
m_ui->qmlDebuggingWarningText->setText(warningText);
m_ui->qmlDebuggingWarningIcon->setVisible(!warningText.isEmpty());
qmlDebuggingWarningText->setText(warningText);
qmlDebuggingWarningIcon->setVisible(!warningText.isEmpty());
}
void QbsBuildStepConfigWidget::updatePropertyEdit(const QVariantMap &data)
{
QVariantMap editable = data;
@@ -649,7 +755,7 @@ void QbsBuildStepConfigWidget::updatePropertyEdit(const QVariantMap &data)
for (QVariantMap::const_iterator i = editable.constBegin(); i != editable.constEnd(); ++i)
propertyList.append(i.key() + ':' + i.value().toString());
m_ui->propertyEdit->setText(Utils::QtcProcess::joinArgs(propertyList));
propertyEdit->setText(QtcProcess::joinArgs(propertyList));
}
void QbsBuildStepConfigWidget::changeBuildVariant(int idx)
@@ -703,11 +809,11 @@ void QbsBuildStepConfigWidget::changeUseDefaultInstallDir(bool useDefault)
{
m_ignoreChange = true;
QVariantMap config = qbsStep()->qbsConfiguration(QbsBuildStep::PreserveVariables);
m_ui->installDirChooser->setEnabled(!useDefault);
installDirChooser->setEnabled(!useDefault);
if (useDefault)
config.remove(Constants::QBS_INSTALL_ROOT_KEY);
else
config.insert(Constants::QBS_INSTALL_ROOT_KEY, m_ui->installDirChooser->rawPath());
config.insert(Constants::QBS_INSTALL_ROOT_KEY, installDirChooser->rawPath());
qbsStep()->setQbsConfiguration(config);
m_ignoreChange = false;
}