TextEditor: Enable tooltips for textmarks

Adjust bookmark code, add tooltips for clang diagnostics.

Change-Id: I489d499f5431fcb29f27611d4350298acb30baac
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
hjk
2016-07-19 11:58:15 +02:00
committed by hjk
parent 36e12b75e0
commit 6edfb66908
13 changed files with 58 additions and 83 deletions

View File

@@ -243,11 +243,23 @@ ClangDiagnosticManager::ClangDiagnosticManager(TextEditor::TextDocument *textDoc
{
}
ClangDiagnosticManager::~ClangDiagnosticManager()
{
cleanMarks();
}
void ClangDiagnosticManager::cleanMarks()
{
for (ClangTextMark *textMark : m_clangTextMarks) {
m_textDocument->removeMark(textMark);
delete textMark;
}
m_clangTextMarks.clear();
}
void ClangDiagnosticManager::generateTextMarks()
{
m_clangTextMarks.clear();
cleanMarks();
m_clangTextMarks.reserve(m_warningDiagnostics.size() + m_errorDiagnostics.size());
addClangTextMarks(m_warningDiagnostics);
addClangTextMarks(m_errorDiagnostics);
}
@@ -332,18 +344,13 @@ ClangDiagnosticManager::diagnosticsWithFixIts() const
void ClangDiagnosticManager::addClangTextMarks(
const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics)
{
QTC_ASSERT(m_clangTextMarks.size() + diagnostics.size() <= m_clangTextMarks.capacity(), return);
for (auto &&diagnostic : diagnostics) {
m_clangTextMarks.emplace_back(filePath(),
diagnostic.location().line(),
diagnostic.severity());
ClangTextMark &textMark = m_clangTextMarks.back();
textMark.setBaseTextDocument(m_textDocument);
m_textDocument->addMark(&textMark);
for (const ClangBackEnd::DiagnosticContainer &diagnostic : diagnostics) {
auto textMark = new ClangTextMark(filePath(),
diagnostic.location().line(),
diagnostic.severity());
textMark->setToolTip(diagnostic.text());
m_clangTextMarks.push_back(textMark);
m_textDocument->addMark(textMark);
}
}

View File

@@ -47,6 +47,7 @@ class ClangDiagnosticManager
{
public:
ClangDiagnosticManager(TextEditor::TextDocument *textDocument);
~ClangDiagnosticManager();
void processNewDiagnostics(const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics);
@@ -60,6 +61,7 @@ public:
void clearDiagnosticsWithFixIts();
private:
void cleanMarks();
QString filePath() const;
void filterDiagnostics(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics);
void generateEditorSelections();
@@ -77,7 +79,7 @@ private:
QVector<ClangBackEnd::DiagnosticContainer> m_fixItdiagnostics;
QList<QTextEdit::ExtraSelection> m_extraSelections;
TextEditor::RefactorMarkers m_fixItAvailableMarkers;
std::vector<ClangTextMark> m_clangTextMarks;
std::vector<ClangTextMark *> m_clangTextMarks;
};
} // namespace Internal

View File

@@ -79,10 +79,5 @@ void ClangTextMark::setIcon(ClangBackEnd::DiagnosticSeverity severity)
TextMark::setIcon(errorIcon);
}
ClangTextMark::ClangTextMark(ClangTextMark &&other) Q_DECL_NOEXCEPT
: TextMark(std::move(other))
{
}
} // namespace ClangCodeModel

View File

@@ -36,11 +36,6 @@ class ClangTextMark : public TextEditor::TextMark
public:
ClangTextMark(const QString &fileName, int lineNumber, ClangBackEnd::DiagnosticSeverity severity);
ClangTextMark(ClangTextMark &&other) Q_DECL_NOEXCEPT;
ClangTextMark(ClangTextMark &other) = delete;
ClangTextMark &operator=(ClangTextMark &other) = delete;
private:
void setIcon(ClangBackEnd::DiagnosticSeverity severity);
};