diff --git a/src/plugins/languageclient/languageclientoutline.cpp b/src/plugins/languageclient/languageclientoutline.cpp index b065754ec0d..8c45513ce9f 100644 --- a/src/plugins/languageclient/languageclientoutline.cpp +++ b/src/plugins/languageclient/languageclientoutline.cpp @@ -5,6 +5,7 @@ #include "documentsymbolcache.h" #include "languageclientmanager.h" +#include "languageclienttr.h" #include "languageclientutils.h" #include @@ -23,6 +24,7 @@ #include #include +#include #include using namespace LanguageServerProtocol; @@ -113,6 +115,8 @@ public: void restoreSettings(const QVariantMap &map) override; QVariantMap settings() const override; + void contextMenuEvent(QContextMenuEvent *event) override; + private: void handleResponse(const DocumentUri &uri, const DocumentSymbolsResult &response); void updateTextCursor(const QModelIndex &proxyIndex); @@ -204,6 +208,21 @@ QVariantMap LanguageClientOutlineWidget::settings() const return {{QString("LspOutline.Sort"), m_sorted}}; } +void LanguageClientOutlineWidget::contextMenuEvent(QContextMenuEvent *event) +{ + if (!event) + return; + + QMenu contextMenu; + QAction *action = contextMenu.addAction(Tr::tr("Expand All")); + connect(action, &QAction::triggered, &m_view, &QTreeView::expandAll); + action = contextMenu.addAction(Tr::tr("Collapse All")); + connect(action, &QAction::triggered, &m_view, &QTreeView::collapseAll); + + contextMenu.exec(event->globalPos()); + event->accept(); +} + void LanguageClientOutlineWidget::handleResponse(const DocumentUri &uri, const DocumentSymbolsResult &result) {