diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp index aee11cb62a1..15fb29f3afa 100644 --- a/src/plugins/clangcodemodel/clangtextmark.cpp +++ b/src/plugins/clangcodemodel/clangtextmark.cpp @@ -33,6 +33,7 @@ #include "clangutils.h" #include +#include #include #include #include @@ -218,6 +219,8 @@ ClangTextMark::ClangTextMark(const FilePath &fileName, , m_removedFromEditorHandler(removedHandler) , m_diagMgr(diagMgr) { + setSettingsPage(CppTools::Constants::CPP_CODE_MODEL_SETTINGS_ID); + const bool warning = isWarningOrNote(diagnostic.severity); setDefaultToolTip(warning ? QApplication::translate("Clang Code Model Marks", "Code Model Warning") : QApplication::translate("Clang Code Model Marks", "Code Model Error")); diff --git a/src/plugins/clangtools/diagnosticmark.cpp b/src/plugins/clangtools/diagnosticmark.cpp index 422a8f9922e..9aaa4959c52 100644 --- a/src/plugins/clangtools/diagnosticmark.cpp +++ b/src/plugins/clangtools/diagnosticmark.cpp @@ -43,6 +43,8 @@ DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic) Utils::Id(Constants::DIAGNOSTIC_MARK_ID)) , m_diagnostic(diagnostic) { + setSettingsPage(Constants::SETTINGS_PAGE_ID); + if (diagnostic.type == "error" || diagnostic.type == "fatal") setColor(Utils::Theme::CodeModel_Error_TextMarkColor); else diff --git a/src/plugins/cppcheck/cppchecktextmark.cpp b/src/plugins/cppcheck/cppchecktextmark.cpp index 512ba37ce9d..55d5b43f4ce 100644 --- a/src/plugins/cppcheck/cppchecktextmark.cpp +++ b/src/plugins/cppcheck/cppchecktextmark.cpp @@ -76,6 +76,7 @@ CppcheckTextMark::CppcheckTextMark (const Diagnostic &diagnostic) setIcon(visual.icon); setToolTip(toolTipText(diagnostic.severityText)); setLineAnnotation(diagnostic.message); + setSettingsPage(Constants::OPTIONS_PAGE_ID); } QString CppcheckTextMark::toolTipText(const QString &severityText) const diff --git a/src/plugins/texteditor/textmark.cpp b/src/plugins/texteditor/textmark.cpp index 8ac9c923f39..6bf77078330 100644 --- a/src/plugins/texteditor/textmark.cpp +++ b/src/plugins/texteditor/textmark.cpp @@ -32,8 +32,10 @@ #include #include +#include #include #include +#include #include #include @@ -95,6 +97,7 @@ TextMark::~TextMark() { qDeleteAll(m_actions); m_actions.clear(); + delete m_settingsAction; if (!m_fileName.isEmpty()) TextMarkRegistry::remove(this); if (m_baseTextDocument) @@ -295,12 +298,15 @@ void TextMark::addToToolTipLayout(QGridLayout *target) const target->addLayout(contentLayout, row, 1); // Right column: action icons/button - if (!m_actions.isEmpty()) { + QVector actions = m_actions; + if (m_settingsAction) + actions << m_settingsAction; + if (!actions.isEmpty()) { auto actionsLayout = new QHBoxLayout; QMargins margins = actionsLayout->contentsMargins(); margins.setLeft(margins.left() + 5); actionsLayout->setContentsMargins(margins); - for (QAction *action : m_actions) { + for (QAction *action : qAsConst(actions)) { QTC_ASSERT(!action->icon().isNull(), continue); auto button = new QToolButton; button->setIcon(action->icon()); @@ -387,6 +393,16 @@ void TextMark::setActions(const QVector &actions) m_actions = actions; } +void TextMark::setSettingsPage(Id settingsPage) +{ + delete m_settingsAction; + m_settingsAction = new QAction; + m_settingsAction->setIcon(Utils::Icons::SETTINGS_TOOLBAR.icon()); + QObject::connect(m_settingsAction, &QAction::triggered, [this, settingsPage] { + Core::ICore::showOptionsDialog(settingsPage); + }); +} + TextMarkRegistry::TextMarkRegistry(QObject *parent) : QObject(parent) { diff --git a/src/plugins/texteditor/textmark.h b/src/plugins/texteditor/textmark.h index 5dd24a4a133..84068339a17 100644 --- a/src/plugins/texteditor/textmark.h +++ b/src/plugins/texteditor/textmark.h @@ -129,6 +129,9 @@ public: QVector actions() const; void setActions(const QVector &actions); // Takes ownership +protected: + void setSettingsPage(Utils::Id settingsPage); + private: Q_DISABLE_COPY(TextMark) @@ -147,6 +150,7 @@ private: std::function m_toolTipProvider; QString m_defaultToolTip; QVector m_actions; + QAction *m_settingsAction = nullptr; }; } // namespace TextEditor