diff --git a/src/plugins/clangformat/clangformatconfigwidget.cpp b/src/plugins/clangformat/clangformatconfigwidget.cpp index 6d81bde9721..8eee84109ac 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatconfigwidget.cpp @@ -132,10 +132,15 @@ void ClangFormatConfigWidget::initialize() m_ui->clangFormatOptionsTable->show(); m_ui->applyButton->show(); + QLayoutItem *lastItem = m_ui->verticalLayout->itemAt(m_ui->verticalLayout->count() - 1); + if (QSpacerItem *spacer = lastItem->spacerItem()) + m_ui->verticalLayout->removeItem(lastItem); + if (m_project && !m_project->projectDirectory().appendPath(SETTINGS_FILE_NAME).exists()) { m_ui->projectHasClangFormat->setText(tr("No .clang-format file for the project.")); m_ui->clangFormatOptionsTable->hide(); m_ui->applyButton->hide(); + m_ui->verticalLayout->addStretch(1); connect(m_ui->createFileButton, &QPushButton::clicked, this, [this]() { @@ -158,7 +163,7 @@ void ClangFormatConfigWidget::initialize() } else { m_ui->projectHasClangFormat->setText( tr("Current project has its own .clang-format file " - "and can be configured in Projects > Clang Format.")); + "and can be configured in Projects > Code Style > C++.")); } createStyleFileIfNeeded(true); m_ui->applyButton->hide(); diff --git a/src/plugins/clangformat/clangformatplugin.cpp b/src/plugins/clangformat/clangformatplugin.cpp index 0c51a5ed2c6..d5882aab587 100644 --- a/src/plugins/clangformat/clangformatplugin.cpp +++ b/src/plugins/clangformat/clangformatplugin.cpp @@ -36,13 +36,14 @@ #include #include #include -#include +#include #include #include #include -#include +#include +#include #include #include @@ -63,59 +64,38 @@ using namespace ProjectExplorer; namespace ClangFormat { -class ClangFormatOptionsPage : public Core::IOptionsPage -{ -public: - explicit ClangFormatOptionsPage() - { - setId("Cpp.CodeStyle.ClangFormat"); - setDisplayName(QCoreApplication::translate( - "ClangFormat::Internal::ClangFormatOptionsPage", - "Clang Format")); - setCategory(CppTools::Constants::CPP_SETTINGS_CATEGORY); - } - - QWidget *widget() - { - if (!m_widget) - m_widget = new ClangFormatConfigWidget; - return m_widget; - } - - void apply() - { - m_widget->apply(); - } - - void finish() - { - delete m_widget; - } - -private: - QPointer m_widget; -}; - ClangFormatPlugin::ClangFormatPlugin() = default; ClangFormatPlugin::~ClangFormatPlugin() = default; #ifdef KEEP_LINE_BREAKS_FOR_NON_EMPTY_LINES_BACKPORTED -static void disableCppCodeStyle() +class ClangFormatStyleFactory : public CppTools::CppCodeStylePreferencesFactory +{ +public: + QWidget *createCodeStyleEditor(TextEditor::ICodeStylePreferences *, + QWidget *parent = nullptr) override + { + if (!parent) + return new ClangFormatConfigWidget; + return new ClangFormatConfigWidget(SessionManager::startupProject()); + } + + QWidget *createEditor(TextEditor::ICodeStylePreferences *, QWidget *) const override + { + return nullptr; + } + + TextEditor::Indenter *createIndenter() const override + { + return new ClangFormatIndenter(); + } +}; + +static void replaceCppCodeStyle() { using namespace TextEditor; TextEditorSettings::unregisterCodeStyleFactory(CppTools::Constants::CPP_SETTINGS_ID); - TextEditorSettings::unregisterCodeStylePool(CppTools::Constants::CPP_SETTINGS_ID); - TextEditorSettings::unregisterCodeStyle(CppTools::Constants::CPP_SETTINGS_ID); - - QList pages = Core::IOptionsPage::allOptionsPages(); - int codeStylePageIndex = Utils::indexOf(pages, [](Core::IOptionsPage *page) { - return page->id() == CppTools::Constants::CPP_CODE_STYLE_SETTINGS_ID; - }); - if (codeStylePageIndex >= 0) { - auto *page = pages[codeStylePageIndex]; - page->finish(); - page->deleteLater(); - } + ICodeStylePreferencesFactory *factory = new ClangFormatStyleFactory(); + TextEditorSettings::registerCodeStyleFactory(factory); } #endif @@ -124,21 +104,7 @@ bool ClangFormatPlugin::initialize(const QStringList &arguments, QString *errorS Q_UNUSED(arguments); Q_UNUSED(errorString); #ifdef KEEP_LINE_BREAKS_FOR_NON_EMPTY_LINES_BACKPORTED - m_optionsPage = std::make_unique(); - - auto panelFactory = new ProjectPanelFactory(); - panelFactory->setPriority(120); - panelFactory->setDisplayName(tr("Clang Format")); - panelFactory->setCreateWidgetFunction([](Project *project) { - return new ClangFormatConfigWidget(project); - }); - ProjectPanelFactory::registerFactory(panelFactory); - - CppTools::CppModelManager::instance()->setCppIndenterCreator([]() { - return new ClangFormatIndenter(); - }); - - disableCppCodeStyle(); + replaceCppCodeStyle(); #endif return true; } diff --git a/src/plugins/clangformat/clangformatplugin.h b/src/plugins/clangformat/clangformatplugin.h index 00b59cd950e..e8c81179a00 100644 --- a/src/plugins/clangformat/clangformatplugin.h +++ b/src/plugins/clangformat/clangformatplugin.h @@ -27,12 +27,8 @@ #include -#include - namespace ClangFormat { -class ClangFormatOptionsPage; - class ClangFormatPlugin : public ExtensionSystem::IPlugin { Q_OBJECT @@ -45,8 +41,6 @@ public: private: bool initialize(const QStringList &arguments, QString *errorString) final; void extensionsInitialized() final {} - - std::unique_ptr m_optionsPage; }; } // namespace ClangTools diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp index 06f0b186a3e..1a6912c0483 100644 --- a/src/plugins/cppeditor/cppeditordocument.cpp +++ b/src/plugins/cppeditor/cppeditordocument.cpp @@ -43,6 +43,9 @@ #include +#include +#include + #include #include #include @@ -59,6 +62,8 @@ CppTools::CppModelManager *mm() } // anonymous namespace +using namespace TextEditor; + namespace CppEditor { namespace Internal { @@ -103,7 +108,10 @@ CppEditorDocument::CppEditorDocument() { setId(CppEditor::Constants::CPPEDITOR_ID); setSyntaxHighlighter(new CppHighlighter); - setIndenter(CppTools::CppModelManager::instance()->createCppIndenter()); + + ICodeStylePreferencesFactory *factory + = TextEditorSettings::codeStyleFactory(CppTools::Constants::CPP_SETTINGS_ID); + setIndenter(factory->createIndenter()); connect(this, &TextEditor::TextDocument::tabSettingsChanged, this, &CppEditorDocument::invalidateFormatterCache); diff --git a/src/plugins/cpptools/cppcodestylepreferencesfactory.h b/src/plugins/cpptools/cppcodestylepreferencesfactory.h index 10715a12193..13d602a08df 100644 --- a/src/plugins/cpptools/cppcodestylepreferencesfactory.h +++ b/src/plugins/cpptools/cppcodestylepreferencesfactory.h @@ -25,11 +25,13 @@ #pragma once +#include "cpptools_global.h" + #include namespace CppTools { -class CppCodeStylePreferencesFactory : public TextEditor::ICodeStylePreferencesFactory +class CPPTOOLS_EXPORT CppCodeStylePreferencesFactory : public TextEditor::ICodeStylePreferencesFactory { public: CppCodeStylePreferencesFactory(); diff --git a/src/plugins/cpptools/cppcodestylesettingspage.cpp b/src/plugins/cpptools/cppcodestylesettingspage.cpp index dc5237efc04..26a0edaa6fb 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.cpp +++ b/src/plugins/cpptools/cppcodestylesettingspage.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -523,16 +524,19 @@ CppCodeStyleSettingsPage::CppCodeStyleSettingsPage(QWidget *parent) : QWidget *CppCodeStyleSettingsPage::widget() { if (!m_widget) { - CppCodeStylePreferences *originalCodeStylePreferences - = CppToolsSettings::instance()->cppCodeStyle(); - m_pageCppCodeStylePreferences = new CppCodeStylePreferences(m_widget); - m_pageCppCodeStylePreferences->setDelegatingPool(originalCodeStylePreferences->delegatingPool()); - m_pageCppCodeStylePreferences->setCodeStyleSettings(originalCodeStylePreferences->codeStyleSettings()); - m_pageCppCodeStylePreferences->setCurrentDelegate(originalCodeStylePreferences->currentDelegate()); + CppCodeStylePreferences *originalCodeStylePreferences = CppToolsSettings::instance() + ->cppCodeStyle(); + m_pageCppCodeStylePreferences = new CppCodeStylePreferences(); + m_pageCppCodeStylePreferences->setDelegatingPool( + originalCodeStylePreferences->delegatingPool()); + m_pageCppCodeStylePreferences->setCodeStyleSettings( + originalCodeStylePreferences->codeStyleSettings()); + m_pageCppCodeStylePreferences->setCurrentDelegate( + originalCodeStylePreferences->currentDelegate()); // we set id so that it won't be possible to set delegate to the original prefs m_pageCppCodeStylePreferences->setId(originalCodeStylePreferences->id()); - m_widget = new CodeStyleEditor(TextEditorSettings::codeStyleFactory(CppTools::Constants::CPP_SETTINGS_ID), - m_pageCppCodeStylePreferences); + m_widget = TextEditorSettings::codeStyleFactory(CppTools::Constants::CPP_SETTINGS_ID) + ->createCodeStyleEditor(m_pageCppCodeStylePreferences); } return m_widget; } diff --git a/src/plugins/cpptools/cppcodestylesettingspage.h b/src/plugins/cpptools/cppcodestylesettingspage.h index 9a294b0a27b..9f29d783ba3 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.h +++ b/src/plugins/cpptools/cppcodestylesettingspage.h @@ -91,7 +91,7 @@ public: private: CppCodeStylePreferences *m_pageCppCodeStylePreferences; - QPointer m_widget; + QPointer m_widget; }; } // namespace Internal diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 10fbbcf11e9..514b2d62230 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -39,7 +39,6 @@ #include "cpplocatordata.h" #include "cpplocatorfilter.h" #include "cppbuiltinmodelmanagersupport.h" -#include "cppqtstyleindenter.h" #include "cpprefactoringchanges.h" #include "cpprefactoringengine.h" #include "cppsourceprocessor.h" @@ -510,7 +509,6 @@ void CppModelManager::initializeBuiltinModelManagerSupport() CppModelManager::CppModelManager() : CppModelManagerBase(nullptr) - , createCppIndenter([]() { return new CppQtStyleIndenter; }) , d(new CppModelManagerPrivate) { d->m_indexingSupporter = 0; diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index bafc3b32716..9fcd7169e7e 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -215,13 +215,6 @@ public: RefactoringEngineInterface *refactoringEngine); static void removeRefactoringEngine(RefactoringEngineType type); - using CppIndenterCreator = std::function; - void setCppIndenterCreator(CppIndenterCreator indenterCreator) - { - createCppIndenter = std::move(indenterCreator); - } - CppIndenterCreator createCppIndenter; - void setLocatorFilter(std::unique_ptr &&filter); void setClassesFilter(std::unique_ptr &&filter); void setIncludesFilter(std::unique_ptr &&filter); diff --git a/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp b/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp index 3750e6a123a..9410c499316 100644 --- a/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp @@ -49,8 +49,9 @@ CodeStyleSettingsWidget::CodeStyleSettingsWidget(Project *project) : QWidget(), Core::Id languageId = factory->languageId(); ICodeStylePreferences *codeStylePreferences = config->codeStyle(languageId); - auto preview = new CodeStyleEditor(factory, codeStylePreferences, m_ui.stackedWidget); - preview->clearMargins(); + auto preview = factory->createCodeStyleEditor(codeStylePreferences, m_ui.stackedWidget); + if (preview && preview->layout()) + preview->layout()->setContentsMargins(QMargins()); m_ui.stackedWidget->addWidget(preview); m_ui.languageComboBox->addItem(factory->displayName()); } diff --git a/src/plugins/texteditor/codestyleeditor.cpp b/src/plugins/texteditor/codestyleeditor.cpp index 526ee106d61..cbf74c0a124 100644 --- a/src/plugins/texteditor/codestyleeditor.cpp +++ b/src/plugins/texteditor/codestyleeditor.cpp @@ -79,11 +79,6 @@ CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory, updatePreview(); } -void CodeStyleEditor::clearMargins() -{ - m_layout->setContentsMargins(QMargins()); -} - void CodeStyleEditor::updatePreview() { QTextDocument *doc = m_preview->document(); diff --git a/src/plugins/texteditor/codestyleeditor.h b/src/plugins/texteditor/codestyleeditor.h index b90752252e7..edd04db1719 100644 --- a/src/plugins/texteditor/codestyleeditor.h +++ b/src/plugins/texteditor/codestyleeditor.h @@ -46,8 +46,6 @@ public: CodeStyleEditor(ICodeStylePreferencesFactory *factory, ICodeStylePreferences *codeStyle, QWidget *parent = nullptr); - void clearMargins(); - private: void updatePreview(); diff --git a/src/plugins/texteditor/icodestylepreferencesfactory.cpp b/src/plugins/texteditor/icodestylepreferencesfactory.cpp index d37a9991292..245d9b695c1 100644 --- a/src/plugins/texteditor/icodestylepreferencesfactory.cpp +++ b/src/plugins/texteditor/icodestylepreferencesfactory.cpp @@ -25,6 +25,8 @@ #include "icodestylepreferencesfactory.h" +#include "codestyleeditor.h" + using namespace TextEditor; ICodeStylePreferencesFactory::ICodeStylePreferencesFactory(QObject *parent) : @@ -32,3 +34,8 @@ ICodeStylePreferencesFactory::ICodeStylePreferencesFactory(QObject *parent) : { } +QWidget *ICodeStylePreferencesFactory::createCodeStyleEditor(ICodeStylePreferences *codeStyle, + QWidget *parent) +{ + return new CodeStyleEditor(this, codeStyle, parent); +} diff --git a/src/plugins/texteditor/icodestylepreferencesfactory.h b/src/plugins/texteditor/icodestylepreferencesfactory.h index 8fbc49e036b..43cc6edffdb 100644 --- a/src/plugins/texteditor/icodestylepreferencesfactory.h +++ b/src/plugins/texteditor/icodestylepreferencesfactory.h @@ -42,6 +42,8 @@ class TEXTEDITOR_EXPORT ICodeStylePreferencesFactory : public QObject public: explicit ICodeStylePreferencesFactory(QObject *parent = nullptr); + virtual QWidget *createCodeStyleEditor(ICodeStylePreferences *codeStyle, + QWidget *parent = nullptr); virtual Core::Id languageId() = 0; virtual QString displayName() = 0; virtual ICodeStylePreferences *createCodeStyle() const = 0;