From 72785e3a11bea85f09a76084813c890f5d26f9d0 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 10 Nov 2015 13:01:14 +0100 Subject: [PATCH] Clang: Activate the code model with a check box If the plugin is not activated, show a hint. The underlying settings are still mime type based. This will be addressed in a follow-up change. Change-Id: I24b232365d505a0022a78e96eb496d219a8b7c5b Reviewed-by: Christian Stenger Reviewed-by: Eike Ziller --- .../cpptools/cppcodemodelsettingspage.cpp | 69 +++++++++---------- .../cpptools/cppcodemodelsettingspage.h | 4 +- .../cpptools/cppcodemodelsettingspage.ui | 63 +++-------------- 3 files changed, 44 insertions(+), 92 deletions(-) diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp index c09c5080bdc..e59e0d1dbb9 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.cpp +++ b/src/plugins/cpptools/cppcodemodelsettingspage.cpp @@ -58,41 +58,16 @@ void CppCodeModelSettingsWidget::setSettings(const QSharedPointercChooser, QLatin1String(Constants::C_SOURCE_MIMETYPE)); - applyToWidget(m_ui->cppChooser, QLatin1String(Constants::CPP_SOURCE_MIMETYPE)); - applyToWidget(m_ui->objcChooser, QLatin1String(Constants::OBJECTIVE_C_SOURCE_MIMETYPE)); - applyToWidget(m_ui->objcppChooser, QLatin1String(Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)); - applyToWidget(m_ui->hChooser, QLatin1String(Constants::C_HEADER_MIMETYPE)); - + setupClangCodeModelWidgets(); m_ui->ignorePCHCheckBox->setChecked(s->pchUsage() == CppCodeModelSettings::PchUse_None); } -void CppCodeModelSettingsWidget::applyToWidget(QComboBox *chooser, const QString &mimeType) const -{ - chooser->clear(); - - QStringList names = m_settings->availableModelManagerSupportProvidersByName().keys(); - Utils::sort(names); - foreach (const QString &name, names) { - const QString &id = m_settings->availableModelManagerSupportProvidersByName()[name]; - chooser->addItem(name, id); - if (id == m_settings->modelManagerSupportIdForMimeType(mimeType)) - chooser->setCurrentIndex(chooser->count() - 1); - } - chooser->setEnabled(names.size() > 1); -} - void CppCodeModelSettingsWidget::applyToSettings() const { bool changed = false; - changed |= applyToSettings(m_ui->cChooser, QLatin1String(Constants::C_SOURCE_MIMETYPE)); - changed |= applyToSettings(m_ui->cppChooser, QLatin1String(Constants::CPP_SOURCE_MIMETYPE)); - changed |= applyToSettings(m_ui->objcChooser, - QLatin1String(Constants::OBJECTIVE_C_SOURCE_MIMETYPE)); - changed |= applyToSettings(m_ui->objcppChooser, - QLatin1String(Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)); - changed |= applyToSettings(m_ui->hChooser, - QLatin1String(Constants::C_HEADER_MIMETYPE)); + + if (applyClangCodeModelWidgetsToSettings()) + changed = true; if (m_ui->ignorePCHCheckBox->isChecked() != (m_settings->pchUsage() == CppCodeModelSettings::PchUse_None)) { @@ -106,14 +81,38 @@ void CppCodeModelSettingsWidget::applyToSettings() const m_settings->toSettings(Core::ICore::settings()); } -bool CppCodeModelSettingsWidget::applyToSettings(QComboBox *chooser, const QString &mimeType) const +static bool isClangCodeModelActive(const CppCodeModelSettings &settings) { - QString newId = chooser->itemData(chooser->currentIndex()).toString(); - QString currentId = m_settings->modelManagerSupportIdForMimeType(mimeType); - if (newId == currentId) - return false; + const QString currentCodeModelId + = settings.modelManagerSupportIdForMimeType(QLatin1String(Constants::CPP_SOURCE_MIMETYPE)); + return currentCodeModelId != settings.defaultId(); +} + +void CppCodeModelSettingsWidget::setupClangCodeModelWidgets() const +{ + bool isClangActive = false; + const bool isClangAvailable = m_settings->availableModelManagerSupportProvidersByName().size() > 1; + if (isClangAvailable) + isClangActive = isClangCodeModelActive(*m_settings.data()); + + m_ui->activateClangCodeModelPluginHint->setVisible(!isClangAvailable); + m_ui->useClangCheckBox->setEnabled(isClangAvailable); + m_ui->useClangCheckBox->setChecked(isClangActive); +} + +bool CppCodeModelSettingsWidget::applyClangCodeModelWidgetsToSettings() const +{ + // Once the underlying settings are not mime type based anymore, simplify here. + // Until then, ensure that the settings are set uniformly for all the mime types + // to avoid surprises. + + const QString activeCodeModelId = m_ui->useClangCheckBox->isChecked() + ? QLatin1String("ClangCodeMode.ClangCodeMode") + : QLatin1String("CppTools.BuiltinCodeModel"); + + foreach (const QString &mimeType, m_settings->supportedMimeTypes()) + m_settings->setModelManagerSupportIdForMimeType(mimeType, activeCodeModelId); - m_settings->setModelManagerSupportIdForMimeType(mimeType, newId); return true; } diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.h b/src/plugins/cpptools/cppcodemodelsettingspage.h index 563d787f973..1e40a8c6faa 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.h +++ b/src/plugins/cpptools/cppcodemodelsettingspage.h @@ -58,8 +58,8 @@ public: void applyToSettings() const; private: - bool applyToSettings(QComboBox *chooser, const QString &mimeType) const; - void applyToWidget(QComboBox *chooser, const QString &mimeType) const; + void setupClangCodeModelWidgets() const; + bool applyClangCodeModelWidgetsToSettings() const; private: Ui::CppCodeModelSettingsPage *m_ui; diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.ui b/src/plugins/cpptools/cppcodemodelsettingspage.ui index 1109649ceb6..e8146a0fed5 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.ui +++ b/src/plugins/cpptools/cppcodemodelsettingspage.ui @@ -20,70 +20,23 @@ Code Completion and Semantic Highlighting - - - - C - - - - - - - - 0 - 0 - - - - + + QFormLayout::AllNonFixedFieldsGrow + - + - C++ + Use Clang Code Model - - - - - 0 - 0 - - - - - - + + - Objective C + <i>Activate the Clang Code Model plugin to enable the options here.</i> - - - - - - - Objective C++ - - - - - - - - - - Headers - - - - - -