LanguageClient: Add copy button to annotation tooltip

Change-Id: Ibe01543efa39e47de2b9d2d8e7302932bfcd413c
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2021-03-18 14:55:11 +01:00
parent a497c13774
commit 5ae8700e92
2 changed files with 16 additions and 1 deletions

View File

@@ -34,6 +34,9 @@
#include <texteditor/textstyles.h> #include <texteditor/textstyles.h>
#include <utils/utilsicons.h> #include <utils/utilsicons.h>
#include <QAction>
#include <QApplication>
#include <QClipboard>
#include <QTextEdit> #include <QTextEdit>
using namespace LanguageServerProtocol; using namespace LanguageServerProtocol;
@@ -122,8 +125,19 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri)
const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri); const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri);
const int docRevision = doc->document()->revision(); const int docRevision = doc->document()->revision();
if (versionedDiagnostics.version.value_or(docRevision) == docRevision) { if (versionedDiagnostics.version.value_or(docRevision) == docRevision) {
const auto icon = QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon());
const QString tooltip = tr("Copy to Clipboard");
for (const Diagnostic &diagnostic : versionedDiagnostics.diagnostics) { for (const Diagnostic &diagnostic : versionedDiagnostics.diagnostics) {
doc->addMark(new TextMark(filePath, diagnostic, m_clientId)); QAction *action = new QAction();
action->setIcon(icon);
action->setToolTip(tooltip);
QObject::connect(action, &QAction::triggered, [text = diagnostic.message()]() {
QApplication::clipboard()->setText(text);
});
auto mark = new TextMark(filePath, diagnostic, m_clientId);
mark->setActions({action});
doc->addMark(mark);
extraSelections << toDiagnosticsSelections(diagnostic, doc->document()); extraSelections << toDiagnosticsSelections(diagnostic, doc->document());
} }
} }

View File

@@ -37,6 +37,7 @@ namespace LanguageClient {
class DiagnosticManager class DiagnosticManager
{ {
Q_DECLARE_TR_FUNCTIONS(LanguageClient::DiagnosticManager)
public: public:
explicit DiagnosticManager(const Utils::Id &clientId); explicit DiagnosticManager(const Utils::Id &clientId);
~DiagnosticManager(); ~DiagnosticManager();