aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2018-07-20 12:17:36 +0200
committerTobias Hunger <tobias.hunger@qt.io>2019-10-18 08:50:22 +0000
commit22ecd6b7efcdf377f2ce2c214afee892c48265ac (patch)
tree8dafd399d5b357a959c4d56413c7ffa2879d50f1 /src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
parent900ef05d374cb5239a728eca6134e371e1ab566e (diff)
CMake: Use radio buttons to select build targets
Use radio buttons to select build targets in CMakeBuildStep. CMake only allows for one target to be built at one time, so checkboxes are confusing. Task-number: QTCREATORBUG-20764 Change-Id: I1171abd1753817595562526456c3ce613a22667c Reviewed-by: Cristian Adam <cristian.adam@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakebuildstep.cpp')
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildstep.cpp62
1 files changed, 46 insertions, 16 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
index a40bef8004f..00032dabff5 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
@@ -57,6 +57,7 @@
#include <QGroupBox>
#include <QLineEdit>
#include <QListWidget>
+#include <QRadioButton>
using namespace CMakeProjectManager;
using namespace CMakeProjectManager::Internal;
@@ -435,11 +436,20 @@ CMakeBuildStepConfigWidget::CMakeBuildStepConfigWidget(CMakeBuildStep *buildStep
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
this, &CMakeBuildStepConfigWidget::updateDetails);
- connect(m_buildStep, &CMakeBuildStep::buildTargetsChanged, this, &CMakeBuildStepConfigWidget::buildTargetsChanged);
- connect(m_buildStep, &CMakeBuildStep::targetToBuildChanged, this, &CMakeBuildStepConfigWidget::selectedBuildTargetsChanged);
+ connect(m_buildStep,
+ &CMakeBuildStep::buildTargetsChanged,
+ this,
+ &CMakeBuildStepConfigWidget::buildTargetsChanged);
- connect(m_buildStep->buildConfiguration(), &BuildConfiguration::environmentChanged,
- this, &CMakeBuildStepConfigWidget::updateDetails);
+ connect(m_buildStep,
+ &CMakeBuildStep::targetToBuildChanged,
+ this,
+ &CMakeBuildStepConfigWidget::updateBuildTarget);
+
+ connect(m_buildStep->buildConfiguration(),
+ &BuildConfiguration::environmentChanged,
+ this,
+ &CMakeBuildStepConfigWidget::updateDetails);
}
void CMakeBuildStepConfigWidget::toolArgumentsEdited()
@@ -459,6 +469,19 @@ void CMakeBuildStepConfigWidget::itemChanged(QListWidgetItem *item)
void CMakeBuildStepConfigWidget::buildTargetsChanged()
{
{
+ auto addItem = [this](const QString &buildTarget,
+ const QString &displayName) {
+ auto item = new QListWidgetItem(m_buildTargetsList);
+ auto button = new QRadioButton(displayName);
+ connect(button, &QRadioButton::toggled, this, [this, buildTarget](bool toggled) {
+ if (toggled) {
+ m_buildStep->setBuildTarget(buildTarget);
+ }
+ });
+ m_buildTargetsList->setItemWidget(item, button);
+ item->setData(Qt::UserRole, buildTarget);
+ };
+
QSignalBlocker blocker(m_buildTargetsList);
m_buildTargetsList->clear();
@@ -468,42 +491,49 @@ void CMakeBuildStepConfigWidget::buildTargetsChanged()
QFont italics;
italics.setItalic(true);
- auto exeItem = new QListWidgetItem(tr(ADD_RUNCONFIGURATION_TEXT), m_buildTargetsList);
- exeItem->setData(Qt::UserRole, ADD_RUNCONFIGURATION_TEXT);
+ addItem(ADD_RUNCONFIGURATION_TEXT, tr(ADD_RUNCONFIGURATION_TEXT));
- foreach (const QString &buildTarget, targetList) {
- auto item = new QListWidgetItem(buildTarget, m_buildTargetsList);
- item->setData(Qt::UserRole, buildTarget);
- }
+ foreach (const QString &buildTarget, targetList)
+ addItem(buildTarget, buildTarget);
for (int i = 0; i < m_buildTargetsList->count(); ++i) {
QListWidgetItem *item = m_buildTargetsList->item(i);
const QString title = item->data(Qt::UserRole).toString();
+ QRadioButton *radio = itemWidget(item);
- item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
- item->setCheckState(m_buildStep->buildsBuildTarget(title) ? Qt::Checked : Qt::Unchecked);
+ radio->setChecked(m_buildStep->buildsBuildTarget(title));
// Print utility targets in italics:
if (CMakeBuildStep::specialTargets().contains(title) || title == ADD_RUNCONFIGURATION_TEXT)
- item->setFont(italics);
+ radio->setFont(italics);
}
}
updateDetails();
}
-void CMakeBuildStepConfigWidget::selectedBuildTargetsChanged()
+void CMakeBuildStepConfigWidget::updateBuildTarget()
{
+ const QString buildTarget = m_buildStep->buildTarget();
{
QSignalBlocker blocker(m_buildTargetsList);
for (int y = 0; y < m_buildTargetsList->count(); ++y) {
QListWidgetItem *item = m_buildTargetsList->item(y);
- item->setCheckState(m_buildStep->buildsBuildTarget(item->data(Qt::UserRole).toString())
- ? Qt::Checked : Qt::Unchecked);
+ const QString itemTarget = item->data(Qt::UserRole).toString();
+
+ if (itemTarget == buildTarget) {
+ QRadioButton *radio = itemWidget(item);
+ radio->setChecked(true);
+ }
}
}
updateDetails();
}
+QRadioButton *CMakeBuildStepConfigWidget::itemWidget(QListWidgetItem *item)
+{
+ return static_cast<QRadioButton *>(m_buildTargetsList->itemWidget(item));
+}
+
void CMakeBuildStepConfigWidget::updateDetails()
{
BuildConfiguration *bc = m_buildStep->buildConfiguration();