TextEditor: Cleanup TextDocumentLayout

* Use range-based for
* Use nullptr
* Use inline member initialization
* Fix real/int implicit casts

Change-Id: I17fc35382ef22c97b34faba741915b9b914e38ff
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Orgad Shaneh
2018-04-08 23:40:30 +03:00
committed by Orgad Shaneh
parent 32d665e3be
commit 3306c9c969
2 changed files with 37 additions and 52 deletions

View File

@@ -28,8 +28,7 @@
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QDebug> #include <QDebug>
using namespace TextEditor; namespace TextEditor {
CodeFormatterData::~CodeFormatterData() CodeFormatterData::~CodeFormatterData()
{ {
@@ -37,13 +36,12 @@ CodeFormatterData::~CodeFormatterData()
TextBlockUserData::~TextBlockUserData() TextBlockUserData::~TextBlockUserData()
{ {
foreach (TextMark *mrk, m_marks) { for (TextMark *mrk : qAsConst(m_marks)) {
mrk->baseTextDocument()->removeMarkFromMarksCache(mrk); mrk->baseTextDocument()->removeMarkFromMarksCache(mrk);
mrk->setBaseTextDocument(0); mrk->setBaseTextDocument(nullptr);
mrk->removedFromEditor(); mrk->removedFromEditor();
} }
if (m_codeFormatterData)
delete m_codeFormatterData; delete m_codeFormatterData;
} }
@@ -333,11 +331,9 @@ TextBlockUserData::MatchType TextBlockUserData::matchCursorBackward(QTextCursor
const Parentheses::const_iterator cend = parentheses.constEnd(); const Parentheses::const_iterator cend = parentheses.constEnd();
for (Parentheses::const_iterator it = parentheses.constBegin();it != cend; ++it) { for (Parentheses::const_iterator it = parentheses.constBegin();it != cend; ++it) {
const Parenthesis &paren = *it; const Parenthesis &paren = *it;
if (paren.pos == relPos - 1 if (paren.pos == relPos - 1 && paren.type == Parenthesis::Closed)
&& paren.type == Parenthesis::Closed) {
return checkClosedParenthesis(cursor, paren.chr); return checkClosedParenthesis(cursor, paren.chr);
} }
}
return NoMatch; return NoMatch;
} }
@@ -383,11 +379,7 @@ void TextBlockUserData::addMark(TextMark *mark)
TextDocumentLayout::TextDocumentLayout(QTextDocument *doc) TextDocumentLayout::TextDocumentLayout(QTextDocument *doc)
: QPlainTextDocumentLayout(doc), : QPlainTextDocumentLayout(doc)
lastSaveRevision(0),
hasMarks(false),
maxMarkWidthFactor(1.0),
m_requiredWidth(0)
{} {}
TextDocumentLayout::~TextDocumentLayout() TextDocumentLayout::~TextDocumentLayout()
@@ -568,7 +560,7 @@ void TextDocumentLayout::setRequiredWidth(int width)
{ {
int oldw = m_requiredWidth; int oldw = m_requiredWidth;
m_requiredWidth = width; m_requiredWidth = width;
int dw = QPlainTextDocumentLayout::documentSize().width(); int dw = int(QPlainTextDocumentLayout::documentSize().width());
if (oldw > dw || width > dw) if (oldw > dw || width > dw)
emitDocumentSizeChanged(); emitDocumentSizeChanged();
} }
@@ -577,25 +569,23 @@ void TextDocumentLayout::setRequiredWidth(int width)
QSizeF TextDocumentLayout::documentSize() const QSizeF TextDocumentLayout::documentSize() const
{ {
QSizeF size = QPlainTextDocumentLayout::documentSize(); QSizeF size = QPlainTextDocumentLayout::documentSize();
size.setWidth(qMax((qreal)m_requiredWidth, size.width())); size.setWidth(qMax(qreal(m_requiredWidth), size.width()));
return size; return size;
} }
TextMarks TextDocumentLayout::documentClosing() TextMarks TextDocumentLayout::documentClosing()
{ {
TextMarks marks; TextMarks marks;
QTextBlock block = document()->begin(); for (QTextBlock block = document()->begin(); block.isValid(); block = block.next()) {
while (block.isValid()) {
if (TextBlockUserData *data = static_cast<TextBlockUserData *>(block.userData())) if (TextBlockUserData *data = static_cast<TextBlockUserData *>(block.userData()))
marks.append(data->documentClosing()); marks.append(data->documentClosing());
block = block.next();
} }
return marks; return marks;
} }
void TextDocumentLayout::documentReloaded(TextMarks marks, TextDocument *baseTextDocument) void TextDocumentLayout::documentReloaded(TextMarks marks, TextDocument *baseTextDocument)
{ {
foreach (TextMark *mark, marks) { for (TextMark *mark : qAsConst(marks)) {
int blockNumber = mark->lineNumber() - 1; int blockNumber = mark->lineNumber() - 1;
QTextBlock block = document()->findBlockByNumber(blockNumber); QTextBlock block = document()->findBlockByNumber(blockNumber);
if (block.isValid()) { if (block.isValid()) {
@@ -605,7 +595,7 @@ void TextDocumentLayout::documentReloaded(TextMarks marks, TextDocument *baseTex
mark->updateBlock(block); mark->updateBlock(block);
} else { } else {
baseTextDocument->removeMarkFromMarksCache(mark); baseTextDocument->removeMarkFromMarksCache(mark);
mark->setBaseTextDocument(0); mark->setBaseTextDocument(nullptr);
mark->removedFromEditor(); mark->removedFromEditor();
} }
} }
@@ -619,9 +609,10 @@ void TextDocumentLayout::updateMarksLineNumber()
QTextBlock block = document()->begin(); QTextBlock block = document()->begin();
int blockNumber = 0; int blockNumber = 0;
while (block.isValid()) { while (block.isValid()) {
if (const TextBlockUserData *userData = testUserData(block)) if (const TextBlockUserData *userData = testUserData(block)) {
foreach (TextMark *mrk, userData->marks()) for (TextMark *mrk : userData->marks())
mrk->updateLineNumber(blockNumber + 1); mrk->updateLineNumber(blockNumber + 1);
}
block = block.next(); block = block.next();
++blockNumber; ++blockNumber;
} }
@@ -629,9 +620,10 @@ void TextDocumentLayout::updateMarksLineNumber()
void TextDocumentLayout::updateMarksBlock(const QTextBlock &block) void TextDocumentLayout::updateMarksBlock(const QTextBlock &block)
{ {
if (const TextBlockUserData *userData = testUserData(block)) if (const TextBlockUserData *userData = testUserData(block)) {
foreach (TextMark *mrk, userData->marks()) for (TextMark *mrk : userData->marks())
mrk->updateBlock(block); mrk->updateBlock(block);
}
} }
QRectF TextDocumentLayout::blockBoundingRect(const QTextBlock &block) const QRectF TextDocumentLayout::blockBoundingRect(const QTextBlock &block) const
@@ -642,12 +634,6 @@ QRectF TextDocumentLayout::blockBoundingRect(const QTextBlock &block) const
return boundingRect; return boundingRect;
} }
TextDocumentLayout::FoldValidator::FoldValidator()
: m_layout(0)
, m_requestDocUpdate(false)
, m_insideFold(0)
{}
void TextDocumentLayout::FoldValidator::setup(TextDocumentLayout *layout) void TextDocumentLayout::FoldValidator::setup(TextDocumentLayout *layout)
{ {
m_layout = layout; m_layout = layout;
@@ -701,3 +687,5 @@ void TextDocumentLayout::FoldValidator::finalize()
m_layout->emitDocumentSizeChanged(); m_layout->emitDocumentSizeChanged();
} }
} }
} // namespace TextEditor

View File

@@ -41,12 +41,12 @@ struct TEXTEDITOR_EXPORT Parenthesis
{ {
enum Type : char { Opened, Closed }; enum Type : char { Opened, Closed };
inline Parenthesis() : pos(-1), type(Opened) {} inline Parenthesis() = default;
inline Parenthesis(Type t, QChar c, int position) inline Parenthesis(Type t, QChar c, int position)
: pos(position), chr(c), type(t) {} : pos(position), chr(c), type(t) {}
int pos; int pos = -1;
QChar chr; QChar chr;
Type type; Type type = Opened;
}; };
class TEXTEDITOR_EXPORT CodeFormatterData class TEXTEDITOR_EXPORT CodeFormatterData
@@ -61,12 +61,12 @@ public:
inline TextBlockUserData() inline TextBlockUserData()
: m_foldingIndent(0) : m_foldingIndent(0)
, m_lexerState(0)
, m_folded(false) , m_folded(false)
, m_ifdefedOut(false) , m_ifdefedOut(false)
, m_lexerState(0)
, m_foldingStartIncluded(false) , m_foldingStartIncluded(false)
, m_foldingEndIncluded(false) , m_foldingEndIncluded(false)
, m_codeFormatterData(0) , m_codeFormatterData(nullptr)
{} {}
~TextBlockUserData(); ~TextBlockUserData();
@@ -75,9 +75,9 @@ public:
inline bool removeMark(TextMark *mark) { return m_marks.removeAll(mark); } inline bool removeMark(TextMark *mark) { return m_marks.removeAll(mark); }
inline TextMarks documentClosing() { inline TextMarks documentClosing() {
TextMarks marks = m_marks; const TextMarks marks = m_marks;
foreach (TextMark *mrk, m_marks) for (TextMark *mrk : marks)
mrk->setBaseTextDocument(0); mrk->setBaseTextDocument(nullptr);
m_marks.clear(); m_marks.clear();
return marks; return marks;
} }
@@ -124,7 +124,7 @@ public:
inline void setFoldingEndIncluded(bool included) { m_foldingEndIncluded = included; } inline void setFoldingEndIncluded(bool included) { m_foldingEndIncluded = included; }
inline bool foldingEndIncluded() const { return m_foldingEndIncluded; } inline bool foldingEndIncluded() const { return m_foldingEndIncluded; }
inline int lexerState() const { return m_lexerState; } inline int lexerState() const { return m_lexerState; }
inline void setLexerState(int state) {m_lexerState = state; } inline void setLexerState(int state) { m_lexerState = state; }
inline void setAdditionalAnnotationHeight(int annotationHeight) inline void setAdditionalAnnotationHeight(int annotationHeight)
{ m_additionalAnnotationHeight = annotationHeight; } { m_additionalAnnotationHeight = annotationHeight; }
@@ -136,9 +136,9 @@ public:
private: private:
TextMarks m_marks; TextMarks m_marks;
int m_foldingIndent : 16; int m_foldingIndent : 16;
int m_lexerState : 8;
uint m_folded : 1; uint m_folded : 1;
uint m_ifdefedOut : 1; uint m_ifdefedOut : 1;
uint m_lexerState : 8;
uint m_foldingStartIncluded : 1; uint m_foldingStartIncluded : 1;
uint m_foldingEndIncluded : 1; uint m_foldingEndIncluded : 1;
int m_additionalAnnotationHeight = 0; int m_additionalAnnotationHeight = 0;
@@ -153,7 +153,7 @@ class TEXTEDITOR_EXPORT TextDocumentLayout : public QPlainTextDocumentLayout
public: public:
TextDocumentLayout(QTextDocument *doc); TextDocumentLayout(QTextDocument *doc);
~TextDocumentLayout(); ~TextDocumentLayout() override;
static void setParentheses(const QTextBlock &block, const Parentheses &parentheses); static void setParentheses(const QTextBlock &block, const Parentheses &parentheses);
static void clearParentheses(const QTextBlock &block) { setParentheses(block, Parentheses());} static void clearParentheses(const QTextBlock &block) { setParentheses(block, Parentheses());}
@@ -179,17 +179,15 @@ public:
class TEXTEDITOR_EXPORT FoldValidator class TEXTEDITOR_EXPORT FoldValidator
{ {
public: public:
FoldValidator();
void setup(TextDocumentLayout *layout); void setup(TextDocumentLayout *layout);
void reset(); void reset();
void process(QTextBlock block); void process(QTextBlock block);
void finalize(); void finalize();
private: private:
TextDocumentLayout *m_layout; TextDocumentLayout *m_layout = nullptr;
bool m_requestDocUpdate; bool m_requestDocUpdate = false;
int m_insideFold; int m_insideFold = 0;
}; };
static TextBlockUserData *testUserData(const QTextBlock &block) { static TextBlockUserData *testUserData(const QTextBlock &block) {
@@ -206,11 +204,10 @@ public:
void emitDocumentSizeChanged() { emit documentSizeChanged(documentSize()); } void emitDocumentSizeChanged() { emit documentSizeChanged(documentSize()); }
int lastSaveRevision; int lastSaveRevision = 0;
bool hasMarks; bool hasMarks = false;
double maxMarkWidthFactor; double maxMarkWidthFactor = 1.0;
int m_requiredWidth = 0;
int m_requiredWidth;
void setRequiredWidth(int width); void setRequiredWidth(int width);