TextEditor: Let TextMark subclasses provide a settings page

Task-number: QTCREATORBUG-25150
Change-Id: Id5bbdcf2db7afacb823140d77ebd5bc141ac7f81
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-01-15 11:17:21 +01:00
parent f79e4b3677
commit a1c5dd93f5
5 changed files with 28 additions and 2 deletions

View File

@@ -33,6 +33,7 @@
#include "clangutils.h" #include "clangutils.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <cpptools/cpptoolsconstants.h>
#include <cpptools/clangdiagnosticconfigsmodel.h> #include <cpptools/clangdiagnosticconfigsmodel.h>
#include <cpptools/cpptoolsreuse.h> #include <cpptools/cpptoolsreuse.h>
#include <cpptools/cppcodemodelsettings.h> #include <cpptools/cppcodemodelsettings.h>
@@ -218,6 +219,8 @@ ClangTextMark::ClangTextMark(const FilePath &fileName,
, m_removedFromEditorHandler(removedHandler) , m_removedFromEditorHandler(removedHandler)
, m_diagMgr(diagMgr) , m_diagMgr(diagMgr)
{ {
setSettingsPage(CppTools::Constants::CPP_CODE_MODEL_SETTINGS_ID);
const bool warning = isWarningOrNote(diagnostic.severity); const bool warning = isWarningOrNote(diagnostic.severity);
setDefaultToolTip(warning ? QApplication::translate("Clang Code Model Marks", "Code Model Warning") setDefaultToolTip(warning ? QApplication::translate("Clang Code Model Marks", "Code Model Warning")
: QApplication::translate("Clang Code Model Marks", "Code Model Error")); : QApplication::translate("Clang Code Model Marks", "Code Model Error"));

View File

@@ -43,6 +43,8 @@ DiagnosticMark::DiagnosticMark(const Diagnostic &diagnostic)
Utils::Id(Constants::DIAGNOSTIC_MARK_ID)) Utils::Id(Constants::DIAGNOSTIC_MARK_ID))
, m_diagnostic(diagnostic) , m_diagnostic(diagnostic)
{ {
setSettingsPage(Constants::SETTINGS_PAGE_ID);
if (diagnostic.type == "error" || diagnostic.type == "fatal") if (diagnostic.type == "error" || diagnostic.type == "fatal")
setColor(Utils::Theme::CodeModel_Error_TextMarkColor); setColor(Utils::Theme::CodeModel_Error_TextMarkColor);
else else

View File

@@ -76,6 +76,7 @@ CppcheckTextMark::CppcheckTextMark (const Diagnostic &diagnostic)
setIcon(visual.icon); setIcon(visual.icon);
setToolTip(toolTipText(diagnostic.severityText)); setToolTip(toolTipText(diagnostic.severityText));
setLineAnnotation(diagnostic.message); setLineAnnotation(diagnostic.message);
setSettingsPage(Constants::OPTIONS_PAGE_ID);
} }
QString CppcheckTextMark::toolTipText(const QString &severityText) const QString CppcheckTextMark::toolTipText(const QString &severityText) const

View File

@@ -32,8 +32,10 @@
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/documentmanager.h> #include <coreplugin/documentmanager.h>
#include <coreplugin/icore.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/tooltip/tooltip.h> #include <utils/tooltip/tooltip.h>
#include <utils/utilsicons.h>
#include <QAction> #include <QAction>
#include <QGridLayout> #include <QGridLayout>
@@ -95,6 +97,7 @@ TextMark::~TextMark()
{ {
qDeleteAll(m_actions); qDeleteAll(m_actions);
m_actions.clear(); m_actions.clear();
delete m_settingsAction;
if (!m_fileName.isEmpty()) if (!m_fileName.isEmpty())
TextMarkRegistry::remove(this); TextMarkRegistry::remove(this);
if (m_baseTextDocument) if (m_baseTextDocument)
@@ -295,12 +298,15 @@ void TextMark::addToToolTipLayout(QGridLayout *target) const
target->addLayout(contentLayout, row, 1); target->addLayout(contentLayout, row, 1);
// Right column: action icons/button // Right column: action icons/button
if (!m_actions.isEmpty()) { QVector<QAction *> actions = m_actions;
if (m_settingsAction)
actions << m_settingsAction;
if (!actions.isEmpty()) {
auto actionsLayout = new QHBoxLayout; auto actionsLayout = new QHBoxLayout;
QMargins margins = actionsLayout->contentsMargins(); QMargins margins = actionsLayout->contentsMargins();
margins.setLeft(margins.left() + 5); margins.setLeft(margins.left() + 5);
actionsLayout->setContentsMargins(margins); actionsLayout->setContentsMargins(margins);
for (QAction *action : m_actions) { for (QAction *action : qAsConst(actions)) {
QTC_ASSERT(!action->icon().isNull(), continue); QTC_ASSERT(!action->icon().isNull(), continue);
auto button = new QToolButton; auto button = new QToolButton;
button->setIcon(action->icon()); button->setIcon(action->icon());
@@ -387,6 +393,16 @@ void TextMark::setActions(const QVector<QAction *> &actions)
m_actions = 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) TextMarkRegistry::TextMarkRegistry(QObject *parent)
: QObject(parent) : QObject(parent)
{ {

View File

@@ -129,6 +129,9 @@ public:
QVector<QAction *> actions() const; QVector<QAction *> actions() const;
void setActions(const QVector<QAction *> &actions); // Takes ownership void setActions(const QVector<QAction *> &actions); // Takes ownership
protected:
void setSettingsPage(Utils::Id settingsPage);
private: private:
Q_DISABLE_COPY(TextMark) Q_DISABLE_COPY(TextMark)
@@ -147,6 +150,7 @@ private:
std::function<QString()> m_toolTipProvider; std::function<QString()> m_toolTipProvider;
QString m_defaultToolTip; QString m_defaultToolTip;
QVector<QAction *> m_actions; QVector<QAction *> m_actions;
QAction *m_settingsAction = nullptr;
}; };
} // namespace TextEditor } // namespace TextEditor