aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient/languageclientutils.cpp
diff options
context:
space:
mode:
authorDavid Schulz <[email protected]>2020-01-27 14:52:46 +0100
committerDavid Schulz <[email protected]>2020-01-31 08:41:26 +0000
commitc032b302ade45a13e72c9d3d75c6c84dce89538f (patch)
tree69d99c846375974931961cd6b55f93792a903149 /src/plugins/languageclient/languageclientutils.cpp
parent972e5b1668494767487abf2f864d327bd547afde (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.cpp23
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)