diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2018-07-20 12:17:36 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2019-10-18 08:50:22 +0000 |
commit | 22ecd6b7efcdf377f2ce2c214afee892c48265ac (patch) | |
tree | 8dafd399d5b357a959c4d56413c7ffa2879d50f1 /src/plugins/cmakeprojectmanager/cmakebuildstep.cpp | |
parent | 900ef05d374cb5239a728eca6134e371e1ab566e (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.cpp | 62 |
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(); |