From 42e072f15968e354c981c7da499c230634189bf5 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 4 May 2022 18:12:55 +0200 Subject: [PATCH] Move MinimizableInfoBars from CppEditorDocument to IDocument Similar to the InfoBar. The only thing that an editor implementation needs to do is to set a settings group and the possible info bars in the document constructor. And later call document->minimizableInfoBars()->setInfoVisible(id, visible) to manage the state. Change-Id: I23afb3639b70b1bfccd424579da018280a7fe2cb Reviewed-by: Christian Kandeler --- src/plugins/coreplugin/idocument.cpp | 9 ++++++ src/plugins/coreplugin/idocument.h | 2 ++ src/plugins/cppeditor/cppeditordocument.cpp | 31 +++++++++------------ src/plugins/cppeditor/cppeditordocument.h | 3 -- src/plugins/cppeditor/cppeditorwidget.cpp | 4 --- src/plugins/texteditor/texteditor.cpp | 7 +++++ 6 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/plugins/coreplugin/idocument.cpp b/src/plugins/coreplugin/idocument.cpp index 0ece562f4ba..9dfe282a1f7 100644 --- a/src/plugins/coreplugin/idocument.cpp +++ b/src/plugins/coreplugin/idocument.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -226,6 +227,7 @@ public: QString uniqueDisplayName; Utils::FilePath autoSavePath; Utils::InfoBar *infoBar = nullptr; + MinimizableInfoBars *minimizableInfoBars = nullptr; Id id; optional fileIsReadOnly; bool temporary = false; @@ -678,6 +680,13 @@ Utils::InfoBar *IDocument::infoBar() return d->infoBar; } +MinimizableInfoBars *IDocument::minimizableInfoBars() +{ + if (!d->minimizableInfoBars) + d->minimizableInfoBars = new Utils::MinimizableInfoBars(*infoBar()); + return d->minimizableInfoBars; +} + /*! Sets the absolute \a filePath of the file that backs this document. The default implementation sets the file name and sends the filePathChanged() and diff --git a/src/plugins/coreplugin/idocument.h b/src/plugins/coreplugin/idocument.h index 788e1b792b6..16d94fa7797 100644 --- a/src/plugins/coreplugin/idocument.h +++ b/src/plugins/coreplugin/idocument.h @@ -35,6 +35,7 @@ namespace Utils { class FilePath; class InfoBar; +class MinimizableInfoBars; } // namespace Utils namespace Core { @@ -133,6 +134,7 @@ public: void setWriteWarning(bool has); Utils::InfoBar *infoBar(); + Utils::MinimizableInfoBars *minimizableInfoBars(); signals: // For meta data changes: file name, modified state, ... diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp index 4a1bbc35fbf..edd776f5375 100644 --- a/src/plugins/cppeditor/cppeditordocument.cpp +++ b/src/plugins/cppeditor/cppeditordocument.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include @@ -106,7 +107,6 @@ private: }; CppEditorDocument::CppEditorDocument() - : m_minimizableInfoBars(*infoBar()) { setId(CppEditor::Constants::CPPEDITOR_ID); setSyntaxHighlighter(new CppHighlighter); @@ -130,8 +130,8 @@ CppEditorDocument::CppEditorDocument() connect(&m_parseContextModel, &ParseContextModel::preferredParseContextChanged, this, &CppEditorDocument::reparseWithPreferredParseContext); - m_minimizableInfoBars.setSettingsGroup(Constants::CPPEDITOR_SETTINGSGROUP); - m_minimizableInfoBars.setPossibleInfoBarEntries( + minimizableInfoBars()->setSettingsGroup(Constants::CPPEDITOR_SETTINGSGROUP); + minimizableInfoBars()->setPossibleInfoBarEntries( {{NO_PROJECT_CONFIGURATION, tr("Warning: This file is not part of any project. " "The code model might have issues parsing this file properly.")}}); @@ -413,25 +413,20 @@ QFuture CppEditorDocument::cursorInfo(const CursorInfoParams ¶ms return processor()->cursorInfo(params); } -const Utils::MinimizableInfoBars &CppEditorDocument::minimizableInfoBars() const -{ - return m_minimizableInfoBars; -} - BaseEditorDocumentProcessor *CppEditorDocument::processor() { if (!m_processor) { m_processor.reset(mm()->createEditorDocumentProcessor(this)); - connect(m_processor.data(), &BaseEditorDocumentProcessor::projectPartInfoUpdated, - [this] (const ProjectPartInfo &info) - { - const bool hasProjectPart = !(info.hints & ProjectPartInfo::IsFallbackMatch); - m_minimizableInfoBars.setInfoVisible(NO_PROJECT_CONFIGURATION, !hasProjectPart); - m_parseContextModel.update(info); - const bool isAmbiguous = info.hints & ProjectPartInfo::IsAmbiguousMatch; - const bool isProjectFile = info.hints & ProjectPartInfo::IsFromProjectMatch; - showHideInfoBarAboutMultipleParseContexts(isAmbiguous && isProjectFile); - }); + connect(m_processor.data(), + &BaseEditorDocumentProcessor::projectPartInfoUpdated, + [this](const ProjectPartInfo &info) { + const bool hasProjectPart = !(info.hints & ProjectPartInfo::IsFallbackMatch); + minimizableInfoBars()->setInfoVisible(NO_PROJECT_CONFIGURATION, !hasProjectPart); + m_parseContextModel.update(info); + const bool isAmbiguous = info.hints & ProjectPartInfo::IsAmbiguousMatch; + const bool isProjectFile = info.hints & ProjectPartInfo::IsFromProjectMatch; + showHideInfoBarAboutMultipleParseContexts(isAmbiguous && isProjectFile); + }); connect(m_processor.data(), &BaseEditorDocumentProcessor::codeWarningsUpdated, [this] (unsigned revision, const QList selections, diff --git a/src/plugins/cppeditor/cppeditordocument.h b/src/plugins/cppeditor/cppeditordocument.h index 384f57db864..471ba99c9b2 100644 --- a/src/plugins/cppeditor/cppeditordocument.h +++ b/src/plugins/cppeditor/cppeditordocument.h @@ -33,7 +33,6 @@ #include "editordocumenthandle.h" #include -#include #include #include @@ -65,7 +64,6 @@ public: void scheduleProcessDocument(); - const Utils::MinimizableInfoBars &minimizableInfoBars() const; ParseContextModel &parseContextModel(); QFuture cursorInfo(const CursorInfoParams ¶ms); @@ -135,7 +133,6 @@ private: // (Un)Registration in CppModelManager QScopedPointer m_editorDocumentHandle; - Utils::MinimizableInfoBars m_minimizableInfoBars; ParseContextModel m_parseContextModel; }; diff --git a/src/plugins/cppeditor/cppeditorwidget.cpp b/src/plugins/cppeditor/cppeditorwidget.cpp index 9a73d1f2e83..7c09724eee2 100644 --- a/src/plugins/cppeditor/cppeditorwidget.cpp +++ b/src/plugins/cppeditor/cppeditorwidget.cpp @@ -552,10 +552,6 @@ void CppEditorWidget::finalizeInitialization() insertExtraToolBarWidget(TextEditorWidget::Left, d->m_preprocessorButton); } - // Toolbar: Actions to show minimized info bars - d->m_cppEditorDocument->minimizableInfoBars().createShowInfoBarActions( - [this](QWidget *w) { return this->insertExtraToolBarWidget(TextEditorWidget::Left, w); }); - d->m_outlineTimer.setInterval(5000); d->m_outlineTimer.setSingleShot(true); connect(&d->m_outlineTimer, &QTimer::timeout, this, [this] { diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 28dca256e62..333f5f37aa5 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -80,6 +80,7 @@ #include #include #include +#include #include #include #include @@ -8534,6 +8535,12 @@ BaseTextEditor *TextEditorFactoryPrivate::createEditorHelper(const TextDocumentP if (m_useGenericHighlighter) textEditorWidget->setupGenericHighlighter(); textEditorWidget->finalizeInitialization(); + + // Toolbar: Actions to show minimized info bars + document->minimizableInfoBars()->createShowInfoBarActions([textEditorWidget](QWidget *w) { + return textEditorWidget->insertExtraToolBarWidget(TextEditorWidget::Left, w); + }); + editor->finalizeInitialization(); return editor; }