diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp index 44cc4daf815..68b3173695a 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp @@ -197,6 +197,9 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) mainLayout->addLayout(buttonLayout, row, 2); + connect(m_configView->selectionModel(), &QItemSelectionModel::currentChanged, + this, &CMakeBuildSettingsWidget::updateSelection); + ++row; m_reconfigureButton = new QPushButton(tr("Apply Configuration Changes")); m_reconfigureButton->setEnabled(false); @@ -331,5 +334,24 @@ void CMakeBuildSettingsWidget::updateFromKit() m_configModel->setKitConfiguration(configHash); } +static QModelIndex mapToSource(const QAbstractItemView *view, const QModelIndex &idx) +{ + QAbstractItemModel *model = view->model(); + QModelIndex result = idx; + while (QSortFilterProxyModel *proxy = qobject_cast(model)) { + result = proxy->mapToSource(result); + model = proxy->sourceModel(); + } + return result; +} + +void CMakeBuildSettingsWidget::updateSelection(const QModelIndex ¤t, const QModelIndex &previous) +{ + Q_UNUSED(previous); + const QModelIndex currentModelIndex = mapToSource(m_configView, current); + if (currentModelIndex.isValid()) + m_editButton->setEnabled(currentModelIndex.flags().testFlag(Qt::ItemIsEditable)); +} + } // namespace Internal } // namespace CMakeProjectManager diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h index e76a2a6bbf7..27ddb792474 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h @@ -64,6 +64,8 @@ private: void updateAdvancedCheckBox(); void updateFromKit(); + void updateSelection(const QModelIndex ¤t, const QModelIndex &previous); + CMakeBuildConfiguration *m_buildConfiguration; QTreeView *m_configView; ConfigModel *m_configModel;