diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp index dbd89e48236..8b494d0b4bf 100644 --- a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp @@ -12,6 +12,9 @@ #include #include +#include +#include + #include #include #include @@ -36,6 +39,8 @@ #include +using namespace ProjectExplorer; + namespace CppEditor::Internal { class CppCodeModelSettingsWidget final : public Core::IOptionsPageWidget @@ -578,56 +583,67 @@ ClangdSettingsPage::ClangdSettingsPage() setWidgetCreator([] { return new ClangdSettingsPageWidget; }); } - -class ClangdProjectSettingsWidget::Private +class ClangdProjectSettingsWidget : public ProjectSettingsWidget { public: - Private(const ClangdProjectSettings &s) : settings(s), widget(s.settings(), true) {} + ClangdProjectSettingsWidget(const ClangdProjectSettings &settings) + : m_settings(settings), m_widget(settings.settings(), true) + { + setGlobalSettingsId(Constants::CPP_CLANGD_SETTINGS_ID); + const auto layout = new QVBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(&m_widget); - ClangdProjectSettings settings; - ClangdSettingsWidget widget; - QCheckBox useGlobalSettingsCheckBox; + const auto updateGlobalSettingsCheckBox = [this] { + if (ClangdSettings::instance().granularity() == ClangdSettings::Granularity::Session) { + setUseGlobalSettingsCheckBoxEnabled(false); + setUseGlobalSettings(true); + } else { + setUseGlobalSettingsCheckBoxEnabled(true); + setUseGlobalSettings(m_settings.useGlobalSettings()); + } + m_widget.setEnabled(!useGlobalSettings()); + }; + + updateGlobalSettingsCheckBox(); + connect(&ClangdSettings::instance(), &ClangdSettings::changed, + this, updateGlobalSettingsCheckBox); + + connect(this, &ProjectSettingsWidget::useGlobalSettingsChanged, this, + [this](bool checked) { + m_widget.setEnabled(!checked); + m_settings.setUseGlobalSettings(checked); + if (!checked) + m_settings.setSettings(m_widget.settingsData()); + }); + + connect(&m_widget, &ClangdSettingsWidget::settingsDataChanged, this, [this] { + m_settings.setSettings(m_widget.settingsData()); + }); + } + +private: + ClangdProjectSettings m_settings; + ClangdSettingsWidget m_widget; }; -ClangdProjectSettingsWidget::ClangdProjectSettingsWidget(const ClangdProjectSettings &settings) - : d(new Private(settings)) +class ClangdProjectSettingsPanelFactory final : public ProjectPanelFactory { - setGlobalSettingsId(Constants::CPP_CLANGD_SETTINGS_ID); - const auto layout = new QVBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(&d->widget); +public: + ClangdProjectSettingsPanelFactory() + { + setPriority(100); + setDisplayName(Tr::tr("Clangd")); + setCreateWidgetFunction([](Project *project) { + return new ClangdProjectSettingsWidget(project); + }); + ProjectPanelFactory::registerFactory(this); + } +}; - const auto updateGlobalSettingsCheckBox = [this] { - if (ClangdSettings::instance().granularity() == ClangdSettings::Granularity::Session) { - setUseGlobalSettingsCheckBoxEnabled(false); - setUseGlobalSettings(true); - } else { - setUseGlobalSettingsCheckBoxEnabled(true); - setUseGlobalSettings(d->settings.useGlobalSettings()); - } - d->widget.setEnabled(!useGlobalSettings()); - }; - - updateGlobalSettingsCheckBox(); - connect(&ClangdSettings::instance(), &ClangdSettings::changed, - this, updateGlobalSettingsCheckBox); - - connect(this, &ProjectSettingsWidget::useGlobalSettingsChanged, this, - [this](bool checked) { - d->widget.setEnabled(!checked); - d->settings.setUseGlobalSettings(checked); - if (!checked) - d->settings.setSettings(d->widget.settingsData()); - }); - - connect(&d->widget, &ClangdSettingsWidget::settingsDataChanged, this, [this] { - d->settings.setSettings(d->widget.settingsData()); - }); -} - -ClangdProjectSettingsWidget::~ClangdProjectSettingsWidget() +void setupClangdProjectSettingsPanel() { - delete d; + static ClangdProjectSettingsPanelFactory theClangdProjectSettingsPanelFactory; } } // CppEditor::Internal diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.h b/src/plugins/cppeditor/cppcodemodelsettingspage.h index c841bfcf4c5..33895275c39 100644 --- a/src/plugins/cppeditor/cppcodemodelsettingspage.h +++ b/src/plugins/cppeditor/cppcodemodelsettingspage.h @@ -4,7 +4,6 @@ #pragma once #include "cppcodemodelsettings.h" -#include #include @@ -40,17 +39,6 @@ private: Private * const d; }; -class ClangdProjectSettingsWidget : public ProjectExplorer::ProjectSettingsWidget -{ - Q_OBJECT +void setupClangdProjectSettingsPanel(); -public: - ClangdProjectSettingsWidget(const ClangdProjectSettings &settings); - ~ClangdProjectSettingsWidget(); - -private: - class Private; - Private * const d; -}; - -} // CppEditor::Internal namespace +} // CppEditor::Internal diff --git a/src/plugins/cppeditor/cppeditorplugin.cpp b/src/plugins/cppeditor/cppeditorplugin.cpp index a11a71b0b1f..37620e92b12 100644 --- a/src/plugins/cppeditor/cppeditorplugin.cpp +++ b/src/plugins/cppeditor/cppeditorplugin.cpp @@ -72,7 +72,6 @@ #include #include #include -#include #include #include @@ -524,32 +523,12 @@ void CppEditorPlugin::addGlobalActions() void CppEditorPlugin::setupProjectPanels() { - const auto quickFixSettingsPanelFactory = new ProjectPanelFactory; - quickFixSettingsPanelFactory->setPriority(100); - quickFixSettingsPanelFactory->setId(Constants::QUICK_FIX_PROJECT_PANEL_ID); - quickFixSettingsPanelFactory->setDisplayName(Tr::tr(Constants::QUICK_FIX_SETTINGS_DISPLAY_NAME)); - quickFixSettingsPanelFactory->setCreateWidgetFunction([](Project *project) { - return new CppQuickFixProjectSettingsWidget(project); - }); - ProjectPanelFactory::registerFactory(quickFixSettingsPanelFactory); - - const auto fileNamesPanelFactory = new ProjectPanelFactory; - fileNamesPanelFactory->setPriority(99); - fileNamesPanelFactory->setDisplayName(Tr::tr("C++ File Naming")); - fileNamesPanelFactory->setCreateWidgetFunction([](Project *project) { - return new CppFileSettingsForProjectWidget(project); - }); - ProjectPanelFactory::registerFactory(fileNamesPanelFactory); + setupCppQuickFixProjectPanel(); + setupCppFileSettingsProjectPanel(); if (CppModelManager::isClangCodeModelActive()) { d->m_clangdSettingsPage = new ClangdSettingsPage; - const auto clangdPanelFactory = new ProjectPanelFactory; - clangdPanelFactory->setPriority(100); - clangdPanelFactory->setDisplayName(Tr::tr("Clangd")); - clangdPanelFactory->setCreateWidgetFunction([](Project *project) { - return new ClangdProjectSettingsWidget(project); - }); - ProjectPanelFactory::registerFactory(clangdPanelFactory); + setupClangdProjectSettingsPanel(); } } diff --git a/src/plugins/cppeditor/cppfilesettingspage.cpp b/src/plugins/cppeditor/cppfilesettingspage.cpp index 1adca5c7b6f..84d874ca87b 100644 --- a/src/plugins/cppeditor/cppfilesettingspage.cpp +++ b/src/plugins/cppeditor/cppfilesettingspage.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -21,7 +22,6 @@ #include #include -#include #include #include #include @@ -29,6 +29,7 @@ #include #include +using namespace ProjectExplorer; using namespace Utils; namespace CppEditor::Internal { @@ -586,6 +587,25 @@ void CppFileSettingsForProjectWidget::Private::maybeClearHeaderSourceCache() } } +class CppFileSettingsProjectPanelFactory final : public ProjectPanelFactory +{ +public: + CppFileSettingsProjectPanelFactory() + { + setPriority(99); + setDisplayName(Tr::tr("C++ File Naming")); + setCreateWidgetFunction([](Project *project) { + return new CppFileSettingsForProjectWidget(project); + }); + ProjectPanelFactory::registerFactory(this); + } +}; + +void setupCppFileSettingsProjectPanel() +{ + static CppFileSettingsProjectPanelFactory theCppFileSettingsProjectPanelFactory; +} + } // namespace CppEditor::Internal #include diff --git a/src/plugins/cppeditor/cppfilesettingspage.h b/src/plugins/cppeditor/cppfilesettingspage.h index d82ca6e8bb3..fde1fb28395 100644 --- a/src/plugins/cppeditor/cppfilesettingspage.h +++ b/src/plugins/cppeditor/cppfilesettingspage.h @@ -85,4 +85,6 @@ private: Private * const d; }; +void setupCppFileSettingsProjectPanel(); + } // namespace CppEditor::Internal diff --git a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.cpp b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.cpp index c82985043f2..80866402b90 100644 --- a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.cpp +++ b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.cpp @@ -5,17 +5,35 @@ #include "cppeditorconstants.h" #include "cppeditortr.h" +#include "cppquickfixprojectsettings.h" #include "cppquickfixsettingswidget.h" +#include + #include #include #include +using namespace ProjectExplorer; + namespace CppEditor::Internal { -CppQuickFixProjectSettingsWidget::CppQuickFixProjectSettingsWidget(ProjectExplorer::Project *project, - QWidget *parent) - : ProjectExplorer::ProjectSettingsWidget(parent) +class CppQuickFixProjectSettingsWidget : public ProjectSettingsWidget +{ +public: + explicit CppQuickFixProjectSettingsWidget(Project *project); + +private: + void currentItemChanged(bool useGlobalSettings); + void buttonCustomClicked(); + + CppQuickFixSettingsWidget *m_settingsWidget; + CppQuickFixProjectsSettings::CppQuickFixProjectsSettingsPtr m_projectSettings; + + QPushButton *m_pushButton; +}; + +CppQuickFixProjectSettingsWidget::CppQuickFixProjectSettingsWidget(Project *project) { setGlobalSettingsId(CppEditor::Constants::QUICK_FIX_SETTINGS_ID); m_projectSettings = CppQuickFixProjectsSettings::getSettings(project); @@ -50,8 +68,6 @@ CppQuickFixProjectSettingsWidget::CppQuickFixProjectSettingsWidget(ProjectExplor }); } -CppQuickFixProjectSettingsWidget::~CppQuickFixProjectSettingsWidget() = default; - void CppQuickFixProjectSettingsWidget::currentItemChanged(bool useGlobalSettings) { if (useGlobalSettings) { @@ -88,4 +104,24 @@ void CppQuickFixProjectSettingsWidget::buttonCustomClicked() } } +class CppQuickFixProjectPanelFactory final : public ProjectPanelFactory +{ +public: + CppQuickFixProjectPanelFactory() + { + setPriority(100); + setId(Constants::QUICK_FIX_PROJECT_PANEL_ID); + setDisplayName(Tr::tr(Constants::QUICK_FIX_SETTINGS_DISPLAY_NAME)); + setCreateWidgetFunction([](Project *project) { + return new CppQuickFixProjectSettingsWidget(project); + }); + ProjectPanelFactory::registerFactory(this); + } +}; + +void setupCppQuickFixProjectPanel() +{ + static CppQuickFixProjectPanelFactory theCppQuickFixProjectPanelFactory; +} + } // CppEditor::Internal diff --git a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.h b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.h index 89a0936a5fd..a88395cc731 100644 --- a/src/plugins/cppeditor/cppquickfixprojectsettingswidget.h +++ b/src/plugins/cppeditor/cppquickfixprojectsettingswidget.h @@ -3,35 +3,8 @@ #pragma once -#include "cppquickfixprojectsettings.h" -#include - -QT_BEGIN_NAMESPACE -class QPushButton; -QT_END_NAMESPACE - -namespace ProjectExplorer { class Project; } - namespace CppEditor::Internal { -class CppQuickFixSettingsWidget; -class CppQuickFixProjectSettingsWidget : public ProjectExplorer::ProjectSettingsWidget -{ - Q_OBJECT - -public: - explicit CppQuickFixProjectSettingsWidget(ProjectExplorer::Project *project, - QWidget *parent = nullptr); - ~CppQuickFixProjectSettingsWidget(); - -private: - void currentItemChanged(bool useGlobalSettings); - void buttonCustomClicked(); - - CppQuickFixSettingsWidget *m_settingsWidget; - CppQuickFixProjectsSettings::CppQuickFixProjectsSettingsPtr m_projectSettings; - - QPushButton *m_pushButton; -}; +void setupCppQuickFixProjectPanel(); } // CppEditor::Internal