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:
@@ -31,9 +31,6 @@
|
|||||||
#include "cppqtstyleindenter.h"
|
#include "cppqtstyleindenter.h"
|
||||||
|
|
||||||
#include <cppeditor/cppeditorconstants.h>
|
#include <cppeditor/cppeditorconstants.h>
|
||||||
#include <texteditor/snippets/snippetprovider.h>
|
|
||||||
|
|
||||||
#include <extensionsystem/pluginmanager.h>
|
|
||||||
|
|
||||||
#include <QLayout>
|
#include <QLayout>
|
||||||
|
|
||||||
@@ -121,9 +118,9 @@ TextEditor::Indenter *CppCodeStylePreferencesFactory::createIndenter() const
|
|||||||
return new CppQtStyleIndenter();
|
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
|
QString CppCodeStylePreferencesFactory::previewText() const
|
||||||
|
@@ -40,7 +40,7 @@ public:
|
|||||||
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
|
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
|
||||||
QWidget *parent) const;
|
QWidget *parent) const;
|
||||||
TextEditor::Indenter *createIndenter() const;
|
TextEditor::Indenter *createIndenter() const;
|
||||||
TextEditor::SnippetProvider *snippetProvider() const;
|
QString snippetProviderGroupId() const;
|
||||||
QString previewText() const;
|
QString previewText() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -493,13 +493,9 @@ void CppCodeStylePreferencesWidget::updatePreview()
|
|||||||
|
|
||||||
void CppCodeStylePreferencesWidget::decorateEditors(const FontSettings &fontSettings)
|
void CppCodeStylePreferencesWidget::decorateEditors(const FontSettings &fontSettings)
|
||||||
{
|
{
|
||||||
const SnippetProvider *provider =
|
|
||||||
SnippetProvider::snippetProviderForGroupId(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID);
|
|
||||||
|
|
||||||
foreach (SnippetEditorWidget *editor, m_previews) {
|
foreach (SnippetEditorWidget *editor, m_previews) {
|
||||||
editor->textDocument()->setFontSettings(fontSettings);
|
editor->textDocument()->setFontSettings(fontSettings);
|
||||||
if (provider)
|
SnippetProvider::decorateEditor(editor, CppEditor::Constants::CPP_SNIPPETS_GROUP_ID);
|
||||||
provider->decorateEditor(editor);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -32,7 +32,6 @@
|
|||||||
#include <coreplugin/id.h>
|
#include <coreplugin/id.h>
|
||||||
|
|
||||||
#include <texteditor/simplecodestylepreferences.h>
|
#include <texteditor/simplecodestylepreferences.h>
|
||||||
#include <texteditor/snippets/snippetprovider.h>
|
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QLayout>
|
#include <QLayout>
|
||||||
@@ -73,9 +72,9 @@ TextEditor::Indenter *NimCodeStylePreferencesFactory::createIndenter() const
|
|||||||
return new NimIndenter();
|
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
|
QString NimCodeStylePreferencesFactory::previewText() const
|
||||||
|
@@ -42,7 +42,7 @@ public:
|
|||||||
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
|
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
|
||||||
QWidget *parent) const;
|
QWidget *parent) const;
|
||||||
TextEditor::Indenter *createIndenter() const;
|
TextEditor::Indenter *createIndenter() const;
|
||||||
TextEditor::SnippetProvider *snippetProvider() const;
|
QString snippetProviderGroupId() const;
|
||||||
QString previewText() const;
|
QString previewText() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -27,10 +27,11 @@
|
|||||||
#include "qmljscodestylesettingspage.h"
|
#include "qmljscodestylesettingspage.h"
|
||||||
#include "qmljstoolsconstants.h"
|
#include "qmljstoolsconstants.h"
|
||||||
#include "qmljsindenter.h"
|
#include "qmljsindenter.h"
|
||||||
|
|
||||||
#include <texteditor/simplecodestylepreferences.h>
|
#include <texteditor/simplecodestylepreferences.h>
|
||||||
#include <texteditor/snippets/snippetprovider.h>
|
|
||||||
#include <extensionsystem/pluginmanager.h>
|
|
||||||
#include <qmljseditor/qmljseditorconstants.h>
|
#include <qmljseditor/qmljseditorconstants.h>
|
||||||
|
|
||||||
#include <QLayout>
|
#include <QLayout>
|
||||||
|
|
||||||
using namespace QmlJSTools;
|
using namespace QmlJSTools;
|
||||||
@@ -86,10 +87,9 @@ TextEditor::Indenter *QmlJSCodeStylePreferencesFactory::createIndenter() const
|
|||||||
return new QmlJSEditor::Internal::Indenter();
|
return new QmlJSEditor::Internal::Indenter();
|
||||||
}
|
}
|
||||||
|
|
||||||
TextEditor::SnippetProvider *QmlJSCodeStylePreferencesFactory::snippetProvider() const
|
QString QmlJSCodeStylePreferencesFactory::snippetProviderGroupId() const
|
||||||
{
|
{
|
||||||
return TextEditor::SnippetProvider::snippetProviderForGroupId
|
return QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID;
|
||||||
(QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QmlJSCodeStylePreferencesFactory::previewText() const
|
QString QmlJSCodeStylePreferencesFactory::previewText() const
|
||||||
|
@@ -40,7 +40,7 @@ public:
|
|||||||
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
|
QWidget *createEditor(TextEditor::ICodeStylePreferences *settings,
|
||||||
QWidget *parent) const;
|
QWidget *parent) const;
|
||||||
TextEditor::Indenter *createIndenter() const;
|
TextEditor::Indenter *createIndenter() const;
|
||||||
TextEditor::SnippetProvider *snippetProvider() const;
|
QString snippetProviderGroupId() const;
|
||||||
QString previewText() const;
|
QString previewText() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -82,12 +82,9 @@ void QmlJSCodeStylePreferencesWidget::setPreferences(ICodeStylePreferences *pref
|
|||||||
|
|
||||||
void QmlJSCodeStylePreferencesWidget::decorateEditor(const FontSettings &fontSettings)
|
void QmlJSCodeStylePreferencesWidget::decorateEditor(const FontSettings &fontSettings)
|
||||||
{
|
{
|
||||||
const SnippetProvider *provider =
|
|
||||||
SnippetProvider::snippetProviderForGroupId(QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID);
|
|
||||||
|
|
||||||
m_ui->previewTextEdit->textDocument()->setFontSettings(fontSettings);
|
m_ui->previewTextEdit->textDocument()->setFontSettings(fontSettings);
|
||||||
if (provider)
|
SnippetProvider::decorateEditor(m_ui->previewTextEdit,
|
||||||
provider->decorateEditor(m_ui->previewTextEdit);
|
QmlJSEditor::Constants::QML_SNIPPETS_GROUP_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlJSCodeStylePreferencesWidget::setVisualizeWhitespace(bool on)
|
void QmlJSCodeStylePreferencesWidget::setVisualizeWhitespace(bool on)
|
||||||
|
@@ -54,9 +54,8 @@ CodeStyleEditor::CodeStyleEditor(ICodeStylePreferencesFactory *factory,
|
|||||||
DisplaySettings displaySettings = m_preview->displaySettings();
|
DisplaySettings displaySettings = m_preview->displaySettings();
|
||||||
displaySettings.m_visualizeWhitespace = true;
|
displaySettings.m_visualizeWhitespace = true;
|
||||||
m_preview->setDisplaySettings(displaySettings);
|
m_preview->setDisplaySettings(displaySettings);
|
||||||
SnippetProvider *provider = factory->snippetProvider();
|
QString groupId = factory->snippetProviderGroupId();
|
||||||
if (provider)
|
SnippetProvider::decorateEditor(m_preview, groupId);
|
||||||
provider->decorateEditor(m_preview);
|
|
||||||
QLabel *label = new QLabel(
|
QLabel *label = new QLabel(
|
||||||
tr("Edit preview contents to see how the current settings "
|
tr("Edit preview contents to see how the current settings "
|
||||||
"are applied to custom code snippets. Changes in the preview "
|
"are applied to custom code snippets. Changes in the preview "
|
||||||
|
@@ -47,7 +47,7 @@ public:
|
|||||||
virtual ICodeStylePreferences *createCodeStyle() const = 0;
|
virtual ICodeStylePreferences *createCodeStyle() const = 0;
|
||||||
virtual QWidget *createEditor(ICodeStylePreferences *preferences, QWidget *parent) const = 0;
|
virtual QWidget *createEditor(ICodeStylePreferences *preferences, QWidget *parent) const = 0;
|
||||||
virtual TextEditor::Indenter *createIndenter() const = 0;
|
virtual TextEditor::Indenter *createIndenter() const = 0;
|
||||||
virtual SnippetProvider *snippetProvider() const = 0;
|
virtual QString snippetProviderGroupId() const = 0;
|
||||||
virtual QString previewText() const = 0;
|
virtual QString previewText() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -38,14 +38,6 @@ const QList<SnippetProvider> &SnippetProvider::snippetProviders()
|
|||||||
return g_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
|
\group Snippets
|
||||||
\title Snippets for Editors
|
\title Snippets for Editors
|
||||||
@@ -104,24 +96,16 @@ QString SnippetProvider::displayName() const
|
|||||||
return m_displayName;
|
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.
|
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.
|
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;
|
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;
|
||||||
g_snippetProviders.append(provider);
|
g_snippetProviders.append(provider);
|
||||||
}
|
}
|
||||||
|
@@ -43,16 +43,13 @@ public:
|
|||||||
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 void registerGroup(const QString &groupId, const QString &displayName,
|
static void registerGroup(const QString &groupId, const QString &displayName,
|
||||||
EditorDecorator editorDecorator = EditorDecorator());
|
EditorDecorator editorDecorator = EditorDecorator());
|
||||||
|
|
||||||
QString groupId() const;
|
QString groupId() const;
|
||||||
QString displayName() const;
|
QString displayName() const;
|
||||||
EditorDecorator editorDecorator() const;
|
|
||||||
|
|
||||||
void decorateEditor(TextEditorWidget *editor) const;
|
static void decorateEditor(TextEditorWidget *editor, const QString &groupId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_groupId;
|
QString m_groupId;
|
||||||
|
@@ -328,11 +328,10 @@ void SnippetsSettingsPagePrivate::configureUi(QWidget *w)
|
|||||||
{
|
{
|
||||||
m_ui.setupUi(w);
|
m_ui.setupUi(w);
|
||||||
|
|
||||||
const QList<SnippetProvider> &providers = SnippetProvider::snippetProviders();
|
for (const SnippetProvider &provider : SnippetProvider::snippetProviders()) {
|
||||||
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);
|
SnippetProvider::decorateEditor(snippetEditor, provider.groupId());
|
||||||
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,16 +535,12 @@ void SnippetsSettingsPagePrivate::setSnippetContent()
|
|||||||
|
|
||||||
void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings &fontSettings)
|
void SnippetsSettingsPagePrivate::decorateEditors(const TextEditor::FontSettings &fontSettings)
|
||||||
{
|
{
|
||||||
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) {
|
SnippetProvider::decorateEditor(snippetEditor, id);
|
||||||
if (provider.groupId() == id)
|
|
||||||
provider.decorateEditor(snippetEditor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user