diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/beautifier/beautifierplugin.cpp | 2 | ||||
-rw-r--r-- | src/plugins/bookmarks/bookmarksplugin.cpp | 4 | ||||
-rw-r--r-- | src/plugins/clangcodemodel/test/clangautomationutils.cpp | 2 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcompletion_test.cpp | 2 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerplugin.cpp | 2 | ||||
-rw-r--r-- | src/plugins/debugger/disassembleragent.cpp | 4 | ||||
-rw-r--r-- | src/plugins/debugger/qml/qmlengineutils.cpp | 4 | ||||
-rw-r--r-- | src/plugins/fakevim/fakevimplugin.cpp | 10 | ||||
-rw-r--r-- | src/plugins/projectexplorer/editorconfiguration.cpp | 2 | ||||
-rw-r--r-- | src/plugins/texteditor/refactoringchanges.cpp | 4 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 45 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditor.h | 4 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditoractionhandler.cpp | 4 | ||||
-rw-r--r-- | src/plugins/valgrind/callgrindtool.cpp | 2 |
14 files changed, 54 insertions, 37 deletions
diff --git a/src/plugins/beautifier/beautifierplugin.cpp b/src/plugins/beautifier/beautifierplugin.cpp index 67784477d5..046a54448a 100644 --- a/src/plugins/beautifier/beautifierplugin.cpp +++ b/src/plugins/beautifier/beautifierplugin.cpp @@ -186,7 +186,7 @@ void BeautifierPluginPrivate::autoFormatOnSave(Core::IDocument *document) const QList<Core::IEditor *> editors = Core::DocumentModel::editorsForDocument(document); if (editors.isEmpty()) return; - if (auto widget = qobject_cast<TextEditorWidget *>(editors.first()->widget())) + if (auto widget = TextEditorWidget::fromEditor(editors.first())) TextEditor::formatEditor(widget, command); } } diff --git a/src/plugins/bookmarks/bookmarksplugin.cpp b/src/plugins/bookmarks/bookmarksplugin.cpp index 06eb6b49c9..911702cc1d 100644 --- a/src/plugins/bookmarks/bookmarksplugin.cpp +++ b/src/plugins/bookmarks/bookmarksplugin.cpp @@ -190,7 +190,7 @@ void BookmarksPluginPrivate::updateActions(bool enableToggle, int state) void BookmarksPluginPrivate::editorOpened(IEditor *editor) { - if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget())) { + if (auto widget = TextEditorWidget::fromEditor(editor)) { connect(widget, &TextEditorWidget::markRequested, this, [this, editor](TextEditorWidget *, int line, TextMarkRequestKind kind) { if (kind == BookmarkRequest && !editor->document()->isTemporary()) @@ -204,7 +204,7 @@ void BookmarksPluginPrivate::editorOpened(IEditor *editor) void BookmarksPluginPrivate::editorAboutToClose(IEditor *editor) { - if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget())) { + if (auto widget = TextEditorWidget::fromEditor(editor)) { disconnect(widget, &TextEditorWidget::markContextMenuRequested, this, &BookmarksPluginPrivate::requestContextMenu); } diff --git a/src/plugins/clangcodemodel/test/clangautomationutils.cpp b/src/plugins/clangcodemodel/test/clangautomationutils.cpp index e4a421ffe9..bd2e99b8b1 100644 --- a/src/plugins/clangcodemodel/test/clangautomationutils.cpp +++ b/src/plugins/clangcodemodel/test/clangautomationutils.cpp @@ -106,7 +106,7 @@ TextEditor::ProposalModelPtr completionResults(TextEditor::BaseTextEditor *textE { using namespace TextEditor; - auto textEditorWidget = qobject_cast<TextEditorWidget *>(textEditor->widget()); + auto textEditorWidget = TextEditorWidget::fromEditor(textEditor); QTC_ASSERT(textEditorWidget, return TextEditor::ProposalModelPtr()); AssistInterface *assistInterface = textEditorWidget->createAssistInterface( TextEditor::Completion, TextEditor::ExplicitlyInvoked); diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index b8ba85fc15..44274da954 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -81,7 +81,7 @@ public: m_editor = EditorManager::openEditor(fileName); QVERIFY(m_editor); closeEditorAtEndOfTestCase(m_editor); - m_editorWidget = qobject_cast<TextEditorWidget *>(m_editor->widget()); + m_editorWidget = TextEditorWidget::fromEditor(m_editor); QVERIFY(m_editorWidget); m_textDocument = m_editorWidget->document(); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 6f634f870a..b3d60e4995 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1835,7 +1835,7 @@ void DebuggerPluginPrivate::runScheduled() void DebuggerPluginPrivate::editorOpened(IEditor *editor) { - if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget())) { + if (auto widget = TextEditorWidget::fromEditor(editor)) { connect(widget, &TextEditorWidget::markRequested, this, &DebuggerPluginPrivate::requestMark); diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp index 3af906f298..0c41c1475d 100644 --- a/src/plugins/debugger/disassembleragent.cpp +++ b/src/plugins/debugger/disassembleragent.cpp @@ -266,7 +266,7 @@ void DisassemblerAgentPrivate::configureMimeType() Utils::MimeType mtype = Utils::mimeTypeForName(mimeType); if (mtype.isValid()) { foreach (IEditor *editor, DocumentModel::editorsForDocument(document)) - if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget())) + if (auto widget = TextEditorWidget::fromEditor(editor)) widget->configureGenericHighlighter(); } else { qWarning("Assembler mimetype '%s' not found.", qPrintable(mimeType)); @@ -314,7 +314,7 @@ void DisassemblerAgent::setContentsToDocument(const DisassemblerLines &contents) Core::Constants::K_DEFAULT_TEXT_EDITOR_ID, &titlePattern); QTC_ASSERT(editor, return); - if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget())) { + if (auto widget = TextEditorWidget::fromEditor(editor)) { widget->setReadOnly(true); widget->setRequestMarkEnabled(true); } diff --git a/src/plugins/debugger/qml/qmlengineutils.cpp b/src/plugins/debugger/qml/qmlengineutils.cpp index 042df6b6a6..cc3e11d212 100644 --- a/src/plugins/debugger/qml/qmlengineutils.cpp +++ b/src/plugins/debugger/qml/qmlengineutils.cpp @@ -230,7 +230,7 @@ void clearExceptionSelection() QList<QTextEdit::ExtraSelection> selections; foreach (IEditor *editor, DocumentModel::editorsForOpenedDocuments()) { - if (auto ed = qobject_cast<TextEditorWidget *>(editor->widget())) + if (auto ed = TextEditorWidget::fromEditor(editor)) ed->setExtraSelections(TextEditorWidget::DebuggerExceptionSelection, selections); } } @@ -244,7 +244,7 @@ QStringList highlightExceptionCode(int lineNumber, const QString &filePath, cons QTextCharFormat errorFormat = fontSettings.toTextCharFormat(TextEditor::C_ERROR); for (IEditor *editor : editors) { - auto ed = qobject_cast<TextEditorWidget *>(editor->widget()); + auto ed = TextEditorWidget::fromEditor(editor); if (!ed) continue; diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index 5dd35f75c7..b0a0e9c9c6 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -1267,7 +1267,7 @@ void FakeVimPluginPrivate::userActionTriggered(int key) void FakeVimPluginPrivate::createRelativeNumberWidget(IEditor *editor) { - if (auto textEditor = qobject_cast<TextEditorWidget *>(editor->widget())) { + if (auto textEditor = TextEditorWidget::fromEditor(editor)) { auto relativeNumbers = new RelativeNumbersColumn(textEditor); connect(theFakeVimSetting(ConfigRelativeNumber), &SavedAction::valueChanged, relativeNumbers, &QObject::deleteLater); @@ -1532,10 +1532,14 @@ void FakeVimPluginPrivate::editorOpened(IEditor *editor) return; // we can only handle QTextEdit and QPlainTextEdit - if (!qobject_cast<QTextEdit *>(widget) && !qobject_cast<QPlainTextEdit *>(widget)) + if (auto edit = Aggregation::query<QTextEdit>(widget)) + widget = edit; + else if (auto edit = Aggregation::query<QPlainTextEdit>(widget)) + widget = edit; + else return; - auto tew = qobject_cast<TextEditorWidget *>(widget); + auto tew = TextEditorWidget::fromEditor(editor); //qDebug() << "OPENING: " << editor << editor->widget() // << "MODE: " << theFakeVimSetting(ConfigUseFakeVim)->value(); diff --git a/src/plugins/projectexplorer/editorconfiguration.cpp b/src/plugins/projectexplorer/editorconfiguration.cpp index a78afc440d..1bb2d4f27c 100644 --- a/src/plugins/projectexplorer/editorconfiguration.cpp +++ b/src/plugins/projectexplorer/editorconfiguration.cpp @@ -274,7 +274,7 @@ void EditorConfiguration::setUseGlobalSettings(bool use) d->m_useGlobal = use; d->m_defaultCodeStyle->setCurrentDelegate(use ? TextEditorSettings::codeStyle() : nullptr); foreach (Core::IEditor *editor, Core::DocumentModel::editorsForOpenedDocuments()) { - if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget())) { + if (auto widget = TextEditorWidget::fromEditor(editor)) { Project *project = SessionManager::projectForFile(editor->document()->filePath()); if (project && project->editorConfiguration() == this) switchSettings(widget); diff --git a/src/plugins/texteditor/refactoringchanges.cpp b/src/plugins/texteditor/refactoringchanges.cpp index 01c61f10f8..9e91463349 100644 --- a/src/plugins/texteditor/refactoringchanges.cpp +++ b/src/plugins/texteditor/refactoringchanges.cpp @@ -132,7 +132,7 @@ TextEditorWidget *RefactoringChanges::openEditor(const QString &fileName, bool a IEditor *editor = EditorManager::openEditorAt(fileName, line, column, Id(), flags); if (editor) - return qobject_cast<TextEditorWidget *>(editor->widget()); + return TextEditorWidget::fromEditor(editor); else return nullptr; } @@ -163,7 +163,7 @@ RefactoringFile::RefactoringFile(const QString &fileName, const QSharedPointer<R { QList<IEditor *> editors = DocumentModel::editorsForFilePath(fileName); if (!editors.isEmpty()) { - auto editorWidget = qobject_cast<TextEditorWidget *>(editors.first()->widget()); + auto editorWidget = TextEditorWidget::fromEditor(editors.first()); if (editorWidget && !editorWidget->isReadOnly()) m_editor = editorWidget; } diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 7e92bc24eb..635acd6e66 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -1461,8 +1461,14 @@ TextDocumentPtr TextEditorWidget::textDocumentPtr() const TextEditorWidget *TextEditorWidget::currentTextEditorWidget() { - auto editor = qobject_cast<BaseTextEditor *>(EditorManager::currentEditor()); - return editor ? editor->editorWidget() : nullptr; + return fromEditor(EditorManager::currentEditor()); +} + +TextEditorWidget *TextEditorWidget::fromEditor(const IEditor *editor) +{ + if (editor) + return Aggregation::query<TextEditorWidget>(editor->widget()); + return nullptr; } void TextEditorWidgetPrivate::editorContentsChange(int position, int charsRemoved, int charsAdded) @@ -8370,8 +8376,9 @@ QVector<BaseTextEditor *> BaseTextEditor::textEditorsForDocument(TextDocument *t TextEditorWidget *BaseTextEditor::editorWidget() const { - QTC_ASSERT(qobject_cast<TextEditorWidget *>(m_widget.data()), return nullptr); - return static_cast<TextEditorWidget *>(m_widget.data()); + auto textEditorWidget = TextEditorWidget::fromEditor(this); + QTC_CHECK(textEditorWidget); + return textEditorWidget; } void BaseTextEditor::setTextCursor(const QTextCursor &cursor) @@ -8649,10 +8656,12 @@ void TextEditorFactory::setParenthesesMatchingEnabled(bool on) BaseTextEditor *TextEditorFactoryPrivate::createEditorHelper(const TextDocumentPtr &document) { - TextEditorWidget *widget = m_widgetCreator(); - widget->setMarksVisible(m_marksVisible); - widget->setParenthesesMatchingEnabled(m_paranthesesMatchinEnabled); - widget->setCodeFoldingSupported(m_codeFoldingSupported); + QWidget *widget = m_widgetCreator(); + TextEditorWidget *textEditorWidget = Aggregation::query<TextEditorWidget>(widget); + QTC_ASSERT(textEditorWidget, return nullptr); + textEditorWidget->setMarksVisible(m_marksVisible); + textEditorWidget->setParenthesesMatchingEnabled(m_paranthesesMatchinEnabled); + textEditorWidget->setCodeFoldingSupported(m_codeFoldingSupported); BaseTextEditor *editor = m_editorCreator(); editor->setDuplicateSupported(m_duplicatedSupported); @@ -8663,25 +8672,25 @@ BaseTextEditor *TextEditorFactoryPrivate::createEditorHelper(const TextDocumentP // Needs to go before setTextDocument as this copies the current settings. if (m_autoCompleterCreator) - widget->setAutoCompleter(m_autoCompleterCreator()); + textEditorWidget->setAutoCompleter(m_autoCompleterCreator()); - widget->setTextDocument(document); - widget->autoCompleter()->setTabSettings(document->tabSettings()); - widget->d->m_hoverHandlers = m_hoverHandlers; + textEditorWidget->setTextDocument(document); + textEditorWidget->autoCompleter()->setTabSettings(document->tabSettings()); + textEditorWidget->d->m_hoverHandlers = m_hoverHandlers; - widget->d->m_codeAssistant.configure(widget); - widget->d->m_commentDefinition = m_commentDefinition; + textEditorWidget->d->m_codeAssistant.configure(textEditorWidget); + textEditorWidget->d->m_commentDefinition = m_commentDefinition; - QObject::connect(widget, + QObject::connect(textEditorWidget, &TextEditorWidget::activateEditor, - widget, + textEditorWidget, [editor](EditorManager::OpenEditorFlags flags) { EditorManager::activateEditor(editor, flags); }); if (m_useGenericHighlighter) - widget->setupGenericHighlighter(); - widget->finalizeInitialization(); + textEditorWidget->setupGenericHighlighter(); + textEditorWidget->finalizeInitialization(); editor->finalizeInitialization(); return editor; } diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h index a2512384da..403d2f2b6f 100644 --- a/src/plugins/texteditor/texteditor.h +++ b/src/plugins/texteditor/texteditor.h @@ -556,6 +556,7 @@ public: void setContextHelpItem(const Core::HelpItem &item); static TextEditorWidget *currentTextEditorWidget(); + static TextEditorWidget *fromEditor(const Core::IEditor *editor); protected: /*! @@ -641,7 +642,8 @@ public: using EditorCreator = std::function<BaseTextEditor *()>; using DocumentCreator = std::function<TextDocument *()>; - using EditorWidgetCreator = std::function<TextEditorWidget *()>; + // editor widget must be castable (qobject_cast or Aggregate::query) to TextEditorWidget + using EditorWidgetCreator = std::function<QWidget *()>; using SyntaxHighLighterCreator = std::function<SyntaxHighlighter *()>; using IndenterCreator = std::function<Indenter *(QTextDocument *)>; using AutoCompleterCreator = std::function<AutoCompleter *()>; diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index 4cae664cb4..67d5898509 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -31,6 +31,8 @@ #include "texteditorconstants.h" #include "texteditorplugin.h" +#include <aggregation/aggregate.h> + #include <coreplugin/locator/locatormanager.h> #include <coreplugin/icore.h> #include <coreplugin/editormanager/editormanager.h> @@ -592,7 +594,7 @@ TextEditorActionHandler::TextEditorActionHandler(Core::Id editorId, if (resolver) d->m_findTextWidget = resolver; else - d->m_findTextWidget = [](Core::IEditor *editor) { return qobject_cast<TextEditorWidget *>(editor->widget()); }; + d->m_findTextWidget = TextEditorWidget::fromEditor; } TextEditorActionHandler::~TextEditorActionHandler() diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 41ee7ce411..a6e5f078d6 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -863,7 +863,7 @@ void CallgrindToolPrivate::showParserResults(const ParseData *data) void CallgrindToolPrivate::editorOpened(IEditor *editor) { - if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget())) { + if (auto widget = TextEditorWidget::fromEditor(editor)) { connect(widget, &TextEditorWidget::markContextMenuRequested, this, &CallgrindToolPrivate::requestContextMenu); } |