CMake: Use StringAspect for cmake arguments

Change-Id: I18e9af5f630a2b0a11a427848368c9f980819717
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2020-09-08 14:53:15 +02:00
parent 61bfd32438
commit 4964d0bf81
2 changed files with 32 additions and 68 deletions

View File

@@ -44,8 +44,6 @@
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <QBoxLayout> #include <QBoxLayout>
#include <QFormLayout>
#include <QLineEdit>
#include <QListWidget> #include <QListWidget>
#include <QRegularExpression> #include <QRegularExpression>
@@ -117,15 +115,11 @@ public:
private: private:
void itemsChanged(); void itemsChanged();
void cmakeArgumentsEdited();
void toolArgumentsEdited();
void updateDetails(); void updateDetails();
void buildTargetsChanged(); void buildTargetsChanged();
void updateBuildTargets(); void updateBuildTargets();
CMakeBuildStep *m_buildStep; CMakeBuildStep *m_buildStep;
QLineEdit *m_cmakeArguments;
QLineEdit *m_toolArguments;
QListWidget *m_buildTargetsList; QListWidget *m_buildTargetsList;
}; };
@@ -140,6 +134,16 @@ CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Utils::Id id) :
//: Default display name for the cmake make step. //: Default display name for the cmake make step.
setDefaultDisplayName(tr("CMake Build")); setDefaultDisplayName(tr("CMake Build"));
m_cmakeArguments = addAspect<StringAspect>();
m_cmakeArguments->setSettingsKey(CMAKE_ARGUMENTS_KEY);
m_cmakeArguments->setLabelText(tr("CMake arguments:"));
m_cmakeArguments->setDisplayStyle(StringAspect::LineEditDisplay);
m_toolArguments = addAspect<StringAspect>();
m_toolArguments->setSettingsKey(TOOL_ARGUMENTS_KEY);
m_toolArguments->setLabelText(tr("Tool arguments:"));
m_toolArguments->setDisplayStyle(StringAspect::LineEditDisplay);
// Set a good default build target: // Set a good default build target:
if (m_buildTargets.isEmpty()) if (m_buildTargets.isEmpty())
setBuildTargets({defaultBuildTarget()}); setBuildTargets({defaultBuildTarget()});
@@ -182,16 +186,12 @@ QVariantMap CMakeBuildStep::toMap() const
QVariantMap map(AbstractProcessStep::toMap()); QVariantMap map(AbstractProcessStep::toMap());
// Use QStringList for compatibility with old files // Use QStringList for compatibility with old files
map.insert(BUILD_TARGETS_KEY, QStringList(m_buildTargets)); map.insert(BUILD_TARGETS_KEY, QStringList(m_buildTargets));
map.insert(CMAKE_ARGUMENTS_KEY, m_cmakeArguments);
map.insert(TOOL_ARGUMENTS_KEY, m_toolArguments);
return map; return map;
} }
bool CMakeBuildStep::fromMap(const QVariantMap &map) bool CMakeBuildStep::fromMap(const QVariantMap &map)
{ {
m_buildTargets = map.value(BUILD_TARGETS_KEY).toStringList(); m_buildTargets = map.value(BUILD_TARGETS_KEY).toStringList();
m_cmakeArguments = map.value(CMAKE_ARGUMENTS_KEY).toString();
m_toolArguments = map.value(TOOL_ARGUMENTS_KEY).toString();
if (map.value(ADD_RUNCONFIGURATION_ARGUMENT_KEY, false).toBool()) if (map.value(ADD_RUNCONFIGURATION_ARGUMENT_KEY, false).toBool())
m_buildTargets = QStringList(ADD_RUNCONFIGURATION_TEXT); m_buildTargets = QStringList(ADD_RUNCONFIGURATION_TEXT);
@@ -348,26 +348,6 @@ void CMakeBuildStep::setBuildTargets(const QStringList &buildTargets)
emit targetsToBuildChanged(); emit targetsToBuildChanged();
} }
QString CMakeBuildStep::cmakeArguments() const
{
return m_cmakeArguments;
}
void CMakeBuildStep::setCMakeArguments(const QString &list)
{
m_cmakeArguments = list;
}
QString CMakeBuildStep::toolArguments() const
{
return m_toolArguments;
}
void CMakeBuildStep::setToolArguments(const QString &list)
{
m_toolArguments = list;
}
Utils::CommandLine CMakeBuildStep::cmakeCommand(RunConfiguration *rc) const Utils::CommandLine CMakeBuildStep::cmakeCommand(RunConfiguration *rc) const
{ {
CMakeTool *tool = CMakeKitAspect::cmakeTool(kit()); CMakeTool *tool = CMakeKitAspect::cmakeTool(kit());
@@ -392,12 +372,12 @@ Utils::CommandLine CMakeBuildStep::cmakeCommand(RunConfiguration *rc) const
return target; return target;
})); }));
if (!m_cmakeArguments.isEmpty()) if (!m_cmakeArguments->value().isEmpty())
cmd.addArgs(m_cmakeArguments, Utils::CommandLine::Raw); cmd.addArgs(m_cmakeArguments->value(), CommandLine::Raw);
if (!m_toolArguments.isEmpty()) { if (!m_toolArguments->value().isEmpty()) {
cmd.addArg("--"); cmd.addArg("--");
cmd.addArgs(m_toolArguments, Utils::CommandLine::Raw); cmd.addArgs(m_toolArguments->value(), CommandLine::Raw);
} }
return cmd; return cmd;
@@ -441,21 +421,13 @@ QStringList CMakeBuildStep::specialTargets()
CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep) CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep)
: BuildStepConfigWidget(buildStep) : BuildStepConfigWidget(buildStep)
, m_buildStep(buildStep) , m_buildStep(buildStep)
, m_cmakeArguments(new QLineEdit)
, m_toolArguments(new QLineEdit)
, m_buildTargetsList(new QListWidget) , m_buildTargetsList(new QListWidget)
{ {
setDisplayName(tr("Build", "CMakeProjectManager::CMakeBuildStepConfigWidget display name.")); setDisplayName(tr("Build", "CMakeProjectManager::CMakeBuildStepConfigWidget display name."));
auto fl = new QFormLayout(this); LayoutBuilder builder(this);
fl->setContentsMargins(0, 0, 0, 0); builder.addRow(buildStep->m_cmakeArguments);
fl->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); builder.addRow(buildStep->m_toolArguments);
setLayout(fl);
fl->addRow(tr("CMake arguments:"), m_cmakeArguments);
m_cmakeArguments->setText(m_buildStep->cmakeArguments());
fl->addRow(tr("Tool arguments:"), m_toolArguments);
m_toolArguments->setText(m_buildStep->toolArguments());
m_buildTargetsList->setFrameStyle(QFrame::NoFrame); m_buildTargetsList->setFrameStyle(QFrame::NoFrame);
m_buildTargetsList->setMinimumHeight(200); m_buildTargetsList->setMinimumHeight(200);
@@ -467,14 +439,18 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
frameLayout->addWidget(Core::ItemViewFind::createSearchableWrapper(m_buildTargetsList, frameLayout->addWidget(Core::ItemViewFind::createSearchableWrapper(m_buildTargetsList,
Core::ItemViewFind::LightColored)); Core::ItemViewFind::LightColored));
fl->addRow(tr("Targets:"), frame); builder.startNewRow().addItems(tr("Targets:"), frame);
buildTargetsChanged(); buildTargetsChanged();
updateDetails(); updateDetails();
connect(m_cmakeArguments, &QLineEdit::textEdited, this, &CMakeBuildStepConfigWidget::cmakeArgumentsEdited); connect(buildStep->m_cmakeArguments, &StringAspect::changed,
connect(m_toolArguments, &QLineEdit::textEdited, this, &CMakeBuildStepConfigWidget::toolArgumentsEdited); this, &CMakeBuildStepConfigWidget::updateDetails);
connect(m_buildTargetsList, &QListWidget::itemChanged, this, &CMakeBuildStepConfigWidget::itemsChanged); connect(buildStep->m_toolArguments, &StringAspect::changed,
this, &CMakeBuildStepConfigWidget::updateDetails);
connect(m_buildTargetsList, &QListWidget::itemChanged,
this, &CMakeBuildStepConfigWidget::itemsChanged);
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
this, &CMakeBuildStepConfigWidget::updateDetails); this, &CMakeBuildStepConfigWidget::updateDetails);
@@ -494,17 +470,6 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
&CMakeBuildStepConfigWidget::updateDetails); &CMakeBuildStepConfigWidget::updateDetails);
} }
void CMakeBuildStepConfigWidget::cmakeArgumentsEdited() {
m_buildStep->setCMakeArguments(m_cmakeArguments->text());
updateDetails();
}
void CMakeBuildStepConfigWidget::toolArgumentsEdited()
{
m_buildStep->setToolArguments(m_toolArguments->text());
updateDetails();
}
void CMakeBuildStepConfigWidget::itemsChanged() void CMakeBuildStepConfigWidget::itemsChanged()
{ {
const QList<QListWidgetItem *> items = [this]() { const QList<QListWidgetItem *> items = [this]() {

View File

@@ -31,7 +31,10 @@
namespace Utils { class CommandLine; } namespace Utils { class CommandLine; }
namespace ProjectExplorer { class RunConfiguration; } namespace ProjectExplorer {
class RunConfiguration;
class StringAspect;
} // ProjectExplorer
namespace CMakeProjectManager { namespace CMakeProjectManager {
namespace Internal { namespace Internal {
@@ -53,11 +56,6 @@ public:
bool buildsBuildTarget(const QString &target) const; bool buildsBuildTarget(const QString &target) const;
void setBuildTargets(const QStringList &target); void setBuildTargets(const QStringList &target);
QString cmakeArguments() const;
void setCMakeArguments(const QString &list);
QString toolArguments() const;
void setToolArguments(const QString &list);
Utils::CommandLine cmakeCommand(ProjectExplorer::RunConfiguration *rc) const; Utils::CommandLine cmakeCommand(ProjectExplorer::RunConfiguration *rc) const;
QStringList knownBuildTargets(); QStringList knownBuildTargets();
@@ -96,9 +94,10 @@ private:
QMetaObject::Connection m_runTrigger; QMetaObject::Connection m_runTrigger;
friend class CMakeBuildStepConfigWidget;
QStringList m_buildTargets; QStringList m_buildTargets;
QString m_cmakeArguments; ProjectExplorer::StringAspect *m_cmakeArguments = nullptr;
QString m_toolArguments; ProjectExplorer::StringAspect *m_toolArguments = nullptr;
bool m_waiting = false; bool m_waiting = false;
}; };