forked from qt-creator/qt-creator
ProjectExplorer: Add BuildStep::createConfigWidget default implementation
This starts the same process as done for run configuration widgets: Add an aspect based default implementation and base build step data handling on aspects. As first example use the RemoteLinux::GenericDirectUploadStep Change-Id: Ia2d1fcd393e667094b7852371b893d8356c3eace Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
@@ -35,6 +35,8 @@
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QFormLayout>
|
||||
|
||||
/*!
|
||||
\class ProjectExplorer::BuildStep
|
||||
|
||||
@@ -125,6 +127,40 @@ BuildStep::BuildStep(BuildStepList *bsl, Core::Id id) :
|
||||
expander->registerSubProvider([this] { return projectConfiguration()->macroExpander(); });
|
||||
}
|
||||
|
||||
class ConfigWidget : public BuildStepConfigWidget
|
||||
{
|
||||
public:
|
||||
ConfigWidget(BuildStep *step) : m_step(step)
|
||||
{
|
||||
connect(m_step, &ProjectConfiguration::displayNameChanged,
|
||||
this, &BuildStepConfigWidget::updateSummary);
|
||||
}
|
||||
|
||||
QString summaryText() const override { return QLatin1String("<b>") + displayName() + QLatin1String("</b>"); }
|
||||
QString displayName() const override { return m_step->displayName(); }
|
||||
bool showWidget() const override { return true; }
|
||||
BuildStep *step() const { return m_step; }
|
||||
|
||||
private:
|
||||
BuildStep *m_step;
|
||||
};
|
||||
|
||||
BuildStepConfigWidget *BuildStep::createConfigWidget()
|
||||
{
|
||||
auto widget = new ConfigWidget(this);
|
||||
|
||||
auto formLayout = new QFormLayout(widget);
|
||||
formLayout->setMargin(0);
|
||||
formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
|
||||
|
||||
for (ProjectConfigurationAspect *aspect : m_aspects) {
|
||||
if (aspect->isVisible())
|
||||
aspect->addToConfigurationLayout(formLayout);
|
||||
}
|
||||
|
||||
return widget;
|
||||
}
|
||||
|
||||
bool BuildStep::fromMap(const QVariantMap &map)
|
||||
{
|
||||
m_enabled = map.value(buildStepEnabledKey, true).toBool();
|
||||
|
||||
@@ -29,65 +29,19 @@
|
||||
|
||||
#include <projectexplorer/deploymentdata.h>
|
||||
#include <projectexplorer/target.h>
|
||||
|
||||
#include <QCheckBox>
|
||||
#include <QVBoxLayout>
|
||||
#include <projectexplorer/runconfigurationaspects.h>
|
||||
|
||||
using namespace ProjectExplorer;
|
||||
|
||||
namespace RemoteLinux {
|
||||
namespace Internal {
|
||||
namespace {
|
||||
const char IncrementalKey[] = "RemoteLinux.GenericDirectUploadStep.Incremental";
|
||||
const char IgnoreMissingFilesKey[] = "RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles";
|
||||
|
||||
class ConfigWidget : public SimpleBuildStepConfigWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ConfigWidget(GenericDirectUploadStep *step) : SimpleBuildStepConfigWidget(step)
|
||||
{
|
||||
m_incrementalCheckBox.setText(tr("Incremental deployment"));
|
||||
m_ignoreMissingFilesCheckBox.setText(tr("Ignore missing files"));
|
||||
QVBoxLayout *mainLayout = new QVBoxLayout(this);
|
||||
mainLayout->setMargin(0);
|
||||
mainLayout->addWidget(&m_incrementalCheckBox);
|
||||
mainLayout->addWidget(&m_ignoreMissingFilesCheckBox);
|
||||
m_incrementalCheckBox.setChecked(step->incrementalDeployment());
|
||||
m_ignoreMissingFilesCheckBox.setChecked(step->ignoreMissingFiles());
|
||||
connect(&m_incrementalCheckBox, &QAbstractButton::toggled,
|
||||
this, &ConfigWidget::handleIncrementalChanged);
|
||||
connect(&m_ignoreMissingFilesCheckBox, &QAbstractButton::toggled,
|
||||
this, &ConfigWidget::handleIgnoreMissingFilesChanged);
|
||||
}
|
||||
|
||||
bool showWidget() const { return true; }
|
||||
|
||||
private:
|
||||
void handleIncrementalChanged(bool incremental) {
|
||||
GenericDirectUploadStep *step = qobject_cast<GenericDirectUploadStep *>(this->step());
|
||||
step->setIncrementalDeployment(incremental);
|
||||
}
|
||||
|
||||
void handleIgnoreMissingFilesChanged(bool ignoreMissingFiles) {
|
||||
GenericDirectUploadStep *step = qobject_cast<GenericDirectUploadStep *>(this->step());
|
||||
step->setIgnoreMissingFiles(ignoreMissingFiles);
|
||||
}
|
||||
|
||||
QCheckBox m_incrementalCheckBox;
|
||||
QCheckBox m_ignoreMissingFilesCheckBox;
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
class GenericDirectUploadStepPrivate
|
||||
{
|
||||
public:
|
||||
GenericDirectUploadStepPrivate() : incremental(true), ignoreMissingFiles(false) {}
|
||||
|
||||
GenericDirectUploadService deployService;
|
||||
bool incremental;
|
||||
bool ignoreMissingFiles;
|
||||
BaseBoolAspect *incrementalAspect;
|
||||
BaseBoolAspect *ignoreMissingFilesAspect;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
@@ -96,6 +50,19 @@ GenericDirectUploadStep::GenericDirectUploadStep(BuildStepList *bsl)
|
||||
: AbstractRemoteLinuxDeployStep(bsl, stepId())
|
||||
{
|
||||
d = new Internal::GenericDirectUploadStepPrivate;
|
||||
|
||||
d->incrementalAspect = addAspect<BaseBoolAspect>();
|
||||
d->incrementalAspect->setSettingsKey("RemoteLinux.GenericDirectUploadStep.Incremental");
|
||||
d->incrementalAspect->setLabel(tr("Incremental deployment"));
|
||||
d->incrementalAspect->setValue(true);
|
||||
d->incrementalAspect->setDefaultValue(true);
|
||||
|
||||
d->ignoreMissingFilesAspect = addAspect<BaseBoolAspect>();
|
||||
d->ignoreMissingFilesAspect
|
||||
->setSettingsKey("RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles");
|
||||
d->ignoreMissingFilesAspect->setLabel(tr("Ignore missing files"));
|
||||
d->ignoreMissingFilesAspect->setValue(false);
|
||||
|
||||
setDefaultDisplayName(displayName());
|
||||
}
|
||||
|
||||
@@ -104,17 +71,17 @@ GenericDirectUploadStep::~GenericDirectUploadStep()
|
||||
delete d;
|
||||
}
|
||||
|
||||
BuildStepConfigWidget *GenericDirectUploadStep::createConfigWidget()
|
||||
{
|
||||
return new Internal::ConfigWidget(this);
|
||||
}
|
||||
|
||||
bool GenericDirectUploadStep::initInternal(QString *error)
|
||||
{
|
||||
deployService()->setDeployableFiles(target()->deploymentData().allFiles());
|
||||
deployService()->setIncrementalDeployment(incrementalDeployment());
|
||||
deployService()->setIgnoreMissingFiles(ignoreMissingFiles());
|
||||
return deployService()->isDeploymentPossible(error);
|
||||
d->deployService.setDeployableFiles(target()->deploymentData().allFiles());
|
||||
d->deployService.setIncrementalDeployment(d->incrementalAspect->value());
|
||||
d->deployService.setIgnoreMissingFiles(d->ignoreMissingFilesAspect->value());
|
||||
return d->deployService.isDeploymentPossible(error);
|
||||
}
|
||||
|
||||
BuildStepConfigWidget *GenericDirectUploadStep::createConfigWidget()
|
||||
{
|
||||
return BuildStep::createConfigWidget();
|
||||
}
|
||||
|
||||
GenericDirectUploadService *GenericDirectUploadStep::deployService() const
|
||||
@@ -122,43 +89,6 @@ GenericDirectUploadService *GenericDirectUploadStep::deployService() const
|
||||
return &d->deployService;
|
||||
}
|
||||
|
||||
bool GenericDirectUploadStep::fromMap(const QVariantMap &map)
|
||||
{
|
||||
if (!AbstractRemoteLinuxDeployStep::fromMap(map))
|
||||
return false;
|
||||
setIncrementalDeployment(map.value(QLatin1String(Internal::IncrementalKey), true).toBool());
|
||||
setIgnoreMissingFiles(map.value(QLatin1String(Internal::IgnoreMissingFilesKey), false).toBool());
|
||||
return true;
|
||||
}
|
||||
|
||||
QVariantMap GenericDirectUploadStep::toMap() const
|
||||
{
|
||||
QVariantMap map = AbstractRemoteLinuxDeployStep::toMap();
|
||||
map.insert(QLatin1String(Internal::IncrementalKey), incrementalDeployment());
|
||||
map.insert(QLatin1String(Internal::IgnoreMissingFilesKey), ignoreMissingFiles());
|
||||
return map;
|
||||
}
|
||||
|
||||
void GenericDirectUploadStep::setIncrementalDeployment(bool incremental)
|
||||
{
|
||||
d->incremental = incremental;
|
||||
}
|
||||
|
||||
bool GenericDirectUploadStep::incrementalDeployment() const
|
||||
{
|
||||
return d->incremental;
|
||||
}
|
||||
|
||||
void GenericDirectUploadStep::setIgnoreMissingFiles(bool ignoreMissingFiles)
|
||||
{
|
||||
d->ignoreMissingFiles = ignoreMissingFiles;
|
||||
}
|
||||
|
||||
bool GenericDirectUploadStep::ignoreMissingFiles() const
|
||||
{
|
||||
return d->ignoreMissingFiles;
|
||||
}
|
||||
|
||||
Core::Id GenericDirectUploadStep::stepId()
|
||||
{
|
||||
return "RemoteLinux.DirectUploadStep";
|
||||
@@ -170,5 +100,3 @@ QString GenericDirectUploadStep::displayName()
|
||||
}
|
||||
|
||||
} //namespace RemoteLinux
|
||||
|
||||
#include "genericdirectuploadstep.moc"
|
||||
|
||||
@@ -43,19 +43,11 @@ public:
|
||||
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
|
||||
bool initInternal(QString *error = nullptr) override;
|
||||
|
||||
void setIncrementalDeployment(bool incremental);
|
||||
bool incrementalDeployment() const;
|
||||
|
||||
void setIgnoreMissingFiles(bool ignoreMissingFiles);
|
||||
bool ignoreMissingFiles() const;
|
||||
|
||||
static Core::Id stepId();
|
||||
static QString displayName();
|
||||
|
||||
private:
|
||||
GenericDirectUploadService *deployService() const override;
|
||||
bool fromMap(const QVariantMap &map) override;
|
||||
QVariantMap toMap() const override;
|
||||
|
||||
Internal::GenericDirectUploadStepPrivate *d;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user