forked from qt-creator/qt-creator
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 <david.schulz@qt.io>
This commit is contained in:
@@ -38,14 +38,6 @@ const QList<SnippetProvider> &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);
|
||||
}
|
||||
|
||||
@@ -43,16 +43,13 @@ public:
|
||||
using EditorDecorator = std::function<void(TextEditorWidget *)>;
|
||||
|
||||
static const QList<SnippetProvider> &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;
|
||||
|
||||
@@ -328,11 +328,10 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w)
|
||||
{
|
||||
m_ui.setupUi(w);
|
||||
|
||||
const QList<SnippetProvider> &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<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);
|
||||
}
|
||||
SnippetProvider::decorateEditor(snippetEditor, id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user