forked from qt-creator/qt-creator
TextEditor: Simplify configuring generic highlighter
* configureMimeType -> configureGenericHighlighter, since that is what it actually does. * setupAsPlainEditor -> setupGenericHighlighter, since that is what it actually does * avoid multiple highlighting definition lookups * unify code paths by not separately creating generic highlighters through the factories Change-Id: I9579ca5736bbf08c01b8e41b63c6b9f36bdc725e Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
@@ -110,7 +110,6 @@ AndroidManifestEditorWidget::AndroidManifestEditorWidget()
|
||||
m_appNameInStringsXml(false)
|
||||
{
|
||||
m_textEditorWidget = new AndroidManifestTextEditorWidget(this);
|
||||
m_textEditorWidget->setupAsPlainEditor();
|
||||
|
||||
initializePage();
|
||||
|
||||
@@ -1439,7 +1438,7 @@ AndroidManifestTextEditorWidget::AndroidManifestTextEditorWidget(AndroidManifest
|
||||
: TextEditor::TextEditorWidget(parent)
|
||||
{
|
||||
setTextDocument(TextEditor::TextDocumentPtr(new AndroidManifestDocument(parent)));
|
||||
setupAsPlainEditor();
|
||||
textDocument()->setMimeType(QLatin1String(Constants::ANDROID_MANIFEST_MIME_TYPE));
|
||||
setupGenericHighlighter();
|
||||
}
|
||||
|
||||
|
@@ -92,7 +92,7 @@ JavaEditorFactory::JavaEditorFactory()
|
||||
|
||||
setDocumentCreator([]() { return new JavaDocument; });
|
||||
setAutoCompleterCreator([]() { return new JavaAutoCompleter; });
|
||||
setGenericSyntaxHighlighter(QLatin1String(Constants::JAVA_MIMETYPE));
|
||||
setUseGenericHighlighter(true);
|
||||
setCommentStyle(Utils::CommentDefinition::CppStyle);
|
||||
setEditorActionHandlers(TextEditor::TextEditorActionHandler::UnCommentSelection);
|
||||
setCompletionAssistProvider(new JavaCompletionAssistProvider);
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<glob pattern="*.cmake"/>
|
||||
</mime-type>
|
||||
<mime-type type="text/x-cmake-project">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<sub-class-of type="text/x-cmake"/>
|
||||
<comment>CMake Project file</comment>
|
||||
<glob pattern="CMakeLists.txt"/>
|
||||
</mime-type>
|
||||
|
@@ -274,7 +274,7 @@ CMakeEditorFactory::CMakeEditorFactory(CMakeSettingsPage *settingsPage)
|
||||
setEditorCreator([]() { return new CMakeEditor; });
|
||||
setEditorWidgetCreator([]() { return new CMakeEditorWidget; });
|
||||
setDocumentCreator([]() { return new CMakeDocument; });
|
||||
setGenericSyntaxHighlighterByName(QLatin1String("CMake"));
|
||||
setUseGenericHighlighter(true);
|
||||
setCommentStyle(Utils::CommentDefinition::HashStyle);
|
||||
setCodeFoldingSupported(true);
|
||||
|
||||
|
@@ -241,7 +241,7 @@ void DisassemblerAgentPrivate::configureMimeType()
|
||||
if (mtype) {
|
||||
foreach (IEditor *editor, DocumentModel::editorsForDocument(document))
|
||||
if (TextEditorWidget *widget = qobject_cast<TextEditorWidget *>(editor->widget()))
|
||||
widget->configureMimeType(mtype);
|
||||
widget->configureGenericHighlighter();
|
||||
} else {
|
||||
qWarning("Assembler mimetype '%s' not found.", qPrintable(mimeType));
|
||||
}
|
||||
|
@@ -120,7 +120,6 @@ public:
|
||||
|
||||
void finalizeInitialization()
|
||||
{
|
||||
setupAsPlainEditor();
|
||||
setReadOnly(true);
|
||||
}
|
||||
};
|
||||
@@ -133,6 +132,7 @@ public:
|
||||
setId(K_DESIGNER_XML_EDITOR_ID);
|
||||
setEditorCreator([]() { return new FormWindowEditor; });
|
||||
setEditorWidgetCreator([]() { return new Internal::DesignerXmlEditorWidget; });
|
||||
setUseGenericHighlighter(true);
|
||||
setDuplicatedSupported(false);
|
||||
}
|
||||
|
||||
|
@@ -172,13 +172,12 @@ void BarDescriptorEditorWidget::initSourcePage()
|
||||
TextDocumentPtr doc(new TextDocument);
|
||||
doc->setId(Core::Constants::K_DEFAULT_TEXT_EDITOR_ID); // FIXME: This looks odd.
|
||||
doc->setIndenter(new NormalIndenter);
|
||||
doc->setMimeType(QLatin1String(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE));
|
||||
|
||||
m_xmlSourceWidget = new TextEditorWidget(this);
|
||||
m_xmlSourceWidget->setTextDocument(doc);
|
||||
m_xmlSourceWidget->setupAsPlainEditor();
|
||||
m_xmlSourceWidget->setupGenericHighlighter();
|
||||
addWidget(m_xmlSourceWidget);
|
||||
|
||||
m_xmlSourceWidget->configureMimeType(QLatin1String(Constants::QNX_BAR_DESCRIPTOR_MIME_TYPE));
|
||||
}
|
||||
|
||||
void BarDescriptorEditorWidget::initPanelSize(ProjectExplorer::PanelsWidget *panelsWidget)
|
||||
|
@@ -53,7 +53,8 @@ QString TextEditor::findDefinitionId(const Core::MimeType &mimeType,
|
||||
return definitionId;
|
||||
}
|
||||
|
||||
void TextEditor::setMimeTypeForHighlighter(Highlighter *highlighter, const Core::MimeType &mimeType)
|
||||
void TextEditor::setMimeTypeForHighlighter(Highlighter *highlighter, const Core::MimeType &mimeType,
|
||||
QString *foundDefinitionId)
|
||||
{
|
||||
const QString type = mimeType.type();
|
||||
QString definitionId = Manager::instance()->definitionIdByMimeType(type);
|
||||
@@ -66,6 +67,9 @@ void TextEditor::setMimeTypeForHighlighter(Highlighter *highlighter, const Core:
|
||||
if (!definition.isNull() && definition->isValid())
|
||||
highlighter->setDefaultContext(definition->initialContext());
|
||||
}
|
||||
|
||||
if (foundDefinitionId)
|
||||
*foundDefinitionId = definitionId;
|
||||
}
|
||||
|
||||
SyntaxHighlighter *TextEditor::createGenericSyntaxHighlighter(const Core::MimeType &mimeType)
|
||||
|
@@ -45,7 +45,8 @@ namespace TextEditor {
|
||||
class Highlighter;
|
||||
class SyntaxHighlighter;
|
||||
|
||||
void setMimeTypeForHighlighter(Highlighter *highlighter, const Core::MimeType &mimeType);
|
||||
void setMimeTypeForHighlighter(Highlighter *highlighter, const Core::MimeType &mimeType,
|
||||
QString *foundDefinitionId = 0);
|
||||
QString findDefinitionId(const Core::MimeType &mimeType, bool considerParents);
|
||||
TEXTEDITOR_EXPORT SyntaxHighlighter *createGenericSyntaxHighlighter(const Core::MimeType &mimeType);
|
||||
|
||||
|
@@ -51,7 +51,10 @@ class PlainTextEditorWidget : public TextEditorWidget
|
||||
{
|
||||
public:
|
||||
PlainTextEditorWidget() {}
|
||||
void finalizeInitialization() { setupAsPlainEditor(); }
|
||||
void finalizeInitialization()
|
||||
{
|
||||
textDocument()->setMimeType(QLatin1String(Constants::C_TEXTEDITOR_MIMETYPE_TEXT));
|
||||
}
|
||||
};
|
||||
|
||||
PlainTextEditorFactory::PlainTextEditorFactory()
|
||||
@@ -65,6 +68,7 @@ PlainTextEditorFactory::PlainTextEditorFactory()
|
||||
setDocumentCreator([]() { return new TextDocument(Core::Constants::K_DEFAULT_TEXT_EDITOR_ID); });
|
||||
setEditorWidgetCreator([]() { return new PlainTextEditorWidget; });
|
||||
setIndenterCreator([]() { return new NormalIndenter; });
|
||||
setUseGenericHighlighter(true);
|
||||
|
||||
setEditorActionHandlers(TextEditorActionHandler::Format |
|
||||
TextEditorActionHandler::UnCommentSelection |
|
||||
|
@@ -2735,7 +2735,8 @@ void TextEditorWidgetPrivate::updateCodeFoldingVisible()
|
||||
|
||||
void TextEditorWidgetPrivate::reconfigure()
|
||||
{
|
||||
q->configureMimeType(MimeDatabase::findByFile(m_document->filePath().toString()));
|
||||
m_document->setMimeType(MimeDatabase::findByFile(m_document->filePath().toString()).type());
|
||||
q->configureGenericHighlighter();
|
||||
}
|
||||
|
||||
bool TextEditorWidget::codeFoldingVisible() const
|
||||
@@ -7163,12 +7164,7 @@ QString TextEditorWidget::textAt(int from, int to) const
|
||||
return textDocument()->textAt(from, to);
|
||||
}
|
||||
|
||||
void TextEditorWidget::configureMimeType(const QString &mimeType)
|
||||
{
|
||||
configureMimeType(MimeDatabase::findByType(mimeType));
|
||||
}
|
||||
|
||||
void TextEditorWidget::configureMimeType(const MimeType &mimeType)
|
||||
void TextEditorWidget::configureGenericHighlighter()
|
||||
{
|
||||
Highlighter *highlighter = new Highlighter();
|
||||
highlighter->setTabSettings(textDocument()->tabSettings());
|
||||
@@ -7176,16 +7172,13 @@ void TextEditorWidget::configureMimeType(const MimeType &mimeType)
|
||||
|
||||
setCodeFoldingSupported(false);
|
||||
|
||||
const QString type = textDocument()->mimeType();
|
||||
const MimeType mimeType = MimeDatabase::findByType(type);
|
||||
if (!mimeType.isNull()) {
|
||||
d->m_isMissingSyntaxDefinition = true;
|
||||
|
||||
setMimeTypeForHighlighter(highlighter, mimeType);
|
||||
const QString &type = mimeType.type();
|
||||
textDocument()->setMimeType(type);
|
||||
|
||||
QString definitionId = Manager::instance()->definitionIdByMimeType(type);
|
||||
if (definitionId.isEmpty())
|
||||
definitionId = findDefinitionId(mimeType, true);
|
||||
QString definitionId;
|
||||
setMimeTypeForHighlighter(highlighter, mimeType, &definitionId);
|
||||
|
||||
if (!definitionId.isEmpty()) {
|
||||
d->m_isMissingSyntaxDefinition = false;
|
||||
@@ -7217,13 +7210,11 @@ bool TextEditorWidget::isMissingSyntaxDefinition() const
|
||||
}
|
||||
|
||||
// The remnants of PlainTextEditor.
|
||||
void TextEditorWidget::setupAsPlainEditor()
|
||||
void TextEditorWidget::setupGenericHighlighter()
|
||||
{
|
||||
setMarksVisible(true);
|
||||
setLineSeparatorsAllowed(true);
|
||||
|
||||
textDocument()->setMimeType(QLatin1String(Constants::C_TEXTEDITOR_MIMETYPE_TEXT));
|
||||
|
||||
connect(textDocument(), &IDocument::filePathChanged,
|
||||
d, &TextEditorWidgetPrivate::reconfigure);
|
||||
|
||||
@@ -7295,6 +7286,7 @@ public:
|
||||
m_editorCreator([]() { return new BaseTextEditor; }),
|
||||
m_commentStyle(CommentDefinition::NoStyle),
|
||||
m_completionAssistProvider(0),
|
||||
m_useGenericHighlighter(false),
|
||||
m_duplicatedSupported(true),
|
||||
m_codeFoldingSupported(false),
|
||||
m_paranthesesMatchinEnabled(false),
|
||||
@@ -7320,6 +7312,7 @@ public:
|
||||
CommentDefinition::Style m_commentStyle;
|
||||
QList<BaseHoverHandler *> m_hoverHandlers; // owned
|
||||
CompletionAssistProvider * m_completionAssistProvider; // owned
|
||||
bool m_useGenericHighlighter;
|
||||
bool m_duplicatedSupported;
|
||||
bool m_codeFoldingSupported;
|
||||
bool m_paranthesesMatchinEnabled;
|
||||
@@ -7364,27 +7357,9 @@ void TextEditorFactory::setSyntaxHighlighterCreator(const SyntaxHighLighterCreat
|
||||
d->m_syntaxHighlighterCreator = creator;
|
||||
}
|
||||
|
||||
void TextEditorFactory::setGenericSyntaxHighlighter(const QString &mimeType)
|
||||
void TextEditorFactory::setUseGenericHighlighter(bool enabled)
|
||||
{
|
||||
d->m_syntaxHighlighterCreator = [this, mimeType]() -> SyntaxHighlighter * {
|
||||
Highlighter *highlighter = new Highlighter;
|
||||
setMimeTypeForHighlighter(highlighter, MimeDatabase::findByType(mimeType));
|
||||
return highlighter;
|
||||
};
|
||||
}
|
||||
|
||||
void TextEditorFactory::setGenericSyntaxHighlighterByName(const QString &name)
|
||||
{
|
||||
d->m_syntaxHighlighterCreator = [this, name]() -> SyntaxHighlighter * {
|
||||
TextEditor::Highlighter *highlighter = new TextEditor::Highlighter();
|
||||
QString definitionId = Manager::instance()->definitionIdByName(name);
|
||||
if (!definitionId.isEmpty()) {
|
||||
const QSharedPointer<HighlightDefinition> &definition = Manager::instance()->definition(definitionId);
|
||||
if (!definition.isNull() && definition->isValid())
|
||||
highlighter->setDefaultContext(definition->initialContext());
|
||||
}
|
||||
return highlighter;
|
||||
};
|
||||
d->m_useGenericHighlighter = enabled;
|
||||
}
|
||||
|
||||
void TextEditorFactory::setAutoCompleterCreator(const AutoCompleterCreator &creator)
|
||||
@@ -7479,6 +7454,8 @@ BaseTextEditor *TextEditorFactoryPrivate::createEditorHelper(const TextDocumentP
|
||||
QObject::connect(widget, &TextEditorWidget::activateEditor,
|
||||
[editor]() { EditorManager::activateEditor(editor); });
|
||||
|
||||
if (m_useGenericHighlighter)
|
||||
widget->setupGenericHighlighter();
|
||||
widget->finalizeInitialization();
|
||||
editor->finalizeInitialization();
|
||||
|
||||
|
@@ -468,8 +468,7 @@ public:
|
||||
/// Abort code assistant if it is running.
|
||||
void abortAssist();
|
||||
|
||||
void configureMimeType(const QString &mimeType);
|
||||
void configureMimeType(const Core::MimeType &mimeType);
|
||||
void configureGenericHighlighter();
|
||||
|
||||
Q_INVOKABLE void inSnippetMode(bool *active); // Used by FakeVim.
|
||||
|
||||
@@ -559,7 +558,7 @@ public:
|
||||
|
||||
QString selectedText() const;
|
||||
|
||||
void setupAsPlainEditor();
|
||||
void setupGenericHighlighter();
|
||||
void setupFallBackEditor(Core::Id id);
|
||||
|
||||
void remove(int length);
|
||||
@@ -664,8 +663,7 @@ public:
|
||||
void setEditorCreator(const EditorCreator &creator);
|
||||
void setIndenterCreator(const IndenterCreator &creator);
|
||||
void setSyntaxHighlighterCreator(const SyntaxHighLighterCreator &creator);
|
||||
void setGenericSyntaxHighlighter(const QString &mimeType);
|
||||
void setGenericSyntaxHighlighterByName(const QString &name);
|
||||
void setUseGenericHighlighter(bool enabled);
|
||||
void setAutoCompleterCreator(const AutoCompleterCreator &creator);
|
||||
|
||||
void setEditorActionHandlers(Core::Id contextId, uint optionalActions);
|
||||
|
Reference in New Issue
Block a user