aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2017-09-14 13:16:10 +0200
committerTobias Hunger <tobias.hunger@qt.io>2017-09-18 11:36:51 +0000
commitdfec256dfff5af3fcd0ee47c8832d7ae600fd6c2 (patch)
tree8e538a242f14429ce4199ef25b3d5543dcf8ecfa /src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp
parent3d8ddb389d558aa7347027a94c990f695baaabd0 (diff)
CMake: Allow CMake configuration to be forced to string type
This allows editing values with misidentified types in Project Mode. Change-Id: Ic74da2ca71cc9046cbbeb1202075976c9edd28b7 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp')
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp
index fe4f1be9df..c2a236136e 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp
@@ -140,6 +140,8 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
tree, [tree](const QModelIndex &idx) { tree->edit(idx); });
m_configView = tree;
+ m_configView->viewport()->installEventFilter(this);
+
m_configFilterModel->setSourceModel(m_configModel);
m_configFilterModel->setFilterKeyColumn(0);
m_configFilterModel->setFilterRole(ConfigModel::ItemIsAdvancedRole);
@@ -339,6 +341,9 @@ void CMakeBuildSettingsWidget::updateFromKit()
static QModelIndex mapToSource(const QAbstractItemView *view, const QModelIndex &idx)
{
+ if (!idx.isValid())
+ return idx;
+
QAbstractItemModel *model = view->model();
QModelIndex result = idx;
while (QSortFilterProxyModel *proxy = qobject_cast<QSortFilterProxyModel *>(model)) {
@@ -356,5 +361,30 @@ void CMakeBuildSettingsWidget::updateSelection(const QModelIndex &current, const
m_editButton->setEnabled(currentModelIndex.flags().testFlag(Qt::ItemIsEditable));
}
+bool CMakeBuildSettingsWidget::eventFilter(QObject *target, QEvent *event)
+{
+ // handle context menu events:
+ if (target != m_configView->viewport() || event->type() != QEvent::ContextMenu)
+ return false;
+
+ auto e = static_cast<QContextMenuEvent *>(event);
+ const QModelIndex idx = mapToSource(m_configView, m_configView->indexAt(e->pos()));
+ if (!idx.isValid())
+ return false;
+
+ QMenu *menu = new QMenu(this);
+ connect(menu, &QMenu::triggered, menu, &QMenu::deleteLater);
+
+ QAction *forceToStringAction = new QAction(tr("Force to String"));
+ forceToStringAction->setEnabled(m_configModel->canForceToString(idx));
+ menu->addAction(forceToStringAction);
+ connect(forceToStringAction, &QAction::triggered, this, [this, idx]() { m_configModel->forceToString(idx); });
+
+ menu->move(e->globalPos());
+ menu->show();
+
+ return true;
+}
+
} // namespace Internal
} // namespace CMakeProjectManager