forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -31,27 +31,19 @@
|
|||||||
|
|
||||||
using namespace TextEditor;
|
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;
|
return g_snippetProviders;
|
||||||
}
|
}
|
||||||
|
|
||||||
SnippetProvider *SnippetProvider::snippetProviderForGroupId(const QString &groupId)
|
SnippetProvider *SnippetProvider::snippetProviderForGroupId(const QString &groupId)
|
||||||
{
|
{
|
||||||
return Utils::findOrDefault(g_snippetProviders,
|
auto end = std::end(g_snippetProviders);
|
||||||
Utils::equal(&SnippetProvider::groupId, groupId));
|
auto it = std::find_if(std::begin(g_snippetProviders), end,
|
||||||
}
|
Utils::equal(&SnippetProvider::groupId, groupId));
|
||||||
|
return (it == end) ? nullptr : &*it;
|
||||||
SnippetProvider::SnippetProvider()
|
|
||||||
{
|
|
||||||
g_snippetProviders.append(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
SnippetProvider::~SnippetProvider()
|
|
||||||
{
|
|
||||||
g_snippetProviders.removeOne(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -137,10 +129,9 @@ static void doNotDecorate(TextEditorWidget *) { }
|
|||||||
void SnippetProvider::registerGroup(const QString &groupId, const QString &displayName,
|
void SnippetProvider::registerGroup(const QString &groupId, const QString &displayName,
|
||||||
EditorDecorator editorDecorator)
|
EditorDecorator editorDecorator)
|
||||||
{
|
{
|
||||||
auto provider = new SnippetProvider;
|
SnippetProvider provider;
|
||||||
provider->m_groupId = groupId;
|
provider.m_groupId = groupId;
|
||||||
provider->m_displayName = displayName;
|
provider.m_displayName = displayName;
|
||||||
provider->m_editorDecorator = editorDecorator ? editorDecorator : EditorDecorator(doNotDecorate);
|
provider.m_editorDecorator = editorDecorator ? editorDecorator : EditorDecorator(doNotDecorate);
|
||||||
Internal::TextEditorPlugin::instance()->addAutoReleasedObject(provider);
|
g_snippetProviders.append(provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
#include <texteditor/texteditor_global.h>
|
#include <texteditor/texteditor_global.h>
|
||||||
|
|
||||||
#include <QObject>
|
#include <QString>
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
@@ -35,13 +35,14 @@ namespace TextEditor {
|
|||||||
|
|
||||||
class TextEditorWidget;
|
class TextEditorWidget;
|
||||||
|
|
||||||
class TEXTEDITOR_EXPORT SnippetProvider : public QObject
|
class TEXTEDITOR_EXPORT SnippetProvider
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
public:
|
public:
|
||||||
|
SnippetProvider() = default;
|
||||||
|
|
||||||
using EditorDecorator = std::function<void(TextEditorWidget *)>;
|
using EditorDecorator = std::function<void(TextEditorWidget *)>;
|
||||||
|
|
||||||
static const QList<SnippetProvider *> snippetProviders();
|
static const QList<SnippetProvider> &snippetProviders();
|
||||||
static SnippetProvider *snippetProviderForGroupId(const QString &groupId);
|
static SnippetProvider *snippetProviderForGroupId(const QString &groupId);
|
||||||
|
|
||||||
static void registerGroup(const QString &groupId, const QString &displayName,
|
static void registerGroup(const QString &groupId, const QString &displayName,
|
||||||
@@ -54,9 +55,6 @@ public:
|
|||||||
void decorateEditor(TextEditorWidget *editor) const;
|
void decorateEditor(TextEditorWidget *editor) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SnippetProvider();
|
|
||||||
~SnippetProvider() override;
|
|
||||||
|
|
||||||
QString m_groupId;
|
QString m_groupId;
|
||||||
QString m_displayName;
|
QString m_displayName;
|
||||||
EditorDecorator m_editorDecorator;
|
EditorDecorator m_editorDecorator;
|
||||||
|
@@ -409,9 +409,9 @@ int SnippetsCollection::groupIndex(const QString &groupId) const
|
|||||||
|
|
||||||
void SnippetsCollection::identifyGroups()
|
void SnippetsCollection::identifyGroups()
|
||||||
{
|
{
|
||||||
for (SnippetProvider *provider : SnippetProvider::snippetProviders()) {
|
for (const SnippetProvider &provider : SnippetProvider::snippetProviders()) {
|
||||||
const int groupIndex = m_groupIndexById.size();
|
const int groupIndex = m_groupIndexById.size();
|
||||||
m_groupIndexById.insert(provider->groupId(), groupIndex);
|
m_groupIndexById.insert(provider.groupId(), groupIndex);
|
||||||
m_snippets.resize(groupIndex + 1);
|
m_snippets.resize(groupIndex + 1);
|
||||||
m_activeSnippetsEnd.resize(groupIndex + 1);
|
m_activeSnippetsEnd.resize(groupIndex + 1);
|
||||||
m_activeSnippetsEnd[groupIndex] = m_snippets[groupIndex].end();
|
m_activeSnippetsEnd[groupIndex] = m_snippets[groupIndex].end();
|
||||||
|
@@ -328,11 +328,11 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w)
|
|||||||
{
|
{
|
||||||
m_ui.setupUi(w);
|
m_ui.setupUi(w);
|
||||||
|
|
||||||
const QList<SnippetProvider *> &providers = SnippetProvider::snippetProviders();
|
const QList<SnippetProvider> &providers = SnippetProvider::snippetProviders();
|
||||||
for (SnippetProvider *provider : providers) {
|
for (const SnippetProvider &provider : providers) {
|
||||||
m_ui.groupCombo->addItem(provider->displayName(), provider->groupId());
|
m_ui.groupCombo->addItem(provider.displayName(), provider.groupId());
|
||||||
SnippetEditorWidget *snippetEditor = new SnippetEditorWidget(w);
|
SnippetEditorWidget *snippetEditor = new SnippetEditorWidget(w);
|
||||||
provider->decorateEditor(snippetEditor);
|
provider.decorateEditor(snippetEditor);
|
||||||
m_ui.snippetsEditorStack->insertWidget(m_ui.groupCombo->count() - 1, snippetEditor);
|
m_ui.snippetsEditorStack->insertWidget(m_ui.groupCombo->count() - 1, snippetEditor);
|
||||||
connect(snippetEditor, &SnippetEditorWidget::snippetContentChanged,
|
connect(snippetEditor, &SnippetEditorWidget::snippetContentChanged,
|
||||||
this, &SnippetsSettingsPagePrivate::setSnippetContent);
|
this, &SnippetsSettingsPagePrivate::setSnippetContent);
|
||||||
@@ -536,15 +536,15 @@ void SnippetsSettingsPagePrivate::setSnippetContent()
|
|||||||
|
|
||||||
void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings &fontSettings)
|
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) {
|
for (int i = 0; i < m_ui.groupCombo->count(); ++i) {
|
||||||
SnippetEditorWidget *snippetEditor = editorAt(i);
|
SnippetEditorWidget *snippetEditor = editorAt(i);
|
||||||
snippetEditor->textDocument()->setFontSettings(fontSettings);
|
snippetEditor->textDocument()->setFontSettings(fontSettings);
|
||||||
const QString &id = m_ui.groupCombo->itemData(i).toString();
|
const QString &id = m_ui.groupCombo->itemData(i).toString();
|
||||||
// This list should be quite short... Re-iterating over it is ok.
|
// This list should be quite short... Re-iterating over it is ok.
|
||||||
foreach (const SnippetProvider *provider, providers) {
|
foreach (const SnippetProvider &provider, providers) {
|
||||||
if (provider->groupId() == id)
|
if (provider.groupId() == id)
|
||||||
provider->decorateEditor(snippetEditor);
|
provider.decorateEditor(snippetEditor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user