From 8e5528212f20d3506ca9531aed08915a6e0afd69 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 13 Sep 2017 12:23:21 +0200 Subject: [PATCH] CMake: Only enable edit button for CMake configuration when useful Only enable the button when items are actually editable. Change-Id: I54fd5430772a6db61c85b59d5c655d3bd4ebf8d7 Reviewed-by: hjk --- .../cmakebuildsettingswidget.cpp | 22 +++++++++++++++++++ .../cmakebuildsettingswidget.h | 2 ++ 2 files changed, 24 insertions(+) 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;