diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2017-09-14 13:16:10 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2017-09-18 11:36:51 +0000 |
commit | dfec256dfff5af3fcd0ee47c8832d7ae600fd6c2 (patch) | |
tree | 8e538a242f14429ce4199ef25b3d5543dcf8ecfa /src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp | |
parent | 3d8ddb389d558aa7347027a94c990f695baaabd0 (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.cpp | 30 |
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 ¤t, 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 |