summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodemodelsettingspage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools/cppcodemodelsettingspage.cpp')
-rw-r--r--src/plugins/cpptools/cppcodemodelsettingspage.cpp79
1 files changed, 57 insertions, 22 deletions
diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp
index 00e7b8081a..7d9fc2078e 100644
--- a/src/plugins/cpptools/cppcodemodelsettingspage.cpp
+++ b/src/plugins/cpptools/cppcodemodelsettingspage.cpp
@@ -33,7 +33,9 @@
#include <coreplugin/icore.h>
#include <utils/algorithm.h>
+#include <utils/pathchooser.h>
+#include <QFormLayout>
#include <QTextStream>
namespace CppTools {
@@ -100,8 +102,6 @@ void CppCodeModelSettingsWidget::setupClangCodeModelWidgets()
const bool isClangActive = CppModelManager::instance()->isClangCodeModelActive();
m_ui->clangCodeModelIsDisabledHint->setVisible(!isClangActive);
m_ui->clangCodeModelIsEnabledHint->setVisible(isClangActive);
- m_ui->clangdCheckBox->setVisible(isClangActive);
- m_ui->clangdChooser->setVisible(isClangActive);
for (int i = 0; i < m_ui->clangDiagnosticConfigsSelectionWidget->layout()->count(); ++i) {
QWidget *widget = m_ui->clangDiagnosticConfigsSelectionWidget->layout()->itemAt(i)->widget();
@@ -120,16 +120,6 @@ void CppCodeModelSettingsWidget::setupGeneralWidgets()
const bool ignorePch = m_settings->pchUsage() == CppCodeModelSettings::PchUse_None;
m_ui->ignorePCHCheckBox->setChecked(ignorePch);
-
- m_ui->clangdCheckBox->setChecked(m_settings->useClangd());
- m_ui->clangdCheckBox->setToolTip(tr("Use clangd for locators and \"Find References\".\n"
- "Changing this option does not affect projects that are already open."));
- m_ui->clangdChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
- m_ui->clangdChooser->setFilePath(codeModelSettings()->clangdFilePath());
- m_ui->clangdChooser->setEnabled(m_ui->clangdCheckBox->isChecked());
- connect(m_ui->clangdCheckBox, &QCheckBox::toggled, m_ui->clangdChooser, [this](bool checked) {
- m_ui->clangdChooser->setEnabled(checked);
- });
}
bool CppCodeModelSettingsWidget::applyClangCodeModelWidgetsToSettings() const
@@ -176,16 +166,6 @@ bool CppCodeModelSettingsWidget::applyGeneralWidgetsToSettings() const
m_settings->setIndexerFileSizeLimitInMb(newFileSizeLimit);
settingsChanged = true;
}
- const bool newUseClangd = m_ui->clangdCheckBox->isChecked();
- if (m_settings->useClangd() != newUseClangd) {
- m_settings->setUseClangd(newUseClangd);
- settingsChanged = true;
- }
- const Utils::FilePath newClangdPath = m_ui->clangdChooser->rawFilePath();
- if (m_settings->clangdFilePath() != newClangdPath) {
- m_settings->setClangdFilePath(newClangdPath);
- settingsChanged = true;
- }
const bool newIgnorePch = m_ui->ignorePCHCheckBox->isChecked();
const bool previousIgnorePch = m_settings->pchUsage() == CppCodeModelSettings::PchUse_None;
@@ -210,5 +190,60 @@ CppCodeModelSettingsPage::CppCodeModelSettingsPage(CppCodeModelSettings *setting
setWidgetCreator([settings] { return new CppCodeModelSettingsWidget(settings); });
}
+
+class ClangdSettingsWidget final : public Core::IOptionsPageWidget
+{
+ Q_DECLARE_TR_FUNCTIONS(CppTools::Internal::ClangdSettingsWidget)
+
+public:
+ ClangdSettingsWidget()
+ {
+ m_useClangdCheckBox.setText(tr("Use clangd (EXPERIMENTAL)"));
+ m_useClangdCheckBox.setChecked(ClangdSettings::useClangd());
+ m_useClangdCheckBox.setToolTip(tr("Changing this option does not affect projects "
+ "that are already open."));
+ m_clangdChooser.setExpectedKind(Utils::PathChooser::ExistingCommand);
+ m_clangdChooser.setFilePath(ClangdSettings::clangdFilePath());
+ m_clangdChooser.setEnabled(m_useClangdCheckBox.isChecked());
+
+ const auto layout = new QVBoxLayout(this);
+ layout->addWidget(&m_useClangdCheckBox);
+ const auto formLayout = new QFormLayout;
+ const auto chooserLabel = new QLabel(tr("Path to executable:"));
+ formLayout->addRow(chooserLabel, &m_clangdChooser);
+ layout->addLayout(formLayout);
+ layout->addStretch(1);
+
+ const auto toggleEnabled = [=](const bool checked) {
+ chooserLabel->setEnabled(checked);
+ m_clangdChooser.setEnabled(checked);
+ };
+ connect(&m_useClangdCheckBox, &QCheckBox::toggled, toggleEnabled);
+ toggleEnabled(m_useClangdCheckBox.isChecked());
+ }
+
+private:
+ void apply() final
+ {
+ ClangdSettings::Data data;
+ data.useClangd = m_useClangdCheckBox.isChecked();
+ data.executableFilePath = m_clangdChooser.filePath();
+ ClangdSettings::setData(data);
+ }
+
+ QCheckBox m_useClangdCheckBox;
+ Utils::PathChooser m_clangdChooser;
+};
+
+ClangdSettingsPage::ClangdSettingsPage()
+{
+ setId("K.Clangd");
+ setDisplayName(ClangdSettingsWidget::tr("Clangd"));
+ setCategory(Constants::CPP_SETTINGS_CATEGORY);
+ setWidgetCreator([] { return new ClangdSettingsWidget; });
+}
+
+
+
} // Internal
} // CppTools