From 91c19c2734246dbf528a6076a57b72d924bf0484 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 6 Feb 2018 15:59:05 +0100 Subject: [PATCH] TextEditor: Simplify SnippetProvider handling The group identifier is as good as the actual object, so use that on the generator and the consumer side. Change-Id: I6ccd54a2362631af0b50583f12563b8e41a5dd78 Reviewed-by: David Schulz --- .../cppcodestylepreferencesfactory.cpp | 7 ++--- .../cpptools/cppcodestylepreferencesfactory.h | 2 +- .../cpptools/cppcodestylesettingspage.cpp | 6 +--- .../nimcodestylepreferencesfactory.cpp | 5 ++-- .../settings/nimcodestylepreferencesfactory.h | 2 +- .../qmljscodestylepreferencesfactory.cpp | 10 +++---- .../qmljscodestylepreferencesfactory.h | 2 +- .../qmljstools/qmljscodestylesettingspage.cpp | 7 ++--- src/plugins/texteditor/codestyleeditor.cpp | 5 ++-- .../texteditor/icodestylepreferencesfactory.h | 2 +- .../texteditor/snippets/snippetprovider.cpp | 28 ++++--------------- .../texteditor/snippets/snippetprovider.h | 5 +--- .../snippets/snippetssettingspage.cpp | 11 ++------ 13 files changed, 28 insertions(+), 64 deletions(-) diff --git a/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp b/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp index 599849a302d..27b9d3877bb 100644 --- a/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp +++ b/src/plugins/cpptools/cppcodestylepreferencesfactory.cpp @@ -31,9 +31,6 @@ #include "cppqtstyleindenter.h" #include -#include - -#include #include @@ -121,9 +118,9 @@ TextEditor::Indenter *CppCodeStylePreferencesFactory::createIndenter() const return new CppQtStyleIndenter(); } -TextEditor::SnippetProvider *CppCodeStylePreferencesFactory::snippetProvider() const +QString CppCodeStylePreferencesFactory::snippetProviderGroupId() const { - return TextEditor::SnippetProvider::snippetProviderForGroupId(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID); + return CppEditor::Constants::CPP_SNIPPETS_GROUP_ID; } QString CppCodeStylePreferencesFactory::previewText() const diff --git a/src/plugins/cpptools/cppcodestylepreferencesfactory.h b/src/plugins/cpptools/cppcodestylepreferencesfactory.h index 17e179e121b..10715a12193 100644 --- a/src/plugins/cpptools/cppcodestylepreferencesfactory.h +++ b/src/plugins/cpptools/cppcodestylepreferencesfactory.h @@ -40,7 +40,7 @@ public: QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, QWidget *parent) const; TextEditor::Indenter *createIndenter() const; - TextEditor::SnippetProvider *snippetProvider() const; + QString snippetProviderGroupId() const; QString previewText() const; }; diff --git a/src/plugins/cpptools/cppcodestylesettingspage.cpp b/src/plugins/cpptools/cppcodestylesettingspage.cpp index 5986d7a5040..3f074b9f034 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.cpp +++ b/src/plugins/cpptools/cppcodestylesettingspage.cpp @@ -493,13 +493,9 @@ void CppCodeStylePreferencesWidget::updatePreview() void CppCodeStylePreferencesWidget::decorateEditors(const FontSettings &fontSettings) { - const SnippetProvider *provider = - SnippetProvider::snippetProviderForGroupId(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID); - foreach (SnippetEditorWidget *editor, m_previews) { editor->textDocument()->setFontSettings(fontSettings); - if (provider) - provider->decorateEditor(editor); + SnippetProvider::decorateEditor(editor, CppEditor::Constants::CPP_SNIPPETS_GROUP_ID); } } diff --git a/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp b/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp index 6d35cdd78fa..997622278e3 100644 --- a/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp +++ b/src/plugins/nim/settings/nimcodestylepreferencesfactory.cpp @@ -32,7 +32,6 @@ #include #include -#include #include #include @@ -73,9 +72,9 @@ TextEditor::Indenter *NimCodeStylePreferencesFactory::createIndenter() const return new NimIndenter(); } -SnippetProvider *NimCodeStylePreferencesFactory::snippetProvider() const +QString NimCodeStylePreferencesFactory::snippetProviderGroupId() const { - return SnippetProvider::snippetProviderForGroupId(Nim::Constants::C_NIMSNIPPETSGROUP_ID); + return Nim::Constants::C_NIMSNIPPETSGROUP_ID; } QString NimCodeStylePreferencesFactory::previewText() const diff --git a/src/plugins/nim/settings/nimcodestylepreferencesfactory.h b/src/plugins/nim/settings/nimcodestylepreferencesfactory.h index e7b42ec5d2e..c12678e6f6d 100644 --- a/src/plugins/nim/settings/nimcodestylepreferencesfactory.h +++ b/src/plugins/nim/settings/nimcodestylepreferencesfactory.h @@ -42,7 +42,7 @@ public: QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, QWidget *parent) const; TextEditor::Indenter *createIndenter() const; - TextEditor::SnippetProvider *snippetProvider() const; + QString snippetProviderGroupId() const; QString previewText() const; }; diff --git a/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp b/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp index 42a42d4d1f1..f5c259dca05 100644 --- a/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp +++ b/src/plugins/qmljstools/qmljscodestylepreferencesfactory.cpp @@ -27,10 +27,11 @@ #include "qmljscodestylesettingspage.h" #include "qmljstoolsconstants.h" #include "qmljsindenter.h" + #include -#include -#include + #include + #include using namespace QmlJSTools; @@ -86,10 +87,9 @@ TextEditor::Indenter *QmlJSCodeStylePreferencesFactory::createIndenter() const return new QmlJSEditor::Internal::Indenter(); } -TextEditor::SnippetProvider *QmlJSCodeStylePreferencesFactory::snippetProvider() const +QString QmlJSCodeStylePreferencesFactory::snippetProviderGroupId() const { - return TextEditor::SnippetProvider::snippetProviderForGroupId - (QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID); + return QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID; } QString QmlJSCodeStylePreferencesFactory::previewText() const diff --git a/src/plugins/qmljstools/qmljscodestylepreferencesfactory.h b/src/plugins/qmljstools/qmljscodestylepreferencesfactory.h index c6764123d8f..00618434859 100644 --- a/src/plugins/qmljstools/qmljscodestylepreferencesfactory.h +++ b/src/plugins/qmljstools/qmljscodestylepreferencesfactory.h @@ -40,7 +40,7 @@ public: QWidget *createEditor(TextEditor::ICodeStylePreferences *settings, QWidget *parent) const; TextEditor::Indenter *createIndenter() const; - TextEditor::SnippetProvider *snippetProvider() const; + QString snippetProviderGroupId() const; QString previewText() const; }; diff --git a/src/plugins/qmljstools/qmljscodestylesettingspage.cpp b/src/plugins/qmljstools/qmljscodestylesettingspage.cpp index 04bbb007e58..cb43db2d175 100644 --- a/src/plugins/qmljstools/qmljscodestylesettingspage.cpp +++ b/src/plugins/qmljstools/qmljscodestylesettingspage.cpp @@ -82,12 +82,9 @@ void QmlJSCodeStylePreferencesWidget::setPreferences(ICodeStylePreferences *pref void QmlJSCodeStylePreferencesWidget::decorateEditor(const FontSettings &fontSettings) { - const SnippetProvider *provider = - SnippetProvider::snippetProviderForGroupId(QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID); - m_ui->previewTextEdit->textDocument()->setFontSettings(fontSettings); - if (provider) - provider->decorateEditor(m_ui->previewTextEdit); + SnippetProvider::decorateEditor(m_ui->previewTextEdit, + QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID); } void QmlJSCodeStylePreferencesWidget::setVisualizeWhitespace(bool on) diff --git a/src/plugins/texteditor/codestyleeditor.cpp b/src/plugins/texteditor/codestyleeditor.cpp index 2c9e03a3dab..599af2974a0 100644 --- a/src/plugins/texteditor/codestyleeditor.cpp +++ b/src/plugins/texteditor/codestyleeditor.cpp @@ -54,9 +54,8 @@ CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory, DisplaySettings displaySettings = m_preview->displaySettings(); displaySettings.m_visualizeWhitespace = true; m_preview->setDisplaySettings(displaySettings); - SnippetProvider *provider = factory->snippetProvider(); - if (provider) - provider->decorateEditor(m_preview); + QString groupId = factory->snippetProviderGroupId(); + SnippetProvider::decorateEditor(m_preview, groupId); QLabel *label = new QLabel( tr("Edit preview contents to see how the current settings " "are applied to custom code snippets. Changes in the preview " diff --git a/src/plugins/texteditor/icodestylepreferencesfactory.h b/src/plugins/texteditor/icodestylepreferencesfactory.h index f9d534376fb..46fa219a675 100644 --- a/src/plugins/texteditor/icodestylepreferencesfactory.h +++ b/src/plugins/texteditor/icodestylepreferencesfactory.h @@ -47,7 +47,7 @@ public: virtual ICodeStylePreferences *createCodeStyle() const = 0; virtual QWidget *createEditor(ICodeStylePreferences *preferences, QWidget *parent) const = 0; virtual TextEditor::Indenter *createIndenter() const = 0; - virtual SnippetProvider *snippetProvider() const = 0; + virtual QString snippetProviderGroupId() const = 0; virtual QString previewText() const = 0; }; diff --git a/src/plugins/texteditor/snippets/snippetprovider.cpp b/src/plugins/texteditor/snippets/snippetprovider.cpp index e8a71058c42..0d5caa52297 100644 --- a/src/plugins/texteditor/snippets/snippetprovider.cpp +++ b/src/plugins/texteditor/snippets/snippetprovider.cpp @@ -38,14 +38,6 @@ const QList &SnippetProvider::snippetProviders() return g_snippetProviders; } -SnippetProvider *SnippetProvider::snippetProviderForGroupId(const QString &groupId) -{ - auto end = std::end(g_snippetProviders); - auto it = std::find_if(std::begin(g_snippetProviders), end, - Utils::equal(&SnippetProvider::groupId, groupId)); - return (it == end) ? nullptr : &*it; -} - /*! \group Snippets \title Snippets for Editors @@ -104,25 +96,17 @@ QString SnippetProvider::displayName() const return m_displayName; } -/*! - EditorDecorator is a hook which allows you to apply customizations such as highlighting or - indentation to the snippet editor. -*/ -SnippetProvider::EditorDecorator SnippetProvider::editorDecorator() const -{ - return m_editorDecorator; -} - /*! Applies customizations such as highlighting or indentation to the snippet editor. */ -void SnippetProvider::decorateEditor(TextEditorWidget *editor) const +void SnippetProvider::decorateEditor(TextEditorWidget *editor, const QString &groupId) { - editorDecorator()(editor); + for (const SnippetProvider &provider : g_snippetProviders) { + if (provider.m_groupId == groupId && provider.m_editorDecorator) + provider.m_editorDecorator(editor); + } } -static void doNotDecorate(TextEditorWidget *) { } - /*! Registers a snippet group with \a groupId, \a displayName and \a editorDecorator. */ @@ -132,6 +116,6 @@ void SnippetProvider::registerGroup(const QString &groupId, const QString &displ SnippetProvider provider; provider.m_groupId = groupId; provider.m_displayName = displayName; - provider.m_editorDecorator = editorDecorator ? editorDecorator : EditorDecorator(doNotDecorate); + provider.m_editorDecorator = editorDecorator; g_snippetProviders.append(provider); } diff --git a/src/plugins/texteditor/snippets/snippetprovider.h b/src/plugins/texteditor/snippets/snippetprovider.h index d33a3bcdd0f..6fd64e1ecdb 100644 --- a/src/plugins/texteditor/snippets/snippetprovider.h +++ b/src/plugins/texteditor/snippets/snippetprovider.h @@ -43,16 +43,13 @@ public: using EditorDecorator = std::function; static const QList &snippetProviders(); - static SnippetProvider *snippetProviderForGroupId(const QString &groupId); - static void registerGroup(const QString &groupId, const QString &displayName, EditorDecorator editorDecorator = EditorDecorator()); QString groupId() const; QString displayName() const; - EditorDecorator editorDecorator() const; - void decorateEditor(TextEditorWidget *editor) const; + static void decorateEditor(TextEditorWidget *editor, const QString &groupId); private: QString m_groupId; diff --git a/src/plugins/texteditor/snippets/snippetssettingspage.cpp b/src/plugins/texteditor/snippets/snippetssettingspage.cpp index cc0b43a2275..b8151c4b172 100644 --- a/src/plugins/texteditor/snippets/snippetssettingspage.cpp +++ b/src/plugins/texteditor/snippets/snippetssettingspage.cpp @@ -328,11 +328,10 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w) { m_ui.setupUi(w); - const QList &providers = SnippetProvider::snippetProviders(); - for (const SnippetProvider &provider : providers) { + for (const SnippetProvider &provider : SnippetProvider::snippetProviders()) { m_ui.groupCombo->addItem(provider.displayName(), provider.groupId()); SnippetEditorWidget *snippetEditor = new SnippetEditorWidget(w); - provider.decorateEditor(snippetEditor); + SnippetProvider::decorateEditor(snippetEditor, provider.groupId()); m_ui.snippetsEditorStack->insertWidget(m_ui.groupCombo->count() - 1, snippetEditor); connect(snippetEditor, &SnippetEditorWidget::snippetContentChanged, this, &SnippetsSettingsPagePrivate::setSnippetContent); @@ -536,16 +535,12 @@ void SnippetsSettingsPagePrivate::setSnippetContent() void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings &fontSettings) { - const QList &providers = SnippetProvider::snippetProviders(); for (int i = 0; i < m_ui.groupCombo->count(); ++i) { SnippetEditorWidget *snippetEditor = editorAt(i); snippetEditor->textDocument()->setFontSettings(fontSettings); const QString &id = m_ui.groupCombo->itemData(i).toString(); // This list should be quite short... Re-iterating over it is ok. - foreach (const SnippetProvider &provider, providers) { - if (provider.groupId() == id) - provider.decorateEditor(snippetEditor); - } + SnippetProvider::decorateEditor(snippetEditor, id); } }