Editor: add and use editor toolbar outline setter

Simplifies switching between c++ builtin code model and clangd since we
can now react on new outlines in the c++ editor widget.

Fixes: QTCREATORBUG-27594
Change-Id: I76bdc301d78572cbdf4196658f751b5204743fbb
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2022-08-17 13:27:33 +02:00
parent 10c7b810b2
commit 0bc3d74ea4
8 changed files with 76 additions and 34 deletions

View File

@@ -411,8 +411,6 @@ public:
CppEditorDocument *m_cppEditorDocument;
CppEditorOutline *m_cppEditorOutline = nullptr;
QAction *m_outlineAction = nullptr;
QTimer m_outlineTimer;
QTimer m_updateFunctionDeclDefLinkTimer;
SemanticInfo m_lastSemanticInfo;
@@ -489,7 +487,7 @@ void CppEditorWidget::finalizeInitialization()
connect(&d->m_localRenaming, &CppLocalRenaming::processKeyPressNormally,
this, &CppEditorWidget::processKeyNormally);
connect(this, &QPlainTextEdit::cursorPositionChanged, this, [this] {
if (d->shouldOfferOutline())
if (d->m_cppEditorOutline)
d->m_cppEditorOutline->updateIndex();
});
@@ -527,8 +525,7 @@ void CppEditorWidget::finalizeInitialization()
});
// Toolbar: Outline/Overview combo box
d->m_outlineAction = insertExtraToolBarWidget(TextEditorWidget::Left,
d->m_cppEditorOutline->widget());
setToolbarOutline(d->m_cppEditorOutline->widget());
// clang-format on
// Toolbar: '#' Button
@@ -546,17 +543,8 @@ void CppEditorWidget::finalizeInitialization()
insertExtraToolBarWidget(TextEditorWidget::Left, d->m_preprocessorButton);
}
d->m_outlineTimer.setInterval(5000);
d->m_outlineTimer.setSingleShot(true);
connect(&d->m_outlineTimer, &QTimer::timeout, this, [this] {
d->m_outlineAction->setVisible(d->shouldOfferOutline());
if (d->m_outlineAction->isVisible())
d->m_cppEditorDocument->updateOutline();
});
connect(&ClangdSettings::instance(), &ClangdSettings::changed,
&d->m_outlineTimer, qOverload<>(&QTimer::start));
connect(d->m_cppEditorDocument, &CppEditorDocument::changed,
&d->m_outlineTimer, qOverload<>(&QTimer::start));
connect(this, &TextEditor::TextEditorWidget::toolbarOutlineChanged,
this, &CppEditorWidget::handleOutlineChanged);
}
void CppEditorWidget::finalizeInitializationAfterDuplication(TextEditorWidget *other)
@@ -758,6 +746,20 @@ const ProjectPart *CppEditorWidget::projectPart() const
ProjectExplorer::ProjectTree::currentProject());
}
void CppEditorWidget::handleOutlineChanged(const QWidget *newOutline)
{
if (d->m_cppEditorOutline && newOutline != d->m_cppEditorOutline->widget()) {
delete d->m_cppEditorOutline;
d->m_cppEditorOutline = nullptr;
}
if (newOutline == nullptr) {
if (!d->m_cppEditorOutline)
d->m_cppEditorOutline = new CppEditorOutline(this);
d->m_cppEditorOutline->updateIndex();
setToolbarOutline(d->m_cppEditorOutline->widget());
}
}
namespace {
using Utils::Text::selectAt;