diff options
author | hjk <hjk@qt.io> | 2018-02-06 14:26:17 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2018-02-07 07:50:14 +0000 |
commit | c685dd1d830312c6410516cb44558ea7408c9a2a (patch) | |
tree | 6173122ae5af2594a0ec6c299879144aa1603551 /src/plugins/texteditor/snippets | |
parent | 58a168db8250abb741dd1a47bc53444a33072fab (diff) |
TextEditor: De-qobjectify SnippetProvider
It's really not much more than a struct with three items.
And there's no need to have them in the global object pool.
Change-Id: Ie4f46ba2ecb1b90ef22479a0e81d03d9301c2e7a
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/texteditor/snippets')
4 files changed, 26 insertions, 37 deletions
diff --git a/src/plugins/texteditor/snippets/snippetprovider.cpp b/src/plugins/texteditor/snippets/snippetprovider.cpp index 13e95152323..e8a71058c42 100644 --- a/src/plugins/texteditor/snippets/snippetprovider.cpp +++ b/src/plugins/texteditor/snippets/snippetprovider.cpp @@ -31,27 +31,19 @@ using namespace TextEditor; -static QList<SnippetProvider *> g_snippetProviders; +static QList<SnippetProvider> g_snippetProviders; -const QList<SnippetProvider *> SnippetProvider::snippetProviders() +const QList<SnippetProvider> &SnippetProvider::snippetProviders() { return g_snippetProviders; } SnippetProvider *SnippetProvider::snippetProviderForGroupId(const QString &groupId) { - return Utils::findOrDefault(g_snippetProviders, - Utils::equal(&SnippetProvider::groupId, groupId)); -} - -SnippetProvider::SnippetProvider() -{ - g_snippetProviders.append(this); -} - -SnippetProvider::~SnippetProvider() -{ - g_snippetProviders.removeOne(this); + 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; } /*! @@ -137,10 +129,9 @@ static void doNotDecorate(TextEditorWidget *) { } void SnippetProvider::registerGroup(const QString &groupId, const QString &displayName, EditorDecorator editorDecorator) { - auto provider = new SnippetProvider; - provider->m_groupId = groupId; - provider->m_displayName = displayName; - provider->m_editorDecorator = editorDecorator ? editorDecorator : EditorDecorator(doNotDecorate); - Internal::TextEditorPlugin::instance()->addAutoReleasedObject(provider); + SnippetProvider provider; + provider.m_groupId = groupId; + provider.m_displayName = displayName; + provider.m_editorDecorator = editorDecorator ? editorDecorator : EditorDecorator(doNotDecorate); + g_snippetProviders.append(provider); } - diff --git a/src/plugins/texteditor/snippets/snippetprovider.h b/src/plugins/texteditor/snippets/snippetprovider.h index 5c343df1823..d33a3bcdd0f 100644 --- a/src/plugins/texteditor/snippets/snippetprovider.h +++ b/src/plugins/texteditor/snippets/snippetprovider.h @@ -27,7 +27,7 @@ #include <texteditor/texteditor_global.h> -#include <QObject> +#include <QString> #include <functional> @@ -35,13 +35,14 @@ namespace TextEditor { class TextEditorWidget; -class TEXTEDITOR_EXPORT SnippetProvider : public QObject +class TEXTEDITOR_EXPORT SnippetProvider { - Q_OBJECT public: + SnippetProvider() = default; + using EditorDecorator = std::function<void(TextEditorWidget *)>; - static const QList<SnippetProvider *> snippetProviders(); + static const QList<SnippetProvider> &snippetProviders(); static SnippetProvider *snippetProviderForGroupId(const QString &groupId); static void registerGroup(const QString &groupId, const QString &displayName, @@ -54,9 +55,6 @@ public: void decorateEditor(TextEditorWidget *editor) const; private: - SnippetProvider(); - ~SnippetProvider() override; - QString m_groupId; QString m_displayName; EditorDecorator m_editorDecorator; diff --git a/src/plugins/texteditor/snippets/snippetscollection.cpp b/src/plugins/texteditor/snippets/snippetscollection.cpp index 20c9615d5a6..5756a01f668 100644 --- a/src/plugins/texteditor/snippets/snippetscollection.cpp +++ b/src/plugins/texteditor/snippets/snippetscollection.cpp @@ -409,9 +409,9 @@ int SnippetsCollection::groupIndex(const QString &groupId) const void SnippetsCollection::identifyGroups() { - for (SnippetProvider *provider : SnippetProvider::snippetProviders()) { + for (const SnippetProvider &provider : SnippetProvider::snippetProviders()) { const int groupIndex = m_groupIndexById.size(); - m_groupIndexById.insert(provider->groupId(), groupIndex); + m_groupIndexById.insert(provider.groupId(), groupIndex); m_snippets.resize(groupIndex + 1); m_activeSnippetsEnd.resize(groupIndex + 1); m_activeSnippetsEnd[groupIndex] = m_snippets[groupIndex].end(); diff --git a/src/plugins/texteditor/snippets/snippetssettingspage.cpp b/src/plugins/texteditor/snippets/snippetssettingspage.cpp index 96a81d27f0e..cc0b43a2275 100644 --- a/src/plugins/texteditor/snippets/snippetssettingspage.cpp +++ b/src/plugins/texteditor/snippets/snippetssettingspage.cpp @@ -328,11 +328,11 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w) { m_ui.setupUi(w); - const QList<SnippetProvider *> &providers = SnippetProvider::snippetProviders(); - for (SnippetProvider *provider : providers) { - m_ui.groupCombo->addItem(provider->displayName(), provider->groupId()); + const QList<SnippetProvider> &providers = SnippetProvider::snippetProviders(); + for (const SnippetProvider &provider : providers) { + m_ui.groupCombo->addItem(provider.displayName(), provider.groupId()); SnippetEditorWidget *snippetEditor = new SnippetEditorWidget(w); - provider->decorateEditor(snippetEditor); + provider.decorateEditor(snippetEditor); m_ui.snippetsEditorStack->insertWidget(m_ui.groupCombo->count() - 1, snippetEditor); connect(snippetEditor, &SnippetEditorWidget::snippetContentChanged, this, &SnippetsSettingsPagePrivate::setSnippetContent); @@ -536,15 +536,15 @@ void SnippetsSettingsPagePrivate::setSnippetContent() void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings &fontSettings) { - const QList<SnippetProvider *> &providers = SnippetProvider::snippetProviders(); + const QList<SnippetProvider> &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); + foreach (const SnippetProvider &provider, providers) { + if (provider.groupId() == id) + provider.decorateEditor(snippetEditor); } } } |