diff options
author | David Schulz <[email protected]> | 2020-01-27 14:52:46 +0100 |
---|---|---|
committer | David Schulz <[email protected]> | 2020-01-31 08:41:26 +0000 |
commit | c032b302ade45a13e72c9d3d75c6c84dce89538f (patch) | |
tree | 69d99c846375974931961cd6b55f93792a903149 /src/plugins/languageclient/languageclientutils.cpp | |
parent | 972e5b1668494767487abf2f864d327bd547afde (diff) |
LanguageClient: outline combo box for editor toolbar
Fixes: QTCREATORBUG-21916
Change-Id: Ia4e1711f0f5e67222e4f5274792820917f4114db
Reviewed-by: Christian Stenger <[email protected]>
Diffstat (limited to 'src/plugins/languageclient/languageclientutils.cpp')
-rw-r--r-- | src/plugins/languageclient/languageclientutils.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/plugins/languageclient/languageclientutils.cpp b/src/plugins/languageclient/languageclientutils.cpp index eeb64b406ea..9cc1ad488fa 100644 --- a/src/plugins/languageclient/languageclientutils.cpp +++ b/src/plugins/languageclient/languageclientutils.cpp @@ -28,6 +28,7 @@ #include "client.h" #include "languageclient_global.h" #include "languageclientmanager.h" +#include "languageclientoutline.h" #include <coreplugin/editormanager/documentmodel.h> #include <coreplugin/icore.h> @@ -37,6 +38,7 @@ #include <texteditor/textdocument.h> #include <texteditor/texteditor.h> #include <utils/textutils.h> +#include <utils/treeviewcombobox.h> #include <utils/utilsicons.h> #include <QFile> @@ -246,6 +248,27 @@ void updateEditorToolBar(Core::IEditor *editor) actions.remove(widget); }); } + + static QMap<QWidget *, QPair<Client *, QAction *>> outlines; + + if (outlines.contains(widget)) { + auto outline = outlines[widget]; + if (outline.first != client + || !LanguageClientOutlineWidgetFactory::clientSupportsDocumentSymbols(client, + document)) { + auto oldAction = outline.second; + widget->toolBar()->removeAction(oldAction); + delete oldAction; + outlines.remove(widget); + } + } + + if (!outlines.contains(widget)) { + if (QWidget *comboBox = LanguageClientOutlineWidgetFactory::createComboBox(client, editor)) { + outlines[widget] = {client, + widget->insertExtraToolBarWidget(TextEditorWidget::Left, comboBox)}; + } + } } const QIcon symbolIcon(int type) |