aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/clangcodemodel/clangtextmark.cpp45
-rw-r--r--src/plugins/clangtools/diagnosticmark.cpp40
-rw-r--r--src/plugins/cppcheck/cppchecktextmark.cpp25
-rw-r--r--src/plugins/languageclient/diagnosticmanager.cpp16
-rw-r--r--src/plugins/texteditor/textmark.cpp34
-rw-r--r--src/plugins/texteditor/textmark.h6
6 files changed, 89 insertions, 77 deletions
diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp
index 23baf4231cb..94ad1c82f86 100644
--- a/src/plugins/clangcodemodel/clangtextmark.cpp
+++ b/src/plugins/clangcodemodel/clangtextmark.cpp
@@ -309,31 +309,32 @@ ClangdTextMark::ClangdTextMark(const FilePath &filePath,
client->addTask(createTask(m_diagnostic));
}
- // Copy to clipboard action
- QVector<QAction *> actions;
- QAction *action = new QAction();
- action->setIcon(QIcon::fromTheme("edit-copy", Icons::COPY.icon()));
- action->setToolTip(tr("Copy to Clipboard", "Clang Code Model Marks"));
- QObject::connect(action, &QAction::triggered, [diag = m_diagnostic]() {
- const QString text = ClangDiagnosticWidget::createText({diag},
- ClangDiagnosticWidget::InfoBar);
- setClipboardAndSelection(text);
- });
- actions << action;
-
- // Remove diagnostic warning action
- Project *project = projectForCurrentEditor();
- if (project && isDiagnosticConfigChangable(project, m_diagnostic)) {
- action = new QAction();
- action->setIcon(Icons::BROKEN.icon());
- action->setToolTip(tr("Disable Diagnostic in Current Project"));
- QObject::connect(action, &QAction::triggered, [diag = m_diagnostic]() {
- disableDiagnosticInCurrentProjectConfig(diag);
+ setActionsProvider([diag = m_diagnostic] {
+ // Copy to clipboard action
+ QList<QAction *> actions;
+ QAction *action = new QAction();
+ action->setIcon(QIcon::fromTheme("edit-copy", Icons::COPY.icon()));
+ action->setToolTip(tr("Copy to Clipboard", "Clang Code Model Marks"));
+ QObject::connect(action, &QAction::triggered, [diag] {
+ const QString text = ClangDiagnosticWidget::createText({diag},
+ ClangDiagnosticWidget::InfoBar);
+ setClipboardAndSelection(text);
});
actions << action;
- }
- setActions(actions);
+ // Remove diagnostic warning action
+ Project *project = projectForCurrentEditor();
+ if (project && isDiagnosticConfigChangable(project, diag)) {
+ action = new QAction();
+ action->setIcon(Icons::BROKEN.icon());
+ action->setToolTip(tr("Disable Diagnostic in Current Project"));
+ QObject::connect(action, &QAction::triggered, [diag] {
+ disableDiagnosticInCurrentProjectConfig(diag);
+ });
+ actions << action;
+ }
+ return actions;
+ });
}
bool ClangdTextMark::addToolTipContent(QLayout *target) const
diff --git a/src/plugins/clangtools/diagnosticmark.cpp b/src/plugins/clangtools/diagnosticmark.cpp
index 37dd7693921..985d917b80d 100644
--- a/src/plugins/clangtools/diagnosticmark.cpp
+++ b/src/plugins/clangtools/diagnosticmark.cpp
@@ -54,28 +54,28 @@ DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic)
setIcon(markIcon.isNull() ? Utils::Icons::CODEMODEL_WARNING.icon() : markIcon);
setToolTip(createDiagnosticToolTipString(diagnostic, Utils::nullopt, true));
setLineAnnotation(diagnostic.description);
+ setActionsProvider([diagnostic] {
+ // Copy to clipboard action
+ QList<QAction *> actions;
+ QAction *action = new QAction();
+ action->setIcon(QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon()));
+ action->setToolTip(tr("Copy to Clipboard"));
+ QObject::connect(action, &QAction::triggered, [diagnostic]() {
+ const QString text = createFullLocationString(diagnostic.location)
+ + ": "
+ + diagnostic.description;
+ Utils::setClipboardAndSelection(text);
+ });
+ actions << action;
- // Copy to clipboard action
- QVector<QAction *> actions;
- QAction *action = new QAction();
- action->setIcon(QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon()));
- action->setToolTip(tr("Copy to Clipboard"));
- QObject::connect(action, &QAction::triggered, [diagnostic]() {
- const QString text = createFullLocationString(diagnostic.location)
- + ": "
- + diagnostic.description;
- Utils::setClipboardAndSelection(text);
+ // Disable diagnostic action
+ action = new QAction();
+ action->setIcon(Utils::Icons::BROKEN.icon());
+ action->setToolTip(tr("Disable Diagnostic"));
+ QObject::connect(action, &QAction::triggered, [diagnostic] { disableChecks({diagnostic}); });
+ actions << action;
+ return actions;
});
- actions << action;
-
- // Disable diagnostic action
- action = new QAction();
- action->setIcon(Utils::Icons::BROKEN.icon());
- action->setToolTip(tr("Disable Diagnostic"));
- QObject::connect(action, &QAction::triggered, [diagnostic] { disableChecks({diagnostic}); });
- actions << action;
-
- setActions(actions);
}
void DiagnosticMark::disable()
diff --git a/src/plugins/cppcheck/cppchecktextmark.cpp b/src/plugins/cppcheck/cppchecktextmark.cpp
index d3446a0610b..a81ac7e6f74 100644
--- a/src/plugins/cppcheck/cppchecktextmark.cpp
+++ b/src/plugins/cppcheck/cppchecktextmark.cpp
@@ -80,19 +80,20 @@ CppcheckTextMark::CppcheckTextMark (const Diagnostic &diagnostic)
setToolTip(toolTipText(diagnostic.severityText));
setLineAnnotation(diagnostic.message);
setSettingsPage(Constants::OPTIONS_PAGE_ID);
-
- // Copy to clipboard action
- QAction *action = new QAction();
- action->setIcon(QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon()));
- action->setToolTip(TextMark::tr("Copy to Clipboard"));
- QObject::connect(action, &QAction::triggered, [diagnostic]() {
- const QString text = QString("%1:%2: %3")
- .arg(diagnostic.fileName.toUserOutput())
- .arg(diagnostic.lineNumber)
- .arg(diagnostic.message);
- QApplication::clipboard()->setText(text);
+ setActionsProvider([diagnostic] {
+ // Copy to clipboard action
+ QAction *action = new QAction;
+ action->setIcon(QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon()));
+ action->setToolTip(TextMark::tr("Copy to Clipboard"));
+ QObject::connect(action, &QAction::triggered, [diagnostic]() {
+ const QString text = QString("%1:%2: %3")
+ .arg(diagnostic.fileName.toUserOutput())
+ .arg(diagnostic.lineNumber)
+ .arg(diagnostic.message);
+ QApplication::clipboard()->setText(text);
+ });
+ return QList<QAction *>{action};
});
- setActions({action});
}
QString CppcheckTextMark::toolTipText(const QString &severityText) const
diff --git a/src/plugins/languageclient/diagnosticmanager.cpp b/src/plugins/languageclient/diagnosticmanager.cpp
index e81bda7bd8a..cd6cad7e1d9 100644
--- a/src/plugins/languageclient/diagnosticmanager.cpp
+++ b/src/plugins/languageclient/diagnosticmanager.cpp
@@ -143,14 +143,16 @@ TextEditor::TextMark *DiagnosticManager::createTextMark(const FilePath &filePath
{
static const auto icon = QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon());
static const QString tooltip = tr("Copy to Clipboard");
- 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_client->id());
- mark->setActions({action});
+ mark->setActionsProvider([text = diagnostic.message()] {
+ QAction *action = new QAction();
+ action->setIcon(icon);
+ action->setToolTip(tooltip);
+ QObject::connect(action, &QAction::triggered, [text] {
+ QApplication::clipboard()->setText(text);
+ });
+ return QList<QAction *>{action};
+ });
return mark;
}
diff --git a/src/plugins/texteditor/textmark.cpp b/src/plugins/texteditor/textmark.cpp
index 72f89e7648c..635e1a0c9bc 100644
--- a/src/plugins/texteditor/textmark.cpp
+++ b/src/plugins/texteditor/textmark.cpp
@@ -97,9 +97,6 @@ TextMark::TextMark(const FilePath &fileName, int lineNumber, Id category, double
TextMark::~TextMark()
{
- qDeleteAll(m_actions);
- m_actions.clear();
- delete m_settingsAction;
if (!m_fileName.isEmpty())
TextMarkRegistry::remove(this);
if (m_baseTextDocument)
@@ -311,19 +308,29 @@ void TextMark::addToToolTipLayout(QGridLayout *target) const
target->addLayout(contentLayout, row, 1);
// Right column: action icons/button
- QVector<QAction *> actions = m_actions;
- if (m_settingsAction)
- actions << m_settingsAction;
+ QList<QAction *> actions{m_actions.begin(), m_actions.end()};
+ if (m_actionsProvider)
+ actions = m_actionsProvider();
+ if (m_settingsPage.isValid()) {
+ auto settingsAction = new QAction;
+ settingsAction->setIcon(Utils::Icons::SETTINGS_TOOLBAR.icon());
+ settingsAction->setToolTip(tr("Show Diagnostic Settings"));
+ QObject::connect(settingsAction, &QAction::triggered, Core::ICore::instance(),
+ [id = m_settingsPage] { Core::ICore::showOptionsDialog(id); },
+ Qt::QueuedConnection);
+ actions.append(settingsAction);
+ }
if (!actions.isEmpty()) {
auto actionsLayout = new QHBoxLayout;
QMargins margins = actionsLayout->contentsMargins();
margins.setLeft(margins.left() + 5);
actionsLayout->setContentsMargins(margins);
for (QAction *action : qAsConst(actions)) {
- QTC_ASSERT(!action->icon().isNull(), continue);
+ QTC_ASSERT(!action->icon().isNull(), delete action; continue);
auto button = new QToolButton;
button->setIcon(action->icon());
button->setToolTip(action->toolTip());
+ action->setParent(button);
QObject::connect(button, &QToolButton::clicked, action, &QAction::triggered);
QObject::connect(button, &QToolButton::clicked, []() {
Utils::ToolTip::hideImmediately();
@@ -423,15 +430,14 @@ void TextMark::setActions(const QVector<QAction *> &actions)
m_actions = actions;
}
+void TextMark::setActionsProvider(const std::function<QList<QAction *>()> &actionsProvider)
+{
+ m_actionsProvider = actionsProvider;
+}
+
void TextMark::setSettingsPage(Id settingsPage)
{
- delete m_settingsAction;
- m_settingsAction = new QAction;
- m_settingsAction->setIcon(Utils::Icons::SETTINGS_TOOLBAR.icon());
- m_settingsAction->setToolTip(tr("Show Diagnostic Settings"));
- QObject::connect(m_settingsAction, &QAction::triggered, Core::ICore::instance(),
- [settingsPage] { Core::ICore::showOptionsDialog(settingsPage); },
- Qt::QueuedConnection);
+ m_settingsPage = settingsPage;
}
TextMarkRegistry::TextMarkRegistry(QObject *parent)
diff --git a/src/plugins/texteditor/textmark.h b/src/plugins/texteditor/textmark.h
index 6184861ce98..d191ee07a73 100644
--- a/src/plugins/texteditor/textmark.h
+++ b/src/plugins/texteditor/textmark.h
@@ -133,6 +133,7 @@ public:
QVector<QAction *> actions() const;
void setActions(const QVector<QAction *> &actions); // Takes ownership
+ void setActionsProvider(const std::function<QList<QAction *>()> &actionsProvider); // Takes ownership
protected:
void setSettingsPage(Utils::Id settingsPage);
@@ -154,8 +155,9 @@ private:
QString m_toolTip;
std::function<QString()> m_toolTipProvider;
QString m_defaultToolTip;
- QVector<QAction *> m_actions;
- QAction *m_settingsAction = nullptr;
+ QVector<QAction *> m_actions; // FIXME Remove in master
+ std::function<QList<QAction *>()> m_actionsProvider;
+ Utils::Id m_settingsPage;
};
} // namespace TextEditor